CAD XML Syntax-Objekt VC_CADFlaeche und VC_CADVCFlaeche
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_CADFlaechein allen drei Beispielprojekten (BW/Sachsen/THR), fürVC_CADVCFlaechekeiner. - Sichtbar-Sonderfall bei
VC_CADVCFlaeche: Das BasiselementSichtbarwird 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_CADVCFlaechezählt nurMakroIDNr— Typ und Name werden verworfen und die Makro-ID mitmt_Calcneu vom IDServer geholt. Ein Reparierer darfMakroIDType/MakroIDNamealso 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→ TagVC_CADVCFlaeche, sonstVC_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.IsClosedCurveCAD\GLGeometrics.pas:64261-64283—T2DArea.DataToXMLLite(BoeschungsInfos);64229-64258— LesenCAD\GLBoeschungsSchraffuren.pas:3387-3438—TBoeschungInfoContainer.DataToXMLLite;3341-3385— LesenCAD\GLGeometrics.pas:64482-64516—T2DVCArea.DataToXMLLite(MakroID-Elemente);64518-64549— Lesen (nur MakroIDNr, IDServer)VERMCAD\VCObjID.pas:11— EnumTMakroTypeVERMCAD\GlobalConsts.pasca. 4372-5004 — Tag-Konstanten (xn_Rand,xn_Exterior,xn_Interior,xn_MakroID*,xn_Boeschung*)