CAD XML Syntax-Sektion VCCADDaten
Die Sektion VCCADDaten ist der Container für alle CAD-Objekte eines Koordinatensystems. Eine Projektdatei enthält je Koordinatensystem (KSID) eine eigene VCCADDaten-Sektion — das Hauptsystem (KSID 0) und ggf. weitere Systeme (z. B. lokale Systeme). Geschrieben wird die Sektion von TProject.SaveXML (Kopf-Attribute) und TCADObjectManager.SaveXMLLite (Inhalt). Der Gesamtrahmen der Datei ist auf der Seite Übersicht beschrieben.
Strukturregel
Die drei Kopf-Werte KSID, LSID und Zone sind echte XML-Attribute am Element VCCADDaten — keine Kindelemente.
{ <VCCADDaten KSID="ganzzahl" [LSID="ganzzahl"] [Zone="ganzzahl"]> (je Koordinatensystem
eine Sektion)
(1) Verwaltungsdaten — siehe Sektion Rissdaten und Auswahlen:
[<Rissdaten> … </Rissdaten>]
[<CurrRissID>ganzzahl</CurrRissID>]
[<BearbeitungsgebietAutomatisch>bool</BearbeitungsgebietAutomatisch>]
[<BearbeitungsgebietAutoMitFlaechen>bool</BearbeitungsgebietAutoMitFlaechen>]
[<Bearbeitungsgebiet> {<gml:pos>zahl zahl</gml:pos>}* </Bearbeitungsgebiet>]
[<ObjektAuswahlen> … </ObjektAuswahlen>]
(2) CAD-Objekte in fester Gruppenreihenfolge (Objekt-Tags siehe Lesemechanik):
{ <VC_CADPunkt> | <VC_CADBMPunkt> … }* (Punkte)
{ <VC_CADPunktsymbol> … }* (Punktsymbole)
{ <VC_CADSimpleLine> | <VC_CADMeteredSimpleLine>
| <VC_CADArcLine> | <VC_CADCircleLine>
| <VC_CADEllipseLine> | <VC_CADKlotoideLine>
| <VC_CAD_Klothoide> … }* (Linien)
{ <VC_CADFlaeche> | <VC_CADVCFlaeche>
| <VC_AreaCADLTK> … }* (Flächen; LTK nur Sachsen-Anhalt)
{ <VC_AreaCADAlkisDE> … }* (AlkisDE-Flächen, nur Sachsen-Anhalt)
{ <VC_CADKompo> | <VC_CADVCBerechnung>
| <VC_CADVCMessung> | <VC_CADBemassung> … }* (Kompos)
{ <VC_CADText> | <VC_CADVCPNRText>
| VC_CADVCPNRPar…-Varianten … }* (Texte)
{ <VC_Hintergrundbild> … }* (Hintergrundbilder)
{ <VC_Plotrahmen> … }* (Plotrahmen)
{ <VC_CADBoeschung> … }* (Böschungen)
</VCCADDaten> }*
Beim Lesen dispatcht der Parser nach Tag-Namen — die Verwaltungsdaten und Objekte werden auch in abweichender Reihenfolge korrekt gelesen. Ein Erzeuger sollte die Reihenfolge oben trotzdem einhalten (siehe unten).
Attribute
| Attribut | Typ/Format | Pflicht | Bedeutung |
|---|---|---|---|
KSID |
ganzzahl | ja | Koordinatensystem-ID. 0 = Hauptsystem des Projekts. Weitere Sektionen je System: in BW/THR negative KSIDs für lokale Systeme (beobachtet: -1, -1100, -1894 — Muster −(1000+LSID)), in Sachsen positive fortlaufende KSIDs (1…4). Beim Lesen wird über die KSID der zugehörige CAD-Manager ermittelt bzw. neu angelegt (GetCAD_DataByKSID_LSID).
|
LSID |
ganzzahl | nein | Lagestatus des Systems (z. B. 489 = ETRS89/UTM). Wird nur geschrieben, wenn der Lagestatus des Managers gesetzt ist (≠ MisStatus); beim Lesen → Manager.Lagestatus.
|
Zone |
ganzzahl | nein | UTM-Zone. Wird nur geschrieben, wenn die Zone des Managers in [1..5, 31, 32, 33] liegt; beim Lesen → Manager.UTMZone. Lokale Systeme haben i. d. R. kein Zone-Attribut.
|
Hinweis: Der Kommentar in GlobalConsts.pas:4386 („LSID/Zone werden derzeit nicht eingelesen") ist veraltet — der aktuelle XmlLite-Parser liest alle drei Attribute aus.
Elemente
Die Verwaltungs-Kindelemente (Rissdaten, CurrRissID, Bearbeitungsgebiet*, ObjektAuswahlen) sind im Detail auf der Seite Sektion Rissdaten und Auswahlen dokumentiert. Alle übrigen Kinder sind CAD-Objekte; die vollständige Tabelle Tag → Delphi-Klasse → Objektseite steht auf der Seite Lesemechanik und Pflichtfelder.
Schreibreihenfolge und Speicherfilter
TCADObjectManager.SaveXMLLite schreibt in dieser festen Reihenfolge:
- Rissdaten +
CurrRissID - Bearbeitungsgebiet (
BearbeitungsgebietAutomatisch,BearbeitungsgebietAutoMitFlaechen,Bearbeitungsgebiet— jeweils nur abweichend vom Default) - ObjektAuswahlen
- Punkte — nur Punkte mit gültigen X/Y-Koordinaten (Fehlwert-Punkte werden NICHT gespeichert)
- Punktsymbole — nur Symbole mit vorhandenem ReferenzPoint
- Linien — Tag je LineType; unbekannte LineTypes werden übersprungen
- Flächen (inkl.
VC_AreaCADLTK, nur Sachsen-Anhalt) - AlkisDE-Flächen (nur Sachsen-Anhalt)
- Kompos (inkl. Berechnungen, Messungen, Bemaßungen)
- Texte — leere Texte werden nicht gespeichert
- Hintergrundbilder — nur wenn Textur geladen und Bilddatei existiert
- Plotrahmen
- Böschungen
Generelle Filter: temporäre Objekte werden nie gespeichert; VC-generierte Objekte (ObjektArt oaVC/oaVCDeleted) nur, wenn Default-Eigenschaften geändert wurden oder ein verbundenes Objekt gespeichert werden muss.
Wichtig fürs Erzeugen: Die Reihenfolge Punkte→Symbole→Linien→Flächen→Kompos stellt sicher, dass referenzierte Objekte VOR den Referenzierern stehen. Der Leser ist zwar tolerant (Referenz-Auflösung erst nach dem Laden aller Objekte, mit Wiedervorlage-Liste — siehe Lesemechanik), aber ein Erzeuger sollte diese Reihenfolge einhalten.
Beispiele
Beispiel (echt) — vorkommende VCCADDaten-Startzeilen
<VCCADDaten KSID="0" LSID="489" Zone="32"> ← BW/THR Hauptsystem <VCCADDaten KSID="0" LSID="489" Zone="33"> ← Sachsen Hauptsystem <VCCADDaten KSID="-1" Zone="32"> ← BW; THR: KSID="-1" ohne Zone <VCCADDaten KSID="-1894" LSID="894"> ← BW lokales System <VCCADDaten KSID="-1100" LSID="100"> ← BW lokales System <VCCADDaten KSID="-1120" LSID="120"> ← THR lokales System <VCCADDaten KSID="1" LSID="0"> ← Sachsen lokale Systeme KSID 1..4
Beispiel (Sachsen, echt) — Sektion eines lokalen Systems (Beginn, gekürzt)
<VCCADDaten KSID="1" LSID="0">
<Rissdaten>
<RissEintrag_0>
<RissName>[Standard]</RissName>
<RissID>0</RissID>
<RissViewMeasureScale>3260</RissViewMeasureScale>
<RissViewMinX>-646.576364871892</RissViewMinX>
<RissViewMaxX>1239.80229459881</RissViewMaxX>
<RissViewMinY>107.559913785975</RissViewMinY>
<RissViewMaxY>989.940064745008</RissViewMaxY>
</RissEintrag_0>
</Rissdaten>
<CurrRissID>0</CurrRissID>
<ObjektAuswahlen />
<AlkisStatusOptionen />
<VC_CADPunkt>
<VermCadID>
<GUID>{F3EBC8C1-…}</GUID>
<ObjektArt>oaVC</ObjektArt>
<CADObjektArt>cadPunkt</CADObjektArt>
<VCPktID_NV>xx</VCPktID_NV>
<VCPktID_NR>2000</VCPktID_NR>
</VermCadID>
<Layer>-1001</Layer>
…
</VC_CADPunkt>
…
</VCCADDaten>
(In lokalen Systemen sind die Koordinaten kleine lokale Werte, in BW-Nebensektionen auch negativ; VCPktID_NV kann dort ein String sein.)
Verfügbarkeit und Besonderheiten
- Sektions-Aufbau in allen Bundesland-Versionen identisch; nur die Objekt-Tags
VC_AreaCADLTK/VC_AreaCADAlkisDEsind auf Sachsen-Anhalt beschränkt, einzelne PNRText-Varianten auf BW (siehe Lesemechanik). - Legacy-Element
AlkisStatusOptionen: Ältere Dateien (bis VermCad 5.0.x) enthalten nachObjektAuswahlenein Element<AlkisStatusOptionen />(in allen untersuchten Bestandsdateien leer). Das Feature wurde 2026 aus dem Code entfernt — aktuelle Versionen schreiben das Element nicht mehr; beim Laden alter Dateien wird es als unbekanntes Tag schadlos übersprungen. - Mehrfachauftreten:
VCCADDatendarf beliebig oft vorkommen; pro KSID sollte es genau eine Sektion geben (der Leser legt je KSID einen Manager an und hängt die Objekte an diesen — doppelte KSIDs würden in demselben Manager landen). - Nach dem Ende jeder Sektion führt der Leser
UpdateReferencesOrClean(Referenz-Auflösung, Zerstörung unvollständiger Objekte) und die ALKIS-Initialdaten-Fehlerprüfung aus. - Leere Sektionen (nur Rissdaten-Grundgerüst, keine Objekte) kommen real vor (z. B.
KSID="-1").
Quellen im Code
VERMCAD\VcProject.pas:20745-20804—SaveXML: Schreiben derVCCADDaten-Elemente und der Attribute KSID/LSID/ZoneCAD\GLGeometrics.pas:79499-80190—TCADObjectManager.SaveXMLLite: Schreibreihenfolge und Speicherfilter (_CheckCanSaveObject79516,_SaveCheckVCObject79524)VERMCAD\VcParser_XmlLite_VC.pas:240-320— Lesen der Attribute KSID/LSID/Zone, Manager-Ermittlung,ProcessCADNodeVERMCAD\GlobalConsts.pas:4380-4386— Tag-Konstantenxn_CAD_Daten,xn_KSID,xn_LSID,xn_Zone(mit veraltetem Kommentar)