Zum Inhalt springen

CAD XML Syntax-Sektion VCCADDaten: Unterschied zwischen den Versionen

Aus VermCAD Hilfe Wiki
CAD-XML-Syntax-Dokumentation (automatischer Import)
 
Rechtschreibung: Links auf umbenannte Seiten umgestellt
 
Zeile 1: Zeile 1:
{{DISPLAYTITLE:CAD XML Syntax-Sektion VCCADDaten}}
{{DISPLAYTITLE:CAD XML Syntax-Sektion VCCADDaten}}
Die Sektion <code>VCCADDaten</code> ist der Container für alle CAD-Objekte '''eines Koordinatensystems'''. Eine Projektdatei enthält je Koordinatensystem (KSID) eine eigene <code>VCCADDaten</code>-Sektion — das Hauptsystem (KSID 0) und ggf. weitere Systeme (z.&nbsp;B. lokale Systeme). Geschrieben wird die Sektion von <code>TProject.SaveXML</code> (Kopf-Attribute) und <code>TCADObjectManager.SaveXMLLite</code> (Inhalt). Der Gesamtrahmen der Datei ist auf der Seite [[CAD XML Syntax-Uebersicht|Übersicht]] beschrieben.
Die Sektion <code>VCCADDaten</code> ist der Container für alle CAD-Objekte '''eines Koordinatensystems'''. Eine Projektdatei enthält je Koordinatensystem (KSID) eine eigene <code>VCCADDaten</code>-Sektion — das Hauptsystem (KSID 0) und ggf. weitere Systeme (z.&nbsp;B. lokale Systeme). Geschrieben wird die Sektion von <code>TProject.SaveXML</code> (Kopf-Attribute) und <code>TCADObjectManager.SaveXMLLite</code> (Inhalt). Der Gesamtrahmen der Datei ist auf der Seite [[CAD XML Syntax-Übersicht|Übersicht]] beschrieben.


== Strukturregel ==
== Strukturregel ==

Aktuelle Version vom 22. September 2026, 10:57 Uhr

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:

  1. Rissdaten + CurrRissID
  2. Bearbeitungsgebiet (BearbeitungsgebietAutomatisch, BearbeitungsgebietAutoMitFlaechen, Bearbeitungsgebiet — jeweils nur abweichend vom Default)
  3. ObjektAuswahlen
  4. Punkte — nur Punkte mit gültigen X/Y-Koordinaten (Fehlwert-Punkte werden NICHT gespeichert)
  5. Punktsymbole — nur Symbole mit vorhandenem ReferenzPoint
  6. Linien — Tag je LineType; unbekannte LineTypes werden übersprungen
  7. Flächen (inkl. VC_AreaCADLTK, nur Sachsen-Anhalt)
  8. AlkisDE-Flächen (nur Sachsen-Anhalt)
  9. Kompos (inkl. Berechnungen, Messungen, Bemaßungen)
  10. Texte — leere Texte werden nicht gespeichert
  11. Hintergrundbilder — nur wenn Textur geladen und Bilddatei existiert
  12. Plotrahmen
  13. 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_AreaCADAlkisDE sind auf Sachsen-Anhalt beschränkt, einzelne PNRText-Varianten auf BW (siehe Lesemechanik).
  • Legacy-Element AlkisStatusOptionen: Ältere Dateien (bis VermCad 5.0.x) enthalten nach ObjektAuswahlen ein 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: VCCADDaten darf 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 der VCCADDaten-Elemente und der Attribute KSID/LSID/Zone
  • CAD\GLGeometrics.pas:79499-80190 — TCADObjectManager.SaveXMLLite: Schreibreihenfolge und Speicherfilter (_CheckCanSaveObject 79516, _SaveCheckVCObject 79524)
  • VERMCAD\VcParser_XmlLite_VC.pas:240-320 — Lesen der Attribute KSID/LSID/Zone, Manager-Ermittlung, ProcessCADNode
  • VERMCAD\GlobalConsts.pas:4380-4386 — Tag-Konstanten xn_CAD_Daten, xn_KSID, xn_LSID, xn_Zone (mit veraltetem Kommentar)



[Nach oben]