| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Layer von Objekt abfragen (1616 mal gelesen)
|
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011 Windows 7 UG NX 10 (auch Daimler) Visual Basic 2013 Express Programmierung in NX und ProE/Creo
|
erstellt am: 08. Aug. 2012 07:48 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe mich schon dumm und dusselig gesucht hier im Forum. Ich hoffe ich habe nichts übersehen, aber ich finde einfach keinen Hinweis dafür, wie ich von einem beliebigen Objekt (in meinem Fall eine verbundene Skizze) den Layer abfrage, auf dem es liegt. Hat jemand von euch einen Ansatz oder eine Lösung dafür? Danke schonmal für eure Hilfe! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004
|
erstellt am: 08. Aug. 2012 09:46 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
hallo pleudel hier ein programm.... ---------------------------- Imports System Imports NXOpen Imports NXOpenUI Module report_selected_object_type_and_subtype Sub Main() Dim s As Session = Session.GetSession() Dim selobj As DisplayableObject = Nothing Dim lw As ListingWindow = s.ListingWindow While select_anything(selobj) = Selection.Response.Ok lw.Open() lw.WriteLine("Object: " & selobj.ToString() & _ " is on layer " & selobj.Layer.ToString) End While End Sub Function select_anything(ByRef selobj As NXObject) As Selection.Response Dim theUI As UI = ui.GetUI Dim cursor As Point3d Dim typeArray() As Selection.SelectionType = _ {Selection.SelectionType.All, _ Selection.SelectionType.Faces, _ Selection.SelectionType.Edges} Dim resp As Selection.Response = theUI.SelectionManager.SelectObject( _ "Select anything", "Select an object", _ Selection.SelectionScope.AnyInAssembly, _ False, typeArray, selobj, cursor) If resp = Selection.Response.ObjectSelected Or _ resp = Selection.Response.ObjectSelectedByName Then Return Selection.Response.Ok Else Return Selection.Response.Cancel End If End Function End Module
------------------ gruss urs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011 Windows 7 UG NX 10 (auch Daimler) Visual Basic 2013 Express Programmierung in NX und ProE/Creo
|
erstellt am: 08. Aug. 2012 12:09 <-- editieren / zitieren --> Unities abgeben:
Hallo, SUUUUPER =) Danke schön! Funktioniert einwandfrei. Zusammengefasst, für alle die auch danach suchen: Wenn man den Layer von einem Objekt abfragen will, muss man ein "DisplayableObject" deklaarieren, dieses hat dann die "Eigenschaft" .Layer! Beispiel: Dim alle_Skizzen As SketchCollection = workPart.Sketches For Each Skizze As DisplayableObject In alle_Skizzen If Skizze.Layer = 1 Then .............................. End If Next Hier werden alle Skizzen durchgegangen und der Layer abgefragt. Wenn sie auf Layer 1 liegt, .... Ich hoffe damit wird dem ein oder anderen auch geholfen! Viel Dank nochmal für die schnelle Antwort! PS: Unities sind unterwegs
[Diese Nachricht wurde von pleudel am 08. Aug. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
hg-obdf Mitglied Konstrukteur
Beiträge: 78 Registriert: 30.07.2008 NX7.5 Visual Basic 2010 Express Eclipse
|
erstellt am: 08. Aug. 2012 13:47 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004
|
erstellt am: 08. Aug. 2012 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
hallo pleudel bitte, ich habe jedoch gedacht du suchst nach "einem beliebigen Objekt". für skizzen, bezüge, usw. gibt es sicher noch andere programe... was ist genau dein ziel? es gibt auch programme die objekte (skiizen, bezüge, ...) auf vordefinierte layer legen, evtl. ist da ja dein ziel?
------------------ gruss urs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
pleudel Mitglied Projektleiterin
Beiträge: 156 Registriert: 28.11.2011 Windows 7 UG NX 10 (auch Daimler) Visual Basic 2013 Express Programmierung in NX und ProE/Creo
|
erstellt am: 08. Aug. 2012 15:53 <-- editieren / zitieren --> Unities abgeben:
Hallo, richtig, das ist mein Ziel ^^ Das mit dem "beliebigen" Objekt hätte ich vielleicht konkreter ausdrücken müssen, mir ging es einfach nur um die Info, auf welchem Layer sich die Skizzen befinden. In diesem Fall nur Skizzen, klar, die kann ich ja dann durch alles andere ersetzen, die Abfrage .Layer bleibt ja gleich, In meinem Fall möchte ich verbundene Skizzen, die sich von selbst wieder auf Layer 1 verschoben haben (manchmal tun die das ganz von allein, kennt ihr das?), alle packen und auf einen anderen Layer schieben. Dafür gehe ich alle verbundenen Skizzen durch und wenn sie auf Layer 1 liegt, werden sie verschoben. Viele Grüße...
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004
|
erstellt am: 08. Aug. 2012 16:05 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
|
| Konstrukteur (m/w/d) Sondermaschinenbau | Technologien auf das nächste Level zu heben, sich Herausforderungen zu stellen und an den Innovationen von morgen zu arbeiten - dafür benötigen wir bei FERCHAU Expert:innen wie dich: als ambitionierte:r Kolleg:innen, der:die wie wir Technologien auf die nächste Stufe bringen möchten. Wir realisieren spannende Projekte für namhafte Kunden des Maschinenbaus und übernehmen Verantwortung für komplexe Entwicklungsprojekte.... | Anzeige ansehen | Maschinenbau |
|
Sirus Ehrenmitglied CAD Applikationsentwickler
Beiträge: 1564 Registriert: 03.06.2004 SolidWorks2022
|
erstellt am: 08. Aug. 2012 16:17 <-- editieren / zitieren --> Unities abgeben: Nur für pleudel
oder so.... Dim theSession As Session = Session.GetSession() Dim workpart As Part = theSession.Parts.Work() Dim objArray(0) As DisplayableObject Dim displayPart As Part = theSession.Parts.Display Dim theUI As UI = UI.GetUI()
' ----- Verschieben der Skizzen auf def. Layer Dim layer_sketches As String = 10 For Each obj As DisplayableObject In workpart.Sketches If Not obj.IsBlanked AndAlso workpart.Layers.GetState(obj.Layer) <> Layer.State.Hidden Then objArray(0) = obj workpart.Layers.MoveDisplayableObjects(Val(layer_sketches), objArray) End If Next ------------------ gruss urs Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |