Zum Inhalt springen

CAD XML Syntax-Objekt VC_CADKompo

Aus VermCAD Hilfe Wiki

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: DataToXMLLite bricht bei 0 Kindern VOR dem Schreiben der VermCadID ab — es entsteht nur ein leeres Wurzelelement ohne Inhalt, das beim Lesen mangels VermCadID kein 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 erhalten VC_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.pas ca. 4372-5004 — Tag-Konstanten xn_Kompo=VC_CADKompo, xn_Members=MemberGroup, xn_Member=Member



[Nach oben]