Hallo liebe CAD.de-Gemeinde,
ich habe folgendes Problem:
Ich versuche per NXOpen-Programm (C++) Punkte (Point*) von Komponenten (Assemblies::Component*) in einer Baugruppe zu finden. Meine Komponenten haben Punkte als PunktFeatures definiert. Diese sind benannt. Ziel ist es in der Baugruppe assoziative Linien zwischen bestimmten Punkten verschiedener Komponenten zu erstellen. D.h. wenn ich ein Bauteil bewege verändert sich auch die Line. Dazu benutze ich den "WavePointBuilder" und den "AssociativeLineBuilder".
Eine Journal-Version funktioniert. Da das Journal immer nur die findObject("JournalIdentifier")-Methode aufruft und ich die Punkte nur anhand Ihrer Namen identifizieren kann, muss ich sie wohl manuell suchen.
Meine Idee war das PointFeature zu suchen (per Schleife und Vergleich des Objektnamens mit dem vorgegebenen Namen), um dann den Punkt per
Point* pnt = dynamic_cast<Point*>pointFeat->GetEntities().at(0)
(ein Punkt hat ja nur eine Entity) zu erhalten. Dazu muss ich aber erst den Part der Komponente per
Part* part = dynamic_cast<Part*>(comp->Prototype())
ermitteln, weil ich von der Komponente nicht auf die Features und daher auch nicht auf Ihre Namen zugreifen kann.
Das ist soweit lauffähig. Problem ist nur dass die Punkte an der Position des Parts und nicht der Komponente ermittelt werden, d.h. die relative Lage der Komponente in der Baugruppe bleibt unberücksichtig und logischer Weise hängen die Linien dann nicht wie vorgesehen an den Komponenten, sondern liegen im leeren Raum (siehe Screenshots). Selbst wenn ich den JournalIdentifier des von mir gefundenen Punktes abfrage und dann die findObject()-Methode der Komponente aufrufe gibt es eine Exception. Der JournalIdentifier enthält dann sowas wie "HANDLE R-44900".
Nun meine Frage: Wie bekomme ich von einer Komponente einen bestimmten Punkt der Komponente, mit Hilfe des Namens des dazugehörigen Punkt-Features?
Ich nehme auch gerne Lösungen an, die einen anderen Weg verfolgen, solange ich am Ende die richtigen Punkte bekomme.
Anbei ein bisschen Quellcode.
Vielen Dank im Voraus
René
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP