Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  VB.NET: Zugriff auf Reference Sets

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:  VB.NET: Zugriff auf Reference Sets (3010 mal gelesen)
met
Mitglied
CAD-Admin / Konstrukteur


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

Beiträge: 137
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 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

Hallo,

kann man in einem Journal auf Reference Sets zugreifen?

Möchte automatisch einige Reference Sets erzeugen und ausgewählte Bodies zuweisen.

Gruß, met

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

master001
Mitglied
Projektingenieur


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

Beiträge: 454
Registriert: 25.02.2005

erstellt am: 21. Apr. 2008 09: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 met 10 Unities + Antwort hilfreich

Die Refernce Sets kannst du bereits in dein Schablonenteil einbinden. Wenn du die Nachträglich in ein anderes Teil übertragen willst, importiere das Schablonen.prt einfach.

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

met
Mitglied
CAD-Admin / Konstrukteur


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

Beiträge: 137
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 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

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 NXOpen

Module 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


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

Beiträge: 195
Registriert: 19.12.2007

erstellt am: 21. Apr. 2008 12:18    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 met 10 Unities + Antwort hilfreich

gucke mal bei ugsolutions oder uganswer oder wie das jetzt auch immer heißt, da gibt es gute beispielcodes zum thema refsets, hat mir mal sehr weitergeholfen..

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: 21. Apr. 2008 12:51    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 met 10 Unities + Antwort hilfreich

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


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

Beiträge: 137
Registriert: 23.07.2004

erstellt am: 22. Apr. 2008 08: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

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 NXOpen

Module 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


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: 22. Apr. 2008 10:38    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 met 10 Unities + Antwort hilfreich

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


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

Beiträge: 137
Registriert: 23.07.2004

erstellt am: 22. Apr. 2008 11:58    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

Hallo Michael,

mit Nothing oder Tag.Null hatte ich auch schon probiert.

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

Tömme
Mitglied
Teamcenter Administrator


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

Beiträge: 195
Registriert: 19.12.2007

TC 11.5.0 mit NX12

erstellt am: 03. Jul. 2008 13:58    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 met 10 Unities + Antwort hilfreich

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

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

Beiträge: 9
Registriert: 30.01.2018

Siemens NX
Catia V5

erstellt am: 09. Aug. 2018 09:26    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 met 10 Unities + Antwort hilfreich

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



Werkstudententätigkeit im Bereich Prototypenbau und 3D-Druck ab Juni 2024
Life is always about becoming? Im Leben geht es darum, sich auf eine Reise zu begeben, um die beste Version unseres zukünftigen Selbst zu werden. Während wir Neues entdecken, stellen wir uns Herausforderungen, meistern sie und wachsen über uns hinaus.

Bewerben Sie sich bei Mercedes-Benz und finden Sie den Aufgabenbereich, in dem Sie Ihre Talente individuell entfalten können. Dabei werden Sie von visionären Kolleginnen und Kollegen unterstützt, die Ihren Pioniergeist teilen....
Anzeige ansehenMaschinenbau
geraldb
Mitglied



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

Beiträge: 38
Registriert: 13.09.2008

erstellt am: 10. Aug. 2018 07:31    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 met 10 Unities + Antwort hilfreich

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

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