CAD XML Syntax-Objekt VC_CADKlotoideLine und VC_CAD_Klothoide
Klotoiden (Übergangsbögen mit linear veränderlicher Krümmung, z. B. aus Trassierungsdaten) gibt es in VermCad in ZWEI Klassen: die ältere T2DKlotoideLine (XML-Tag VC_CADKlotoideLine) und die seit 07/2017 neue T2DKlothoide (XML-Tag VC_CAD_Klothoide — Achtung: Unterstrich nach „CAD" und Schreibweise mit „th"). Beide erben von T2DStartEndPunktLine (CAD\GLGeometrics.pas) und brauchen damit Start- und Endpunkt-Referenzen; sie unterscheiden sich in der Parametrisierung der Kurve.
Strukturregel
<VC_CADKlotoideLine> (ältere Klasse) <VermCadID> … </VermCadID> (siehe VermCadID-Block; CADObjektArt=cadLinie) [Basiselemente] (siehe Basiselemente; Layer ist Pflicht) [geerbte Linien-Elemente] (siehe VC_CADSimpleLine) <Startpunkt GUID="guid"/> (Pflicht) <Endpunkt GUID="guid"/> (Pflicht) [<CuE_CurveLen>zahl</CuE_CurveLen>] [<CuE_A>zahl</CuE_A>] [<CuE_D>ganzzahl</CuE_D>] [<CuE_Klotoidenwinkel>zahl</CuE_Klotoidenwinkel>] [<CuE_KR>ganzzahl</CuE_KR>] </VC_CADKlotoideLine> <VC_CAD_Klothoide> (neue Klasse, seit 07/2017) <VermCadID> … </VermCadID> [Basiselemente] [geerbte Linien-Elemente] <Startpunkt GUID="guid"/> (Pflicht) <Endpunkt GUID="guid"/> (Pflicht) [<CurveLen>zahl</CurveLen>] [<StartLen>zahl</StartLen>] [<KlotParameter>zahl</KlotParameter>] [<KlotWinkel>zahl</KlotWinkel>] [<KlotCentre>zahl zahl</KlotCentre>] [<Kruemmung>enum:TUmlaufSinn</Kruemmung>] </VC_CAD_Klothoide>
Geerbte Elemente: VermCadID-Block, Basiselemente und die Linien-Elemente der Zwischenklassen auf VC_CADSimpleLine; Werteformate: Werteformate.
Elemente
VC_CADKlotoideLine (T2DKlotoideLine)
| Element | Typ/Format | Pflicht | Default (Init) | Bedeutung |
|---|---|---|---|---|
CuE_CurveLen |
Float | nein | Fehlwert (nicht geschrieben) | Bogenlänge der Klotoide |
CuE_A |
Float | nein | Fehlwert | Klotoidenparameter A |
CuE_D |
Integer (geschrieben über die Float-Routine; ganzzahlige Werte ergeben normale Ganzzahl-Strings) | nein | 1 | D-Wert; beim Lesen mit TryStrToInt — nur ganzzahlige Strings werden übernommen
|
CuE_Klotoidenwinkel |
Float | nein | Fehlwert | Klotoidenwinkel |
CuE_KR |
Integer | nein | 1 | Krümmungsrichtung (Integer-kodiert); Lesen mit TryStrToInt
|
VC_CAD_Klothoide (T2DKlothoide)
| Element | Typ/Format | Pflicht | Default (Init) | Bedeutung |
|---|---|---|---|---|
CurveLen |
Float | nein | Fehlwert (nicht geschrieben) | Bogenlänge |
StartLen |
Float | nein | Fehlwert | Startlänge (Bogenlänge vom Klotoidenursprung bis zum Startpunkt) |
KlotParameter |
Float | nein | Fehlwert | Klotoidenparameter A |
KlotWinkel |
Float | nein | Fehlwert | Winkel |
KlotCentre |
Pos-String 2D (X Y) |
nein | Init-Punkt (nicht geschrieben) | Zentrum/Ursprung der Klotoide als Koordinate |
Kruemmung |
enum:TUmlaufSinn | nein | usEgal (nicht geschrieben) |
Krümmungsrichtung als Enum |
Enum TUmlaufSinn (alle Werte)
usEgal, usImUhrzeigersinn, usGegenUhrzeigersinn (VERMCAD\GlobalTypes.pas:885).
Unterschiede der beiden Klassen
VC_CADKlotoideLineparametrisiert die Kurve rein über Zahlenwerte (A, D, Winkel, KR als Integer) ohne Zentrumskoordinate.VC_CAD_Klothoidemodelliert zusätzlich die Startlänge (StartLen— die Kurve kann mitten in der Klotoide beginnen), das explizite ZentrumKlotCentreund die Krümmungsrichtung als sprechenden Enum-Wert statt Integer.- Beide Klassen existieren parallel; die neue Klasse ersetzt die alte nicht beim Laden (kein Migrationsmechanismus zwischen den Tags).
Referenzen
Für beide Klassen gilt: Startpunkt- und Endpunkt-GUID sind Pflicht (Referenzen auf VC_CADPunkt); fehlt eine GUID oder ist das Ziel nach dem LastTry des Referenzen-Updates nicht auffindbar, wird das Objekt mit Logeintrag „Objekt wird nicht eingelesen" zerstört (Details auf VC_CADSimpleLine).
Minimalform
<VC_CADKlotoideLine>
<VermCadID>
<GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadLinie</CADObjektArt>
</VermCadID>
<Layer>-102</Layer>
<Startpunkt GUID="{XXXX…}" />
<Endpunkt GUID="{XXXX…}" />
</VC_CADKlotoideLine>
Gleiches Muster für VC_CAD_Klothoide. Ohne die Kurvenparameter ist das Objekt zwar ladbar, aber geometrisch unbestimmt — beim Erzeugen sollten die Parameter der jeweiligen Klasse mitgegeben werden.
Beispiele
In keinem der drei Beispielprojekte (BW, Sachsen, Thüringen) kommt eines der beiden Tags vor. Die folgenden Beispiele sind daher konstruiert (nach den Schreibregeln des Codes, nicht aus Bestandsdaten):
Konstruiertes Beispiel VC_CADKlotoideLine
<VC_CADKlotoideLine>
<VermCadID>
<GUID>{11111111-…}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadLinie</CADObjektArt>
</VermCadID>
<Layer>-102</Layer>
<Startpunkt GUID="{22222222-…}" />
<Endpunkt GUID="{33333333-…}" />
<CuE_CurveLen>85.43</CuE_CurveLen>
<CuE_A>120</CuE_A>
<CuE_D>2</CuE_D>
<CuE_Klotoidenwinkel>0.2966</CuE_Klotoidenwinkel>
<CuE_KR>-1</CuE_KR>
</VC_CADKlotoideLine>
Konstruiertes Beispiel VC_CAD_Klothoide
<VC_CAD_Klothoide>
<VermCadID>
<GUID>{44444444-…}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadLinie</CADObjektArt>
</VermCadID>
<Layer>-102</Layer>
<Startpunkt GUID="{55555555-…}" />
<Endpunkt GUID="{66666666-…}" />
<CurveLen>85.43</CurveLen>
<StartLen>12.5</StartLen>
<KlotParameter>120</KlotParameter>
<KlotWinkel>0.2966</KlotWinkel>
<KlotCentre>545100.25 5721350.8</KlotCentre>
<Kruemmung>usImUhrzeigersinn</Kruemmung>
</VC_CAD_Klothoide>
Verfügbarkeit und Besonderheiten
- Beide Klassen sind in allen Bundesland-Versionen verfügbar (Factory-Einträge ohne IFDEF), aber in den drei Beispielprojekten nicht belegt — Klotoiden sind ein Sonderfall (Trassierung/LandXML-Import).
- Legacy-Migration
Kruemmung(nur VC_CAD_Klothoide): sehr alte Dateien enthalten die Wertekr_Unknown/kr_ClockWise/kr_CounterClockWise(alte EnumTKruemmungsRichtung); sie werden beim Lesen aufusEgal/usImUhrzeigersinn/usGegenUhrzeigersinnmigriert (Konsolidierung 03/2018). - Die Tag-Konstanten
StartRadius/EndRadiusexistieren inGlobalConsts.pas, haben aber keine Reader-ID und werden nicht geschrieben — ungenutzt, beim Erzeugen nicht verwenden. CuE_D/CuE_KRwerden über die Float-Schreibroutine ausgegeben, aber mitTryStrToIntgelesen — beim Erzeugen nur ganzzahlige Werte schreiben (Dezimalstrings würden beim Lesen stillschweigend verworfen).- Die genaue fachliche Semantik von
CuE_DundCuE_KR(Kodierung der Krümmungsrichtung) ist im Code nicht kommentiert — konservativ die vom Programm geschriebenen Werte übernehmen.
Quellen im Code
CAD\GLGeometrics.pas:2218-2251— KlassendeklarationT2DKlotoideLineCAD\GLGeometrics.pas:2253-2289— KlassendeklarationT2DKlothoide(„(CP) 25.07.2017 - neue Klothoiden-Klasse")CAD\GLGeometrics.pas:43131-43181—T2DKlotoideLine.DataToXMLLite; Lesen43093-43128(TryStrToInt für CuE_D/CuE_KR)CAD\GLGeometrics.pas:43631-43690—T2DKlothoide.DataToXMLLite; Lesen43583-43628(inkl. kr_*-Migration 43609-43619)CAD\GLGeometrics.pas:96996-97034— Factory-Registrierung beider WurzeltagsVERMCAD\GlobalTypes.pas:885— EnumTUmlaufSinnCAD\GLConsts.pas:513-583— Init-Werte (INIT_T2DKLOTOIDELINE_*,INIT_T2DKLOTHOIDE_*)VERMCAD\GlobalConsts.pas:4634-4635— ungenutzte Konstanten StartRadius/EndRadius