Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations MintJulep on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Add body to reference set 1

Status
Not open for further replies.

niedzviedz

Mechanical
Apr 1, 2012
307
Hello every one,

I'm trying to write journal which selected body:
- change translucency to 60
- change line to dashed
- put it on layer 100
- and finally put it in reference set "false"

First 3 point work perfect but the last one not. Below is my code:

Code:
Option Strict Off

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpenUI
Imports System.Collections
Imports System.Collections.Generic

Module Ref_False

    Dim theSession As Session = Session.GetSession()
    Dim sel As Selection = NXOpen.UI.GetUI.SelectionManager 
    Dim myRefSetNames As New List(Of String)
    Dim ref_temp as ReferenceSet

    Dim workPart As Part = theSession.Parts.Work
    Dim dispPart As Part = theSession.Parts.Display

    Sub Main()


	Dim referenceSet1 As ReferenceSet
        Dim selectedObjectsArray() As NXObject

        Selectbody(selectedObjectsArray)

        Dim BodyArray(selectedObjectsArray.Length - 1) As DisplayableObject

        For i As Integer = 0 To selectedObjectsArray.Length - 1
            BodyArray(i) = CType(selectedObjectsArray(i), DisplayableObject)

        Next

        If IsNothing(theSession.Parts.BaseWork) Then
            'active part required
            Return
        End If

	myRefSetNames.Add("FALSE")

        For Each tempRefSetName As String In myRefSetNames
            Dim refSetExists As Boolean = False

            For Each tempRefSet As ReferenceSet In workPart.GetAllReferenceSets

                If tempRefSet.Name.ToUpper = tempRefSetName.ToUpper Then
                    refSetExists = True
                End If

		If tempRefSet.Name.ToUpper() = "FALSE" Then
			ref_temp = tempRefSet
			ref_temp.SetAddComponentsAutomatically(true, true)
		end if 	

            Next

            If refSetExists Then

		referenceSet1.AddObjectsToReferenceSet(BodyArray)

            Else

                referenceSet1 = workPart.CreateReferenceSet()
                referenceSet1.SetName(tempRefSetName)
		referenceSet1.SetAddComponentsAutomatically(True, True)
		referenceSet1.AddObjectsToReferenceSet(BodyArray)
            End If

        Next

	myRefSetNames.clear()

        Dim changeBodytransluency As DisplayModification = theSession.DisplayManager.NewDisplayModification()

        With changeBodytransluency
            .ApplyToAllFaces = true
            .NewTranslucency = 60
	    .NewFont = NXOpen.DisplayableObject.ObjectFont.Dashed
	    .NewLayer = 100
            .Apply(bodyArray)
            .Dispose()
        End With

    End Sub

    Sub Selectbody(ByRef selectedObjects As NXObject())

        Dim ui As UI = NXOpen.UI.GetUI

        Dim message As String = "Select body"
        Dim title As String = "Selection"

        Dim scope As Selection.SelectionScope = Selection.SelectionScope.AnyInAssembly
        Dim keepHighlighted As Boolean = False
        Dim includeFeatures As Boolean = False
        Dim response As Selection.Response

        Dim selectionAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific

        Dim selectionMask_array(1) As Selection.MaskTriple
	With selectionMask_array(0)
            .Type = UFConstants.UF_component_type
            .Subtype = UFConstants.UF_component_subtype
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_BODY 
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_SOLID_BODY 
        End With

        With selectionMask_array(1)
            .Type = UFConstants.UF_solid_type
            .Subtype = 0
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_BODY 
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_SOLID_BODY 
	End with

        response = ui.SelectionManager.SelectObjects(message, title, scope, _
                                         selectionAction, includeFeatures, _
                                     keepHighlighted, selectionMask_array, _
                                                      selectedObjects)

        If response = Selection.Response.Cancel Or response = Selection.Response.Back Then
            Return
        End If

    End Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        GetUnloadOption = NXOpen.UF.UFConstants.UF_UNLOAD_IMMEDIATELY

    End Function
End Module

I receive an error in line:

Code:
		referenceSet1.AddObjectsToReferenceSet(BodyArray)

I tried many different ways but no one has worked. Any one can help me to solve this problem?


With best regards
Michael
 
Replies continue below

Recommended for you

Code:
If refSetExists Then
    referenceSet1.AddObjectsToReferenceSet(BodyArray)
Else

At this point in your code, the referenceSet1 variable doesn't actually refer to any reference set; I'd guess that you are getting a "null reference" error. It looks like ref_temp does hold the desired reference set, so you could use that variable or update the referenceSet1 as needed.

www.nxjournaling.com
 
Yes, I'm receiving an error:

Code:
System.NullReferenceException: Object reference not set to an instance of an object
Like You write, I didn't have reference to referenceset1, so that's why the code doesn't worked. When I set:

Code:
referenceSet1 = ref_temp
The code now works correct. Thanks @cowski for Your support.
I tried many ways to solve this, but didn't think it's that simple. I tried figure out what selectedObjectsArray return:

Code:
selectedObjectsArray.tostring -> NXOpen.NXObject[]
selectedObjectsArray.length -> number of elements
bodyarray.length -> number of elements
bodyarray.tostring -> NXOpen.DisplayableObject[]
In my next step I would try something with tag object, but now I don't need to. Thanks again for Your help.

With best regards
Michael
 
Hi All,

Interesting tool, tagging along on it...
I made the same correction as Cowski mentioned, however the error remains for me.

Code:
Option Strict Off

Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpenUI
Imports System.Collections
Imports System.Collections.Generic

Module Ref_Ambient

    Dim theSession As Session = Session.GetSession()
    Dim sel As Selection = NXOpen.UI.GetUI.SelectionManager 
    Dim myRefSetNames As New List(Of String)
    Dim ref_temp as ReferenceSet

    Dim workPart As Part = theSession.Parts.Work
    Dim dispPart As Part = theSession.Parts.Display

    Sub Main()


	Dim referenceSet1 As ReferenceSet
        Dim selectedObjectsArray() As NXObject

        Selectbody(selectedObjectsArray)

        Dim BodyArray(selectedObjectsArray.Length - 1) As DisplayableObject

        For i As Integer = 0 To selectedObjectsArray.Length - 1
            BodyArray(i) = CType(selectedObjectsArray(i), DisplayableObject)

        Next

        If IsNothing(theSession.Parts.BaseWork) Then
            'active part required
            Return
        End If

	myRefSetNames.Add("AMBIENT")

        For Each tempRefSetName As String In myRefSetNames
            Dim refSetExists As Boolean = False

            For Each tempRefSet As ReferenceSet In workPart.GetAllReferenceSets

                If tempRefSet.Name.ToUpper = tempRefSetName.ToUpper Then
                    refSetExists = True
                End If

		If tempRefSet.Name.ToUpper() = "AMBIENT" Then
			ref_temp = tempRefSet
			ref_temp.SetAddComponentsAutomatically(true, true)
		end if 	

            Next

            If refSetExists Then

		referenceSet1.AddObjectsToReferenceSet(BodyArray)

            Else

                referenceSet1 = ref_temp
                referenceSet1.SetName(tempRefSetName)
		referenceSet1.SetAddComponentsAutomatically(True, True)
		referenceSet1.AddObjectsToReferenceSet(BodyArray)
            End If

        Next

	myRefSetNames.clear()

        Dim changeBodytransluency As DisplayModification = theSession.DisplayManager.NewDisplayModification()

        With changeBodytransluency
            .ApplyToAllFaces = true
            .NewTranslucency = 0
	    .NewFont = NXOpen.DisplayableObject.ObjectFont.Solid
		.NewWidth = DisplayableObject.ObjectWidth.Two
	    .NewLayer = 190
            .Apply(bodyArray)
            .Dispose()
        End With

    End Sub

    Sub Selectbody(ByRef selectedObjects As NXObject())

        Dim ui As UI = NXOpen.UI.GetUI

        Dim message As String = "Select body"
        Dim title As String = "Selection"

        Dim scope As Selection.SelectionScope = Selection.SelectionScope.AnyInAssembly
        Dim keepHighlighted As Boolean = False
        Dim includeFeatures As Boolean = False
        Dim response As Selection.Response

        Dim selectionAction As Selection.SelectionAction = Selection.SelectionAction.ClearAndEnableSpecific

        Dim selectionMask_array(1) As Selection.MaskTriple
	With selectionMask_array(0)
            .Type = UFConstants.UF_component_type
            .Subtype = UFConstants.UF_component_subtype
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_BODY 
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_SOLID_BODY 
        End With

        With selectionMask_array(1)
            .Type = UFConstants.UF_solid_type
            .Subtype = 0
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_BODY 
            .SolidBodySubtype = UFConstants.UF_UI_SEL_FEATURE_SOLID_BODY 
	End with

        response = ui.SelectionManager.SelectObjects(message, title, scope, _
                                         selectionAction, includeFeatures, _
                                     keepHighlighted, selectionMask_array, _
                                                      selectedObjects)

        If response = Selection.Response.Cancel Or response = Selection.Response.Back Then
            Return
        End If

    End Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        GetUnloadOption = NXOpen.UF.UFConstants.UF_UNLOAD_IMMEDIATELY

    End Function
End Module

Error comlains on line 65 in code which is;

Code:
                referenceSet1 = ref_temp
Line 65 --->               [b]referenceSet1.SetName(tempRefSetName)[/b]

Ronald van den Broek
Senior Application Engineer
Winterthur Gas & Diesel Ltd
NX9 / TC10.1.2

Building new PLM environment from Scratch using NX11 / TC11
 
Hello,

I compared Your code with mine, and You don't have line to create reference set, which should be:

Code:
referenceSet1 = workPart.CreateReferenceSet()
That's why You receive an error. I also added this

Code:
referenceSet1 = ref_temp
before

Code:
If refSetExists Then
so I'don't have to place it twice in code - first if ref. exists and second if not.

With best regards
Michael
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor