CAD XML Syntax-Objekt VC_CADKompo
Der Kompo ist das Verbund-/Gruppenobjekt des CAD: eine geordnete Komposition beliebiger CAD-Objekte (meist Linien, auch Punkte, Texte, andere Kompos). Delphi-Klasse ist T3DKompo (CAD\GLGeometrics.pas), XML-Tag VC_CADKompo. Ein geschlossener Linien-Kompo dient außerdem als Ring-Objekt für Flächenränder (VC_CADFlaeche, VC_Plotrahmen). T3DKompo ist Basisklasse der Bemaßung und (über T3DVCCalcMess) von VC_CADVCBerechnung/VC_CADVCMessung.
Strukturregel
<VC_CADKompo>
<VermCadID> … </VermCadID> (siehe VermCadID-Block; CADObjektArt=cadKompo)
[Basiselemente] (siehe Basiselemente; Layer ist Pflicht)
<MemberGroup>
{<Member GUID="guid"/>}* (2..n — geordnete Kind-Referenzen)
</MemberGroup>
</VC_CADKompo>
Geerbte Elemente: VermCadID-Block und Basiselemente; Werteformate: Werteformate.
Elemente
| Element | Typ/Format | Pflicht | Default | Bedeutung |
|---|---|---|---|---|
MemberGroup |
Container | ja | — | Liste der Kind-Objekte |
Member |
GUID-Attribut-Element (0..n) | ja (mindestens 2 fürs Laden) | — | Referenz auf ein Kind-Objekt. Die Reihenfolge der Member-Elemente = Kompositionsreihenfolge (bei Ring-Kompos die Umlaufreihenfolge der Randlinien) |
Hinweis: Beim reinen VC_CADKompo tragen die Member-Elemente nur das Attribut GUID. Die Variante mit zusätzlichen Attributen RefGUID/Counter kommt nur in den MemberGroup-Containern INNERHALB von VC_CADVCBerechnungList-Einträgen vor (siehe VC_CADVCBerechnung).
Referenzen
| Referenz | Ziel | Pflicht | Verhalten bei fehlendem Ziel |
|---|---|---|---|
Member |
beliebiges CAD-Objekt (meist Linien, auch Punkte, Texte, Kompos) | ja | siehe unten |
Auflösungsverhalten von T3DKompo.SetReferencesAndUpdate (Referenzen-Update nach dem Laden aller Objekte):
- Weniger als 2 Verweis-GUIDs → „Objekt wird nicht eingelesen": der Kompo wird verworfen (gilt nicht für die
T3DVCCalcMess-Ableitungen Berechnung/Messung, die auch 1 Kind haben dürfen). - Syntaktisch ungültige Member-GUID → Kompo wird verworfen.
- Member-Ziel selbst fehlerhaft (konnte nicht eingelesen werden) → dieser Member wird aus der Liste entfernt, der Kompo überlebt — sinkt die Zahl dabei unter 2, wird er doch verworfen.
- Member-Ziel (noch) nicht verarbeitet → Kompo kommt in die Wiedervorlage-Liste; bleibt das Ziel bis zum „LastTry" unauffindbar, wird der Kompo als fehlerhaft zerstört (Logeintrag „n von m Unter-Objekten nicht gefunden", siehe Lesemechanik). Kinder eines verworfenen Kompos können einzeln überleben.
Nach erfolgreicher Auflösung wird jedes Kind-Objekt mit Parent auf den Kompo verlinkt.
Minimalform
<VC_CADKompo>
<VermCadID>
<GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadKompo</CADObjektArt>
</VermCadID>
<Layer>-102</Layer>
<MemberGroup>
<Member GUID="{XXXX…}"/>
<Member GUID="{XXXX…}"/>
</MemberGroup>
</VC_CADKompo>
Mindestens 2 Member-GUIDs auf existierende Objekte sind Pflicht — mit weniger wird der Kompo beim Laden verworfen.
Beispiele
Beispiel (Baden-Württemberg, echt — ALKIS-Repräsentant mit 2 Membern)
<VC_CADKompo>
<VermCadID>
<GUID>{9EEC7079-…}</GUID>
<ObjektArt>oaAlkisCADRepr</ObjektArt>
<CADObjektArt>cadKompo</CADObjektArt>
</VermCadID>
<Layer>-101510</Layer>
<LayerErben>-1</LayerErben>
<MemberGroup>
<Member GUID="{CC3C9309-…}" />
<Member GUID="{32FA3AF1-…}" />
</MemberGroup>
</VC_CADKompo>
Beispiel (Baden-Württemberg, echt — großer Ring-Kompo, gekürzt)
<VC_CADKompo>
<VermCadID>
<GUID>{A7E2273A-…}</GUID>
<ObjektArt>oaAlkisCADRepr</ObjektArt>
<CADObjektArt>cadKompo</CADObjektArt>
</VermCadID>
<Layer>-100720</Layer>
<LayerErben>-1</LayerErben>
<MemberGroup>
<Member GUID="{97702235-…}" />
<Member GUID="{5879B99F-…}" />
<Member GUID="{78D742D2-…}" />
… (im Original 280 Member) …
</MemberGroup>
</VC_CADKompo>
Verfügbarkeit und Besonderheiten
- Verfügbar in allen Bundesland-Versionen; Bestandsbelege in allen drei Beispielprojekten (BW: 370, Sachsen: 7.868, THR: 765).
- Leerer Kompo wird nicht gespeichert:
DataToXMLLitebricht bei 0 Kindern VOR dem Schreiben der VermCadID ab — es entsteht nur ein leeres Wurzelelement ohne Inhalt, das beim Lesen mangelsVermCadIDkein Objekt erzeugt. Bei genau 1 Kind wird nur eine Log-Warnung („Sinnlose Komposition") ausgegeben, geschrieben wird trotzdem. - Als Ring einer Fläche muss der Kompo eine geschlossene Kurve bilden (
IsCurve+IsClosed) — sonst verwirft die referenzierende Fläche sich selbst beim Laden. - Ableitungen mit eigenen Wurzeltags:
VC_CADBemassung(T3DBemassung),VC_CADVCBerechnung/VC_CADVCMessung(T3DVCCalcMess). Der Manager schreibt beim Speichern je nach Klasse das passende Tag; nur „echte" Kompos erhaltenVC_CADKompo. - Schreibreihenfolge im Manager: Kompos als Gruppe 9 (nach den Flächen!) — Flächen referenzieren ihre Rand-Kompos also vorwärts; der Leser löst das über die Wiedervorlage-Schleife auf.
Quellen im Code
CAD\GLGeometrics.pas:56202-56278—T3DKompo.DataToXMLLite(Leer-Check vor VermCadID, MemberGroup/Member)CAD\GLGeometrics.pas:56130-56194—InternalCreateComplexStructsFromXML(Member-GUIDs → FChildrenGUIDS)CAD\GLGeometrics.pas:57251-57347—SetReferencesAndUpdate(Mindestanzahl 2, Fehlerverhalten, Parent-Verlinkung)CAD\GLGeometrics.pas:56196-56200—GetXMLLinkError(Fehlermeldung über fehlende Kind-GUIDs)CAD\GLGeometrics.pas:9011-9021—IsClosedCurve(Kompo als Flächenring)VERMCAD\GlobalConsts.pasca. 4372-5004 — Tag-Konstantenxn_Kompo=VC_CADKompo,xn_Members=MemberGroup,xn_Member=Member