Zum Inhalt springen

CAD XML Syntax-VermCadID und GUID-Referenzen

Aus VermCAD Hilfe Wiki
Version vom 22. September 2026, 10:57 Uhr von Claude (Diskussion | Beiträge) (Rechtschreibung: Links auf umbenannte Seiten umgestellt)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Jedes CAD-Objekt in der Projekt-XML beginnt mit dem Identitätsblock VermCadID (GUID, Objektart, ggf. Punktnummer). Über die GUID referenzieren sich die Objekte gegenseitig (Linie → Start-/Endpunkt, Kompo → Member usw.). Diese Seite beschreibt den kompletten Block, die drei Referenz-Schreibweisen und das Fehlerverhalten bei doppelten oder fehlenden GUIDs. Ohne VermCadID-Block entsteht beim Laden KEIN Objekt.

Strukturregel

<VermCadID>
  <GUID>guid</GUID>                                  (faktisch Pflicht — sonst neue Zufalls-GUID,
                                                      alle Referenzen auf das Objekt brechen)
  [<ObjektArt>enum:TObjektArt</ObjektArt>]           (nur wenn ≠ oaDontCare;
                                                      MUSS VOR CADObjektArt stehen!)
  [<CADObjektArt>enum:TCADObjArt</CADObjektArt>]     (nur bei CAD-artiger ObjektArt, ≠ cadDontCare)
  [<VCPktID_NV>text</VCPktID_NV>]                    (nur Punkte mit VC-Punktnummer:
                                                      Nummerierungsbezirk)
  [<VCPktID_A>text</VCPktID_A>]                      (nur Versionen mit A-Nummern, IFDEF A_NR)
  [<VCPktID_NR>text</VCPktID_NR>]                    (Punktnummer)
  [<VCPktID_KSID>ganzzahl</VCPktID_KSID>]            (wird von CAD-Punkten nicht mehr geschrieben;
                                                      fehlt sie, gilt die KSID des Projekts)
  [<VCPktID_WasMisNV>bool</VCPktID_WasMisNV>]        (nur Lesen, Legacy)
  [<Erzeugt>datum</Erzeugt>]                         (nur Lesen, Legacy)
  [<LetzteAenderung>datum</LetzteAenderung>]         (nur Lesen, Legacy)
  [<NutzerID>ganzzahl</NutzerID>]                    (nur Lesen, Legacy)
</VermCadID>
  • Der Block ist immer das ERSTE Kindelement eines Objekts.
  • Reihenfolge-Regel: ObjektArt muss vor CADObjektArt stehen — CADObjektArt wird nur ausgewertet, wenn die ObjektArt zuvor als CAD-artig gelesen wurde.
  • Beim Lesen wird exakt der Knoten VermCadID erwartet; jedes Kind wird nur einmal ausgewertet. Fehlerhafte Einzel-Elemente erzeugen Meldung + Log, aber keinen Abbruch.
  • Datumsformate und GUID-Format: siehe Werte- und Koordinatenformate.

Elemente

Element Typ/Format Pflicht Default Bedeutung
GUID guid ({XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}, Großbuchstaben) faktisch ja Zufalls-GUID eindeutige Objekt-ID; Ziel aller Referenzen
ObjektArt enum:TObjektArt ja (für CAD-Objekte) oaDontCare Herkunft/Art des Objekts (Werteliste unten)
CADObjektArt enum:TCADObjArt ja (für CAD-Objekte) cadDontCare CAD-Objektklasse-Kategorie (Werteliste unten); steuert Render- und Verwaltungslogik
VCPktID_NV Text nein Nummerierungsbezirk der VC-Punktnummer (in lokalen Systemen auch Nicht-Zahlen, z. B. xx)
VCPktID_A Text nein Punktart-Zeichen — nur in Bundesland-Versionen mit A-Nummern (IFDEF A_NR)
VCPktID_NR Text nein Punktnummer; eine gültige VC-Punktnummer verlangt NV ≠ UND NR ≠
VCPktID_KSID ganzzahl nein KSID des Projekts Koordinatensystem-Nr. der Punktnummer; von CAD-Punkten nicht mehr geschrieben (ALKIS-Objekte schreiben sie noch)
VCPktID_WasMisNV bool nein False Legacy: NV war der Fehl-NV; True ersetzt beim Lesen den NV durch den MisNV
Erzeugt / LetzteAenderung Datum yyyy-MM-dd hh:nn:ss (auch mit T-Trenner lesbar) nein aktuelles Datum Legacy, wird nicht mehr geschrieben
NutzerID ganzzahl nein Login-User Legacy, wird nicht mehr geschrieben

Enum TObjektArt (alle Werte)

oaVC (VC-generiert), oaVCBer (aus Berechnung), oaVCDeleted, oaAlkisFFA, oaAlkis (ALKIS-Objekt, nur in VC_AlkisDaten), oaAlkisCADRepr (CAD-Repräsentation eines ALKIS-Objekts), oaCAD (manuell gezeichnet), oaDontCare (Default/Init).

In CAD-Objekten kommen praktisch vor: oaCAD, oaVC, oaVCBer, oaVCDeleted, oaAlkisCADRepr. Die Basiselemente werden nur bei diesen CAD-artigen ObjektArten geschrieben.

Enum TCADObjArt (alle Werte, Reihenfolge = Renderreihenfolge)

cadDontCare, cadPlotFrame, cadBackgroundPicture, cadFlaeche, cadKompo, cadBoeschung, cadLinie, cadText, cadPunktsymbol, cadPunkt.

AlkisID (Hinweis)

Die ALKIS-Objekt-ID (AlkisID, 16-stellige GML-ID wie DETHL53P0000GTXJ) steht NICHT im VermCadID-Block, sondern als erstes Basiselement direkt nach </VermCadID>. Der Legacy-Tag ALKIS_GMLID wird beim Lesen gleichbehandelt (siehe Versionierung und Kompatibilität).

Referenzen

Objekte referenzieren einander ausschließlich über GUIDs. Drei Schreibweisen:

Form Syntax Verwendung
GUID-Attribut-Element (Standard) <Startpunkt GUID="{…}"/> alle Objekt-zu-Objekt-Referenzen: Startpunkt/Endpunkt/Mittelpunkt, PointSymbolGUID, Member, Exterior/Interior, Text_Referenzobjekt, SchraffurHauptkanteGUID …; Attributname ist immer GUID
Member mit Zusatz-Attributen <Member GUID="{…}" RefGUID="{…}" Counter="n"/> nur in MemberGroup von VC_CADVCBerechnungList: RefGUID verzahnt Mess-Objekt und Zielobjekt, Counter nummeriert — siehe Objekt VC_CADVCBerechnung/VCMessung
GUID als Elementtext <SymbolID>{…}</SymbolID> Verweise auf Nicht-CAD-Objekte bzw. Sonderfälle: SymbolID (Symbolmanager), BoeschungOKStart_GUID u. a. Böschungskanten-Punkte, Plotrahmen_Text_Eintrag_ID, GUID-Liste in ObjektAuswahlGUIDs (zeilenweise)

Ablauf beim Lesen: GUID-Referenzen werden zunächst nur gemerkt (z. B. FSPGUID/FEPGUID). Nach dem Einlesen ALLER Objekte löst UpdateReferencesOrClean sie über den GUID-Suchbaum des Managers auf — in einer Wiederholungsschleife mit ToDo-Liste und abschließendem „LastTry". Ein Erzeuger sollte referenzierte Objekte trotzdem VOR den Referenzierern schreiben (Schreibreihenfolge siehe Lesemechanik und Pflichtfelder).

Fehlerverhalten

  • Duplikat-GUID (GUID bereits im Suchbaum): das gesamte Objekt wird übersprungen.
  • Fehlende harte Referenz (z. B. Startpunkt-GUID existiert nicht): das referenzierende Objekt wird nach dem LastTry als fehlerhaft markiert, aus dem GUID-Suchbaum entfernt und zerstört — mit Logeintrag „…konnte nicht eingelesen werden" und Detail „n von m Unter-Objekten nicht gefunden". Kinder eines fehlerhaften Eltern-Objekts können einzeln überleben.
  • Weiche Referenzen (Symbol-GUID des Punktsymbols, WeitereSymbole, Text-Ausrichtungslinie): fehlende Ziele werden nur geloggt/ignoriert, das Objekt bleibt bestehen (beim Punktsymbol Selbstheilung über SymbolName).
  • Sonderwert: für „Referenz explizit ENTFERNT" existiert die spezielle NOTHING-GUID (PROPERTY_GUID_VALUE_NOTHING), belegt bei Text_AusrichtungRefLinieGUID — siehe Objekt VC_CADText.

Minimalform

<VermCadID>
  <GUID>{AEFE2E5B-…}</GUID>
  <ObjektArt>oaCAD</ObjektArt>
  <CADObjektArt>cadPunkt</CADObjektArt>
</VermCadID>

Beispiele

Beispiel (Sachsen, echt — Punkt mit VC-Punktnummer in lokalem System)

<VermCadID>
  <GUID>{F3EBC8C1-…}</GUID>
  <ObjektArt>oaVC</ObjektArt>
  <CADObjektArt>cadPunkt</CADObjektArt>
  <VCPktID_NV>xx</VCPktID_NV>
  <VCPktID_NR>2000</VCPktID_NR>
</VermCadID>

Beispiel (BW, echt — ALKIS-Objekt in VC_AlkisDaten mit KSID)

<VermCadID>
  <GUID>{FE697113-…}</GUID>
  <ObjektArt>oaAlkis</ObjektArt>
  <VCPktID_NV>9220</VCPktID_NV>
  <VCPktID_NR>1066/259</VCPktID_NR>
  <VCPktID_KSID>0</VCPktID_KSID>
</VermCadID>

Beispiel (echt — GUID-Referenzen einer Linie)

<Startpunkt GUID="{5E840B97-…}" />
<Endpunkt GUID="{4B8E94CA-…}" />

Verfügbarkeit und Besonderheiten

  • Struktur in allen Bundesland-Versionen identisch; nur VCPktID_A ist auf A-Nummern-Versionen (IFDEF A_NR) beschränkt.
  • Erzeugt/LetzteAenderung/NutzerID und VCPktID_WasMisNV stehen nur noch in alten Dateien (write-Schalter auf False).
  • CAD-Punkte schreiben ihre Punktnummer als DIREKTE Kinder von VermCadID (VCPktID_NV, ggf. VCPktID_A, VCPktID_NR) — ohne VCPktID-Zwischenknoten und ohne VCPktID_KSID; die fehlende KSID wird beim Lesen aus dem Projekt ergänzt.
  • GUID-Lesen läuft über OurStringToGUID(…, gctCADObjectID); ungültige GUID-Strings erzeugen Meldung + Log.
  • Beim Punkt gilt: VerwendungsStatus wird nur geschrieben, wenn eine VCPktID vorhanden ist — Details auf Objekt VC_CADPunkt.

Quellen im Code

  • VERMCAD\VCObjBase.pas:328-389 — TObjBase.DataToXMLLite: Schreiben des VermCadID-Blocks
  • VERMCAD\VCObjBase.pas:537-664 — InternalInitIDsFromXML: Lesen, Reihenfolge ObjektArt→CADObjektArt, KSID-Fallback (657-658)
  • VERMCAD\VCObjBase.pas:508-527 — InitIDsAsFromXML (XmlLite-Pfad über TVCIDData)
  • VERMCAD\GlobalTypes.pas:848-871 — TObjektArt, TCADObjArt
  • VERMCAD\VcPktID.pas:838-894 — TVCPktID.DataToXMLLite (ohne Zwischenknoten/KSID)
  • CAD\GLGeometrics.pas:83845-83952 — NewObjectFromXML: Objekt-Erzeugung erst bei VermCadID-Fund, Duplikat-GUID → Skip (83905-83906)
  • CAD\GLGeometrics.pas:86090-86325 — UpdateReferencesOrClean: Referenz-Auflösung, LastTry, Zerstörung (86274-86282)
  • CAD\GLGeometrics.pas:6527-6576 — GetXMLLinkErrorFromGUIDs: Fehlermeldung fehlender Kind-GUIDs



[Nach oben]