DBidentifyObjectUsingPath

Top  Previous  Next

Objekt nach Koordinaten suchen.

In der Selektionsmenge der Datenbank root werden all die Punkte identifiziert, die in der Umgebung von (x,y) liegen. Dabei wird im Gegensatz zur Prozedur DBidentifyObjectUsingKnots nicht der Stützpunkt mit dem geringsten Abstand von der Sollkoordinate gesucht, sondern der Punkt des Objekts, der der Sollkoordinate an nächsten liegt. Es wird also jeweils das Lot auf die Linienzüge gefällt und damit der Abstand des Sollpunktes von den Linien bestimmt. Im Einzelnen werden folgende Aktionen ausgeführt:

Wenn toleranz 0 ist, wird der Punkt in der Menge der selektierten Objekte zurückgegeben, der dem Punkt (x,y) am nächsten liegt. Beim Aufruf muß in anzahl mindestens 1 stehen, damit überhaupt ein Punkt abgespeichert werden kann. Werden in der Selektionsliste keine Punkte gefunden, so wird in anzahl 0 zurückgegeben, sonst steht in anzahl 1 und das erste Element in dem Feld points wird mit dem Handle belegt. Es wird dabei das Handle des Punktes zurückgegeben, der auf der Strecke vor dem eigentlich gefundenen Punkt liegt. Weiterhin werden die Koordinaten des Punktes ausgerechnet, der auf dieser Strecke dem Sollpunkt am nächsten liegt. Zusätzlich werden in dem Feld status Informationen über den gefundenen Punkt abgelegt. Diese sind durch die unten aufgeführten Konstanten definiert und bieten die Werte

„Der Schnittpunkt ist lotrecht unter dem digitalisierten Punkt“,

„Der Schnittpunkt hat den Datenbankpunkt exakt getroffen“,

„Der digitalisierte Punkt liegt vor dem Datenbankpunkt“,

„Der digitalisierte Punkt liegt hinter dem Datenbankpunkt“,

„Der Schnittpunkt liegt im 2. Segment einer Kreisdefinition“,

„Der digitalisierte Punkt ist der Kreismittelpunkt, die Identifikation ist nicht eindeutig“,

„Der digitalisierte Punkt ist Teil eines Textes“

sowie sinnvolle Kombinationen davon. Texte und Symbole werden entsprechend behandelt. Ist toleranz >0, so werden alle Punkte gesucht, die einen Abstand von weniger als toleranz zu (x,y) haben. Wird anzahl vor dem Aufruf mit 0 initialisiert, so werden die Punkte nur gezählt und deren Anzahl wird in anzahl geschrieben.

Parameter

root (PROOT)                                             [IN]

Die Datenbank, deren Punkte identifiziert werden sollen. Die Punkte werden in der Selektionsmenge gesucht.

x (DOUBLE)                                                [IN]

X-Koordinate des Referenzpunktes.

y (DOUBLE)                                                [IN]

Y-Koordinate des Referenzpunktes

toleranz (DOUBLE)                                     [IN]

Abstand um den Referenzpunkt, in dem die Punkte gefunden werden sollen. Wenn toleranz=0 ist, wird der nächste Punkt ermittelt, wenn toleranz > 0 ist, werden alle Punkte ermittelt, deren Abstand von (x,y) nicht größer als toleranz ist. Ist toleranz < 0, so kann kein Punkt gefunden werden.

anzahl (int *)                                        [IN/OUT]

IN:             Anzahl der Punkte im Feld points, die dort maximal hineinpassen. Werden mehr Punkte gefunden, so werden die überzähligen nicht zurückgegeben. Ist anzahl = 0, so werden die Punkte nur gezählt.

OUT:          Anzahl der wirklich zurückgegebenen Punkte. Dies ist bei toleranz = 0 immer 0 oder 1.

typeSelect (int)                                            [IN]

Gibt vor, welche Elementtypen berücksichtigt werden. In dieser Variablen werden all die Konstanten TYPE_SELECT_??? geodert, die in die Suche eingeschlossen werden sollen. Wenn alle Elementtypen berücksichtigt werden sollen, dann kann auch die Konstante TYPE_SELECT_ALL verwendet werden.

points (T_PPOINT *)                         [IN/OUT]

Zeiger auf ein Feld, das die Zeiger der Punkte aufnehmen soll, die beim Identifizieren gefunden werden. Wenn die Punkte nur gezählt werden, dann ist dieser Zeiger irrelevant. Sonst muss er auf ein Feld mit ausreichend Speicherplatz zeigen. Hier werden nach dem Prozeduraufruf die Handles der Punkte stehen, die jeweils vor dem eigentlichen, nächsten Punkt in der Datenbank stehen.

status (BYTE *)                                  [IN/OUT]

Zeiger auf ein Feld, das die Punkteigenschaften aufnehmen soll, die beim Identifizieren gefunden werden. Wenn die Punkte nur gezählt werden, dann ist dieser Zeiger irrelevant. Sonst muss er auf ein Feld mit ausreichend Speicherplatz zeigen. Hier werden Kombinationen der unten aufgeführten Konstanten zurückgeliefert..

xLot (DOUBLE *)                               [IN/OUT]

yLot (DOUBLE *)                               [IN/OUT]

Zeiger auf zwei Felder, die die Koordinaten der gefundenen, nächstgelegenen Punkte aufnehmen sollen. Wenn die Punkte nur gezählt werden, dann ist dieser Zeiger irrelevant. Sonst muss er auf ein Feld mit ausreichend Speicherplatz zeigen. Wenn einzelnen Punkte gefunden wurden, dann stehen deren Koordinaten in diesen Feldern. Wenn Punkte innerhalb einer Linie oder eines Kreises gefunden wurden, dann stehen hier die Koordinaten des nächstgelegenen Punktes auf der Linie, bzw. des Kreises. Bei Texten wird hier die Position des Fußpunktes eingetragen.

pIsHiddenL (int)                                          [IN]

Wird dieser Wert auf TRUE (!= 0) gesetzt, so werden alle P-Verbindungen in Linienzügen so behandelt, als seien es unsichtbare Linien. Ist der Wert FALSE (=0), so werden die Linienzüge bei einer P-Verbindung unterbrochen.

parameterList (PIDENTIFY_PARAMETER) [IN]

Die Struktur IDENTIFY_PARAMETER enthält eine Liste aller DKY, DKA und KEY-Werte. Die Werte können zuvor mit der Routine SYSmakeParameterList erzeugt werden.

Ergebnis

---

Konstanten

TYPE_SELECT_STRING

TYPE_SELECT_TEXT

TYPE_SELECT_POINTELEMENT

TYPE_SELECT_ELIPSE

TYPE_SELECT_SYMBOL

TYPE_SELECT_ALL

IDENTIFY_PATH_STATUS_IS_PERPENDICULAR

IDENTIFY_PATH_STATUS_IS_EXACT

IDENTIFY_PATH_STATUS_IS_BEFORE

IDENTIFY_PATH_STATUS_IS_AFTER

IDENTIFY_PATH_STATUS_IS_SECOND_ARC_POINT

IDENTIFY_PATH_STATUS_IS_ARC_CENTER_POINT

IDENTIFY_PATH_STATUS_IS_ON_TEXT

Deklaration

#include "database.h"

 

void DLLENTRY DBidentifyObjectUsingPath (

     PROOT                root,

     DOUBLE                  x,

     DOUBLE                  y,

     DOUBLE                  toleranz,

     int *                anzahl,

     int                     typeselect,

     T_PPOINT *              points,

     BYTE *                  status,

     DOUBLE *             xLot,

     DOUBLE *             yLot,

     int                     pIsHiddenL

     PIDENTIFY_PARAMETER     parameterlist

);