DesEngineer4
Mechanical
- Feb 19, 2013
- 181
Hi all,
I am using the below journal for moving objects and features to specific layers. Now I want your help in moving this DRF_XYZ. Please see the attachments how i will create this DRF. My problem is when I executing this journal it is collecting these DRF`s as Datumaxis and moving to layer 40, as per code. But I need to move these DRF`s only to layer 100 and rest of all datumaxis should be in layer 40.
Thanks & Regards,
Sam
I am using the below journal for moving objects and features to specific layers. Now I want your help in moving this DRF_XYZ. Please see the attachments how i will create this DRF. My problem is when I executing this journal it is collecting these DRF`s as Datumaxis and moving to layer 40, as per code. But I need to move these DRF`s only to layer 100 and rest of all datumaxis should be in layer 40.
Code:
Option Strict Off
Imports System
Imports System.Collections
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.Utilities
Imports NXOpen.Assemblies
Imports NXOpen.Features
Module layermove
Sub Main()
Dim s As Session = Session.GetSession()
Dim lw As ListingWindow = s.ListingWindow
Dim ufs As UFSession = UFSession.GetUFSession()
Dim workPart As Part = s.Parts.Work
Dim displaypart As Part = s.Parts.Display
Dim pointcol As PointCollection = workPart.Points
Dim linecol As LineCollection = workPart.Lines
Dim arccol As ArcCollection = workPart.Arcs
Dim splinecol As SplineCollection = workPart.Splines
Dim sketchcol As SketchCollection = workpart.Sketches
Dim bodycol As BodyCollection = workpart.Bodies
Dim allComp1 As ArrayList = New ArrayList
Dim objArray(0) As DisplayableObject
Dim pointslayer As Integer = 61
Dim linelayer As Integer = 61
Dim arclayer As Integer = 61
Dim coniclayer As Integer = 61
Dim splinelayer As Integer = 61
Dim csyslayer As Integer = 40
Dim daxislayer As Integer = 40
Dim dplanelayer As Integer = 40
Dim bodylayer As Integer = 1
Dim sketchlayer As Integer = 20
If pointcol.ToArray().Length > 0 Then
For Each pt As Point In pointcol
If (pt.Layer >79 or pt.Layer <60)
ufs.Obj.SetLayer(pt.Tag, pointslayer)
End If
Next
End If
If linecol.ToArray().Length > 0 Then
For Each ln As Line In linecol
If ((ln.Layer >79 or ln.Layer <60) and (ln.Layer >256 or ln.Layer <241) and ln.Layer >1 and (ln.layer >199 or ln.layer <80))
ufs.Obj.SetLayer(ln.Tag, linelayer)
End If
Next
End If
If arccol.ToArray().Length > 0 Then
For Each arc1 As Arc In arccol
If (arc1.Layer >79 or arc1.Layer <60 and (arc1.layer >199 or arc1.layer <80))
ufs.Obj.SetLayer(arc1.Tag, arclayer)
End If
Next
End If
If splinecol.ToArray().Length > 0 Then
For Each sp As Spline In splinecol
If (sp.Layer >79 or sp.Layer <60 and (sp.layer >199 or sp.layer <80))
ufs.Obj.SetLayer(sp.Tag, splinelayer)
End If
Next
End If
If bodycol.ToArray().Length > 0 Then
For Each sb As Body In bodycol
If (sb.Layer >19 and (sb.layer >199 or sb.layer <80)) Then
ufs.Obj.SetLayer(sb.Tag,bodylayer)
End If
Next
End If
For Each obj As DisplayableObject In workPart.Datums
If TypeOf obj Is DatumPlane Then
objArray(0) = obj
workPart.Layers.MoveDisplayableObjects(dplanelayer, objArray)
End If
If TypeOf obj Is DatumAxis Then
objArray(0) = obj
workPart.Layers.MoveDisplayableObjects(daxislayer, objArray)
End If
Next
If sketchcol.ToArray().Length > 0 Then
For Each sk As Sketch In sketchcol
If ((sk.Layer >39 or sk.Layer <20) and (sk.layer >199 or sk.layer <80))
ufs.Obj.SetLayer(sk.Tag, sketchlayer)
End If
sk.Activate(False)
sk.UpdateGeometryDisplay()
sk.Deactivate(False, Sketch.UpdateLevel.SketchOnly)
Next
End If
Dim coniccol(-1) As Tag
Dim conictype As Integer = 6
Dim conictag As Tag = Tag.Null
Dim count As Integer = 0
ufs.Obj.CycleObjsInPart(workPart.Tag, conictype, conictag)
While conictag <> Tag.Null
ReDim Preserve coniccol(count)
coniccol(count) = conictag
count += 1
ufs.Obj.CycleObjsInPart(workPart.Tag, conictype, conictag)
End While
If coniccol.Length > 0 Then
For i As Integer = 0 To coniccol.Length - 1
ufs.Obj.SetLayer(coniccol(i), coniclayer)
Next
End If
Dim csyscol(-1) As Tag
Dim csystype As Integer = 45
Dim csystag As NXOpen.Tag = Tag.Null
count = 0
ufs.Obj.CycleObjsInPart(workPart.Tag, csystype, csystag)
While csystag <> Tag.Null
ReDim Preserve csyscol(count)
csyscol(count) = csystag
count += 1
ufs.Obj.CycleObjsInPart(workPart.Tag, csystype, csystag)
End While
If csyscol.Length > 0 Then
For i As Integer = 0 To csyscol.Length - 1
ufs.Obj.SetLayer(csyscol(i), csyslayer)
Next
End If
'move symbolic thread arcs to layer 1
For each myFeature as Feature in workPart.Features
if myFeature.FeatureType = "SYMBOLIC_THREAD" then
for each myEnt as arc in myFeature.GetEntities
myEnt.Layer = 1
myEnt.RedisplayObject
next
end if
Next
Dim root As Component = s.Parts.Display.ComponentAssembly.RootComponent
If Not IsNothing(root) Then
getAllComponents2(root, allComp1)
Dim dispobj As DisplayableObject = Nothing
Dim cnt1 As Integer = allComp1.Count
Dim objectArray1(cnt1 - 1) As DisplayableObject
Dim objlayer As Integer = Nothing
Dim cnt2 As Integer = 0
For i As Integer = 0 To cnt1 - 1
dispobj = DirectCast(allComp1(i), DisplayableObject)
objlayer = dispobj.Layer
If (objlayer > 19 and (objlayer >199 or objlayer <80)) Then
ReDim Preserve objectArray1(cnt2)
objectArray1(cnt2) = allComp1(i)
cnt2 += 1
End If
Next
If cnt2 > 0 Then
displaypart.Layers.MoveDisplayableObjects(1, objectArray1)
End If
End If
End Sub
Sub getAllComponents2(ByVal comp As Component, ByRef allComp As ArrayList)
Dim child As Component = Nothing
Dim space As String = Nothing
For Each child In comp.GetChildren()
allComp.Add(child)
getAllComponents2(child, allComp)
Next
End Sub
Public Function GetUnloadOption(ByVal dummy As String) As Integer
'Unloads the image immediately after execution within NX
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
End Function
End Module
Thanks & Regards,
Sam