Zum Inhalt springen

CAD XML Syntax-Objekt VC_CADText

Aus VermCAD Hilfe Wiki

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:

  1. als Objekt-Wurzeltag des Textobjekts (Factory-Eintrag → T2DText), UND
  2. als Kind-Element für den Textinhalt INNERHALB des Objekts: <VC_CADText>mein Text</VC_CADText> (Reader-ID xn_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_CADText ist 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 → wie Text_Referenzobjekt; Text_UnterDurchstrichfarbe (alte gemeinsame Farbe) → setzt Text_Unterstrichfarbe UND Text_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 NAN werden 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 gegen TTextData.Init)
  • CAD\GLGeometrics.pas:49068-49218 — InternalCreateFromXML (einfache Werte, Legacy Text_UnterDurchstrichfarbe, NAN-Behandlung, StrStau-Bugfix)
  • CAD\GLGeometrics.pas:49017-49066 — InternalCreateComplexStructsFromXML (Referenzobjekt inkl. Legacy Text_Referenzpunkt, BezugsStrich, AusrichtungRefLinie, RissDaten)
  • CAD\GLGeometrics.pas:49369-49418 — Schreibbedingung Text_AusrichtungRefLinieGUID inkl. NOTHING-GUID
  • CAD\GLGeometrics.pas:47496-47628 — T2DTextRissValueList.DataToXMLLite (Text_RissDaten)
  • CAD\GLTypes.pas:1014-1097 — die 8 Text-Enums (TRotText*/TVCBerTextKind)
  • VERMCAD\GlobalConsts.pas ca. 4372-5004 — Tag-Konstanten (xn_Txt*, xn_CADText); GlobalConsts.pas:1965 — MisGUIDString
  • CAD\GLConsts.pas:454 — PROPERTY_GUID_VALUE_NOTHING
  • VERMCAD\GlobalStaticMethods.pas:3122-3141 (GLStaticMethods) — StrToVCBerTextKind (Legacy-Strings)
  • CAD\GLGeometrics.pas:79982 — leere Texte werden nicht gespeichert



[Nach oben]