| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX |
Autor
|
Thema: VB.NET: Zugriff auf Reference Sets (3077 mal gelesen)
|
met Mitglied CAD-Admin / Konstrukteur
Beiträge: 141 Registriert: 23.07.2004 Solidworks 2017 TCE 9.1.3 NX 5 3ds max 2017/2019 CorelDraw 12
|
erstellt am: 21. Apr. 2008 09:00 <-- editieren / zitieren --> Unities abgeben:
|
master001 Mitglied Projektingenieur
Beiträge: 454 Registriert: 25.02.2005
|
erstellt am: 21. Apr. 2008 09:10 <-- editieren / zitieren --> Unities abgeben: Nur für met
|
met Mitglied CAD-Admin / Konstrukteur
Beiträge: 141 Registriert: 23.07.2004 Solidworks 2017 TCE 9.1.3 NX 5 3ds max 2017/2019 CorelDraw 12
|
erstellt am: 21. Apr. 2008 09:46 <-- editieren / zitieren --> Unities abgeben:
Wir müssen in sehr vielen alten PRT's ein Vereinfachtes Teil auf versch. Refsets einpflegen und dabei die Bodies auf versch. RefSets verteilen. Deshalb wollte ich eine Funktion basteln, mit der der Benutzer nur ein Objekt selektiert und das Anlegen der RefSets und das Zuweisen der Bodies automatisch passiert. Hier der erste Entwurf:
Code: Option Strict Off Imports System Imports NXOpenModule TeilVereinfach Sub Main() Dim theSession As Session = Session.GetSession() Dim theUI As UI = UI.GetUI() Dim workPart As Part = theSession.Parts.Work Dim displayPart As Part = theSession.Parts.Display 'Undo-Marke setzen theSession.SetUndoMarkName(theSession.SetUndoMark(Session.MarkVisibility.Visible, "Start"), "Teil Vereinfachen") 'Teil auswählen Dim ObjList() As NXObject = Nothing theUI.SelectionManager.SelectObjects("Objekt selektieren.", "Aufdicken", Selection.SelectionScope.WorkPart, False, False, ObjList) Dim objKonstr As Body = CType(ObjList(0), Body) 'Extrahierter Körper erstellen Dim extractFaceBuilder1 As Features.ExtractFaceBuilder extractFaceBuilder1 = workPart.Features.CreateExtractFaceBuilder(Nothing) extractFaceBuilder1.Type = Features.ExtractFaceBuilder.ExtractType.Body extractFaceBuilder1.ParentPart = Features.ExtractFaceBuilder.ParentPartType.WorkPart extractFaceBuilder1.FixAtCurrentTimestamp = True extractFaceBuilder1.SurfaceType = Features.ExtractFaceBuilder.FaceSurfaceType.SameAsOriginal extractFaceBuilder1.BodyToExtract.Add(objKonstr) Dim objEinfach As NXObject = extractFaceBuilder1.Commit() extractFaceBuilder1.Destroy() 'Extrahierter Körper auf Layer 2 schieben Dim objectArray1(0) As DisplayableObject objectArray1(0) = workPart.Bodies.FindObject(objEinfach.JournalIdentifier) workPart.Layers.MoveDisplayableObjects(2, objectArray1) 'Benutzerabfrage (Dialogfenster): ' - objEinfach auf RefSet ' CheckBox cbPlanung ' Checkbox cbModel ' Checkbox cbFF ' Checkbox cbOF ' - objKonstr auf RefSet ' CheckBox cbPlanung ' Checkbox cbModel ' Checkbox cbFF ' Checkbox cbOF 'Auf RefSets anlegen und Objekte verteilen End Sub End Module
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Tömme Mitglied Teamcenter Administrator
Beiträge: 195 Registriert: 19.12.2007
|
erstellt am: 21. Apr. 2008 12:18 <-- editieren / zitieren --> Unities abgeben: Nur für met
|
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: 21. Apr. 2008 12:51 <-- editieren / zitieren --> Unities abgeben: Nur für met
Hallo met, der Namespace NXOpen.UF > UFAssem enthält einiges zum Thema Refsets, z.B. das Erstellen von Refsets, Zufügen von Members etc. Das Thema ist in der NXOpen .net API Reference beschrieben. Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
met Mitglied CAD-Admin / Konstrukteur
Beiträge: 141 Registriert: 23.07.2004
|
erstellt am: 22. Apr. 2008 08:36 <-- editieren / zitieren --> Unities abgeben:
Hallo Michael, danke schonmal für den Tipp. Mein erster Versuch findet aber leider nur RefSets, denen bereits ein Member zugewiesen ist. Hast Du ne Ahnung wie ich auch die leeren Refsets finden kann? Gruß, met Code: Option Strict Off Imports System Imports NXOpenModule NXJournal3 Sub Main() Dim theSession As Session = Session.GetSession() Dim workPart As Part = theSession.Parts.Work Dim TheUF As UF.UFSession = NXOpen.UF.UFSession.GetUFSession() theSession.ListingWindow.Open() theSession.ListingWindow.WriteLine("* * * * * * * * * * * * * * *") For Each B As Body In workPart.Bodies Dim RefSets() As NXOpen.Tag = Nothing Dim RefSetsNumber As Integer = Nothing TheUF.Assem.AskRefSets(B.Tag, RefSetsNumber, RefSets) For Each T As Tag In RefSets 'ByVal Dim RefSetName As String = Nothing Dim RefSetOrigin() As Double = {0, 0, 0} Dim RefSetMatrix() As Double = {1, 0, 0, 0, 1, 0, 0, 0, 1} 'ByRef Dim RefSetNumMembers As Integer = Nothing Dim RefSetMembers() As Tag = Nothing TheUF.Assem.AskRefSetData(T, RefSetName, RefSetOrigin, RefSetMatrix, RefSetNumMembers, RefSetMembers) theSession.ListingWindow.WriteLine(RefSetName) Next T Next B End Sub End Module
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: 22. Apr. 2008 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für met
Zitat: Hast Du ne Ahnung wie ich auch die leeren Refsets finden kann?
Leider nein, würde aber mal mit der genannten Klasse einen zweiten, dritten ... Versuch machen. Wenn möglich, ohne zuvor einen Loop über alle Bodies zu machen. So fragst Du ja die Refsets ab, zu denen der jeweilige Body gehört. Das so gefundene Refset hat damit zwangsläufig mindestens einen Member. Spontaner Gedanke: Bei Code: TheUF.Assem.AskRefSets(B.Tag, RefSetsNumber, RefSets)
anstatt B.Tag mal Nothing angeben ?Gruß, Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
met Mitglied CAD-Admin / Konstrukteur
Beiträge: 141 Registriert: 23.07.2004
|
erstellt am: 22. Apr. 2008 11:58 <-- editieren / zitieren --> Unities abgeben:
|
Tömme Mitglied Teamcenter Administrator
Beiträge: 195 Registriert: 19.12.2007 TC 11.5.0 mit NX12
|
erstellt am: 03. Jul. 2008 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für met
aahhh leute, ihr glaubt garnicht wieviel stunden ich jetzt damit verbracht habe herauszufinden, wie ich alle refsets abfragen kann (auch die leeren) habs gefunden, stichwort: CycleObjsInPart der folgende code durchsucht das aktuelle teil nach allen refsets und gibt zurück, ob ein bestimmtes existiert oder nicht: Dim RefSet As NXOpen.Tag = NXOpen.Tag.Null Dim RefSetMANUFACTURING As NXOpen.Tag = NXOpen.Tag.Null Do theUFSession.Obj.CycleObjsInPart(theWorkPart.Tag, UFConstants.UF_reference_set_type, refset) If RefSet <> NXOpen.Tag.Null Then Dim RefSetName As String theUFSession.Obj.AskName(RefSet, RefSetName) If RefSetName = "MANUFACTURING" Then RefSetMANUFACTURING = RefSet End If End If Loop While RefSet <> NXOpen.Tag.Null If RefSetMANUFACTURING <> NXOpen.Tag.Null Then 'Refset existiert Else 'Refset existiert nicht End If ------------------ hab doch garnix gemacht .. außer den server neugestartet .. war das falsch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AnniR Mitglied MaschinenbauIngenierin
Beiträge: 9 Registriert: 30.01.2018 Siemens NX Catia V5
|
erstellt am: 09. Aug. 2018 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für met
Hallo zusammen, ich denke meine Frage passt ganz gut hier zu dem Thema: Zugreifen auf Reference Set. Daher erwecke ich diesen Beitrag neu zum Leben. Ich möchte einem Part (welches selektiert werden soll) ein neues Reference Set zuweisen. Eigentlich ein ganz einfacher Code, jedoch finde ich meinen Fehler nicht. Vielleicht fällt euch etwas auf. Ich kann das Part selektieren, aber die Reference Sets werden nicht aktualisiert. Habe ich etwas falsch definiert ? Option Strict Off Imports System Imports NXOpen Imports NXOpen.UF Imports NXOpen.UI Imports NXOpen.Utilities 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 components1(0) As NXOpen.Assemblies.Component Dim component1 As NXOpen.Assemblies.Component SelectComponent("Replace Reference Set", component1) If component1 Is Nothing Or Not component1.IsOccurrence Then Return End If components1(0) = component3 Dim errorList1 As NXOpen.ErrorList = Nothing errorList1 = workPart.ComponentAssembly.ReplaceReferenceSetInOwners("OUTPUT_LINKED_GEOMETRY", components1) errorList1.Dispose() theSession.CleanUpFacetedFacesAndEdges() End Sub Function SelectComponent(ByVal prompt As String, ByRef selObj As TaggedObject) As Selection.Response Dim theUI As UI = UI.GetUI Dim title As String = "Select a component" Dim includeFeatures As Boolean = False Dim keepHighlighted As Boolean = False Dim selAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific Dim cursor As Point3d Dim scope As Selection.SelectionScope = Selection.SelectionScope.WorkPart Dim selectionMask_array(0) As Selection.MaskTriple With selectionMask_array(0) .Type = UFConstants.UF_component_type .Subtype = UFConstants.UF_component_subtype End With Dim resp As Selection.Response = theUI.SelectionManager.SelectTaggedObject(prompt, title, scope, selAction, includeFeatures, keepHighlighted, selectionMask_array, selObj, cursor) If resp = Selection.Response.ObjectSelected OrElse resp = Selection.Response.ObjectSelectedByName Then Return Selection.Response.Ok Else Return Selection.Response.Cancel End If End Function End Module
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Bauingenieur (m/w/d) Bereich Bauwerksprüfung | WipflerPLAN ist auf die regionale Umweltgestaltung und Infrastrukturentwicklung spezialisiert. In unseren Teams vereinen wir Architekten- und Ingenieurleistungen mit Kreativität, Wissen und Weitblick zu innovativen ganzheitlichen Planungen für die gebaute Umwelt. Über 230 Mitarbeiterinnen und Mitarbeiter übernehmen täglich Verantwortung für die nachhaltige Entwicklung der Region, in der sie selbst leben ? seit 60 Jahren.... | Anzeige ansehen | Feste Anstellung |
|
geraldb Mitglied
Beiträge: 40 Registriert: 13.09.2008
|
erstellt am: 10. Aug. 2018 07:31 <-- editieren / zitieren --> Unities abgeben: Nur für met
Irgendwie fehlt mir in diesem Code die Prüfung ob das neu zu setzende ReferenceSet überhaupt im Part existiert. Die Funktion heißt GetAllReferenceSets() und liefert eine Liste der im Part bekannten ReferenceSets . Wenn das neu zu setzende fehlt muss es vorher erzeugt werden. [Diese Nachricht wurde von geraldb am 10. Aug. 2018 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |