CAD XML Syntax-Objekt VC_CADText
Der CAD-Text ist das allgemeine Textobjekt der CAD-Daten (Beschriftungen, Maßtexte, Berechnungs- und ALKIS-Präsentationstexte). Delphi-Klasse ist T2DText (CAD\GLGeometrics.pas), gespeichert unter dem XML-Tag VC_CADText innerhalb einer VCCADDaten-Sektion. Die Punktnummerntext-Varianten (VC_CADVCPNRText und Varianten) erben alle hier beschriebenen Elemente.
ACHTUNG — der Tag VC_CADText ist doppelt belegt:
- als Objekt-Wurzeltag des Textobjekts (Factory-Eintrag →
T2DText), UND - als Kind-Element für den Textinhalt INNERHALB des Objekts:
<VC_CADText>mein Text</VC_CADText>(Reader-IDxn_CADText_ID).
Beim Zählen/Parsen von Objekten darf das innere Element nicht als eigenes Objekt gewertet werden (es steht als Kind unterhalb des Wurzelelements und enthält einen Textknoten statt eines VermCadID-Blocks). Das innere Element kommt in ALLEN Text-Objekttypen vor, auch in den PNRText-Varianten.
Strukturregel
<VC_CADText>
<VermCadID> … </VermCadID> (siehe VermCadID-Block; CADObjektArt = cadText)
[Basiselemente] (siehe Basiselemente; Layer ist Pflicht)
[<Text_Referenzobjekt GUID="guid"/>] (praktisch Pflicht — Texte haben KEIN Position-Element)
[<Text_RefPktMoveX>zahl</Text_RefPktMoveX>]
[<Text_RefPktMoveY>zahl</Text_RefPktMoveY>]
[<Text_RefObjPkt>zahl zahl</Text_RefObjPkt>]
[<Text_VCBerTextKind>enum:TVCBerTextKind</Text_VCBerTextKind>]
<VC_CADText>text</VC_CADText> (der TEXTINHALT — gleicher Tag-Name wie das Wurzelelement!)
[<Text_Schriftart>text</Text_Schriftart>]
[<Text_Schriftschnitt>enum:TRotTextSchnitt</Text_Schriftschnitt>]
[<Text_Groesse>zahl</Text_Groesse>]
[<Text_Zeilenabstand>zahl</Text_Zeilenabstand>]
[<Text_Durchgestrichen>enum:TRotTextDurchgestrichen</Text_Durchgestrichen>]
[<Text_Rotation>ganzzahl</Text_Rotation>]
[<Text_Skalierung>ganzzahl</Text_Skalierung>]
[<Text_Unterstrichfarbe>ganzzahl</Text_Unterstrichfarbe>]
[<Text_Durchstrichfarbe>ganzzahl</Text_Durchstrichfarbe>]
[<Text_TextBuendigkeit>enum:TRotTextBuendigkeit</Text_TextBuendigkeit>]
[<Text_Unterstrichen>enum:TRotTextUnterstreichung</Text_Unterstrichen>]
[<Text_BezugsStrichGUID GUID="guid"/>]
[<Text_Drehwinkel>zahl</Text_Drehwinkel>]
[<Text_NieAufDemKopf>ganzzahl</Text_NieAufDemKopf>]
[<Text_AusrichtungRefLinieGUID GUID="guid"/>]
[<Text_AmRefObjAusrichten>ganzzahl</Text_AmRefObjAusrichten>]
[<Text_StrStauHor>zahl</Text_StrStauHor>]
[<Text_StrStauVert>zahl</Text_StrStauVert>]
[<Text_Rahmenform>enum:TRotTextRahmenForm</Text_Rahmenform>]
[<Text_RahmenDoppelt>ganzzahl</Text_RahmenDoppelt>]
[<Text_RahmenTransparent>ganzzahl</Text_RahmenTransparent>]
[<Text_RahmenHor>zahl</Text_RahmenHor>]
[<Text_RahmenVert>zahl</Text_RahmenVert>]
[<Text_Rahmenfarbe>ganzzahl</Text_Rahmenfarbe>]
[<Text_AusrichtungZumRefPkt>enum:TRotTextAusrichtungZumRefPkt</Text_AusrichtungZumRefPkt>]
[<Text_VersatzXZumRefPkt>zahl</Text_VersatzXZumRefPkt>]
[<Text_VersatzYZumRefPkt>zahl</Text_VersatzYZumRefPkt>]
[<Text_AusrichtungStil>enum:TRotTextAusrichtungStil</Text_AusrichtungStil>]
<Text_RissDaten> {<RissEintrag_ID> … </RissEintrag_ID>}* </Text_RissDaten>
</VC_CADText>
Die Reihenfolge entspricht der Schreibreihenfolge in T2DText.DataToXMLLite. Der Container Text_RissDaten wird beim Speichern IMMER geschrieben — meist leer als <Text_RissDaten /> (Struktur: Rissdaten an Objekten). Geerbte Elemente: VermCadID-Block und Basiselemente; Werteformate (Float mit Dezimalpunkt, Bool = -1/0, GUID-Format): Werteformate.
Elemente
Nur die eigenen Elemente von T2DText. Alle Defaults kommen aus dem Record TTextData.Init — geschrieben wird ein Element nur, wenn der Wert vom Initialwert abweicht; fehlt ein Element, gilt also der Initialwert (bei Darstellungsfeldern in der Regel „inherit/vom Textstil erben“). Floats mit dem Wert NAN werden beim Lesen ignoriert.
| Element | Typ/Format | Pflicht | Default | Bedeutung |
|---|---|---|---|---|
Text_Referenzobjekt |
GUID-Attribut-Element | praktisch ja | — | Referenz auf das Objekt, an dem der Text hängt (meist ein VC_CADPunkt, auch Linien). Texte haben kein eigenes Position-Element — die Position kommt immer vom Referenzobjekt (in den drei untersuchten Beispielprojekten existiert kein einziges Textobjekt ohne Text_Referenzobjekt)
|
Text_RefPktMoveX / Text_RefPktMoveY |
zahl | nein | Init | Verschiebung des Texts relativ zum Referenzpunkt |
Text_RefObjPkt |
Pos-String 2D (X Y) |
nein | Init-Punkt | fester Referenz-Objekt-Punkt |
Text_VCBerTextKind |
enum:TVCBerTextKind | nein | TKBer_Ohne |
Kennzeichnung als Berechnungstext; Lesen über StrToVCBerTextKind, akzeptiert auch Legacy-Strings ohne/gerechnet/gemessen
|
VC_CADText (inneres Element) |
text (auch mehrzeilig) | ja | ' | der Textinhalt selbst — gleicher Tag-Name wie das Wurzelelement! Nur geschrieben, wenn Trim ≠ ; Objekte mit leerem Text werden beim Speichern komplett verworfen
|
Text_Schriftart |
text | nein | Init | Fontname |
Text_Schriftschnitt |
enum:TRotTextSchnitt | nein | Init | Schriftschnitt |
Text_Groesse |
zahl | nein | Init | Schriftgröße |
Text_Zeilenabstand |
zahl | nein | Init | Zeilenabstand |
Text_Durchgestrichen |
enum:TRotTextDurchgestrichen | nein | Init | Durchstreichung |
Text_Rotation |
ganzzahl | nein | Init | Rotation |
Text_Skalierung |
ganzzahl | nein | Init | Skalierung |
Text_Unterstrichfarbe / Text_Durchstrichfarbe |
ganzzahl (TColor) | nein | Init | Farben von Unter-/Durchstrich; Legacy-Lesen: Text_UnterDurchstrichfarbe (frühere gemeinsame Farbe) setzt BEIDE
|
Text_TextBuendigkeit |
enum:TRotTextBuendigkeit | nein | Init | Textausrichtung (Bündigkeit) |
Text_Unterstrichen |
enum:TRotTextUnterstreichung | nein | Init | Unterstreichung/Oberstrich |
Text_BezugsStrichGUID |
GUID-Attribut-Element | nein | — | Bezugsstrich (Linie zum Text); nur geschrieben, wenn die Linie existiert und nicht gelöscht ist |
Text_Drehwinkel |
zahl | nein | Init | Drehwinkel des Texts |
Text_NieAufDemKopf |
ganzzahl (Bool/Inherit-kodiert) | nein | Init | Text nie kopfüber darstellen |
Text_AusrichtungRefLinieGUID |
GUID-Attribut-Element | nein | — | Ausrichtungs-Referenzlinie (T2DStartEndPunktLine); komplexe Schreibbedingung, siehe „Verfügbarkeit und Besonderheiten“ |
Text_AmRefObjAusrichten |
ganzzahl (Bool/Inherit-kodiert) | nein | Init | am Referenzobjekt ausrichten |
Text_StrStauHor / Text_StrStauVert |
zahl | nein | Init | Streckung/Stauchung horizontal/vertikal; beim Lesen wird ein Fehlwert auf PROPERTY_VALUE_INHERIT gesetzt (Bugfix)
|
Text_Rahmenform |
enum:TRotTextRahmenForm | nein | Init | Rahmen um den Text |
Text_RahmenDoppelt / Text_RahmenTransparent |
ganzzahl | nein | Init | Rahmenoptionen |
Text_RahmenHor / Text_RahmenVert |
zahl | nein | Init | Rahmengrößen horizontal/vertikal |
Text_Rahmenfarbe |
ganzzahl (TColor) | nein | Init | Rahmenfarbe |
Text_AusrichtungZumRefPkt |
enum:TRotTextAusrichtungZumRefPkt | nein | Init | Ankerpunkt des Texts relativ zum Referenzpunkt |
Text_VersatzXZumRefPkt / Text_VersatzYZumRefPkt |
zahl | nein | Init | Versatz in mm zum Referenzpunkt |
Text_AusrichtungStil |
enum:TRotTextAusrichtungStil | nein | Init | Ausrichtungsstil (VermCad- oder AutoCAD-Logik) |
Text_RissDaten |
Container | nein (wird aber immer geschrieben) | leer | rissabhängige Textwerte je Riss — Details: Rissdaten an Objekten |
Die 8 Text-Enums (alle Werte, GetEnumName-Strings)
Alle Text-Enums werden per GetEnumName/GetEnumValue serialisiert; laut Quellcode-Kommentar dürfen die Namen nie geändert werden (CAD\GLTypes.pas:1016-1018).
| Enum | Werte |
|---|---|
TVCBerTextKind |
TKBer_Ohne, TKBer_Gerechnet, TKBer_Gemessen
|
TRotTextSchnitt |
TS_inherit, TS_Standard, TS_Kursiv, TS_Fett, TS_FettKursiv
|
TRotTextDurchgestrichen |
TD_inherit, TD_ohne, TD_einfach, TD_doppelt
|
TRotTextBuendigkeit |
TB_inherit, TB_linksbuendig, TB_zentriert, TB_rechtsbuendig
|
TRotTextUnterstreichung |
TU_inherit, TU_ohne, TU_einfach, TU_doppelt, TU_Oberstrich
|
TRotTextRahmenForm |
TRF_inherit, TRF_Ohne, TRF_Rechteck, TRF_Kreis, TRF_Ellipse
|
TRotTextAusrichtungZumRefPkt |
TARP_inherit, TARP_TopLeft, TARP_TopCenter, TARP_TopRight, TARP_CenterLeft, TARP_CenterCenter, TARP_CenterRight, TARP_BottomLeft, TARP_BottomCenter, TARP_BottomRight
|
TRotTextAusrichtungStil |
TAS_inherit, TAS_VC, TAS_ACAD
|
Referenzen
| Referenz | Ziel | Pflicht | Verhalten bei fehlendem Ziel |
|---|---|---|---|
Text_Referenzobjekt |
beliebiges CAD-Objekt (meist VC_CADPunkt, auch Linien) | praktisch ja (Texte haben nie eine eigene Position; alle Bestandsbeispiele besitzen die Referenz) | harte Referenz: fehlt das Zielobjekt endgültig, wird der Text beim Referenzen-Update als fehlerhaft markiert und zerstört (siehe VermCadID-Block) |
Text_BezugsStrichGUID |
VC_CADSimpleLine | nein | weiche Referenz: fehlendes Ziel wird ignoriert/geloggt, der Text bleibt bestehen |
Text_AusrichtungRefLinieGUID |
Linie mit Start-/Endpunkt (T2DStartEndPunktLine-Ableitung) | nein | weiche Referenz, wie oben |
Legacy: Beim Lesen wird zusätzlich der alte Tag Text_Referenzpunkt akzeptiert und wie Text_Referenzobjekt behandelt.
Minimalform
<VC_CADText>
<VermCadID>
<GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadText</CADObjektArt>
</VermCadID>
<Layer>-102</Layer>
<Text_Referenzobjekt GUID="{XXXX…}" />
<VC_CADText>Mein Beschriftungstext</VC_CADText>
<Text_RissDaten />
</VC_CADText>
VermCadID mit GUID, Layer, ein gültiges Text_Referenzobjekt und ein nicht-leerer Textinhalt sind das Minimum: leere Texte werden beim Speichern verworfen, Texte mit fehlendem Referenzobjekt beim Referenzen-Update zerstört (siehe Lesemechanik).
Beispiele
Beispiel (Baden-Württemberg) — Berechnungstext mit vollem Darstellungsblock
<VC_CADText>
<VermCadID>
<GUID>{8D393017-…}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadText</CADObjektArt>
</VermCadID>
<Sichtbar>0</Sichtbar>
<Farbe>2147483644</Farbe>
<Fuellfarbe>2147483644</Fuellfarbe>
<Alpha>2147483644</Alpha>
<Fuellalpha>2147483644</Fuellalpha>
<VCBerLayerID>-4500</VCBerLayerID>
<Layer>-4500</Layer>
<Linienstaerke>2147483644</Linienstaerke>
<LinienendenFreistellen>2147483644</LinienendenFreistellen>
<Liniensymbol>2147483644</Liniensymbol>
<Linienmuster>2147483644</Linienmuster>
<LineCloseType>2147483644</LineCloseType>
<TextStil>2147483644</TextStil>
<Textur>2147483644</Textur>
<SchraffurStil>2147483644</SchraffurStil>
<BoeschungsSchraffurStil>2147483644</BoeschungsSchraffurStil>
<Text_Referenzobjekt GUID="{2D4C3021-…}" />
<VC_CADText>Entfernung 1 (1)</VC_CADText>
<Text_Durchstrichfarbe>2147483644</Text_Durchstrichfarbe>
<Text_AusrichtungRefLinieGUID GUID="{B5605FBD-…}" />
<Text_AusrichtungZumRefPkt>TARP_TopRight</Text_AusrichtungZumRefPkt>
<Text_RissDaten />
</VC_CADText>
Der Magic-Wert 2147483644 bedeutet „nicht gesetzt / vom Layer bzw. Stil erben“ (siehe Basiselemente).
Beispiel (Baden-Württemberg) — ALKIS-Präsentationstext mit Drehwinkel und Stauchung
<VC_CADText>
<VermCadID>
<GUID>{A6635B64-…}</GUID>
<ObjektArt>oaAlkisCADRepr</ObjektArt>
<CADObjektArt>cadText</CADObjektArt>
</VermCadID>
<AlkisID>DEBWL00100087A03</AlkisID>
<Layer>-100900</Layer>
<Text_Referenzobjekt GUID="{E53D059B-…}" />
<VC_CADText>$PTO_PRAESO_TEXT$</VC_CADText>
<Text_Drehwinkel>349.000001697572</Text_Drehwinkel>
<Text_StrStauHor>1</Text_StrStauHor>
<Text_StrStauVert>1</Text_StrStauVert>
<Text_AusrichtungZumRefPkt>TARP_CenterCenter</Text_AusrichtungZumRefPkt>
<Text_RissDaten />
</VC_CADText>
Beispiel (Sachsen) — Maßtext mit Durchstreichung und Referenzlinien-Ausrichtung
<VC_CADText>
<VermCadID>
<GUID>{5293E2D7-…}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadText</CADObjektArt>
</VermCadID>
<Farbe>2147483644</Farbe>
<Fuellfarbe>2147483644</Fuellfarbe>
<Alpha>2147483644</Alpha>
<Fuellalpha>2147483644</Fuellalpha>
<VCBerLayerID>-6205</VCBerLayerID>
<Layer>-6205</Layer>
<Linienstaerke>2147483644</Linienstaerke>
<LinienendenFreistellen>2147483644</LinienendenFreistellen>
<Liniensymbol>2147483644</Liniensymbol>
<Linienmuster>2147483644</Linienmuster>
<LineCloseType>2147483644</LineCloseType>
<TextStil>2147483644</TextStil>
<Textur>2147483644</Textur>
<SchraffurStil>2147483644</SchraffurStil>
<BoeschungsSchraffurStil>2147483644</BoeschungsSchraffurStil>
<Text_Referenzobjekt GUID="{CBA75FC8-…}" />
<VC_CADText>$4.470$</VC_CADText>
<Text_Durchgestrichen>TD_ohne</Text_Durchgestrichen>
<Text_Drehwinkel>100</Text_Drehwinkel>
<Text_AusrichtungRefLinieGUID GUID="{F633B31F-…}" />
<Text_AusrichtungZumRefPkt>TARP_CenterLeft</Text_AusrichtungZumRefPkt>
<Text_RissDaten />
</VC_CADText>
Reale Textinhalte in den Beispielprojekten: Platzhalter #TEXTVONTEXTSTIL, Maßtexte in $…$-Form ($36.33$, $4.470$), $PTO_PRAESO_TEXT$, Klartext (Entfernung 1 (1)).
Verfügbarkeit und Besonderheiten
- Verfügbar in allen Bundesland-Versionen.
- Doppelter Tag:
VC_CADTextist Wurzeltag UND inneres Textinhalts-Element (siehe Einleitung). Beim Zählen mit Werkzeugen (z. B. grep) liefert der Tag daher deutlich mehr Treffer als es Textobjekte gibt. - Leere Texte werden beim Speichern nicht geschrieben (Manager-Filter) — ein Erzeuger muss immer einen nicht-leeren Textinhalt setzen.
- Legacy-Aliase (nur Lesen):
Text_Referenzpunkt→ wieText_Referenzobjekt;Text_UnterDurchstrichfarbe(alte gemeinsame Farbe) → setztText_UnterstrichfarbeUNDText_Durchstrichfarbe. - Schreibbedingung
Text_AusrichtungRefLinieGUID(Bugfix 01/2022, „Ausrichtung Referenzlinie ging in Rissen verloren“): geschrieben wird die GUID, wenn (a) die Referenz noch nicht aufgelöst wurde (DoCheck aktiv), oder (b) die Ausrichtung aktiv „ENTFERNT“ wurde — dann wird die spezielle NOTHING-GUID{AD59FD8E-A1B2-40E8-B2E3-199A7F3E7F89}(MisGUIDString/PROPERTY_GUID_VALUE_NOTHING) geschrieben, oder (c) eine gültige, nicht gelöschte Referenzlinie existiert. Text_StrStauHor/Text_StrStauVert: Fehlwert beim Lesen →PROPERTY_VALUE_INHERIT(Bugfix).- Floats mit Wert
NANwerden beim Lesen ignoriert. - In den Beispielprojekten zusätzlich real belegt:
Text_AmRefObjAusrichten,Text_BezugsStrichGUID,Text_TextBuendigkeit,Text_VCBerTextKind,Text_RefPktMoveX/Y(nur Sachsen).
Quellen im Code
CAD\GLGeometrics.pas:49221-49514—T2DText.DataToXMLLite(Schreibreihenfolge, Init-Vergleich gegenTTextData.Init)CAD\GLGeometrics.pas:49068-49218—InternalCreateFromXML(einfache Werte, LegacyText_UnterDurchstrichfarbe, NAN-Behandlung, StrStau-Bugfix)CAD\GLGeometrics.pas:49017-49066—InternalCreateComplexStructsFromXML(Referenzobjekt inkl. LegacyText_Referenzpunkt, BezugsStrich, AusrichtungRefLinie, RissDaten)CAD\GLGeometrics.pas:49369-49418— SchreibbedingungText_AusrichtungRefLinieGUIDinkl. NOTHING-GUIDCAD\GLGeometrics.pas:47496-47628—T2DTextRissValueList.DataToXMLLite(Text_RissDaten)CAD\GLTypes.pas:1014-1097— die 8 Text-Enums (TRotText*/TVCBerTextKind)VERMCAD\GlobalConsts.pasca. 4372-5004 — Tag-Konstanten (xn_Txt*,xn_CADText);GlobalConsts.pas:1965—MisGUIDStringCAD\GLConsts.pas:454—PROPERTY_GUID_VALUE_NOTHINGVERMCAD\GlobalStaticMethods.pas:3122-3141(GLStaticMethods) —StrToVCBerTextKind(Legacy-Strings)CAD\GLGeometrics.pas:79982— leere Texte werden nicht gespeichert