Zum Inhalt springen

CAD XML Syntax-Objekt VC_CADArcLine

Aus VermCAD Hilfe Wiki

Der Kreisbogen zwischen einem Start- und einem Endpunkt. Delphi-Klasse ist T2DArcLine (CAD\GLGeometrics.pas), abgeleitet von T2DStartEndPunktLine, gespeichert unter dem XML-Tag VC_CADArcLine. Die Bogengeometrie wird über das Verhältnis RatioDistRad und das Flag Spiegeln definiert; der Bogenmittenpunkt ist ein eigenes Objekt VC_CADBMPunkt, auf das per GUID referenziert wird.

Strukturregel

<VC_CADArcLine>
  <VermCadID> … </VermCadID>                     (siehe VermCadID-Block; CADObjektArt=cadLinie)
  [Basiselemente]                                (siehe Basiselemente; Layer ist Pflicht;
                                                  darunter ggf. AlkisInitialDataErrors)
  [geerbte Linien-Elemente]                      (siehe VC_CADSimpleLine)
  <Startpunkt GUID="guid"/>                      (Pflicht)
  <Endpunkt GUID="guid"/>                        (Pflicht)
  <RatioDistRad>zahl</RatioDistRad>              (wird immer geschrieben)
  [<BogenMittePoint GUID="guid"/>]
  [<BogenMittePointCoords>zahl zahl</BogenMittePointCoords>]
  [<BogenZwischenPunkt GUID="guid"/>]
  <Spiegeln>bool</Spiegeln>                      (wird immer geschrieben)
  [<AlkisInitialBMCoords>zahl zahl</AlkisInitialBMCoords>]
  [<AlkisInitialSPCoords>zahl zahl</AlkisInitialSPCoords>]
  [<AlkisInitialEPCoords>zahl zahl</AlkisInitialEPCoords>]
  [<AlkisInitialMPCoords>zahl zahl</AlkisInitialMPCoords>]
</VC_CADArcLine>

Geerbte Elemente: VermCadID-Block, Basiselemente und die Linien-Elemente der Zwischenklassen auf VC_CADSimpleLine; Koordinaten-Strings („X Y" mit Dezimalpunkt): Werteformate.

Elemente

Nur die eigenen Elemente von T2DArcLine:

Element Typ/Format Pflicht Default Bedeutung
RatioDistRad Float ja (wird immer geschrieben, kein Init-Check) — Verhältnis Abstand(Startpunkt, Endpunkt) zu Radius; definiert die Bogenkrümmung. Beim Setzen im Programm auf den Bereich [−2, +2] begrenzt (Bogendurchmesser darf nicht kleiner als der Punktabstand sein); das Vorzeichen entspricht dem Radius-Vorzeichen (Bogenseite)
BogenMittePoint GUID-Attribut-Element nein (empfohlen) — Referenz auf den Bogenmittenpunkt VC_CADBMPunkt
BogenMittePointCoords Pos-String 2D (X Y) nein Init-Punkt (nicht geschrieben) Koordinaten der Bogenmitte (redundant zum BM-Punkt gespeichert)
BogenZwischenPunkt GUID-Attribut-Element nein — Zwischenpunkt auf dem Bogen (Referenz auf einen VC_CADPunkt)
Spiegeln bool ja (wird immer geschrieben) False Bogen gespiegelt (Seite des Bogens relativ zur Sehne)
AlkisInitialBMCoords Pos-String 2D nein Init-Punkt initiale ALKIS-Koordinaten der Bogenmitte (seit 03/2021, korrekte Fassung; kein write-Schalter — wird geschrieben, sobald belegt)
AlkisInitialSPCoords Pos-String 2D nein Init-Punkt initiale ALKIS-Koordinaten des Startpunkts
AlkisInitialEPCoords Pos-String 2D nein Init-Punkt initiale ALKIS-Koordinaten des Endpunkts
AlkisInitialMPCoords Pos-String 2D nein Init-Punkt initiale ALKIS-Koordinaten des Kreismittelpunkts

Referenzen

Referenz Ziel Pflicht Verhalten bei fehlendem Ziel
Startpunkt / Endpunkt VC_CADPunkt ja harte Referenz: Objekt wird nach dem LastTry zerstört („Objekt wird nicht eingelesen", siehe VC_CADSimpleLine)
BogenMittePoint VC_CADBMPunkt nein weiche Referenz (seit 08.01.2025): beim LastTry wird der Bogen auch ohne gefundenen Bogenmittenpunkt eingelesen (nur Warnung im Log). Zeigt die GUID auf einen normalen VC_CADPunkt statt eines BM-Punkts, wird dieser beim Referenzen-Update automatisch in einen VC_CADBMPunkt umgewandelt (Migration alter Beta-Dateien)
BogenZwischenPunkt VC_CADPunkt nein weiche Referenz: fehlendes Ziel wird nur geloggt, der Bogen bleibt bestehen („Objekt wird dennoch eingelesen")

Zusammenspiel mit VC_CADBMPunkt: Die Zuordnung Bogen ↔ Bogenmittenpunkt wird ausschließlich HIER (am Bogen) gespeichert; beim Auflösen setzt der Bogen am BM-Punkt dessen ParentArcLine.

Minimalform

<VC_CADArcLine>
  <VermCadID>
    <GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
    <ObjektArt>oaCAD</ObjektArt>
    <CADObjektArt>cadLinie</CADObjektArt>
  </VermCadID>
  <Layer>-102</Layer>
  <Startpunkt GUID="{XXXX…}" />
  <Endpunkt GUID="{XXXX…}" />
  <RatioDistRad>1.0</RatioDistRad>
  <Spiegeln>0</Spiegeln>
</VC_CADArcLine>

Ohne BogenMittePoint/BogenMittePointCoords ist der Bogen ladbar; sinnvoll ist mindestens BogenMittePointCoords oder die Referenz auf einen VC_CADBMPunkt.

Beispiele

Echtes Beispiel (BW) — ALKIS-Bogen mit BM-Punkt-Referenz und AlkisInitial-Feldern

<VC_CADArcLine>
  <VermCadID>
    <GUID>{7EF4E8B8-…}</GUID>
    <ObjektArt>oaAlkisCADRepr</ObjektArt>
    <CADObjektArt>cadLinie</CADObjektArt>
  </VermCadID>
  <Layer>-100890</Layer>
  <LayerErben>-1</LayerErben>
  <AlkisInitialDataErrors>
    <AlkisInitialDataError ErrorType="aideBogenMitte">
      <Diff>0 -0.001</Diff>
    </AlkisInitialDataError>
  </AlkisInitialDataErrors>
  <Startpunkt GUID="{93B4DE7D-…}" />
  <Endpunkt GUID="{4C33136D-…}" />
  <RatioDistRad>-1.11830822656901</RatioDistRad>
  <BogenMittePoint GUID="{2CC14BB5-…}" />
  <BogenMittePointCoords>32518700.95 5308973.874</BogenMittePointCoords>
  <BogenZwischenPunkt GUID="{2CC14BB5-…}" />
  <Spiegeln>0</Spiegeln>
  <AlkisInitialBMCoords>32518700.95 5308973.874</AlkisInitialBMCoords>
  <AlkisInitialSPCoords>32518702.12 5308969.35</AlkisInitialSPCoords>
  <AlkisInitialEPCoords>32518702.51 5308978.28</AlkisInitialEPCoords>
  <AlkisInitialMPCoords>32518708.9353029 5308973.52587143</AlkisInitialMPCoords>
</VC_CADArcLine>

AlkisInitialDataErrors ist ein Basiselement; der einzige in den Beispielprojekten beobachtete ErrorType ist aideBogenMitte. Die Minimalform in den Bestandsdaten kommt ohne den Fehlerblock und ohne BogenMittePoint-Referenz aus (dann nur BogenMittePointCoords + BogenZwischenPunkt).

Verfügbarkeit und Besonderheiten

  • Verfügbar in allen Bundesland-Versionen (Factory-Eintrag ohne IFDEF).
  • Belegt in den Beispielprojekten: BW 282, Sachsen 583, Thüringen 0 Exemplare.
  • Legacy-Aliase (werden nur gelesen, nie geschrieben): AlkisInitialBogenMitte → gleiche Reader-ID wie BogenMittePoint; AlkisInitialBogenMitteCoords → gleiche Reader-ID wie BogenMittePointCoords (alte, falsch benannte Fassung dieser Felder).
  • Die AlkisInitial*Coords-Felder werden nur bei aus ALKIS stammenden Bögen belegt (Vergleichsbasis für die Fehlerprüfung AlkisInitialDataErrors).
  • Das Tag EllipseAnzeigetyp ist historisch bedingt auch im Kontext des ArcLine registriert; der aktuelle Lesecode von T2DArcLine wertet es nicht aus (es wird still ignoriert).
  • RatioDistRad und Spiegeln werden ohne Default-Vergleich immer geschrieben — beim Erzeugen ebenfalls immer angeben.

Quellen im Code

  • CAD\GLGeometrics.pas:2058-2216 — Klassendeklaration T2DArcLine (FRatioDistRad = „Verhaeltnis zw. Abstand(SP, EP) und Radius")
  • CAD\GLGeometrics.pas:39654-39776 — DataToXMLLite (Schreibreihenfolge, RatioDistRad/Spiegeln immer)
  • CAD\GLGeometrics.pas:39583-39621 — InternalCreateFromXML (einfache Werte)
  • CAD\GLGeometrics.pas:39552-39581 — InternalCreateComplexStructsFromXML (BogenMittePoint-/BogenZwischenPunkt-GUID)
  • CAD\GLGeometrics.pas:42833-42930 — SetReferencesAndUpdate (weiche BM-Referenz, LastTry-Verhalten, T3DPoint→T3DBMPoint-Migration)
  • CAD\GLGeometrics.pas:42614-42649 — CalcRatioDistRad/Setter (Begrenzung auf [−2, +2])
  • VERMCAD\GlobalConsts.pas ca. 4372-5004 — Tag-Konstanten inkl. Legacy-Aliase (Reader-Registrierung GLGeometrics.pas:96817, 96964)



[Nach oben]