Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Punkt aus Komponente

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX
Autor Thema:  Punkt aus Komponente (1816 mal gelesen)
Rene Oschmann
Mitglied
Student

Sehen Sie sich das Profil von Rene Oschmann an!   Senden Sie eine Private Message an Rene Oschmann  Schreiben Sie einen Gästebucheintrag für Rene Oschmann

Beiträge: 7
Registriert: 10.10.2013

erstellt am: 05. Jan. 2014 21:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


getPoint.txt


wodieLiniensind.PNG


wodieLinienseinsollten.PNG

 
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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


Sehen Sie sich das Profil von mseufert an!   Senden Sie eine Private Message an mseufert  Schreiben Sie einen Gästebucheintrag für mseufert

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 07. Jan. 2014 12:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Rene Oschmann 10 Unities + Antwort hilfreich

Hallo Rene,

schau' Dir mal das Kapitel über Assemblies (UF_ASSEM) in der Net-Ref an. Da gibt's ein Beispiel, in dem die Zusammenhänge erklärt sind.

Gruß, Michael

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP



Entwicklungs-Ingenieur Ventile (m/w/d)

Entwicklungs-Ingenieur Ventile (m/w/d)

Einstieg als: Festanstellung | Art: Vollzeit | Befristung: Unbefristet | Unternehmensbereich: GTC | Arbeitsort: Egelsbach

Automation ist unsere Leidenschaft ? Ihre auch? Begeistern Sie sich für neue Technologien, ergreifen die Initiative und arbeiten selbstständig? Dann sind Sie bei uns genau richtig....

Anzeige ansehenEntwicklung
Rene Oschmann
Mitglied
Student

Sehen Sie sich das Profil von Rene Oschmann an!   Senden Sie eine Private Message an Rene Oschmann  Schreiben Sie einen Gästebucheintrag für Rene Oschmann

Beiträge: 7
Registriert: 10.10.2013

erstellt am: 07. Jan. 2014 15:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Michael,

vielen Dank für den Verweis. Ich hatte mir gestern noch eine Krücke gebaut, die die Punkt-Koordinaten auf das Part-Koordinatensystem zurück gerechnet hat und so nach dem passenden Punkt gesucht hat. Das hat zwar funktioniert, aber besonders schön war es nicht.
Nun nutze ich UF_ASSEM_find_occurrence(). Hier ein kleines Beispiel, falls es jemand anderes mal braucht:

Code:

Point* getCompPoint(Assemblies::Component* comp, string name){
    Point* pnt = NULL;
    Part*  prt = NULL;
    tag_t  occ = 0;
    Features::FeatureCollection* fc;

    prt = dynamic_cast<Part*>(comp->Prototype());
    if (!prt)    //Prototype der Komponente nicht gefunden
        return NULL;

    //Features des Parts durchsuchen
    fc = prt->Features();
    for (Features::FeatureCollection::iterator it = fc->begin(); it != fc->end(); ++it){
        if (!strcmp(name.c_str(),(*it)->Name().GetLocaleText()) &&
            !strcmp("POINT",(*it)->FeatureType().GetLocaleText()))
        {
            pnt =  dynamic_cast<Point*>((*it)->GetEntities().at(0));   //Punkt des Features im Part
            break;
        }
    }
    if (!pnt)    //Punkt im Part nicht gefunden
        return NULL;

    occ = UF_ASSEM_find_occurrence(comp->Tag(),pnt->Tag());
    pnt = NULL;
    if (!occ)    //Punkt in Komponente nicht gefunden
        return NULL;

    //Punktobjekt vom Tag generieren
    NXObjectManager* objM = new NXObjectManager();
    pnt = dynamic_cast<Point*>(objM->Get(occ));
    delete objM;

    return pnt;
}


[Diese Nachricht wurde von Rene Oschmann am 07. Jan. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz