yucad3d

Road profile (vertical curves)

PVIs joined by grades with symmetric parabolic curves; CadRProfGetY returns tangent vs curve elevations.

// Vertical road profile: PVIs joined by grades with parabolic curves.
static void feat_roadprof() {
    samp_clear();
    int pr = CadAddRProf(g_hDwg);
    if (!pr) { set_status(L"CadAddRProf failed"); return; }
    CadRProfAddVer(pr, 0, 50); CadRProfAddVer(pr, 150, 80);
    CadRProfAddVer(pr, 300, 60); CadRProfAddVer(pr, 450, 95);
    CadRProfPutCurveLen(pr, 1, 60);                      // parabola through PVI 1
    CadRProfPutCurveLen(pr, 2, 80);                      // ... and PVI 2
    CadRProfPutScale(pr, 1.0, 2.0);                      // 2x vertical exaggeration
    CadRProfUpdate(pr);
    double yo = 0, yn = 0; CadRProfGetY(pr, 200, &yo, &yn);
    CadUpdate(g_hDwg); samp_zoom_ext();
    wchar_t s[160]; swprintf(s, 160,
        L"CadAddRProf: 4 PVIs, 2 vertical curves; at 200 m tangent=%.2f curve=%.2f", yo, yn);
    set_status(s);
}
    6:                                            // Road profile
      begin
        CadPurge(FhDwg, CAD_CLEAR_ENTITIES);
        pr := CadAddRProf(FhDwg);
        if pr = 0 then begin StatusBar.SimpleText := 'CadAddRProf failed'; Exit; end;
        CadRProfAddVer(pr, 0, 50); CadRProfAddVer(pr, 150, 80);
        CadRProfAddVer(pr, 300, 60); CadRProfAddVer(pr, 450, 95);
        CadRProfPutCurveLen(pr, 1, 60); CadRProfPutCurveLen(pr, 2, 80);
        CadRProfPutScale(pr, 1.0, 2.0);
        CadRProfUpdate(pr);
        CadRProfGetY(pr, 200, @yo, @yn);
        CadUpdate(FhDwg); CadExecute(FhDwg, FCadHwnd, CAD_CMD_ZOOM_EXT);
        StatusBar.SimpleText := Format('CadAddRProf: 4 PVIs, 2 vertical curves; at 200 m tangent=%.2f curve=%.2f', [yo, yn]);
      end;
    private void FeatRoadProf()
    {
        SampleClear();
        var pr = YuCadApi.CadAddRProf(_hDwg);
        if (pr == 0) { SetStatus("CadAddRProf failed"); return; }
        YuCadApi.CadRProfAddVer(pr, 0, 50); YuCadApi.CadRProfAddVer(pr, 150, 80);
        YuCadApi.CadRProfAddVer(pr, 300, 60); YuCadApi.CadRProfAddVer(pr, 450, 95);
        YuCadApi.CadRProfPutCurveLen(pr, 1, 60);
        YuCadApi.CadRProfPutCurveLen(pr, 2, 80);
        YuCadApi.CadRProfPutScale(pr, 1.0, 2.0);
        YuCadApi.CadRProfUpdate(pr);
        YuCadApi.CadRProfGetY(pr, 200, out var yo, out var yn);
        YuCadApi.CadUpdate(_hDwg); SampleZoomExt();
        SetStatus($"CadAddRProf: 4 PVIs, 2 vertical curves; at 200 m tangent={yo:F2} curve={yn:F2}");
    }
This code is extracted verbatim from the shipped demo hosts (examples/cpp, examples/delphi, examples/csharp) — run the matching menu item there to see it live.