CAD XML Syntax-Objekt VC_CADPunkt
Der CAD-Punkt ist das Grundobjekt der CAD-Daten: Träger von Koordinaten, Punktqualität und (bei VC-Punkten) der Punktnummer. Delphi-Klasse ist T3DPoint (CAD\GLGeometrics.pas), gespeichert unter dem XML-Tag VC_CADPunkt innerhalb einer VCCADDaten-Sektion. Fast alle anderen Objekte (Linien, Texte, Symbole, Flächen) referenzieren Punkte über deren GUID.
Strukturregel
<VC_CADPunkt>
<VermCadID> … </VermCadID> (siehe VermCadID-Block; bei VC-Punktnummer
zusätzlich VCPktID_NV + VCPktID_NR)
[Basiselemente] (siehe Basiselemente; Layer ist Pflicht)
[<Verankert>bool</Verankert>]
[<PunktQualitaet>enum:TPointQualType</PunktQualitaet>]
[<VCPktArtTransferActivated>bool</VCPktArtTransferActivated>]
[<VCPktArtTransferForce>bool</VCPktArtTransferForce>]
[<VCPktArtTransfer>enum:TAZ_Punktobjekt | leer</VCPktArtTransfer>]
[<PktNrTextType>enum:TPktNrTextType</PktNrTextType>]
[<VCPktSiblTransferedConnected>enum:TVCPktSiblTransferedConnected</VCPktSiblTransferedConnected>]
[<VerwendungsStatus>enum:TPktBenutzPart</VerwendungsStatus>]
<Position>
<gml:Point>
<gml:pos>zahl zahl [zahl]</gml:pos> (X Y [Z]; ECHTE Koordinaten, keine Riss-Deltas)
</gml:Point>
[<OriginalCADPos>zahl zahl [zahl]</OriginalCADPos>]
</Position>
[<PointSymbolGUID GUID="guid"/>]
[<WeitereSymbole>
{<WeitereSymboleMember GUID="guid"/>}* </WeitereSymbole>]
<RissKoordinaten> {<RissEintrag_ID>zahl zahl zahl</RissEintrag_ID>}* </RissKoordinaten>
<RissPktNrTextType> {<RissEintrag_ID>enum:TPktNrTextType</RissEintrag_ID>}* </RissPktNrTextType>
</VC_CADPunkt>
Die Reihenfolge entspricht der Schreibreihenfolge in T3DPoint.DataToXMLLite. Die Container RissKoordinaten/RissPktNrTextType werden beim Speichern IMMER geschrieben — meist leer als <RissKoordinaten /> — dürfen beim Erzeugen aber auch fehlen. Geerbte Elemente: VermCadID-Block und Basiselemente; Werteformate (Float mit Dezimalpunkt, Bool = -1/0, gml:pos): Werteformate.
Elemente
Nur die eigenen Elemente von T3DPoint:
| Element | Typ/Format | Pflicht | Default | Bedeutung |
|---|---|---|---|---|
Verankert |
bool | nein | False | Punkt ist verankert (nicht verschiebbar) |
PunktQualitaet |
enum:TPointQualType | praktisch ja | pqConst (Init) |
Punktqualität; da der Init-Wert die Konstruktionsphase bezeichnet, steht das Element an praktisch jedem realen Punkt |
VCPktArtTransferActivated |
bool | nein | False | Punktart-Transfer aktiv |
VCPktArtTransferForce |
bool | nein | False | Punktart-Transfer erzwingen |
VCPktArtTransfer |
Enum-Name aus TAZ_Punktobjekt ODER leer | nein | cVCPktArtTransferNone (nicht geschrieben) |
Ziel-Punktart des Transfers. Sonderfall: „Inherited" wird als leeres Element <VCPktArtTransfer /> gespeichert; beim Lesen wird der Name über GetAlkisObjektByName aufgelöst, leer/unbekannt → Inherited. Wertebereich = ALKIS-Punktobjekt-Typen (Teilbereich ZAX_Grenzpunkt … ZSD_Erhebungspunkt der Enum TAZ_AlkisObjekte, Alkis\AlkisTypes.pas:467)
|
PktNrTextType |
enum:TPktNrTextType | nein | TT_INHERITED |
Art des Punktnummern-Texts; beim Schreiben wird TT_NVNR → TT_NR gewandelt, wenn die Bundesland-Version keine NV/GV-Nummern nutzt (USE_NV_OR_GV aus)
|
VCPktSiblTransferedConnected |
enum:TVCPktSiblTransferedConnected | nein | vcpstc_None |
Zwillings-Übertragungsstatus |
VerwendungsStatus |
enum:TPktBenutzPart | nein | pb_None |
Verwendungsstatus des VC-Punkts; nur geschrieben, wenn der Punkt eine VCPktID hat und der Status ≠ pb_None ist (Feld seit 09/2023 am CAD-Punkt)
|
Position |
Container | ja | — | enthält gml:Point/gml:pos; ohne gültige Position bleiben die Koordinaten Fehlwert und der Punkt wird beim nächsten Speichern verworfen
|
gml:pos |
X Y [Z] (Floats, leerzeichengetrennt) |
ja | — | echte Koordinaten (FCoords, keine Riss-Deltas); Z nur, wenn kein Fehlwert; Fehlwert-Koordinaten werden als Fehlwert-Zahl geschrieben
|
OriginalCADPos |
X Y [Z] |
nein | — | ursprüngliche CAD-Position vor dem Punktart-Transfer; steht INNERHALB von Position (nach </gml:Point>); nur wenn Transfer aktiv und Original ≠ aktuelle 2D-Koordinate
|
PointSymbolGUID |
GUID-Attribut-Element | nein | — | Referenz auf das Haupt-VC_CADPunktsymbol des Punkts |
WeitereSymbole |
Container mit <WeitereSymboleMember GUID="{…}"/> (0..n) |
nein | leer | weitere Punktsymbol-Objekte desselben Punkts |
RissKoordinaten |
Container, je Riss <RissEintrag_ID>dX dY dZ</RissEintrag_ID> |
nein (wird aber immer geschrieben) | leer | rissabhängige Koordinaten-Deltas zur Standardposition; Eintrag nur, wenn mind. ein Delta ≠ 0/Fehlwert |
RissPktNrTextType |
Container, je Riss <RissEintrag_ID>enum:TPktNrTextType</RissEintrag_ID> |
nein (wird aber immer geschrieben) | leer | rissabhängiger PNR-Text-Typ; Eintrag nur ≠ TT_UNDEFINED
|
Die Punktnummer selbst (VCPktID_NV/VCPktID_NR) steht im VermCadID-Block; eine gültige VC-Punktnummer verlangt NV ≠ UND NR ≠ .
Enum TPointQualType (alle Werte)
| Wert | Bedeutung |
|---|---|
pqExtern |
externes Objekt: VermCad-Punkt, ALKIS-Punkt, Messgerät |
pqCAD |
als Punkt gezeichnetes CAD-Objekt |
pqHelp |
Nicht-Punkte (z. B. Linienenden, ALKIS-Repräsentanten) |
pqOnlyFang |
reine Fangpunkte |
pqConst |
Konstruktionsphase (Init-Wert — wird nicht geschrieben) |
pqTemp |
temporär |
Enum TPktNrTextType (alle Werte)
TT_NONE, TT_NR, TT_NVNR, TT_SPECIAL, TT_INHERITED, TT_UNDEFINED.
Enum TVCPktSiblTransferedConnected (alle Werte)
vcpstc_None, vcpstc_AutoToNP, vcpstc_ToGoDown, vcpstc_ToNotGoDown.
Enum TPktBenutzPart (alle Werte)
pb_None, pb_SollUnused, pb_SollUsed, pb_ChangedKoord, pb_Changed, pb_New, pb_Deleted, pb_DeletedZwilling.
Referenzen
| Referenz | Ziel | Pflicht | Verhalten bei fehlendem Ziel |
|---|---|---|---|
PointSymbolGUID |
VC_CADPunktsymbol | nein | weiche Referenz: fehlendes Ziel wird nur geloggt/ignoriert, der Punkt bleibt bestehen |
WeitereSymboleMember |
VC_CADPunktsymbol (0..n) | nein | weiche Referenz, wie oben |
Umgekehrt ist der Punkt selbst Ziel harter Referenzen (Startpunkt/Endpunkt von Linien, Member von Kompos, Text_Referenzobjekt …) — fehlt der Punkt, wird das referenzierende Objekt beim Referenzen-Update zerstört (siehe VermCadID-Block).
Minimalform
<VC_CADPunkt>
<VermCadID>
<GUID>{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}</GUID>
<ObjektArt>oaCAD</ObjektArt>
<CADObjektArt>cadPunkt</CADObjektArt>
</VermCadID>
<Layer>-102</Layer>
<PunktQualitaet>pqCAD</PunktQualitaet>
<Position>
<gml:Point>
<gml:pos>545123.456 5721456.789</gml:pos>
</gml:Point>
</Position>
</VC_CADPunkt>
VermCadID mit GUID, Layer und eine gültige Position sind das Minimum fürs korrekte Laden; Punkte mit Fehlwert-Koordinaten werden beim nächsten Speichern verworfen (siehe Lesemechanik).
Beispiele
Minimalfall (Baden-Württemberg, häufigster Fall — ALKIS-Repräsentant)
<VC_CADPunkt>
<VermCadID>
<GUID>{AEFE2E5B-…}</GUID>
<ObjektArt>oaAlkisCADRepr</ObjektArt>
<CADObjektArt>cadPunkt</CADObjektArt>
</VermCadID>
<Layer>-100780</Layer>
<PunktQualitaet>pqHelp</PunktQualitaet>
<Position>
<gml:Point>
<gml:pos>32519146.78 5308557.85</gml:pos>
</gml:Point>
</Position>
<PointSymbolGUID GUID="{9AB3B261-…}" />
<RissKoordinaten />
<RissPktNrTextType />
</VC_CADPunkt>
Beispiel (Sachsen) — VC-Punkt mit Punktnummer, VerwendungsStatus und WeitereSymbole
<VC_CADPunkt>
<VermCadID>
<GUID>{6083B9B4-…}</GUID>
<ObjektArt>oaVC</ObjektArt>
<CADObjektArt>cadPunkt</CADObjektArt>
<VCPktID_NV>10</VCPktID_NV>
<VCPktID_NR>56</VCPktID_NR>
</VermCadID>
<Layer>804</Layer>
<UseLayerAusSymboldefinition>-1</UseLayerAusSymboldefinition>
<PunktQualitaet>pqExtern</PunktQualitaet>
<VerwendungsStatus>pb_SollUnused</VerwendungsStatus>
<Position>
<gml:Point>
<gml:pos>3331817.374 5682842.57</gml:pos>
</gml:Point>
</Position>
<PointSymbolGUID GUID="{4263AD83-…}" />
<WeitereSymbole>
<WeitereSymboleMember GUID="{27D026D3-…}" />
</WeitereSymbole>
<RissKoordinaten />
<RissPktNrTextType />
</VC_CADPunkt>
Beispiel (Sachsen) — gefüllte RissKoordinaten (Deltas je Riss)
<VC_CADPunkt>
<VermCadID>
<GUID>{A45C4265-…}</GUID>
<ObjektArt>oaAlkisCADRepr</ObjektArt>
<CADObjektArt>cadPunkt</CADObjektArt>
</VermCadID>
<Layer>-100850</Layer>
<PunktQualitaet>pqHelp</PunktQualitaet>
<Position>
<gml:Point>
<gml:pos>3332413.7 5683111.729</gml:pos>
</gml:Point>
</Position>
<PointSymbolGUID GUID="{49A895D7-…}" />
<RissKoordinaten>
<RissEintrag_0>-0.000279225409030914 0.000412030145525932 0</RissEintrag_0>
</RissKoordinaten>
<RissPktNrTextType />
</VC_CADPunkt>
Details zur RissEintrag-Struktur: Rissdaten an Objekten.
Beispiel (Thüringen) — ALKIS-Repräsentant mit AlkisID und leerem VCPktArtTransfer
<VC_CADPunkt>
<VermCadID>
<GUID>{XXXXXXXX-…}</GUID>
<ObjektArt>oaAlkisCADRepr</ObjektArt>
<CADObjektArt>cadPunkt</CADObjektArt>
</VermCadID>
<AlkisID>DETHL53P0000GTXJ</AlkisID>
<Layer>-100360</Layer>
<PunktQualitaet>pqExtern</PunktQualitaet>
<VCPktArtTransfer />
<Position>
<gml:Point>
<gml:pos>2581116.89 5624174.596</gml:pos>
</gml:Point>
</Position>
<PointSymbolGUID GUID="{80A4225D-…}" />
<RissKoordinaten />
<RissPktNrTextType />
</VC_CADPunkt>
Verfügbarkeit und Besonderheiten
- Verfügbar in allen Bundesland-Versionen.
- PostProcessing: Nach dem Einlesen des Objekts läuft
CheckPktQuality(True)und repariert inkonsistente Kombinationen aus Punktqualität und ObjektArt (es gab z. B. Punkte mit gültiger VCPktID, diepqHelp/oaCADwaren). Dieselbe Prüfung läuft auch vor jedem Speichern. - UTM-Y-Korrektur: Beim Lesen von
gml:pos/OriginalCADPosalter Projekte greift ggf.VKS489YKorrektur(Erkennung UTM-Hochwerte, setzt ggf. Lagestatus 489). Ein leerer pos-String lässt die Koordinaten unverändert. - Migrations-Weiche: Unbekannte Reader-IDs und Komplexstrukturen werden an das PointSymbol weitergereicht — in sehr alten Projekten lagen die Symboldaten (SymbolID, Drehwinkel …) direkt am Punkt; solche Tags werden also beim Lesen des Punkts akzeptiert.
VCPktID_KSIDwird von CAD-Punkten nicht mehr geschrieben; fehlt sie, gilt die KSID des Projekts. In lokalen Systemen kannVCPktID_NVein beliebiger String sein (z. B.xx) und Koordinaten können klein oder negativ sein.VerwendungsStatuswird erst seit 09/2023 am CAD-Punkt gespeichert — ältere Dateien enthalten es nie.- Punkte ohne gültige X/Y-Koordinaten werden beim Speichern übersprungen (Fehlwert-Filter im Manager).
Quellen im Code
CAD\GLGeometrics.pas:26063-26262—T3DPoint.DataToXMLLite(Schreibreihenfolge, Bedingungen)CAD\GLGeometrics.pas:26496-26618—InternalCreateFromXML(einfache Werte, UTM-Korrektur, Migrations-Weiche)CAD\GLGeometrics.pas:26406-26494—InternalCreateComplexStructsFromXML(Position, PointSymbolGUID, WeitereSymbole, Rissdaten)CAD\GLGeometrics.pas:26396-26404— PostProcessingCheckPktQuality(True)CAD\GLGeometrics.pas:26620-26636—SetVCPktIDFromXML(NV/NR-Pflicht der Punktnummer)CAD\GLGeometrics.pas:21178-21278—T3DPointRissValueList.DataToXMLLite(RissKoordinaten/RissPktNrTextType)CAD\GLTypes.pas:952-957— TPointQualType;GLTypes.pas:58, 60-64— TPktNrTextType, TVCPktSiblTransferedConnectedVERMCAD\GlobalTypes.pas:809— TPktBenutzPart;Alkis\AlkisTypes.pas:467— TAZ_PunktobjektCAD\GLConsts.pas:513-583— Init-Werte (INIT_T3DPOINT_*);VERMCAD\GlobalConsts.pasca. 4372-5004 — Tag-KonstantenCAD\GLGeometrics.pas:79669-79670— Fehlwert-Punkte werden nicht gespeichert