CAD XML Syntax-Werte- und Koordinatenformate
Alle Werte in der Projekt-XML stehen als Textknoten oder Attribute in einheitlichen Formaten: Floats mit Dezimalpunkt, Bool als -1/0, Enums als Delphi-Bezeichner, GUIDs mit geschweiften Klammern, Koordinaten als leerzeichengetrennte Zahlenpaare. Diese Seite ist die zentrale Format-Referenz; die Objektseiten verweisen hierher.
Strukturregel
zahl ::= Float mit Dezimal-PUNKT, variable Stellenzahl (123456.789012)
ganzzahl ::= vorzeichenbehafteter Dezimal-Integer (-100780)
bool ::= -1 (wahr) | 0 (falsch)
text ::= beliebiger Text, ggf. mehrzeilig
guid ::= {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} (Hex-Großbuchstaben)
enum:TName ::= exakter Delphi-Bezeichner des Enum-Werts (pqExtern, oaCAD, TARP_TopRight)
pos ::= zahl " " zahl [" " zahl] (X Y [Z], leerzeichengetrennt)
posliste ::= { <gml:pos>pos</gml:pos> }* (Polygon-Eckpunkte)
datum ::= yyyy-MM-dd hh:nn:ss (auch mit T-Trenner lesbar)
Elemente
| Typ | Schreiben | Lesen | Beispiel |
|---|---|---|---|
| Float | OurFloatToStr = Delphi FloatToStr mit Dezimal-PUNKT: bis ~15 signifikante Stellen, keine festen Nachkommastellen, keine Tausendertrennung; sehr große/kleine Werte theoretisch in E-Notation (in echten Dateien nicht beobachtet) |
OurStrToFloat; der Text NAN wird an vielen Stellen explizit ignoriert |
<RatioDistRad>-1.11830822656901</RatioDistRad>
|
| Bool | BoolToStr ohne UseBoolStrs → True = -1, False = 0 |
TryStrToBool/StrToBoolDef: akzeptiert -1, 0, 1, True, False (Zahl ≠ 0 → True) |
<Sichtbar>0</Sichtbar>, <LayerErben>-1</LayerErben>
|
| Integer / Farben | IntToStr; Farben sind TColor als vorzeichenbehafteter Dezimal-Integer (BGR-Kodierung); Markerwerte PROPERTY_VALUE_* siehe Basiselemente |
StrToInt(Def) |
<Farbe>255</Farbe> (rot), real meist <Farbe>2147483644</Farbe>
|
| Enum | GetEnumName(TypeInfo(…), Ord(x)) → exakter Delphi-Bezeichner; die Namen sind Teil des Dateiformats und dürfen nie geändert werden |
GetEnumValue; unbekannter Name → −1 → meist Default bzw. Exception→Log |
<PunktQualitaet>pqCAD</PunktQualitaet>
|
| GUID | GUIDToString: geschweifte Klammern, Hex-Großbuchstaben; als Elementtext (GUID, SymbolID) oder als Attribut (GUID="…", RefGUID="…") |
OurStringToGUID/StringToGUID |
GUID="{D3287E10-…}"
|
| Datum/Zeit | OurDateTimeToStr: yyyy-MM-dd hh:nn:ss (DecimalSeparator ., DateSeparator -, TimeSeparator :); in ALKIS-Attributen ISO-8601-UTC (2026-06-01T16:14:54Z) |
GetDateTimeFromAlkisString (akzeptiert auch T-Trenner) |
2026-07-17 14:30:00
|
Koordinatenformate
Punktposition (Position/gml:Point/gml:pos)
Die Position eines Punkts steht in einem gml-Container; Koordinaten leerzeichengetrennt, Z optional (nur wenn kein Fehlwert):
<Position>
<gml:Point>
<gml:pos>32519146.78 5308557.85</gml:pos> (2D)
</gml:Point>
</Position>
<gml:pos>32518996.39 5308998.82 0</gml:pos> (3D-Hilfspunkt)
- Geschrieben werden die ECHTEN Koordinaten (nicht Riss-Koordinaten); Fehlwerte werden als Fehlwert-Zahl geschrieben, Punkte ganz ohne gültige X/Y-Koordinaten werden gar nicht gespeichert.
- Lesen über
Fill3DKoordFromPosString(whitespace-getrennt, 2 oder 3 Werte); leerer pos-String lässt die Koordinaten unverändert. Beim Lesen alter Projekte greift ggf. dieVKS489YKorrektur(UTM-Erkennung). - Nachkommastellen real: 0 bis 8 (dominant 2–3 bei Messkoordinaten, volle Double-Präzision bei gerechneten Werten, z. B.
32518906.3203554). Koordinaten in lokalen Systemen können klein oder negativ sein (-59517.61 172806.44).
Koordinaten als einfacher Elementtext
Strukturfelder wie BogenMittePointCoords, KlotCentre, Text_RefObjPkt, AlkisInitial*Coords nutzen R3DPunkt.ToPosString(cd2D, True) — volle Präzision, 2D X Y:
<BogenMittePointCoords>32518700.95 5308973.874</BogenMittePointCoords>
posliste (Polygon)
Das Bearbeitungsgebiet schreibt je Eckpunkt ein eigenes gml:pos-Element (nur 2D, mind. 3 Punkte):
<Bearbeitungsgebiet> <gml:pos>545000.1 5721000.2</gml:pos> <gml:pos>545100.3 5721000.2</gml:pos> <gml:pos>545050.0 5721100.9</gml:pos> </Bearbeitungsgebiet>
Riss-Deltas (Zahlentripel)
Rissabhängige Koordinaten sind DELTAS zum Standard, drei Floats im Elementtext — siehe Rissdaten an Objekten:
<RissEintrag_0>-0.000279225409030914 0.000412030145525932 0</RissEintrag_0>
Sonderfälle
- Bool-Ausnahme
Active: Im RTTI-basierten ContainerVC_CADVCBerechnungSettingssteht<Active>True</Active>als String — die einzige beobachtete Abweichung vom-1/0-Schema (Objekt VC_CADVCBerechnung/VCMessung). - Mehrzeilige Textknoten: Elementtexte können echte Zeilenumbrüche enthalten, z. B.
PktNrText_SpecialOutputText(PNR-Texte) und die zeilenweise GUID-Liste inObjektAuswahlGUIDs(TStringList.Text). - Leere Elemente werden selbstschließend mit Leerzeichen geschrieben:
<RissKoordinaten />,<MakroIDName />. - Winkel werden in gon gespeichert (
xn_SymbolDrehwinkel0…400,Text_Drehwinkelauch krumm:349.000001697572);WinkelR1der Ellipse dagegen im Bogenmaß (Radiant). - ProjektID = 24-stelliger Präfix + GUID:
202606010024414000000000{70453D69-…}(Format siehe Übersicht). - AlkisIDs sind 16-stellige GML-IDs:
DEBWL00100087JA9(BW),DETHL53P0000GTXJ(THR). - Das gml-Präfix der Positions-Elemente setzt die Namespace-Deklaration am Root voraus (Übersicht).
Verfügbarkeit und Besonderheiten
- Alle Formate gelten bundesland-übergreifend; Unterschiede bestehen nur in den Zonen-Präfixen der Koordinaten (BW/THR Zone 32:
32…/25…, Sachsen Zone 33:33…). - Beim Erzeugen: niemals Lokalisierungs-Formate verwenden (kein Dezimalkomma, keine Tausendertrennung); Enum-Strings exakt in Delphi-Schreibweise inkl. Groß-/Kleinschreibung.
- Beim Reparieren:
NAN-Floats sind tolerierbar (werden ignoriert), unbekannte Enum-Namen führen je nach Feld zu Default oder Logeintrag, aber nicht zum Abbruch (Lesemechanik).
Quellen im Code
- VERMCAD\GlobalStaticMethods.pas:2590-2597 —
OurFloatToStr(Float-Format) - VERMCAD\GlobalTypConsts.pas:29083-29101 —
XMLDateTimeFormatSettings(Punkt/Minus/Doppelpunkt) - VERMCAD\GlobalRecords.pas:1214-1297 —
R3DPunkt.ToPosString(Pos-Strings, volle Präzision bei aForVC=True) - CAD\GLGeometrics.pas:26146-26207 — Schreiben von
Position/gml:Point/gml:pos(Z optional, Fehlwert-Behandlung) - CAD\GLGeometrics.pas:26521-26538 —
VKS489YKorrektur(UTM-Erkennung alter Projekte) - CAD\GLGeometrics.pas:79609-79635 —
SaveXMLLite: Bearbeitungsgebiet als gml:pos-Liste - VERMCAD\VCObjBase.pas:397-398, 597 — GUID-/Datumsformate im VermCadID-Block