CAD XML Syntax-Objekt VC_CADPunktsymbol
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 mitxn_-Präfix): alte Integer-Symbolnummer aus der Zeit vor der GUID-Umstellung; wird nur noch gelesen und überGetSymbolIDByOldSymbolnummerin eine Symbol-GUID gewandelt (Werte ≤ 0/Fehlwert → „Inherited"). - PostProcessing: Unbekannte
SymbolID→ Suche überSymbolName(Selbstheilung); schlägt auch das fehl, bleibt das Objekt mit Log-Meldung bestehen. - In sehr alten Projekten lagen die Symbolfelder direkt am Punkt;
T3DPointreicht 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. Legacyxn_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 übersprungenCAD\GLTypes.pas:990—TPunktSymbolGUIDType;CAD\GLConsts.pas:500-503— Init-Werte der SymbolfelderVERMCAD\GlobalConsts.pasca. 4372-5004 — Tag-Konstanten (inkl. wörtlicherxn_-Präfixe undxn_SymbolRoot=VCSymbol)