Zum Inhalt springen

CAD XML Syntax-Objekt VC_CADPunktsymbol

Aus VermCAD Hilfe Wiki
Version vom 20. Juli 2026, 13:50 Uhr von Hahn (Diskussion | Beiträge) (CAD-XML-Syntax-Dokumentation (automatischer Import))
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Das Punktsymbol ist die Darstellungs-Instanz eines Symbols an einem CAD-Punkt (Symbolzuordnung, Drehwinkel, Skalierung). Delphi-Klasse ist T3DPointSymbol (CAD\GLGeometrics.pas), gespeichert unter dem XML-Tag VC_CADPunktsymbol. Es hat keine eigene Position — es hängt immer an einem VC_CADPunkt, der es über PointSymbolGUID bzw. WeitereSymbole referenziert.

Achtung Tag-Namen: Vier Elemente tragen im XML wörtlich das Präfix xn_ (xn_SymbolDrehwinkel, xn_SymbolSkalierung, xn_SymbolMitCADRotieren, xn_HilfsPunktSymbol) — der Konstanten-Präfix wurde bei nachträglich ergänzten Feldern versehentlich Teil des Tag-Strings und ist persistent. Ein Erzeuger muss diese Namen exakt so schreiben.

Strukturregel

<VC_CADPunktsymbol>
  <VermCadID> … </VermCadID>                     (siehe VermCadID-Block; CADObjektArt = cadPunktsymbol)
  [Basiselemente]                                (siehe Basiselemente; Layer ist Pflicht)
  [<SymbolID>guid</SymbolID>]                    (GUID als ELEMENTTEXT, kein Attribut!)
  [<SymbolName>text</SymbolName>]                (nur zusammen mit SymbolID)
  [<xn_SymbolDrehwinkel>ganzzahl</xn_SymbolDrehwinkel>]
  [<xn_SymbolSkalierung>zahl</xn_SymbolSkalierung>]
  [<xn_SymbolMitCADRotieren>ganzzahl</xn_SymbolMitCADRotieren>]
  [<xn_HilfsPunktSymbol>bool</xn_HilfsPunktSymbol>]
  [<PunktSymbolRefLinieGUID GUID="guid"/>]
</VC_CADPunktsymbol>

Werteformate: Werteformate (Bool = -1/0, Float mit Dezimalpunkt, GUID mit geschweiften Klammern).

Elemente

Nur die eigenen Elemente von T3DPointSymbol:

Element Typ/Format Pflicht Default Bedeutung
SymbolID guid als Elementtext nein „Inherited" (kein individuelles Symbol) ID der Symbol-Definition im Symbolmanager (GUIDToString). Nur geschrieben, wenn dem Punktsymbol ein individuelles Symbol zugeordnet ist (FPunktSymbolIDType ≠ psgtInherited, Enum TPunktSymbolGUIDType: psgtInherited, psgtFromLayer, psgtFromNothing, psgtFromInvisible, psgtOther); fehlt das Element, wird das Symbol aus Layer/Punktzuordnung geerbt.
SymbolName Text nein — Symbolname als Lese-Fallback; wird nur zusammen mit SymbolID geschrieben, wenn das Symbol im Symbolmanager gefunden wurde
xn_SymbolDrehwinkel ganzzahl nein 0 Drehwinkel des Symbols (Beispieldaten in gon, z. B. 300)
xn_SymbolSkalierung zahl (Float) nein PROPERTY_VALUE_INHERIT (2147483645 = erben) Skalierungsfaktor; Plausibilitäts-Check beim Lesen: Werte > 1E6 oder < CADZero werden auf 1 gesetzt
xn_SymbolMitCADRotieren ganzzahl (Int-kodiertes Bool/Inherit) nein PROPERTY_VALUE_INHERIT Symbol rotiert mit der CAD-Ansicht mit (-1/0/Inherit-Magic-Wert)
xn_HilfsPunktSymbol bool nein False Kennzeichen Hilfssymbol (nur geschrieben, wenn True = -1)
PunktSymbolRefLinieGUID GUID-Attribut-Element nein — Referenzlinie zur Symbolausrichtung; nur geschrieben, wenn die Linie existiert und nicht gelöscht ist

Magic-Werte (2147483645 = erben u. a.): siehe Basiselemente.

Symboldatei (Root VCSymbol)

SymbolID verweist NICHT auf ein CAD-Objekt der Projekt-XML, sondern auf eine Symbol-Definition des Symbolmanagers. Symbol-Definitionen liegen in separaten Symbol-Dateien mit dem Wurzelelement VCSymbol (Konstante xn_SymbolRoot, VERMCAD\GlobalConsts.pas). Der Aufbau dieser Symboldateien ist nicht Teil der Projekt-XML-Syntax und wird hier nicht dokumentiert.

Referenzen

Referenz Ziel Pflicht Verhalten bei fehlendem Ziel
SymbolID Symbol-Definition im Symbolmanager (keine Projekt-GUID) nein Selbstheilung: Ist die SymbolID im Symbolmanager unbekannt, wird das Symbol im PostProcessing über SymbolName gesucht; sonst nur Log-Meldung
PunktSymbolRefLinieGUID Linienobjekt (z. B. VC_CADSimpleLine) nein weiche Referenz: fehlendes Ziel wird geloggt/ignoriert

Rückverweis-Pflicht: Die Verknüpfung Symbol → Punkt läuft ausschließlich rückwärts über den Punkt (PointSymbolGUID/WeitereSymbole am VC_CADPunkt). Ein Punktsymbol ohne referenzierenden Punkt wird beim Speichern übersprungen — ein Erzeuger muss also immer das Paar Punkt + Symbol mit passender GUID-Referenz schreiben (Schreibreihenfolge Punkte → Symbole, siehe Lesemechanik).

Minimalform

<VC_CADPunktsymbol>
  <VermCadID>
    <GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadPunktsymbol</CADObjektArt>
  </VermCadID>
  <Layer>-102</Layer>
</VC_CADPunktsymbol>

Dazu MUSS ein VC_CADPunkt existieren, dessen <PointSymbolGUID GUID="{XXXXXXXX-…}"/> auf diese GUID zeigt (sonst geht das Symbol beim nächsten Speichern verloren). Ohne SymbolID gilt das Symbol als „geerbt" aus Layer/Punktzuordnung.

Beispiele

Minimalfall (Baden-Württemberg, geerbtes Symbol)

<VC_CADPunktsymbol>
  <VermCadID>
    <GUID>{A8653A46-…}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadPunktsymbol</CADObjektArt>
  </VermCadID>
  <Layer>-100900</Layer>
</VC_CADPunktsymbol>

Reiches Beispiel (Baden-Württemberg) — individuelles Symbol mit Drehwinkel und Referenzlinie

<VC_CADPunktsymbol>
  <VermCadID>
    <GUID>{95BBC564-…}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadPunktsymbol</CADObjektArt>
  </VermCadID>
  <Layer>-5212</Layer>
  <SymbolID>{8CF9FB44-…}</SymbolID>
  <xn_SymbolDrehwinkel>300</xn_SymbolDrehwinkel>
  <PunktSymbolRefLinieGUID GUID="{FA2BB7DC-…}" />
</VC_CADPunktsymbol>

Beachte: SymbolID trägt die GUID als Elementtext, PunktSymbolRefLinieGUID dagegen als GUID-Attribut.

Beispiel (Sachsen) — Hilfssymbol

In der Sachsen-Beispieldatei ist xn_HilfsPunktSymbol 7.051-mal belegt (immer -1 = True), z. B.:

<VC_CADPunktsymbol>
  <VermCadID>
    <GUID>{XXXXXXXX-…}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadPunktsymbol</CADObjektArt>
  </VermCadID>
  <Layer>-100850</Layer>
  <xn_HilfsPunktSymbol>-1</xn_HilfsPunktSymbol>
</VC_CADPunktsymbol>

(GUIDs gekürzt; Feldkombination gemäß belegten Vorkommen konstruiert, auch xn_SymbolSkalierung ist in Sachsen belegt.)

Verfügbarkeit und Besonderheiten

  • Verfügbar in allen Bundesland-Versionen; in den Beispielprojekten existiert praktisch zu jedem Punkt (mindestens) ein Punktsymbol.
  • Legacy-Tag xn_SymbolNummer (Tag-String ebenfalls wörtlich mit xn_-Präfix): alte Integer-Symbolnummer aus der Zeit vor der GUID-Umstellung; wird nur noch gelesen und über GetSymbolIDByOldSymbolnummer in eine Symbol-GUID gewandelt (Werte ≤ 0/Fehlwert → „Inherited").
  • PostProcessing: Unbekannte SymbolID → Suche über SymbolName (Selbstheilung); schlägt auch das fehl, bleibt das Objekt mit Log-Meldung bestehen.
  • In sehr alten Projekten lagen die Symbolfelder direkt am Punkt; T3DPoint reicht unbekannte Tags deshalb beim Lesen an sein PointSymbol weiter (Migration, siehe VC_CADPunkt).
  • Symbole werden im Manager direkt nach den Punkten geschrieben (Objektgruppen-Reihenfolge, siehe Lesemechanik).

Quellen im Code

  • CAD\GLGeometrics.pas:30535-30602 — T3DPointSymbol.DataToXMLLite (Bedingungen, Elementtext vs. Attribut)
  • CAD\GLGeometrics.pas:31059-31110 — InternalCreateFromXML (inkl. Legacy xn_SymbolNummer, Skalierungs-Plausi)
  • CAD\GLGeometrics.pas:31147-31174 — InternalCreateComplexStructsFromXML (PunktSymbolRefLinieGUID)
  • CAD\GLGeometrics.pas:31112-31145 — PostProcessing (Selbstheilung über SymbolName)
  • CAD\GLGeometrics.pas:26344-26394 — SetReferencesAndUpdate (Rückverknüpfung Punkt → Symbol)
  • CAD\GLGeometrics.pas:79712 — Symbole ohne ReferenzPoint werden beim Speichern übersprungen
  • CAD\GLTypes.pas:990 — TPunktSymbolGUIDType; CAD\GLConsts.pas:500-503 — Init-Werte der Symbolfelder
  • VERMCAD\GlobalConsts.pas ca. 4372-5004 — Tag-Konstanten (inkl. wörtlicher xn_-Präfixe und xn_SymbolRoot = VCSymbol)



[Nach oben]