Zum Inhalt springen

CAD XML Syntax-Objekt VC_CADFlaeche und VC_CADVCFlaeche

Aus VermCAD Hilfe Wiki

Flächenobjekte des CAD. Delphi-Klassen sind T2DArea (XML-Tag VC_CADFlaeche) und die davon abgeleitete T2DVCArea (XML-Tag VC_CADVCFlaeche, VC-generierte Fläche mit Makro-Verknüpfung), beide in CAD\GLGeometrics.pas. Gemeinsame Basis ist die abstrakte T2DAreaBase (ohne eigenes Wurzeltag), die den Flächenrand als GUID-Referenzen auf Ring-Objekte speichert: genau ein äußerer Umring (Exterior) plus beliebig viele Löcher (Interior).

Strukturregel

<VC_CADFlaeche>                                  (bzw. <VC_CADVCFlaeche>)
  <VermCadID> … </VermCadID>                     (siehe VermCadID-Block; CADObjektArt=cadFlaeche)
  [Basiselemente]                                (siehe Basiselemente; Layer ist Pflicht;
                                                  Schraffur-Felder SchraffurStil,
                                                  SchraffurHauptkanteGUID, … siehe dort)
  <Rand>
    <Exterior GUID="guid"/>                      (genau 1 — äußerer Umring)
    {<Interior GUID="guid"/>}*                   (0..n — Löcher)
  </Rand>
  [<BoeschungsInfos>                             (nur T2DArea, nur bei Böschungsschraffur)
     [<BoeschungOKUKVertauschen>bool</BoeschungOKUKVertauschen>]      (nur wenn True)
     [<BoeschungOKUKAutomatisch>bool</BoeschungOKUKAutomatisch>]      (nur wenn False)
     [<BoeschungOKStart_GUID>guid</BoeschungOKStart_GUID>             (GUID als Elementtext!
      <BoeschungOKEnd_GUID>guid</BoeschungOKEnd_GUID>                  alle 4 zusammen
      <BoeschungUKStart_GUID>guid</BoeschungUKStart_GUID>              oder keine)
      <BoeschungUKEnd_GUID>guid</BoeschungUKEnd_GUID>]
   </BoeschungsInfos>]
</VC_CADFlaeche>

Zusätzlich NUR bei <VC_CADVCFlaeche> (Reihenfolge Type→Nr→Name):
  [<MakroIDType>enum:TMakroType</MakroIDType>]   (praktisch immer mt_Calc)
  [<MakroIDNr>ganzzahl</MakroIDNr>]              (Verknüpfung zur Berechnungs-Fläche)
  [<MakroIDName>text</MakroIDName>]              (informativ)

Geerbte Elemente: VermCadID-Block und Basiselemente; Werteformate (Float, Bool = -1/0, GUID): Werteformate. Die Schraffur einer Fläche wird komplett über die Basiselemente gesteuert (SchraffurStil, SchraffurHauptkanteGUID, SchraffurHauptkanteAutomatisch, BoeschungsSchraffurStil, Textur) — die Fläche selbst hat dafür keine eigenen Elemente.

Elemente

Element Typ/Format Pflicht Default Bedeutung
Rand Container ja — Flächenrand; enthält Exterior + Interiors
Exterior GUID-Attribut-Element ja (genau 1) — äußerer Umring. Mehrfache Exterior-Knoten: nur der erste zählt, weitere werden mit Fehlerlog ignoriert
Interior GUID-Attribut-Element (0..n) nein keine Löcher der Fläche; doppelte GUIDs werden beim Lesen ignoriert (Schutz vor Aufsummierung bei wiederholtem Öffnen)
BoeschungsInfos Container nein — Böschungskanten-Zuordnung (nur T2DArea); geschrieben nur, wenn ein Böschungs-Info-Container existiert (Fläche mit Böschungsschraffur). Die 4 Kanten-Punkt-GUIDs stehen als Elementtext (nicht als Attribut) und werden nur geschrieben, wenn nicht automatisch und alle 4 Punkte existieren
MakroIDType enum:TMakroType nein — nur VC_CADVCFlaeche; Werte: mt_Calc, mt_Mess, mt_NetzMess, mt_GNSSMess — bei Flächen praktisch immer mt_Calc. Beim Lesen ignoriert (siehe unten)
MakroIDNr Int ja (für die VC-Verknüpfung) — nur VC_CADVCFlaeche; Nummer der VC-Fläche. Beim Lesen wird nur dieses Element ausgewertet: die MakroID wird mit mt_Calc und der Projekt-KSID neu über den IDServer geholt
MakroIDName String nein — nur VC_CADVCFlaeche; Name (informativ, beim Lesen ignoriert)

Referenzen

Referenz Ziel Pflicht Verhalten bei fehlendem Ziel
Exterior geschlossene Kurve: VC_CADKompo (geschlossener Linienring) oder VC_CADCircleLine/VC_CADEllipseLine ja harte Referenz: fehlende/ungültige GUID, nicht gefundenes Ziel oder ein Ziel, das keine geschlossene Kurve ist → „Objekt wird nicht eingelesen" — die Fläche wird beim Referenzen-Update verworfen und zerstört. Ist das Exterior-Objekt selbst fehlerhaft, wird auch die Fläche verworfen
Interior geschlossene Kurve (wie Exterior), je Loch eine nein überwiegend weich: nicht gefundene oder fehlerhafte Interior-Ziele und ungeschlossene Ringe werden mit Logeintrag ignoriert, die Fläche bleibt bestehen. Ausnahme: eine syntaktisch ungültige Interior-GUID (nicht parsebar) verwirft die ganze Fläche
BoeschungOK/UK…_GUID VC_CADPunkt (4 Kanten-Punkte) nein weich (nur Darstellung der Böschungsschraffur)

Prüfkriterium „geschlossene Kurve" (T3DBaseObject.IsClosedCurve): Kreis, Ellipse oder ein T3DKompo, dessen Member eine geschlossene Kurve bilden.

Wichtig für Erzeuger: In der Schreibreihenfolge des Managers stehen die Flächen VOR den Kompos — das referenzierte Rand-Kompo steht in echten Dateien also typischerweise NACH der Fläche. Der Leser löst das über die Wiedervorlage-Schleife des Referenzen-Updates auf (siehe Lesemechanik).

Minimalform

<VC_CADFlaeche>
  <VermCadID>
    <GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadFlaeche</CADObjektArt>
  </VermCadID>
  <Layer>-102</Layer>
  <Rand>
    <Exterior GUID="{XXXX…}"/>
  </Rand>
</VC_CADFlaeche>

Die Exterior-GUID muss auf ein existierendes, geschlossenes Ring-Objekt zeigen (in der Regel ein VC_CADKompo, dessen MemberGroup die Randlinien enthält) — sonst wird die Fläche beim Laden verworfen.

Beispiele

Minimalfall (Baden-Württemberg, echt)

<VC_CADFlaeche>
  <VermCadID>
    <GUID>{E91D72F2-…}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadFlaeche</CADObjektArt>
  </VermCadID>
  <Layer>-102</Layer>
  <Rand>
    <Exterior GUID="{E25CC64B-…}" />
  </Rand>
</VC_CADFlaeche>

Fläche mit Löchern (Baden-Württemberg, echt — ALKIS-Repräsentant mit 6 Interiors)

<VC_CADFlaeche>
  <VermCadID>
    <GUID>{5F2F5D3E-…}</GUID>
    <ObjektArt>oaAlkisCADRepr</ObjektArt>
    <CADObjektArt>cadFlaeche</CADObjektArt>
  </VermCadID>
  <AlkisID>DEBWL001000h42SS</AlkisID>
  <Layer>-100360</Layer>
  <Rand>
    <Exterior GUID="{93AD309C-…}" />
    <Interior GUID="{58E5F5D0-…}" />
    <Interior GUID="{ECC12FEE-…}" />
    <Interior GUID="{9D2A3BF2-…}" />
    <Interior GUID="{44CED532-…}" />
    <Interior GUID="{E22A2480-…}" />
    <Interior GUID="{504A1A3A-…}" />
  </Rand>
</VC_CADFlaeche>

VC_CADVCFlaeche (KONSTRUIERT nach den Code-Regeln — kein Bestandsbeleg in den Beispielprojekten)

<VC_CADVCFlaeche>
  <VermCadID>
    <GUID>{XXXXXXXX-…}</GUID>
    <ObjektArt>oaVC</ObjektArt>
    <CADObjektArt>cadFlaeche</CADObjektArt>
  </VermCadID>
  <Layer>-102</Layer>
  <Rand>
    <Exterior GUID="{XXXX…}"/>
  </Rand>
  <MakroIDType>mt_Calc</MakroIDType>
  <MakroIDNr>7</MakroIDNr>
  <MakroIDName>Flurstück 123</MakroIDName>
</VC_CADVCFlaeche>

Verfügbarkeit und Besonderheiten

  • Verfügbar in allen Bundesland-Versionen; Bestandsbelege für VC_CADFlaeche in allen drei Beispielprojekten (BW/Sachsen/THR), für VC_CADVCFlaeche keiner.
  • Sichtbar-Sonderfall bei VC_CADVCFlaeche: Das Basiselement Sichtbar wird beim Schreiben aus dem Koordinatensystem der verknüpften VC-Fläche abgeleitet (Basisklasse GLGeometrics.pas:6630-6633), nicht direkt aus dem Objektzustand.
  • Beim Lesen von VC_CADVCFlaeche zählt nur MakroIDNr — Typ und Name werden verworfen und die Makro-ID mit mt_Calc neu vom IDServer geholt. Ein Reparierer darf MakroIDType/MakroIDName also gefahrlos ergänzen/korrigieren.
  • Anhalt-Ableitungen der Fläche: siehe VC_AreaCADLTK und VC_AreaCADAlkisDE; der VC_Plotrahmen erbt ebenfalls den Rand-Mechanismus.
  • Schreibreihenfolge im Manager: Flächen als Gruppe 7 (nach Linien, vor Kompos); T2DVCArea → Tag VC_CADVCFlaeche, sonst VC_CADFlaeche.

Quellen im Code

  • CAD\GLGeometrics.pas:61035-61096 — T2DAreaBase.DataToXMLLite (Rand/Exterior/Interior schreiben)
  • CAD\GLGeometrics.pas:60860-60949 — T2DAreaBase.InternalCreateComplexStructsFromXML (Exterior nur erster, Interior-Duplikatfilter)
  • CAD\GLGeometrics.pas:62342-62470 — T2DAreaBase.SetReferencesAndUpdate (harte Exterior-/weiche Interior-Referenz, IsClosedCurve-Prüfung)
  • CAD\GLGeometrics.pas:9011-9021 — T3DBaseObject.IsClosedCurve
  • CAD\GLGeometrics.pas:64261-64283 — T2DArea.DataToXMLLite (BoeschungsInfos); 64229-64258 — Lesen
  • CAD\GLBoeschungsSchraffuren.pas:3387-3438 — TBoeschungInfoContainer.DataToXMLLite; 3341-3385 — Lesen
  • CAD\GLGeometrics.pas:64482-64516 — T2DVCArea.DataToXMLLite (MakroID-Elemente); 64518-64549 — Lesen (nur MakroIDNr, IDServer)
  • VERMCAD\VCObjID.pas:11 — Enum TMakroType
  • VERMCAD\GlobalConsts.pas ca. 4372-5004 — Tag-Konstanten (xn_Rand, xn_Exterior, xn_Interior, xn_MakroID*, xn_Boeschung*)



[Nach oben]