Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Kurve per ID auswählen

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:  Kurve per ID auswählen (3326 mal gelesen)
Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 01. Mrz. 2011 10:10    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

Servus,

ich bräuchte mal wieder eure Hilfe.
Ich möchte mit einem Journal eine Kurve aus einer SectionCurve selektieren und einen Namen geben.

Bisher läuft das Ganze so:

Dim sectionCurve1 As Features.SectionCurve = CType(workPart.Features.FindObject("SECTION_CURVES(93)"), Features.SectionCurve)
Dim line1 As Line = CType(sectionCurve1.FindObject("CURVE 39"), Line)
line1.SetName("Kante100")

Anstelle des FindObject("CURVE 39") möchte ich die Kurve über ihre ID (die ich kenne) ansprechen und den Namen vergeben.
Wie könnte ich das anstellen?

Gruß
Bito

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: 01. Mrz. 2011 15:39    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 Bito00 10 Unities + Antwort hilfreich

Hallo Bito00,

so ganz versteh' ich nicht, was Du damit bezwecken willst. Eine tatsächliche Selektion, d.h. der User wird aufgefordert, ein Objekt anzuwählen ? Das geht über den SelectionManager (net-ref.chm, Suchbegriff SelektionManager). Oder willst Du das FindObject ersetzen ? Damit wird allerdings nur der Name durch Deine ID (b.t.w.: Was verstehst Du unter ID ? den Tag ?) ersetzt. In beiden Fällen ist das Objekt, egal wie es identifiziert wird, im Quellcode fest "verdrahtet". Falls Du also einen Tag hast, der durch das entsprechende Objekt ersetzt werden soll, nimm' den NXObjectManager. Der liefert aus dem Tag das entsprechende TaggedObject.

Gruß, Michael

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 01. Mrz. 2011 19:05    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 meinte den Tag. Den habe ich von der Kurve die ich benennen will. Die Benennung der entsprechenden Kurve soll dann via Journal erfolgen indem ich die Kurve per ID auswähle und dann den Namen vergebe. Leider habe ich keine Ahnung wie ich das mit dem NXObjectManager anstelle. Den Code-Schnipsel habe ich nur aus einem aufgezeichneten Journal heraus kopiert =)

Gruß
Bito

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

stefan.f
Mitglied



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

Beiträge: 123
Registriert: 03.09.2002

erstellt am: 02. Mrz. 2011 11: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 Bito00 10 Unities + Antwort hilfreich

Hallo Bito,

die Routine (NXOpen.Utilities.) NXObjectManager.Get(Tag) gibt ein NXObject für einen bestimmten Tag zurück.

Gruß
Stefan

[Diese Nachricht wurde von stefan.f am 02. Mrz. 2011 editiert.]

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 02. Mrz. 2011 12:02    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

Ok, ich habe mein Script mal angepasst:


Option Strict Off
Imports System
Imports NXOpen
Imports System.IO
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports NXOpen.UF
Imports NXOpen.Utilities
Imports NXOpen.UI


Module NXJournal
Sub Main

Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work

Dim line1 As Line = NXOpen.Utilities.NXObjectManager.Get(40152)
line1.SetName("Kante100")


End Sub
End Module

Allerdings bekomme ich da ne Fehlermeldung, dass eine externe Komponente einen Fehler verursacht hat. Der Fehler liegt wohl in der Zeile
Dim line1 As Line = NXOpen.Utilities.NXObjectManager.Get(40152)

Scheinbar kann ich das so nicht machen. Ich hoffe ich stelle mich nicht allzu dumm an aber wie schon erwähnt fehlen mir die Kenntnisse um so etwas umzusetzen.

Gruß
Bito

[Diese Nachricht wurde von Bito00 am 02. Mrz. 2011 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: 02. Mrz. 2011 15:33    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 Bito00 10 Unities + Antwort hilfreich

Sag' mal an, mit was Du diese "Skripts" schreibst ? Texteditor und Konsorten ? Ich glaub' nämlich so langsam, daß Dir nicht die Kenntnisse, sondern einfach das richtige Werkzeug fehlt.

Jede mir bekannte Entwicklerumgebung, Empfehlungen und Hinweise dazu gibt's hier reichlich, zeigt solche Fehler schon beim Schreiben an.

Also: Falls Du keine Entwicklerumgebung (IDE, Integrated Development Environment) dafür benutzt, besorg Dir das richtige Tool. Du gehst ja auch nicht mit Badeschlappen auf Bergwanderung!

Gruß, Michael

p.s.: get() gibt ein TaggedObject zurück

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 02. Mrz. 2011 17:06    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

Meine Entwicklerumgebung nennt sich Notepad++ =) Hatte vor einiger Zeit versucht NX6 in Visual Studio 2010 einzubinden aber das funktioniert irgendwie nicht. Lad mir jetzt grad 2008 runter. Evtl. bringt das ja was.

Ich nehme mal an, Dim line As Line ist falsch, da das zurückgegebene Objekt wie du sagst ein TaggedObject ist. Müsste also nach meinem Verständnis Dim line As TaggedObject heißen, oder?

Bin mal gespannt ob sich NX6 in Visual Studio 2008 einbinden lässt.

Gruß
Bito

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 02. Mrz. 2011 17: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 Bito00 10 Unities + Antwort hilfreich

Nein du musst den Typ noch umwandeln
Dim line1 As Line = CType(NXOpen.Utilities.NXObjectManager.Get(40152),Line)

MfG

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 02. Mrz. 2011 18:12    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


Fehler.png

 
Ah ok, dann lag ich ja doch (mal wieder) arg daneben.

Ich bekomme aber immer noch den selben Fehler wie zuvor.
Habe mal einen Screenshot vom Fehler angehängt.

Mein Script sieht wie folgt aus:

Option Strict Off
Imports System
Imports NXOpen
Imports System.IO
Imports System.Windows.Forms
Imports System.Runtime.InteropServices
Imports NXOpen.UF
Imports NXOpen.Utilities
Imports NXOpen.UI


Module NXJournal
Sub Main

Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work

Dim line1 As Line = CType(NXOpen.Utilities.NXObjectManager.Get(40152),Line)
line1.SetName("Kante100")


End Sub
End Module

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 03. Mrz. 2011 09:06    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

So, Visual Studio Express 2008 ist installiert und die Ordner (Wizard und Projects) sind kopiert. Wenn ich jetzt ein neues Projekt erstelle, kann ich den NXOpen VB Wizard auswählen. Allerdings tut sich danach nichts weiter. Kann es sein das NX6 nur mit Visual Studio 2005 funktioniert?

Ich habe außerdem überlegt, ob ich nicht ein falsches Verständnis vom Tag eines Objektes habe. Die Nummer die ich beim .Get() eingebe stammt aus einer Infodatei die ich über Objektinformation erzeugt habe. Darin stand zu jeder Kurve eine ID+Nummer. Das ist doch der Tag oder?

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 03. Mrz. 2011 09:46    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 Bito00 10 Unities + Antwort hilfreich

Morgen,

also ich hab auch vs basic 2008, dabei erstelle ich immer eine Klassenbibliothek und lade dann die nx verweise.

Die nummer unter info ist glaube ich schon der Tag. Allerdings übergibst du bei .Get() einen integer Wert. Wahrscheinlich musst du erst einen Tag erstellen mit diesem Integer wert.

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 03. Mrz. 2011 12:01    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

Hab mir jetzt Visual Studio 2005 besorgt und siehe da, es klappt =)

So eine Entwicklerumgebung ist echt schon was feines. Hab gleich ein Warning bekommen, dass ich ein Integer übergebe, aber ein Tag erwartet wird (genau wie im Vorpost von Paul beschrieben). Und das Beste ist, ich habe auch gleich den passenden Code zur Umwandlung des Integers in einen Tag bekommen.

Insgesamt muss ich mich doch dafür bedanken, dass man hier nicht (alles) einfach vorgekaut bekommt, sondern zur Selbsthilfe angeregt wird! Man lernt dadurch deutlich mehr =)

Leider Funktioniert das Script immer noch nicht. Es tritt noch immer der Fehler auf, der im Bildanhang beschrieben war. Die Zeile zeigt immer noch auf
Dim line1 As Line = CType(NXOpen.Utilities.NXObjectManager.Get(CType(40152, Tag)), Line)

Daher umreiße ich nochmal mein Vorhaben:

Ich habe eine SectionCurve auf einem Layer zu liegen welcher der einzig aktive ist. Von diesem Kurvenzug möchte ich eine Kante mittels ID ansteuern und einen Namen geben.

Kann es sein, dass die SectionCurve noch in das Journal muss oder kann ich einen Tag immer ansprechen, unabhängig davon wo sich mein Objekt befindet?


Gruß
Bito

[Diese Nachricht wurde von Bito00 am 03. Mrz. 2011 editiert.]

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

stefan.f
Mitglied



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

Beiträge: 123
Registriert: 03.09.2002

erstellt am: 03. Mrz. 2011 13:36    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 Bito00 10 Unities + Antwort hilfreich

Hallo Bito,

teste doch mal ob Dein Tag stimmt:

Dim line1 As Line = CType(sectionCurve1.FindObject("CURVE 39"), Line)
theSession.ListingWindow.Open()
theSession.ListingWindow.WriteLine(line1.Tag.ToString())

Beachte: Der Tag kann beim nächsten Starten auch ein anderer sein.

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 03. Mrz. 2011 13: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

Ok, die ID welche ich durch Selektion aller Kurven und anschließender Abfrage von Objectinformation bekomme, ist nicht der eigentliche Tag. Das ist sehr schlecht. Stellt sich die Frage wie ich den Zusammenhang zwischen der ID aus der Objectinformation und dem eigentlichen Tag herstelle? Den Weg über die Objectinformation muss ich gehen um die Start- und Endpunkt-Koordinaten meiner Kurven und deren derzeitige Namen und Typ (Line, Arc...) zu bekommen und weiter zu verarbeiten.

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: 03. Mrz. 2011 14:00    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 Bito00 10 Unities + Antwort hilfreich

Hallo Bito00,

wenn Du einen Integer übergeben willst, nimm' die Methode GetObjectfromUInt(), die akzeptiert einen Integer als Argument, z.B.:

Code:
Dim tobj as TaggedObject = NXObjectmanager.GetObjectfromUInt(1234)
Dim ln as Line = Ctype(tobj,Line)

Eventuell klappt die Typumwandlung nicht "am Stück" in den Typ Line. Dann würde ich in ein NXObject wandeln. Dem kannst Du auch den Namen geben.

VB 2008 Express kommt mit NX6 klar, daß es bei Dir nicht funktioniert, ist kein generelles Problem, sondern muß an irgend einem Detail liegen. Wo hast Du die 2005er Version von Visual Studio her ? Die gibt's m.W. nicht mehr bei MS.

Gruß, Michael

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 03. Mrz. 2011 14: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

Dim tobj as TaggedObject = NXObjectmanager.GetObjectfromUInt(1234)
Dim ln as Line = Ctype(tobj,Line)

Das funktioniert auch nicht. Wie gesagt, die ID die ich bekomme ist nicht der Tag den die Kurve hat, das konnte ich mit dem Script von stefan herausfinden. Deshalb kommt auch die Fehlermeldung. Allerdings kenne ich nur die ID der Kurven aus den Objectinformations und muss die Kurven darüber ansprechen oder halt per ID den Tag rausbekommen und dann den Tag ansprechen.

Gruß
Bito

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 03. Mrz. 2011 16:33    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 Bito00 10 Unities + Antwort hilfreich

Hei,
mir ist gerade nicht ganz klar, warum du den Tag oder die Id direkt in den code schreiben willst. Diese nummer bekommst du ja auch nur über info objekt. Dann mache doch gleich ein Auswahlfenster, bei dem du eine Kurve auswählst. dann hast du die kurve oder linie und kannst sie dann direkt ansprechen.
mfg Pauli

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 03. Mrz. 2011 18:09    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 muss das Ganze in ein Script packen da ich die Objektinfo und Umbenennung automatisiert ablaufen lassen will.

Mir ist grad eingefallen, das ich ja die Objektinfo und Tagabfrage in einer Schleife für jedes Objekt einzeln nacheinander ablaufen lassen könnte und alles nacheinander in ein ListingWindow schreiben könnte. Derzeit hole ich mir alle Kurven via Selektion aller Elemente eines Layers.

Dim objs() As NXObject = workPart.Layers.GetAllObjectsOnLayer(15)
Dim lw As ListingWindow = theSession.ListingWindow
lw.SelectDevice(ListingWindow.DeviceType.File, Path)
theSession.Information.DisplayObjectsDetails(objs)

Könnte man da nich ne Schleife drauß machen ala:

"für jedes Element von objs gebe ObjectDetails und Tag aus und schreibe das nacheinander in das ListingWindow"?

Gruß
Bito

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 06. Mrz. 2011 15:46    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

So, ich hab mal hier im Forum nach ein paar Beispielen für Schleifen gesucht und bin jetzt soweit gekommen:

        Dim objs() As NXObject = workPart.Layers.GetAllObjectsOnLayer(15)
        Dim lw As ListingWindow = theSession.ListingWindow
        Dim obj As NXObject
        lw.SelectDevice(ListingWindow.DeviceType.File, Path)

        For Each obj In objs
            theSession.Information.DisplayObjectsDetails(obj)
            theSession.ListingWindow.WriteLine(obj.Tag.ToString())

        Next

Leider hat die Schleife nicht den gewünschten Effekt. Zunächst einmal bekomme ich eine Warnung bei Visual wegen

theSession.Information.DisplayObjectsDetails(obj)

Scheinbar muss da ein Array rein, aber ich will mir ja von jedem Objekt einzeln die Info und den Tag ins ListingWindow schreiben lassen.

Und die nächste Sache ist, wie schreibe ich nacheinander in ein ListingWindow ohne den vorhergehenden Teil zu überschreiben?

Gruß
Bito

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 06. Mrz. 2011 17: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 Bito00 10 Unities + Antwort hilfreich

hei, dann musst du halt aus dem einen obj ein array machen
z.b. so
dim objarray(0) as NXObject
objarray(0)=obj

und übergibst dann objarray.
bei der Foreach schleife würde ich schreiben for each obj as nxobject


und writeline beim listingwindow schreibt automatisch in die nächste zeile wenn du den inhalt löschen willst, musst du clear() (oder so ähnlich) machen
lg

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 07. Mrz. 2011 17:09    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

So, bin leider erst jetzt dazu gekommen das Ganze mal umzusetzen bzw. zu testen.

Mit der Methode aus dem obj ein array zu machen bekomme ich schon mal für jede Kante einen eigenen ObjectInfo Eintrag in mein ListingWindow. Allerdings wird mir kein einziger Tag mit hineingeschrieben.


[Diese Nachricht wurde von Bito00 am 07. Mrz. 2011 editiert.]

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 08. Mrz. 2011 00:22    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 Bito00 10 Unities + Antwort hilfreich

hei hast du das da stehen?
For Each obj As NXObject In objs
            theSession.Information.DisplayObjectsDetails(obj)
            theSession.ListingWindow.WriteLine(obj.Tag.ToString())

        Next

??

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 08. Mrz. 2011 07:56    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

Moin moin,

ich habe folgenden Code verwendet:

    Dim Path As String = "Pfad"
    Dim objs() As NXObject = workPart.Layers.GetAllObjectsOnLayer(15)
    Dim lw As ListingWindow = theSession.ListingWindow
    Dim objarray(0) As NXObject

    lw.SelectDevice(ListingWindow.DeviceType.File, Path)

        For Each obj As NXObject In objs
            objarray(0) = obj
            theSession.Information.DisplayObjectsDetails(objarray)
            theSession.ListingWindow.WriteLine(obj.Tag.ToString())
        Next

Ich bekomme dann eine Datei in der für jede einzelne Kurve die ObjektInfo drin steht. Allerdings ist diese Datei nicht vollständig. Der Text bricht mittendrin ab. Wenn ich also 6 Kurven auf Layer 15 habe dann bekomme ich teilweise nur von 4 die ObjektInfo und von der fünften nur noch Bruchstücke. Die sechste wird garnicht mehr aufgelistet. Und von den Tags ist garnichts zu sehen. Komisch ist auch, dass nach Ausführung des Journals, ich kein Infofenster mehr angezeigt bekomme wenn ich die ObjektInfo händisch abrufe. Und die Datei in die ich schreibe, kann ich auch erst nach Beendigung von NX löschen. Solange gilt sie als "in Nutzunug". Hab so ein bischen das Gefühl, dass das ListingWindow zu schnell schließt und ein Teil der Infos verloren geht.

Wenn ich ausschlißlich den Tag in der Schleife abrfrage, dann bekomme ich nur eine leere Textdatei als Ergebnis.

Irgendeine Idee woher das kommen könnte?

Gruß
Bito


EDIT: So, ein Fehler war schonmal, dass ich

theSession.ListingWindow.WriteLine(obj.Tag.ToString())

verwendet habe. Richtig lautet es

lw.WriteLine(obj.Tag.ToString())

Allerdings wird immernoch nichts in das Textfile geschrieben. Wenn ich den SelectDevice weg lasse und über lw.Open() mir direkt ins ListingWindow schreiben lasse, dann bekomme ich sogar die Tags hineingeschrieben. Allerdings auch nur 5 von 6. Stellt sich die Frage warum die Schleife bei x-1 Elementen endet?

[Diese Nachricht wurde von Bito00 am 08. Mrz. 2011 editiert.]

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 08. Mrz. 2011 11:10    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 Bito00 10 Unities + Antwort hilfreich

moin,

Zitat:
theSession.ListingWindow.WriteLine(obj.Tag.ToString())

verwendet habe. Richtig lautet es

lw.WriteLine(obj.Tag.ToString())


naja die Zwei zeilen sind genau das gleiche 

lass dir mal die Länge von den objs asugeben. also lw.WriteLine(objs.Length.ToString())

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 08. Mrz. 2011 11:29    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

Also die Länge wird mir als 5 ausgegeben. Hab grad mitbekommen, dass eine kurve auf einem anderen layer lag...


So, ich teste das jetzt mal mit dem richtigen layer.

Und danke für die Geduld!

Gruß
Bito

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

erstellt am: 08. Mrz. 2011 12:24    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

So, ich habs jetzt scheinbar so hinbekommen wie ichs gern hätte. Muss nur noch testen obs auch geht wenn ich ohne grafische Oberfläche arbeite.

Das Problem für die Tags war immer der Befehl

lw.SelectDevice(ListingWindow.DeviceType.File, Path)

Keine Ahnung warum, aber da hat der WriteLine Befehl nicht gegriffen. Ich bin jetzt den Weg über

lw.Open()
        For Each obj As NXObject In objs
            objarray(0) = obj
            theSession.Information.DisplayObjectsDetails(objarray)
            lw.WriteLine("Tag " & obj.Tag.ToString())
            lw.WriteLine("")
            lw.WriteLine("")
        Next
        UFSes.Ui.SaveListingWindow(Path)

gegangen und siehe da, es klappt. Wenn das ganze jetzt auch noch im Kommandozeilenmodus funzt fällt mir ein Stein vom Herzen =)

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 08. Mrz. 2011 14:13    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

So, die Sache mit dem Tag scheint nicht der richtige Weg zu sein. Immer wenn das Part neu geladen wird, ändert sich der Tag. Lediglich die ID bleibt gleich.... Damit fällt die Selektion über den Tag bei erneutem öffnen des Partes weg =(

Für den neuen Ansatz müsste ich ein Element aus objs (Sammlung aller Objekte auf Layer 15) per Position im Array ansprechen.

Quasi:

Dim objs() As NXObject = workPart.Layers.GetAllObjectsOnLayer(15)
Dim line1 As Line = CType(Position vom Objekt im Array, Line)

Wie spricht man gezielt ein Element in einem Array an?

Gruß
Bito

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 08. Mrz. 2011 16:39    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 Bito00 10 Unities + Antwort hilfreich

also entweder mit einer Schleife
For index as integer =0 to objs.length-1
objs(index)...................

end for

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 09. Mrz. 2011 09:52    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

Danke, funktioniert bestens!

Eine Frage hätte ich noch und will dafür keinen neuen Thread auf machen:

Derzeit wähle ich alle Objekte eines Layers aus. Kann man auch die Objekte von mehreren Layern gleichzeitig selektieren, also in ein Array packen?

Gruß
Bito

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

Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 09. Mrz. 2011 11:19    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 Bito00 10 Unities + Antwort hilfreich

Klar,
dazu einfach Array.Resize(namevonarray, groeße) und über eine Schleife befüllen

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

Bito00
Mitglied
Dipl.-Ing. Triebwerkstechnik


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

Beiträge: 85
Registriert: 27.12.2010

Quadcore i7
Geforce GT670
32GB Ram
UG NX9

erstellt am: 09. Mrz. 2011 11:42    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

Ok, habs jetzt mal mit den Arrays ausprobiert und folgenden Code geschrieben:

        Dim objs1() As NXObject = workPart.Layers.GetAllObjectsOnLayer(15)
        Dim objs2() As NXObject = workPart.Layers.GetAllObjectsOnLayer(16)
        Dim objs3() As NXObject = workPart.Layers.GetAllObjectsOnLayer(16)

        '#Laufvariablen deklarieren
        Dim i As Integer
        Dim j As Integer
        Dim k As Integer

        i = objs1.Length
        j = objs2.Length
        k = 0

        '#befüllen des neuen Arrays
        For Each obj As NXObject In objs1
            objs3(k) = obj
            k = k + 1
        Next

        For Each obj As NXObject In objs2
            objs3(k) = obj
            k = k + 1
        Next
        '# initialisieren des ListingWindow
        Dim lw As ListingWindow = theSession.ListingWindow
        lw.Open()
        theSession.Information.DisplayObjectsDetails(objs3)
        UFSes.Ui.SaveListingWindow(Pfad)

Ich bekomme aber immer die Fehlermeldung: Der Index war außerhalb des Arraybereiches!

Gruß
Bito


Hat sich erledigt! Habs mit dem Array.Resize hinbekommen =)

[Diese Nachricht wurde von Bito00 am 09. Mrz. 2011 editiert.]

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



Technischer Zeichner (m|w|d)

Über die Voith Group

Die Voith Group ist ein weltweit agierender Technologiekonzern. Mit seinem breiten Portfolio aus Anlagen, Produkten, Serviceleistungen und digitalen Anwendungen setzt Voith Maßstäbe in den Märkten Energie, Papier, Rohstoffe und Transport & Automotive. Gegründet 1867 ist Voith heute mit rund 22.000 Mitarbeiterinnen und Mitarbeitern, 5,5 Milliarden Euro Umsatz und Standorten in über 60 Ländern der Welt eines der großen Familienunternehmen Europas....

Anzeige ansehenTechnischer Zeichner, Bauzeichner
Paul Wimmer
Mitglied



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

Beiträge: 19
Registriert: 14.08.2007

erstellt am: 13. Mrz. 2011 11: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 Nur für Bito00 10 Unities + Antwort hilfreich

du musst das Array erst vergrößern bevor du da was reinschreiben kannst.
Array.Resize(ARRAYNAME,NEUEGROEßE)
Lg

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