| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: Alle WaveLinks auf Layer X / Alle Bezugselemente auf Layer Y verschieben (1521 / mal gelesen)
|
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005 Siemens NX2312, TeamCenter 14, Dynamics 365, Win11
|
erstellt am: 05. Jan. 2021 16:56 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen und allseits ein Frohes Neues, ich beschäftige zurzeit mit Journalen bzw. NXOpen-Programmierung (VB)... Bislang habe ich aber nur den "Getting startet Guide" und das Netz als Unterstützung. Passende Literatur (HBB) ist aber bestellt und unterwegs. Das komplette Journal setzt sich aus mehreren (geklauten) Fragmenten zusammen! Elegant geht anders! Zielsetzung: Ich möchte eine Layerbelegung gemäß unserer Vorgaben realisieren... Funktioniert auch gut, bis auf die WaveLinks! Hier komme ich auch unter Beachtung der Reihenfolge der einzelnen Layervergaben nicht weiter! Alle Bezugselemente (KSYS, Ebenen, Achsen, Punkte) werden korrekt auf den Layer 200 verschoben. Wenn ich dann im letzten Schritt aber die WaveLinks auf Layer 204 verschieben möchte, funktioniert das entweder nur für gelinkte Körper, Flächen und Kurven oder es werden auch die normalen Ebenen etc. auf Layer 204 verschoben. Wenn ich nach den Datums uns Points suche, geschieht das wohl außerhalb des "LINKED" -Filters! For Each WaveLink As Features.Feature In WP.Features If WaveLink.FeatureType.Contains("LINKED") Then If TypeOf (WaveLink) Is Features.ExtractFace Then Dim linkedBody As Features.ExtractFace = WaveLink For Each myDisplayableObjects As DisplayableObject In linkedBody.GetBodies objectsToMove.Add(myDisplayableObjects) Next End If If TypeOf (WaveLink) Is Features.CompositeCurve Then Dim linkedFace As Features.CompositeCurve = WaveLink For Each myDisplayableObjects As DisplayableObject In linkedFace.GetEntities objectsToMove.Add(myDisplayableObjects) Next End If ------------------------------------------------------------------------------------------------------------ For Each obj As DisplayableObject In WP.Datums If Not obj.IsBlanked AndAlso WP.Layers.GetState(obj.Layer) <> Layer.State.Hidden Then objArray(0) = obj WP.Layers.MoveDisplayableObjects(WaveLayer, objArray) End If Next For Each obj As DisplayableObject In WP.Points If Not obj.IsBlanked AndAlso WP.Layers.GetState(obj.Layer) <> Layer.State.Hidden Then objArray(0) = obj WP.Layers.MoveDisplayableObjects(WaveLayer, objArray) End If Next ------------------------------------------------------------------------------------------------------------ End If Next displayModification3 = theSession.DisplayManager.NewDisplayModification() displayModification3.ApplyToAllFaces = False displayModification3.NewLayer = WaveLayer displayModification3.Apply(objectsToMove.ToArray) displayModification3.Dispose() Also zusammengefasst: Entweder alle WaveLinks inkl. der "normalen" Ebenen, Achsen und Punkte landen auf Layer 204, oder nur die gelinkten Körper, Flächen und Kurven (und nicht die anderen verbundenen Elemente).
Ich bräuchte also einen "besseren" Filter oder eine Layer-Abfrage für Features, um alles, was schon auf Layer 200 liegt, auzulassen! Eigtl. brauche ich schlicht und einfach mehr Wissen - aber die Mittel dafür sind halt noch unterwegs! Ich bin Euch für jeden Tipp / Rat dankbar!!! Sry vorab, falls ich Infos unterschlagen haben sollte oder im falschen Bereich gelandet bin! Ich unterhalte gerade zeitgleich meine kleine Tochter (15 Monate alt). Gruß Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 05. Jan. 2021 23:19 <-- editieren / zitieren --> Unities abgeben:
Ok, bin ein Stückchen weitergekommen... Nur die gelinkten Skizzen wollen noch nicht, wie ich will! Option Strict Off Imports System Imports NXOpen Imports NXOpen.UF Imports System.Collections.Generic Module Module1 Sub Main() Dim theSession As Session = Session.GetSession() Dim ufs As UFSession = UFSession.GetUFSession Dim WP As Part = theSession.Parts.Work Dim objectsToMove As New List(Of DisplayableObject) Dim lw As ListingWindow = theSession.ListingWindow Dim objArray(0) As NXOpen.DisplayableObject Dim linkedObjs As New List(Of DisplayableObject) Const WaveLayer As Integer = 204 If IsNothing(theSession.Parts.Work) Then 'active part required Return End If For Each temp As Features.Feature In theSession.Parts.Work.Features If TypeOf (temp) Is Features.WaveDatum Then Dim myLink1 As Features.WaveDatum = temp For Each linkedObj As DisplayableObject In myLink1.GetEntities linkedObjs.Add(linkedObj) Next End If If TypeOf (temp) Is Features.WavePoint Then Dim myLink2 As Features.WavePoint = temp For Each linkedObj As DisplayableObject In myLink2.GetEntities linkedObjs.Add(linkedObj) Next End If Next Dim displayModification1 As DisplayModification displayModification1 = theSession.DisplayManager.NewDisplayModification() displayModification1.NewLayer = WaveLayer displayModification1.Apply(linkedObjs.ToArray) displayModification1.Dispose() For Each WaveLink As Features.Feature In WP.Features Dim myName As String = WaveLink.GetFeatureName If myName.Contains("Verbunden") Or myName.Contains("Verknüpft") Then If TypeOf (WaveLink) Is Features.ExtractFace Then Dim linkedBody As Features.ExtractFace = WaveLink For Each myDisplayableObjects As DisplayableObject In linkedBody.GetBodies objectsToMove.Add(myDisplayableObjects) Next End If If TypeOf (WaveLink) Is Features.CompositeCurve Then Dim linkedFace As Features.CompositeCurve = WaveLink For Each myDisplayableObjects As DisplayableObject In linkedFace.GetEntities objectsToMove.Add(myDisplayableObjects) Next End If If TypeOf (WaveLink) Is Features.DatumCsys Then Dim linkedcsys As Features.DatumCsys = WaveLink For Each mydisplayableobjects As DisplayableObject In linkedcsys.GetEntities objectsToMove.Add(mydisplayableobjects) Next End If End If Next Dim displayModification2 As DisplayModification displayModification2 = theSession.DisplayManager.NewDisplayModification() displayModification2.ApplyToAllFaces = False displayModification2.NewLayer = WaveLayer displayModification2.Apply(objectsToMove.ToArray) displayModification2.Dispose() lw.Open() For Each WaveLink As Features.Feature In WP.Features If WaveLink.FeatureType.Contains("LINKED") Then lw.WriteLine("Linked feature found:") lw.WriteLine(" " & WaveLink.GetFeatureName) lw.WriteLine("") End If Next lw.Close() End Sub End Module Soweit so gut... Morgen geht's weiter! Bin raus Nacht Jungs*innen
------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 06. Jan. 2021 14:18 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, Du brauchst m.E. nur etwas mehr Struktur bei der Suche und Unterscheidung der Features, dann wird's schon funktionieren. Insbesondere sollte nur ein Loop durch alle Features gemacht werden, anstatt mehrfach die selben Objekte zu durchsuchen. In der Schleife wird dann jedes Feature untersucht, zur Typunterscheidung würde ich ein TypeOf oder GetType verwenden, anstatt irgendwelcher Strings im Namen. Die Typbezeichnungen sind eindeutig, da gibt's weniger Durcheinander. Im Prinzip würde das so aussehen, <typex> ist entsprechend anzupassen: Dim allfeats() as feature = sess.parts.work.features.ToArray dim t1feats as new list(of <type1> ) dim t2feats as new list(of <type2> ) dim t3feats as new list(of <type3> ) ... ... for each f as feature in allfeats lw.writeline("Feature Type:" & f.GetType.Name) if TypeOf f is <type1> then t1feats.add(f) elseif TyepOf f is <type2> then t2feats.add(f) elseif TypeOf f is <type3> then t3feats.add(f) ... ... else lw.writeline("Type ignored") end if next Um die unterschiedlichen Typbezeichnungen <typex> zu ermitteln, kann zunächst der Teil mit if ... elseif ... end if weggelassen werden und so einfach die unterscheidlichen Bezeichnungen ausgegeben werden. Damit wären alle Features der unterschiedlichen Typen erfasst und können auf die gewünschten Layer verschoben werden. Dabei ist ggfs. noch der Unterschied zwischen Features und den daraus resultierenden DisplayableObjects zu beachten. Im Zweifelsfall einfach mal interaktiv machen und Journal aufzeichnen. Gruß, Michael
------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 06. Jan. 2021 16:28 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, vorab schon einmal vielen lieben Dank für die flotte Antwort! Das mit den zwei Schleifen war mir bewusst - das Journal war etwas zusammengewürfelt und die zweite Schleife ursprünglich keine Unterscheidung von Features. Ich schaue mir Deinen Code jetzt mal an und spiele etwas damit rum... Habe mir für die Syntax und die möglichen Optionen extra VS Community 2019 installiert. Ist mir nur etwas zu umständlich, über den Debugger eine NX-Session zu starten, aus welcher heraus ich dann eh wieder eine dll ausführen muss! Zudem gab's Fehlermeldungen bzgl. nicht gefundener Bibliotheken (libpart.dll) etc. ... Mit Copy/Paste in den Journal-Editor von NX klappt's ja auch recht gut. Melde mich später auf jeden Fall und gebe Dir ein feedback! By the way... Ich habe keine Ahnung, wie das hier mit den Unities gehandhabt wird! Wieviel gibt man wofür? Was kriegt man für 2,50? Bis nachher Gruß Marc
------------------ "Das kann man so machen, aber dann ist es halt Sch...!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005 Siemens NX2312, TeamCenter 14, Dynamics 365, Win11
|
erstellt am: 06. Jan. 2021 18:23 <-- editieren / zitieren --> Unities abgeben:
Hi Michael, Dein Code funktioniert soweit ganz gut! Aber für die "Verknüpften" Elemente (CompositeCurve und DatumCsys) brauche ich wohl doch den anderen Filter! Die werden halt nicht als WaveLinks erkannt bzw. bezeichnet!? Kann ich irgendwie eine Layerabfrage für Features realisieren? Danke Dir Gruß Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 06. Jan. 2021 19:42 <-- editieren / zitieren --> Unities abgeben:
Ich scheitere gerade an der ConvertAll-Funktion! Oder kann ich die (z.B.) Features der t1feats direkt auf einen Layer verschieben? Wie sieht die korrekte Syntax der .ConvertAll eigentlich aus? Das Netz hält kein Beispiel parat! Dim list = t1feats.ConvertAll(irgendwie von WaveLink zu DisplayableObject)??? Bin einfach zu früh geboren worden! "Computer! Ich will das und das... kümmere Dich darum!" Das wär's doch oder!? Aber wer zahlt mir dann mein Gehalt? Ich schätze, in dem System wird das wohl zeitnah nix werden!? Gruß Marc
------------------ "Das kann man so machen, aber dann ist es halt Sch...!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005 Siemens NX2312, TeamCenter 14, Dynamics 365, Win11
|
erstellt am: 06. Jan. 2021 23:20 <-- editieren / zitieren --> Unities abgeben:
Es bleibt dabei: Ich kann die gelinkte Skizze nicht auf den Layer verschieben! Entweder es passiert gar nichts... (nur die Anzahl wird erhöht) If TypeOf (temp) Is Features.WaveSketch Then 'Or temp.GetType.Name.Contains("LINKED") Then Dim linkedSketch As Features.WaveSketch = temp For Each myDisplayableObjects As DisplayableObject In linkedSketch.GetEntities objectsToMove.Add(myDisplayableObjects) Next Anzahl += 1 End If ... ... Dim displayModification1 As DisplayModification displayModification1 = theSession.DisplayManager.NewDisplayModification() displayModification1.ApplyToAllFaces = False displayModification1.NewLayer = waveLayer displayModification1.Apply(objectsToMove.ToArray) displayModification1.Dispose() ...oder ich versuche es über eine andere "Get-Funktion" und bekomme:
Der Wert vom Typ "Feature" kann nicht in "DisplayableObject" konvertiert werden. Alle anderen WaveLinks (Csys, Ebenen, Kurven, etc.) werden verschoben. Ich dachte, da eine Skizze ja bloß eine "Hülle" ist, liegt es evtl. daran. Aber warum werden die gelinkten Koordinatensysteme dann auf den layer verschoben? Alles Düvelstüch! Von wegen Computer sparen Zeit - sie rauben Zeit!!! Für heute ist's genug - schätze morgen kommen die Bücher!? Nacht zusammen Marc
------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 07. Jan. 2021 14:06 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, zur Vorgehensweise würde ich dir empfehlen, das Journal in VS zu schreiben und dann Schritt für Schritt in NX zu testen. Ohne Debugger schreibst du eben ins ListingWindow, was von Interesse ist. Für's Debuggen bräuchtest du eine Entwicklerlizenz, damit geht's dann etwas komfortabler. Bei den Problemfällen solltest du daran denken, daß Features und geometrische Objekte zwei Paar Stiefel sind, die zwar zumeist irgendwie zusammenhängen, aber nicht direkt umzuwandeln sind. Bei den meisten Features kriegt man die geometrischen Elemente über ein .GetEntities, das muss aber nicht immer so sein. Das heisst daß man ggfs. für jedes Feature ermitteln muss, wie man an die geomtrischen Objekte rankommt. In einem aufgezeichneten Journal sollten Hinweise darauf zu finden sein, wie oben schon erwähnt. Gruß, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 07. Jan. 2021 16:52 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, tja, da liegt ja mein Problem! Ich zeichne ständig Journale auf und versuche abzuleiten, wie sie funktionieren... Leider bringt mich das gerade bei den Features nicht weiter! Für die eine gelinkte Skizze in meinem Testpart funktioniert's natürlich. Aber ja eben nur in diesem Part! Ich finde keine "Name"-Funktion für FindObject! Und wie sieht dann die For-Schleife aus? Wenn ich Features suche, kann ich sie wieder nicht in DisplayableObjects konvertieren!? "Linked_Sketch" ist das Feature, "Sketch_006" das DisplayableObject, korrekt? Wie funktioniert die ConvertAll-Funktion? Komme ich damit evtl. an's Ziel? Brauche ein Beispiel, habe gestern verzweifelt versucht, die Ausdrücke und Typen irgendwie da rein zu bekommen - hat aber nicht funktioniert! Die Bücher sind auch nicht gekommen Hermes war schon da! Aufgezeichnet: --------------------------------------------------------------------- Imports System Imports NXOpen
Module NXJournal Sub Main (ByVal args() As String) Dim theSession As NXOpen.Session = NXOpen.Session.GetSession() Dim workPart As NXOpen.Part = theSession.Parts.Work Dim displayPart As NXOpen.Part = theSession.Parts.Display Dim markId1 As NXOpen.Session.UndoMarkId = Nothing markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Move Layer") Dim objectArray1(0) As NXOpen.DisplayableObject Dim waveSketch1 As NXOpen.Features.WaveSketch = CType(workPart.Features.FindObject("LINKED_SKETCH(29)"), NXOpen.Features.WaveSketch) Dim sketch1 As NXOpen.Sketch = CType(waveSketch1.FindObject("SKETCH_006"), NXOpen.Sketch) objectArray1(0) = sketch1 workPart.Layers.MoveDisplayableObjects(1, objectArray1) End Sub End Module ---------------------------------------------------------------------- Trotzdem Danke Am Ende ist sowas halt der Unterschied zwischen Profi und Amateur!? Gruß Marc
------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 08. Jan. 2021 14:00 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, das Journal verrät, wie's geht. Und das Lesen lernst du mit der Zeit Die folgende Zeile Code: workPart.Layers.MoveDisplayableObjects(1, objectArray1)
sagt aus, daß sich die "suspekten" Objekte in objectArray1 befinden. Darin befinden sich Objekte vom Typ DisplayableObject, wie die ff. Zeile verrät: Code: Dim objectArray1(0) As NXOpen.DisplayableObject
Der Inhalt des Arrays besteht aus einem einzelnen Objekt, im Journal hier zu sehen: Code: objectArray1(0) = sketch1
Und dieser sketch1 verbirgt sich hier: Code: Dim sketch1 As NXOpen.Sketch = CType(waveSketch1.FindObject("SKETCH_006"), NXOpen.Sketch)
Das ominöse .FindObject ermittelt ein Objekt namens "SKETCH_006", das zum waveSketch1 gehört. Dieser waveSketch1 ist das Feature. Damit es als bloßes Feature auch weiss, daß es ein WaveSketch ist, muss eine sog. Typumwandlung erfolgen, das geht mit Ctype(...), siehe hier: Code: Dim waveSketch1 As NXOpen.Features.WaveSketch = CType(workPart.Features.FindObject("LINKED_SKETCH(29)"), NXOpen.Features.WaveSketch)
Das Code: workPart.Features.FindObject("LINKED_SKETCH(29)")
muss also durch das, im Loop gefundene Feature ersetzt werden, z.B.: Code: Dim waveSketch1 As NXOpen.Features.WaveSketch = CType([b]MeinFeatureDesTypsWaveSketch[/b], NXOpen.Features.WaveSketch)
Offen bleibt also die Frage, wie man zum sketch1 kommt. Diese Frage kann VS beantworten, deshalb auch die dringende Empfehlung, eine vernünftige Entwicklerumgebung anstatt des vorsintflutlichen Journal-Editors zu benutzen. Mach' also einfach mal einen Punkt nach waveSketch1, da erscheint dann die Lösung, deren Entdeckung ich dir gerne vorbehalten möchte ... und noch 'ne Empfehlung: Schau' dir die Themen rund um unterschiedliche Datentypen, deren Eigenschaften, Methoden und die Umwandlung an. Dazu gibt's im Netz reichlich Infos, z.B. div. Tutorials auf ActiveVB Gruß, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 08. Jan. 2021 22:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, ich glaube, ich bin fast am Ziel!? Nur noch eine Kurve, über den Hügel, durch den Tunnel und dann bloß noch geradeaus... Danke Dir jedenfalls für Deine ausführliche Erläuterung des aufgezeichneten Journals!!! VS habe ich ja installiert (eben wegen der Syntax und der Vorschläge), aber außer "Prototype" und "ContainerFeature" scheint da nichts hinter waveSketch1 zu passen!? Habe also .Prototype gewählt und bekomme in VS keinen Hinweis oder Fehler! Führe ich das Journal dann aus, sagt NX mir es gäbe eine: NXOpen.NXException: Falsches Objekt für diese Operation. ...mit Verweis auf: workpart.Layers.MoveDiplayableObjects(204, objectArray1)! Ich schätze, dass das was im Array ankommt (sketch1) doch noch nicht passt, richtig? For Each myFeature As Features.Feature In workPart.Features
If TypeOf (myFeature) Is Features.WaveSketch Then Dim waveSketch1 As NXOpen.Features.WaveSketch = CType(myFeature, NXOpen.Features.WaveSketch) Dim sketch1 As NXOpen.Sketch = CType(waveSketch1.Prototype, NXOpen.Sketch) 'Dim sketch1 As NXOpen.Sketch = CType(waveSketch1.ContainerFeature, NXOpen.Sketch) lw.Open() lw.WriteLine("Feature : " & myFeature.GetFeatureName) 'Passt! lw.Close() objectArray1(0) = sketch1 'objectsToMove.Add(sketch1) workPart.Layers.MoveDisplayableObjects(waveLayer, objectArray1) End If 'Dim displayModification1 As DisplayModification 'displayModification1 = theSession.DisplayManager.NewDisplayModification() 'displayModification1.ApplyToAllFaces = False 'displayModification1.NewLayer = 204 'displayModification1.Apply(objectsToMove.ToArray) 'displayModification1.Dispose() Next Habe verschiedene Loops ausprobiert - hat aber keine funktioniert! Wie Du siehst, reicht diese eine Hürde aus, um mich komplett auszubremsen!
Die Bücher sind auch wieder nicht gekommen! HBB hat sie zwar am 04.01. verschickt (leider mit HERMES!), hier in der Eifel herrscht aber gerade tiefster Winter. Ich glaube, wir haben sogar mehr Schnee als 2010. Ich bleibe am Ball! Danke Dir Gruß Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 09. Jan. 2021 14:12 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, erscheint nach Code: waveSketch1.
kein GetEntities oder andere Eigenschaften und Methoden, die z.B. den Zugriff auf Attribute ermöglichen ? Dann wäre irgendwas an VS und den Referenzen auf die NX-Bibliotheken faul. Ich würde beim WaveSketch, genau wie beim SketchFeature, dort ein .Sketch erwarten. Zumindest ein .GetEntities sollte erscheinen. Genau weiss man das aber immer erst, wenn man das spezielle Feature unter die Lupe genommen hat. Es gilt, nicht nur, aber bei NXOpen ganz sicher: Versuch macht kluch. Gruß, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 09. Jan. 2021 19:00 <-- editieren / zitieren --> Unities abgeben:
Nabend Michael, mit dem .GetEntities fing ja mal alles an! Passt aber wohl nicht!? "Der Wert vom Typ NXObject() kann nicht in "Sketch" konvertiert werden." Die 5 erforderlichen NXOpen-Referenzen sind im VS-Projekt vorhanden. Bin ALLE anderen Vorschläge durch! Nichts außer "Prototype" und "ContainerFeature" wird ohne Fehlermeldung akzeptiert! Da mangelt es mir am Verständnis!!! Ich könnte jetzt noch wild weiter rumklicken - dafür ist mir meine Freizeit aber dann doch zu wertvoll! Irgendwann geht die Aufwand/Nutzen-Rechnung halt nicht mehr auf! Die Bücher sind wieder nicht gekommen! Wann macht denn endlich mal jemand die Sch..bude HERMES zu? Die zahlen schlecht, die meisten Fahrer (hier) können keine Klingelschilder lesen, und es dauert eigtl. immer länger als nötig! Bin gefrustet! Gehe jetzt couchen. Dank Dir für Deine Hilfe. Vllt. lässt mein AG ja irgendwann in ferner Zukunft mal eine Schulung springen!? Gruß Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 10. Jan. 2021 14:31 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, mit dem WaveSketch hast du dir gleich eine "etwas" härtere Nuss ausgesucht. Da ist Frust vorprogrammiert Ich hab's mal untersucht und war zunächst erstaunt, daß es doch deutliche Unterschiede zwischen einem Sketchfeature und einem Wavesketch gibt. Ist aber auch irgendwie klar, ein Wavesketch ist ja nichts anders als eine assoziative Kopie des Originals und daher kein "richtiger" Sketch. Über .GetEntities erhält man u.a. die einzelnen Kurven der Skizze, über deren assoziierte Objekte kommt man zwar weiter, dreht sich dann aber im Kreis und kommt nicht zum gewünschten Ziel. Das gehört aber zum Tagesgeschäft, wenn's um NXOpen geht. Das Ziel findet man über die sog. UFSession, deren Funktionen beim Protokollieren leider nicht aufgezeichnet werden. Darin gibt's spezielle Funktionen für WaveLinks, u.a. die Methode AskLinkedFeatureGeom(). Die macht genau, was benötigt wird, arbeitet allerdings mit Tags. Die müssen dann wieder in "normale" Objekte konvertiert werden, das ist aber kein Problem, siehe unten. Code: Imports System Imports NXOpen Imports NXOpen.UF Imports NXOpen.FeaturesModule NXJournal Sub Main (ByVal args() As String) Dim theSession As Session = Session.GetSession() Dim theUFSession As UFSession = UFSession.GetUFSession() Dim workPart As Part = theSession.Parts.Work Dim lw As ListingWindow = theSession.ListingWindow Dim feats() As Feature = workPart.Features.ToArray Dim ws As WaveSketch Dim linktag As Tag Dim linkobj As TaggedObject Dim dmod As DisplayModification = theSession.DisplayManager.NewDisplayModification() dmod.NewLayer = 98 lw.Open() For Each f As Feature In feats lw.WriteLine(f.GetFeatureName) If TypeOf f Is WaveSketch Then ws = CType(f, WaveSketch) lw.WriteLine("Found WaveSketch " & ws.GetFeatureName) theUFSession.Wave.AskLinkedFeatureGeom(ws.Tag, linktag) linkobj = theSession.GetObjectManager.GetTaggedObject(linktag) lw.WriteLine("Linked Object " & linkobj.ToString) dmod.Apply({CType(linkobj, DisplayableObject)}) End If Next dmod.Dispose() End Sub End Module
.. und kaum macht man's richtig, funktioniert's plötzlich Gruß, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 10. Jan. 2021 19:13 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, habe mich eben fast nass gemacht! Es funktioniert!!! Ich danke Dir vielmals! Ganz großes Tennis, dass einem in diesem Forum so weitergeholfen wird! Ich werde mich bemühen, aus Deinen Tipps (und Deiner Lösung) selbständig abzuleiten, was ich für weitere Journale noch brauche! Habe vor, (irgendwann einmal) einen eigenen kleinen Modell-Check zu realisieren... Vorher arbeite ich mich aber durch die erhältliche Literatur! Die Bücher kamen gestern Abend um kurz vor 10! Diese armen "Hunde" werden völlig unterbezahlt ausgenutzt, wie in kaum einer anderen Branche!? HERMES ist gar kein Götterbote! Der Typ ist ein Sklaventreiber! Nochmals vielen Dank Michael! Viele Grüße Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 11. Jan. 2021 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, das ist in dem Fall auch gern geschehen Wer 1.) freundlich fragt, 2.) selbst an einer Lösung arbeitet und sich 3.) die notwendige Ausrüstung (VS oder andere Entwicklerumgebung) besorgt hat, dem kann geholfen werden. Wenn sich's darüber hinaus um eine, nicht schon 100+ mal gestellte und beantwortete Frage handelt, ist möglicherweise meine ingenieurswissenschaftliche Neugier geweckt. Und wenn die erst mal wach ist .... , dann lässt der Griff zur Tastatur auch nicht mehr lange auf sich warten. Schöne Grüße, Michael ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 05. Feb. 2021 19:08 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, kannst Du mir evtl. sagen, warum ein Layer zwar unsichtbar geschaltet wird, die Objekte aber sichtbar und nicht-selektierbar bleiben? Danke Gruß Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" 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: 06. Feb. 2021 13:04 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
Hallo Marc, je nachdem, mit welcher Funktion der Layer eine Elements geändert wird, bleibt dieses sichtbar. Würde ich als Bug einstufen, aber einer der harmlosen Sorte. Welche Funktion das genau ist, kann ich nicht auswendig sagen, mit einer Displaymodification sollte es jedenfalls klappen. Andernfalls verschwinden die sichtbaren Reste mit dem Regenerieren der Grafik. Gruß, Michael
------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ace Shim Mitglied Konstruktionsingenieur
Beiträge: 45 Registriert: 22.02.2005
|
erstellt am: 06. Feb. 2021 16:21 <-- editieren / zitieren --> Unities abgeben:
Noch ein Nachtrag... Ich habe im Part 20 WaveLinks (alle Typen vertreten). Wenn ich diese Links per Journal (oder manuell) auf Layer 204 verschiebe, beinhaltet dieser Layer anschließend 45 Objekte! Soweit ist das auch klar, einige Links (z.B. Skizzen oder zusammengesetzte Kurven beeinhalten ja mehrere Objekte). Problem ist aber weiterhin, dass die Links sichtbar bleiben, obwohl der Layer unsichtbar geschaltet ist!? Selektieren geht dann auch nur noch im Teilenavigator! Gruß Marc ------------------ "Das kann man so machen, aber dann ist es halt Sch...!" Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| CAD-Designer / Konstrukteur (w/m/d) | Die seele Gruppe gilt als Technologieführer im innovativen Dach- und Fassadenbau. Für Architekturikonen weltweit, wie z.B. Stuttgart 21, die Moynihan Train Hall in New York oder das Peninsula Hotel in London, realisieren wir mit über 1.000 Mitarbeitenden wegweisende Gebäudehüllen und Konstruktionen. Die seele GmbH in Gersthofen, der Hauptsitz der seele ... | Anzeige ansehen | Feste Anstellung |
|
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: 08. Feb. 2021 10:28 <-- editieren / zitieren --> Unities abgeben: Nur für Ace Shim
1.: Layerwechsel mit einer Displaymodification 2.: View regenerieren. Ein Refresh wird ggfs. nicht ausreichen. ------------------ Ein Mensch wird laut, wenn er was will; wenn er's erst hat, dann wird er still; Das "Danke" ist, nach alter Sitte, Weit selt'ner als das "Bitte, Bitte". Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|