In a recent forum thread, the topic of weld points came up; those working with the weld points were looking for an easy way to highlight and differentiate the different weld point types. The journal code below performs the following actions:
- Create a small colored sphere on each weld point; two-thickness welds will be colored green, three-thickness welds will be colored red.
- A fixed datum axis is created according to the weld vector.
- The sphere and datum axis features are renamed to match the weld point ID.
- The weld point ID, location, weld vector, and number of sheets welded are all output to the information window.
The Code
The code was tested with NX 8.5.
'NXJournaling.com
'report_weld_point_location
'September 17, 2014
'NX 8.5
'
'Create small spheres on weld points: green for two-thickness welds, red for three thickness welds.
'Create a fixed datum axis to visualize the weld vector.
'Report weld points to the information window.
Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Module Module3
Dim theSession As Session = Session.GetSession()
Dim theUfSession As UFSession = UFSession.GetUFSession()
Dim workPart As Part = theSession.Parts.Work
Sub Main()
Dim lw As ListingWindow = theSession.ListingWindow
lw.Open()
Const undoMarkName As String = "weld point spheres"
Dim markId1 As Session.UndoMarkId
markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, undoMarkName)
Dim sphereDia As Double
If workPart.PartUnits = BasePart.Units.Millimeters Then
sphereDia = 5
Else
sphereDia = 0.25
End If
Dim theAttributeInfo As NXObject.AttributeInformation
Dim numSheets As Integer
Dim strWeldIVal As String
Dim strWeldJVal As String
Dim strWeldKVal As String
Dim weldIVal As Double
Dim weldJVal As Double
Dim weldKVal As Double
Dim weldID As String
For Each myPt As Point In workPart.Points
Try
theAttributeInfo = myPt.GetUserAttribute("ID", NXObject.AttributeType.String, -1)
weldID = theAttributeInfo.StringValue
'lw.WriteLine("weldID: " & weldIVal.ToString)
Catch ex As NXException
lw.WriteLine("NX exception: " & ex.Message)
Continue For
Catch ex As Exception
lw.WriteLine("exception: " & ex.Message)
Continue For
End Try
Try
theAttributeInfo = myPt.GetUserAttribute("NUMBER OF SHEETS WELDED", NXObject.AttributeType.Integer, -1)
numSheets = theAttributeInfo.IntegerValue
Dim sphereColor As Integer = 103
Select Case numSheets
Case 2
'default cdf green = 36
sphereColor = 36
Case 3
'default cdf red = 186
sphereColor = 186
Case Else
sphereColor = 103
End Select
CreateSphereOnPoint(myPt, sphereDia, sphereColor, weldID)
Catch ex As NXException
Continue For
End Try
Try
theAttributeInfo = myPt.GetUserAttribute("WELD_I_VALUE", NXObject.AttributeType.String, -1)
strWeldIVal = theAttributeInfo.StringValue
weldIVal = Double.Parse(strWeldIVal)
Catch ex As NXException
lw.WriteLine("NX exception: " & ex.Message)
Continue For
Catch ex As Exception
lw.WriteLine("exception: " & ex.Message)
Continue For
End Try
Try
theAttributeInfo = myPt.GetUserAttribute("WELD_J_VALUE", NXObject.AttributeType.String, -1)
strWeldJVal = theAttributeInfo.StringValue
weldJVal = Double.Parse(strWeldJVal)
Catch ex As NXException
lw.WriteLine("NX exception: " & ex.Message)
Continue For
Catch ex As Exception
lw.WriteLine("exception: " & ex.Message)
Continue For
End Try
Try
theAttributeInfo = myPt.GetUserAttribute("WELD_K_VALUE", NXObject.AttributeType.String, -1)
strWeldKVal = theAttributeInfo.StringValue
weldKVal = Double.Parse(strWeldKVal)
Catch ex As NXException
lw.WriteLine("NX exception: " & ex.Message)
Continue For
Catch ex As Exception
lw.WriteLine("exception: " & ex.Message)
Continue For
End Try
Dim origin1 As Point3d = New Point3d(0.0, 0.0, 0.0)
Dim vector1 As Vector3d = New Vector3d(weldIVal, weldJVal, weldKVal)
Dim direction1 As Direction
direction1 = workPart.Directions.CreateDirection(origin1, vector1, SmartObject.UpdateOption.WithinModeling)
CreateWeldAxis(myPt, direction1, weldID)
lw.WriteLine("ID: " & weldID)
lw.WriteLine("location: " & myPt.Coordinates.ToString)
lw.WriteLine("weld vector: " & direction1.Vector.ToString)
lw.WriteLine("number of sheets: " & numSheets.ToString)
lw.WriteLine("")
Next
lw.Close()
End Sub
Sub CreateSphereOnPoint(ByVal cenPoint As Point, _
ByVal diameter As Double, _
ByVal color As Integer, _
ByVal name As String)
Dim theColor As Integer
If color < 0 Or color > 216 Then
theColor = 103
Else
theColor = color
End If
Dim nullFeatures_Sphere As Features.Sphere = Nothing
Dim sphereBuilder1 As Features.SphereBuilder
sphereBuilder1 = workPart.Features.CreateSphereBuilder(nullFeatures_Sphere)
Dim displayModification1 As DisplayModification
displayModification1 = theSession.DisplayManager.NewDisplayModification()
Try
sphereBuilder1.Diameter.RightHandSide = diameter.ToString
sphereBuilder1.BooleanOption.Type = GeometricUtilities.BooleanOperation.BooleanType.Create
sphereBuilder1.CenterPoint = cenPoint
Dim theSphere As Features.Sphere
theSphere = sphereBuilder1.Commit()
theSphere.SetName(name)
displayModification1.ApplyToAllFaces = True
displayModification1.ApplyToOwningParts = False
displayModification1.NewColor = theColor
Dim objects1(0) As DisplayableObject
Dim body1 As Body = theSphere.GetBodies(0)
objects1(0) = body1
displayModification1.Apply(objects1)
Catch ex As NXException
Finally
sphereBuilder1.Destroy()
displayModification1.Dispose()
End Try
End Sub
Sub CreateWeldAxis(ByVal thePoint As Point, _
ByVal theDirection As Direction, _
ByVal theName As String)
Dim nullFeatures_Feature As Features.Feature = Nothing
Dim datumAxisBuilder1 As Features.DatumAxisBuilder
datumAxisBuilder1 = workPart.Features.CreateDatumAxisBuilder(nullFeatures_Feature)
datumAxisBuilder1.Type = Features.DatumAxisBuilder.Types.PointAndDir
datumAxisBuilder1.Point = thePoint
datumAxisBuilder1.Vector = theDirection
datumAxisBuilder1.IsAssociative = False
Dim weldAxis As Features.DatumAxisFeature
weldAxis = datumAxisBuilder1.CommitFeature()
datumAxisBuilder1.Destroy()
weldAxis.SetName(theName)
End Sub
Public Function GetUnloadOption(ByVal dummy As String) As Integer
'Unloads the image when the NX session terminates
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination
'----Other unload options-------
'Unloads the image immediately after execution within NX
'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
'Unloads the image explicitly, via an unload dialog
'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Explicitly
'-------------------------------
End Function
End Module