| |
| 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 (3351 mal gelesen)
|
Bito00 Mitglied Dipl.-Ing. Triebwerkstechnik
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 01. Mrz. 2011 10:10 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 01. Mrz. 2011 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 01. Mrz. 2011 19:05 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 126 Registriert: 03.09.2002
|
erstellt am: 02. Mrz. 2011 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 02. Mrz. 2011 12:02 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 02. Mrz. 2011 15:33 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 02. Mrz. 2011 17:06 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 02. Mrz. 2011 17:07 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
|
Bito00 Mitglied Dipl.-Ing. Triebwerkstechnik
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 02. Mrz. 2011 18:12 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 03. Mrz. 2011 09:06 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 03. Mrz. 2011 09:46 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 03. Mrz. 2011 12:01 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 126 Registriert: 03.09.2002
|
erstellt am: 03. Mrz. 2011 13:36 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 03. Mrz. 2011 13:54 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 2700 Registriert: 18.10.2005 HP Z420 WIN7 64 Win 10 UG NX6-2306 3D Printer Prusa MK2 S
|
erstellt am: 03. Mrz. 2011 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 03. Mrz. 2011 14:17 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 03. Mrz. 2011 16:33 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 03. Mrz. 2011 18:09 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 06. Mrz. 2011 15:46 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 06. Mrz. 2011 17:30 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 07. Mrz. 2011 17:09 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 08. Mrz. 2011 00:22 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
|
Bito00 Mitglied Dipl.-Ing. Triebwerkstechnik
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 08. Mrz. 2011 07:56 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 08. Mrz. 2011 11:10 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 08. Mrz. 2011 11:29 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 85 Registriert: 27.12.2010
|
erstellt am: 08. Mrz. 2011 12:24 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 08. Mrz. 2011 14:13 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 08. Mrz. 2011 16:39 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
|
Bito00 Mitglied Dipl.-Ing. Triebwerkstechnik
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 09. Mrz. 2011 09:52 <-- editieren / zitieren --> Unities abgeben:
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
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 09. Mrz. 2011 11:19 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
|
Bito00 Mitglied Dipl.-Ing. Triebwerkstechnik
Beiträge: 85 Registriert: 27.12.2010 Quadcore i7 Geforce GT670 32GB Ram UG NX9
|
erstellt am: 09. Mrz. 2011 11:42 <-- editieren / zitieren --> Unities abgeben:
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 |
| Praktikum im Versuch - Muster- und Vorrichtungsbau (SoSe25) | Jedes Werkzeug kann immer nur so gut sein wie der Mensch, der dahintersteckt. Deshalb suchen wir bei der Festool Group Mitarbeitende, die gemeinsam mit ihren 3.000 Kolleginnen und Kollegen weltweit etwas bewegen wollen. Tauche ein in unsere Welt ? und erlebe, wie stolz es macht, in einem Familienunternehmen die besten Elektrowerkzeuge der Welt zu bauen.
Unterstütze gemeinsam mit den Kolleg:innen ... | Anzeige ansehen | Praktikum |
|
Paul Wimmer Mitglied
Beiträge: 19 Registriert: 14.08.2007
|
erstellt am: 13. Mrz. 2011 11:11 <-- editieren / zitieren --> Unities abgeben: Nur für Bito00
|