The following journal was submitted by user macaber8. The code checks the current work part for the existence of a certain (interpart) expression; if the expression is not found it is created. The code illustrates finding an expression object given a name and creating an interpart expression.
Thank you macaber8 for sharing your code!
-NXJournaling
'There is a part called "DESIGN CONTROL" in the assembly file.In "DESIGN CONTROL", there's is an expression called "p1".
'Supposingly, there should be an inter-part expression called "BBPZ" in the assembly file, which links the value of the expression "p1" from "DESIGN CONTROL" to the assembly file.
'However, in work environment, it is likely that someone made a mistake to either not having create the "BBPZ" or not having this expression linked to the file where it suppose to.
'This journal is made to check the value of "BBPZ" in the assembly file.
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.BlockStyler
Module Module1
Sub Main()
Dim theSession As Session = Session.GetSession()
If IsNothing(theSession.Parts.Work) Then
'active part required
Return
End If
CheckExpression("BBPZ", "p1", "DESIGN CONTROL")
End Sub
Public Function CreateInterpartExpression(ByVal frompartname As String, ByVal FromExpressionName As String, ByVal DestinationExpressionName As String) As NXObject
Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work
Dim displayPart As Part = theSession.Parts.Display
Dim interpartExpressionsBuilder1 As InterpartExpressionsBuilder
interpartExpressionsBuilder1 = workPart.Expressions.CreateInterpartExpressionsBuilder()
Dim part1 As Part = CType(theSession.Parts.FindObject(frompartname), Part)
Dim expression1 As Expression = CType(part1.Expressions.FindObject(FromExpressionName), Expression)
Dim sourceExpressions1(0) As Expression
sourceExpressions1(0) = expression1
Dim destinationNames1(0) As String
destinationNames1(0) = DestinationExpressionName
interpartExpressionsBuilder1.SetExpressions(sourceExpressions1, destinationNames1)
Dim nXObject1 As NXObject
nXObject1 = interpartExpressionsBuilder1.Commit()
interpartExpressionsBuilder1.Destroy()
Return nXObject1
End Function
Public Function CheckExpression(ByVal DestinationExpressionName As String, ByVal OriginalExpressionName As String, ByVal OriginalPart As String)
Dim theSession As Session = Session.GetSession()
Dim workPart As Part = theSession.Parts.Work
Dim lw As ListingWindow = theSession.ListingWindow
lw.Open()
Dim expToFind1 As String = DestinationExpressionName
Try
Dim myExp1 As Expression
myExp1 = workPart.Expressions.FindObject(expToFind1)
'lw.WriteLine(myExp.Name)
'lw.WriteLine(myExp.RightHandSide)
If myExp1.Equation.Contains("::" & OriginalExpressionName) Then
'lw.WriteLine(expToFind1 & " was found!")
Else
theSession.Parts.Work.Expressions.Delete(myExp1)
CreateInterpartExpression(OriginalPart, OriginalExpressionName, DestinationExpressionName)
lw.WriteLine(expToFind1 & " was found! But it was not valid! New " & DestinationExpressionName & " was Created")
End If
Catch ex As NXException
'MsgBox(ex.Message)
If ex.ErrorCode = 3520016 Then
'no object found with this name
'code to handle this error
CreateInterpartExpression(OriginalPart, OriginalExpressionName, DestinationExpressionName)
lw.WriteLine(expToFind1 & " was not found! New" & DestinationExpressionName & " was created")
Else
'code to handle other errors
lw.WriteLine(ex.ErrorCode & ": " & ex.Message)
End If
Finally
'lw.WriteLine("done processing")
'lw.WriteLine("")
End Try
lw.Close()
Return Nothing
End Function
End Module