Zum Inhalt springen

CAD XML Syntax-Werte- und Koordinatenformate

Aus VermCAD Hilfe Wiki

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. die VKS489YKorrektur (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 Container VC_CADVCBerechnungSettings steht <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 in ObjektAuswahlGUIDs (TStringList.Text).
  • Leere Elemente werden selbstschließend mit Leerzeichen geschrieben: <RissKoordinaten />, <MakroIDName />.
  • Winkel werden in gon gespeichert (xn_SymbolDrehwinkel 0…400, Text_Drehwinkel auch krumm: 349.000001697572); WinkelR1 der 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



[Nach oben]