CAD XML Syntax-Rissdaten an Objekten
Risse sind projektspezifische Zeichnungs-Sichten (siehe klassische Wiki-Seite CAD-Risse). Viele CAD-Objekte können rissabhängige Werte speichern — z. B. eine je Riss abweichende Punktnummern-Verschiebung oder eine riss-spezifische Unsichtbarkeit. Diese Querschnittsseite beschreibt das gemeinsame XML-Muster RissEintrag_<RissID> und die vier Container, in denen es an Objekten vorkommt. Die Riss-Verwaltung selbst (Liste der Risse mit Name, Maßstab, Ansicht) steht nicht am Objekt, sondern am Anfang jeder VCCADDaten-Sektion — siehe Sektion Rissdaten und Auswahlen.
Strukturregel
Gemeinsames Muster: Ein Container-Element am Objekt enthält je Riss ein Element bzw. einen Unter-Container, dessen Tag-Name aus dem Präfix RissEintrag_ (Konstante xn_RissEintrag) plus der Integer-Riss-ID zusammengesetzt ist. Der Standard-Riss hat immer die ID 0 (cCAD_RISS_ID_STANDARD, Name [Standard]) und existiert in jedem Projekt.
(1) RissSichtbarkeit — an JEDEM CAD-Objekt (Basisklasse T3DBaseObject):
<RissSichtbarkeit>
{<RissEintrag_ID>0</RissEintrag_ID>}* (Wert immer '0' = unsichtbar in diesem Riss)
</RissSichtbarkeit>
(2) RissKoordinaten + RissPktNrTextType — an VC_CADPunkt/VC_CADBMPunkt (T3DPointRissValueList):
<RissKoordinaten>
{<RissEintrag_ID>zahl zahl zahl</RissEintrag_ID>}* (dX dY dZ = Koordinaten-DELTAS zum Standard)
</RissKoordinaten>
<RissPktNrTextType>
{<RissEintrag_ID>enum:TPktNrTextType</RissEintrag_ID>}*
</RissPktNrTextType>
(3) Text_RissDaten — an allen Textobjekten (T2DTextRissValueList):
<Text_RissDaten>
{<RissEintrag_ID>
[<Text_RissRefPktMove>zahl zahl 0</Text_RissRefPktMove>]
[<Text_RissDrehwinkel>zahl</Text_RissDrehwinkel>]
[<Text_RissNieAufDemKopf>ganzzahl</Text_RissNieAufDemKopf>]
[<Text_RissAusrichtungRefLinieGUID GUID="guid"/>]
[<Text_RissAmRefObjAusr>ganzzahl</Text_RissAmRefObjAusr>]
[<Text_RissStrStauHor>zahl</Text_RissStrStauHor>]
[<Text_RissStrStauVert>zahl</Text_RissStrStauVert>]
</RissEintrag_ID>}*
</Text_RissDaten>
(4) Bemassung_RissDaten — an VC_CADBemassung (T3DBemassungRissValueList):
<Bemassung_RissDaten>
{<RissEintrag_ID>
[<Bemassung_RissDistToBase>zahl</Bemassung_RissDistToBase>]
</RissEintrag_ID>}*
</Bemassung_RissDaten>
Zwei Bauformen des RissEintrag_ID-Elements:
- Wert-Element (RissSichtbarkeit, RissKoordinaten, RissPktNrTextType): der Wert steht direkt als Textknoten im Element.
- Unter-Container (Text_RissDaten, Bemassung_RissDaten): der Eintrag enthält eigene Kind-Elemente, jedes optional.
Elemente
| Container | An Objekttyp | Eintrag je Riss | Schreibbedingung | Bedeutung |
|---|---|---|---|---|
RissSichtbarkeit |
alle CAD-Objekte (Basiselement) | Wert immer 0 (BoolToStr(False)) |
Container nur, wenn das Objekt in mindestens einem Riss unsichtbar ist; je unsichtbarem Riss ein Eintrag | Objekt ist in den gelisteten Rissen unsichtbar (fehlender Eintrag = sichtbar) |
RissKoordinaten |
VC_CADPunkt, VC_CADBMPunkt | dX dY dZ (drei Floats, leerzeichengetrennt) |
Container wird beim Speichern IMMER geschrieben (meist leer <RissKoordinaten />); Eintrag nur, wenn mind. ein Delta ≠ 0 und kein Fehlwert |
riss-spezifische Koordinaten-Deltas zur echten Punktposition (Position/gml:pos enthält immer die echten Koordinaten)
|
RissPktNrTextType |
VC_CADPunkt, VC_CADBMPunkt | Enum-Name aus TPktNrTextType | Container wird IMMER geschrieben (meist leer); Eintrag nur ≠ TT_UNDEFINED |
riss-spezifische Art des Punktnummern-Texts (überstimmt PktNrTextType des Punkts im jeweiligen Riss)
|
Text_RissDaten |
alle Textobjekte (VC_CADText, PNR-Texte) | Unter-Container mit bis zu 7 Kindern (s. u.) | Container wird IMMER geschrieben (meist leer <Text_RissDaten />); je Kind nur, wenn Wert ≠ Fehlwert |
riss-spezifische Text-Darstellung |
Bemassung_RissDaten |
VC_CADBemassung | Unter-Container mit Bemassung_RissDistToBase |
Container wird IMMER geschrieben; Kind nur, wenn kein Fehlwert | riss-spezifischer Abstand der Maßlinie zur Basislinie |
Kinder eines Text_RissDaten-Eintrags
Jedes Kind entspricht einem Element des Textobjekts und überstimmt es im jeweiligen Riss:
| Kind-Element | Typ/Format | Gegenstück am Objekt |
|---|---|---|
Text_RissRefPktMove |
dX dY 0 (drei Floats; dritter Wert immer 0) |
Text_RefPktMoveX/Text_RefPktMoveY
|
Text_RissDrehwinkel |
zahl | Text_Drehwinkel
|
Text_RissNieAufDemKopf |
ganzzahl (Bool/Inherit-kodiert) | Text_NieAufDemKopf
|
Text_RissAusrichtungRefLinieGUID |
GUID-Attribut-Element | Text_AusrichtungRefLinieGUID — gleiche Schreiblogik inkl. NOTHING-GUID {AD59FD8E-A1B2-40E8-B2E3-199A7F3E7F89} für aktiv „ENTFERNT“ (Bugfix 01/2022: GUID wird auch geschrieben, wenn die Referenz noch nicht aufgelöst wurde, damit die Riss-Ausrichtung beim Speichern ohne Riss-Öffnung nicht verloren geht)
|
Text_RissAmRefObjAusr |
ganzzahl | Text_AmRefObjAusrichten
|
Text_RissStrStauHor / Text_RissStrStauVert |
zahl | Text_StrStauHor/Text_StrStauVert
|
Enum TPktNrTextType (alle Werte)
TT_NONE, TT_NR, TT_NVNR, TT_SPECIAL, TT_INHERITED, TT_UNDEFINED (TT_UNDEFINED = kein riss-spezifischer Wert, wird nicht geschrieben).
Beispiele
Beispiel (Sachsen) — gefüllte RissKoordinaten am Punkt
<VC_CADPunkt>
… (VermCadID, Layer, PunktQualitaet, Position) …
<PointSymbolGUID GUID="{49A895D7-…}" />
<RissKoordinaten>
<RissEintrag_0>-0.000279225409030914 0.000412030145525932 0</RissEintrag_0>
</RissKoordinaten>
<RissPktNrTextType />
</VC_CADPunkt>
Beispiel (Sachsen) — Text_RissDaten mit Einträgen für mehrere Risse (Punktnummerntext)
<VC_CADVCPNRText>
… (VermCadID, Layer, Text_Referenzobjekt, VC_CADText) …
<Text_RissDaten>
<RissEintrag_0>
<Text_RissRefPktMove>-6.13705911999569 2.45703685283661 0</Text_RissRefPktMove>
</RissEintrag_0>
<RissEintrag_1>
<Text_RissRefPktMove>-6.13705911999569 2.45703685283661 0</Text_RissRefPktMove>
</RissEintrag_1>
<RissEintrag_2>
<Text_RissRefPktMove>-6.13705911999569 2.45703685283661 0</Text_RissRefPktMove>
</RissEintrag_2>
</Text_RissDaten>
</VC_CADVCPNRText>
Konstruiertes Beispiel — RissSichtbarkeit (kein Bestandsbeispiel in den drei Beispielprojekten)
<VC_CADSimpleLine>
… (VermCadID, Layer, Startpunkt, Endpunkt) …
<RissSichtbarkeit>
<RissEintrag_1>0</RissEintrag_1>
<RissEintrag_3>0</RissEintrag_3>
</RissSichtbarkeit>
</VC_CADSimpleLine>
(Nach den Regeln konstruiert: die Linie ist in den Rissen 1 und 3 unsichtbar, in allen anderen sichtbar.)
Konstruiertes Beispiel — Bemassung_RissDaten (kein Bestandsbeispiel)
<VC_CADBemassung>
… (VermCadID, Layer, MemberGroup, BasePoint1/2, BemassungDistToBase) …
<Bemassung_RissDaten>
<RissEintrag_2>
<Bemassung_RissDistToBase>1.25</Bemassung_RissDistToBase>
</RissEintrag_2>
</Bemassung_RissDaten>
</VC_CADBemassung>
Verfügbarkeit und Besonderheiten
- Das Muster ist in allen Bundesland-Versionen identisch.
- Riss-ID-Bezug: Die ID im Tag-Namen muss zu einem
RissEintrag_<ID>der Riss-Verwaltung in derselbenVCCADDaten-Sektion gehören (Sektion Rissdaten und Auswahlen); die Riss-Verwaltung wird VOR den Objekten geschrieben/gelesen. Standard-Riss-ID 0 existiert immer. - Leere Container:
RissKoordinaten,RissPktNrTextType,Text_RissDatenundBemassung_RissDatenwerden beim Speichern auch ohne Einträge geschrieben (z. B.<Text_RissDaten />) — fürs Erzeugen dürfen sie fehlen.RissSichtbarkeitwird dagegen NUR geschrieben, wenn mindestens ein Unsichtbar-Eintrag existiert. - Belege aus den Beispielprojekten (getrennt von der Code-Verfügbarkeit): gefüllte
RissKoordinatenund gefüllteText_RissDaten(Text_RissRefPktMove,Text_RissDrehwinkel) nur in Sachsen belegt;RissPktNrTextTypekommt ausschließlich leer vor;RissSichtbarkeitundBemassung_RissDatensind nicht belegt (Beispiele oben konstruiert). - Fehler beim Schreiben einzelner Riss-Einträge brechen das Speichern nicht ab (nur Logeintrag; Absicherung nach Praxisfällen 2021/2022).
- Die riss-spezifischen Werte sind immer Abweichungen vom Standardwert des Objekts — die echten Koordinaten/Texteinstellungen stehen weiterhin in den regulären Elementen; ein Reparierer darf Riss-Deltas nicht in die Hauptkoordinaten einrechnen.
Quellen im Code
CAD\GLGeometrics.pas:21178-21278—T3DPointRissValueList.DataToXMLLite(RissKoordinaten, RissPktNrTextType; ReadFromXML ab 21313)CAD\GLGeometrics.pas:47496-47628—T2DTextRissValueList.DataToXMLLite(Text_RissDaten inkl. GUID-Schreiblogik)CAD\GLGeometrics.pas:59037-59079—T3DBemassungRissValueList.DataToXMLLite(Bemassung_RissDaten)CAD\GLGeometrics.pas:6738-6775—T3DBaseObject.DataToXMLLite(RissSichtbarkeit)CAD\GLGeometrics.pas:72745-72869—TCADRissList.DataToXMLLite(Riss-Verwaltung in der Sektion, zum Abgleich der Riss-IDs)VERMCAD\GlobalConsts.pas:4736-4742— Tag-Konstantenxn_TxtRissDaten*; ca. 4372-5004 —xn_RissEintrag(Präfix!),xn_RissKoordinaten,xn_RissPktNrTextType,xn_RissSichtbarkeit,xn_BemassungRissDatenVERMCAD\GlobalConsts.pas:1965/CAD\GLConsts.pas:454— NOTHING-GUID (MisGUIDString=PROPERTY_GUID_VALUE_NOTHING)