Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Frage zur NXOpen Funktion GetAllObjectsOnLayer

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:  Frage zur NXOpen Funktion GetAllObjectsOnLayer (2281 mal gelesen)
oehrnie
Mitglied
Programmierer

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

Beiträge: 8
Registriert: 08.04.2009

erstellt am: 08. Apr. 2009 16:11    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

Ich möchte mir gerne die Objekte auf einem bestimmten Layer zurückgeben lassen.
und verwende den Code
Code:

      int errorCode = UF_initialize();
      NXOpen::Session *theSession = NXOpen::Session::GetSession();
      int layer = layerLayer->ItemValue();
      NXOpen::Part* pWorkpart = theSession->Parts()->Work();
      NXOpen::Layer::LayerManager* pLayerMan = pWorkpart->Layers();
      vector< NXOpen::NXObject* > objVector = pLayerMan->GetAllObjectsOnLayer( layer );
      errorCode = UF_terminate();


Die fett gedruckte Zeile ist das Problem, da ich hier einen Assert _BLOCK_TYPE_IS_VALID( ... ) erhalte.
Offenbar gibts ein Problem dass der in std:vector eingebaute Copy-Konstruktor etwas freigibt was er besser nicht sollte.
Hat jemand eine Idee?

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: 09. Apr. 2009 10:15    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 oehrnie 10 Unities + Antwort hilfreich


layer-list.txt

 
Hallo oehrnie,

willkommen als Neuzugang hier im Forum. Für deinen Code (b.t.w: Was ist den das ?) hab' ich keine Idee, dafür ein VB- Beispiel für GetAllObjectsOnLayer, siehe Anhang. Weitere Beispiele dieser Art gibt's auf http://uganswer.ugs.com

Gruß, Michael

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

oehrnie
Mitglied
Programmierer

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

Beiträge: 8
Registriert: 08.04.2009

erstellt am: 09. Apr. 2009 11:17    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,
in VB ist es kein Problem, ich brauche es allerdings in c++
Das Problem ist halt, das man der Doku nicht entnehmen kann, was genau zurückgeliefert wird (Value/Referenz auf den Vektor, Value oder Referenz der Element des Vektors). http://uganswer.ugs.com  hat nur genau einen Verweis auf die Funktion, in der sie als Ersatz für eine nicht funktionierende Funktion angegeben wird (ohne jede weitere Info).
Ein c++ Beispiel das eine Funktion benutzt, die einen Vektor zurück liefert habe ich leider noch nicht gefunden.

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: 09. Apr. 2009 12:03    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 oehrnie 10 Unities + Antwort hilfreich

Hallo oehrnie,

die Rückgabe ist ein Array von NXObjects, wie hier zu sehen:

Dim objs() As NXObject = workPart.Layers.GetAllObjectsOnLayer(104)

objs ist der Variablenname, () sagt, es handelt sich um ein Array, as NXObject ist die Typangabe.

Gruß, Michael

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

oehrnie
Mitglied
Programmierer

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

Beiträge: 8
Registriert: 08.04.2009

erstellt am: 09. Apr. 2009 12:16    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

Das trifft nur auf VB zu.
In der C++ Doku steht als Rückgabetyp
std::vector< NXOpen::NCObject* >
Es wird also ein Vektor mit Zeigern auf die Objekte zurückgeliefert.
Der Teufel steckt hier im Detail der Zuweisung, der Fehler tritt bei der '=' Zuweisung auf.
Gibt es jemand, der NXOpen und C++ Guru ist, der hier eine Idee hat?

[Diese Nachricht wurde von oehrnie am 09. Apr. 2009 editiert.]

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: 09. Apr. 2009 12:30    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 oehrnie 10 Unities + Antwort hilfreich

Bin zwar kein "C++ - Guru" , aber daß die API bei Nutzung verschiedener Sprachen unterschiedliche Rückgabewerte hat, halte ich auch so für höchst unwahrscheinlich.

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

oehrnie
Mitglied
Programmierer

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

Beiträge: 8
Registriert: 08.04.2009

erstellt am: 09. Apr. 2009 12:40    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

NX 5.0/UGDOC/html_files/nxopen_c++_ref/a01185.html

Da steht in der NXOpen::Layer::LayerManager Class Reference:

std::vector< NXOpen::NXObject * > GetAllObjectsOnLayer (int layer)
Returns all objects on the specified layer.

Nicht alle VB Typen gibts in C++ und umgekehrt. Auch die Behandlung der Argumente ist anderes, sind eben unterschiedliche Programmiersprachen...

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

Zoechi
Mitglied
Software Entwickler


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

Beiträge: 28
Registriert: 03.07.2008

NX 4.0.4.2 MP9, MS Visual Studio 2005, NX 4.0 Open C und MFC

erstellt am: 09. Apr. 2009 14:53    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 oehrnie 10 Unities + Antwort hilfreich

Hallo oehrnie!

Hab mir schon mal einen Vector zurück geben lassen um ein die Expression eines Measurement Features umzubenennen.
Die Erstellung des Vectors habe ich aber auch mit '=' gemacht.

MeasureLength* measureLength = NULL;
Measure* FeatureLength = NULL;
...
FeatureLength = measureLength->CreateFeature();
std::vector<Expression *> expr_vec = FeatureLength->GetExpressions();

Sonst versuch mal, die Größe des Vector mit "pLayerMan->GetAllObjectsOnLayer(layer).size()" zurückzugeben und sieh nach, ob da überhaupt was drinnen ist.
Kannst du direkt mit dem Vector auch arbeiten ohne ihn kopieren zu müssen?
so in etwa:

Code:

for(int i = 0; i < pLayerMan->GetAllObjectsOnLayer(layer).size(); i++)
{
MyFunctionUsingLayer(pLayerMan->GetAllObjectsOnLayer(layer).at(i));
}

fg
Thomas

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

Siassei
Mitglied
MB - Student


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

Beiträge: 490
Registriert: 08.07.2007

SWX
NX 3 und höher ;)
Windows and UNIX<P>C, C++, Java, Phyton,...</P>

erstellt am: 09. Apr. 2009 17:23    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 oehrnie 10 Unities + Antwort hilfreich

Servus,

Zitat:
Original erstellt von mseufert:
Bin zwar kein "C++ - Guru" , aber daß die API bei Nutzung verschiedener Sprachen unterschiedliche Rückgabewerte hat, halte ich auch so für höchst unwahrscheinlich.

Leider ist das so. Mir kommt es so vor, dass die API's von C++, .NET (VB, C#, CLI, ...) und Java von unterschiedlichen Teams zeitgleich geschrieben wurden. Daher sind die API's nicht immer 100% gleich.
Ich hab mal eine Java-Anwendung nach VB.NET portiert und musste feststellen, dass viele NXOpen-Operationen unterscheiden.
Einfaches Beispiel zum selbst Studium.
- Versuche mal in Java eine NXOpen.Session (Session, UFSession) zu erstellen und dann in VB.NET oder C#.

@oehrnie Wenn die Methode von Zoechi funktioniert, dann liegt es wohl an dem Allocator. Hast du dir die magere Hilfe für die Objekterzeugung und -/verwaltung etwas genauer angeschaut? Ich konnte hier nichts über das Handhaben von std Klassen entnehmen, würde aber auf dem Allocator setzen. Was sagt den die Hotline? Hast du schon mal den Debugger bemüht?

Achja, benutzt du C++ oder CLI?

Gruß
  Thomas

------------------
Hopfen und Mals
Gott erhalts 

Programming is similar to sex. If you make a mistake, you have to support it for the rest of your life.

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: 14. Apr. 2009 15:04    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 oehrnie 10 Unities + Antwort hilfreich

Unter http://ww3.cad.de/foren/ubb/Forum442/HTML/000343.shtml#000006  gab's schon mal ein Problem mit C++ -Vektoren, das mit anderen Compileroptionen behoben werden konnte. Vielleicht hilft's hier auch ??

Gruß, Michael

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



Konstruktionsingenieur für Schweißbaugruppen (m/w/d)

Dank unserer innovativen und genialen Hightech-Lösungen sind wir da, wo wir jetzt sind, nämlich Markt- und Technologieführer, wenn es um die thermische Zubereitung von Speisen geht. Bei uns spielen Sie in der Champions League, wenn es um die Technik von morgen geht. Unser Erfolg wird durch unsere Mitarbeitenden und Ihr umfassendes Know-how gemacht. Dabei treibt uns an, den größtmöglichen Kundennutzen zu stiften....

Anzeige ansehenKonstruktion, Visualisierung
oehrnie
Mitglied
Programmierer

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

Beiträge: 8
Registriert: 08.04.2009

erstellt am: 14. Apr. 2009 16:03    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

Es war der Deallokator. Die Zuweisung klappte schließlich prima, wenn aber das Programm den aktuellen (try -) Block verließ, wurde laut Debugger intern die tidy() Methode von der std::vector - Klasse aufgerufen, der dann besagte Fehlermeldung lieferte. Recht hat er aber, der Compiler. NX liefert im Vektor die Elemente zurück die ich haben möchte und die möchte das NX dann aber auch gerne weiter behalten. Der Destruktor versucht die aber sauber aufzuräumen. Also die Variable auf static gesetzt und Compiler und NX haben wieder miteinander Frieden geschlossen.
Hier ist auf jeden Fall Siemens/UGS gefordert, die Dokumentation zu verbessern (genauer zu sagen, was wird wie zurückgeliefert), bzw. zumindest mehr und aussagekräftigere Beispiele beizulegen.
Ich will ja programmieren und keine Ratespielchen machen...

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