DesEngineer4
Mechanical
- Feb 19, 2013
- 181
Hi all,
Can any one help me in the below issue
The below code is our journal to use for layers. But, we have some issues in it.
1. The first coordinate system in the part navigator is moving to layer 61 and remaining datum axiss is moving to layer 40 only.
2. Symbolic thread is also moving to layer 61. But, after changing the window, again it is coming back to layer 1.
3. By executing this journal multiple times on the same model or part. Datum planes and datum axis are moving to layer 61. Not only datum's even some features also moving to layers 61 or 1.
4. As we coded in to move saved csys to 100. If we save csys at any location that csys is moving to layer 100 and some reference lines are creating through default datum axis(for this issue please see attachment)
Thanks & Regards,
Sam
Can any one help me in the below issue
The below code is our journal to use for layers. But, we have some issues in it.
1. The first coordinate system in the part navigator is moving to layer 61 and remaining datum axiss is moving to layer 40 only.
2. Symbolic thread is also moving to layer 61. But, after changing the window, again it is coming back to layer 1.
3. By executing this journal multiple times on the same model or part. Datum planes and datum axis are moving to layer 61. Not only datum's even some features also moving to layers 61 or 1.
4. As we coded in to move saved csys to 100. If we save csys at any location that csys is moving to layer 100 and some reference lines are creating through default datum axis(for this issue please see attachment)
Code:
Option Strict Off
Imports System
Imports System.Collections
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.Utilities
Imports NXOpen.Assemblies
Imports NXOpen.Features
Imports NXOpenUI
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 theUISession As UI = UI.GetUI
Dim response As Integer
Dim answer As String = ""
lw.Open
response = theUISession.NXMessageBox.Show("Question", NXMessageBox.DialogType.Question, "Move objects to layer?")
'1 = Yes
'2 = No
If response = 1 Then
'code to run in response to "yes" answer
answer = "Yes"
lw.WriteLine("moving objects from layer X to layer Y...")
Else
'code to run in response to "no" answer
answer = "No"
Exit Sub
End If
lw.WriteLine("user answered: " & answer)
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 = 100
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 < 240 Then
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
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
Dim junk As DatumPlane = obj
If junk.Feature.FeatureType.ToString = "DATUM_PLANE" Then
Try
Dim parentFeat As Features.Feature() = junk.Feature.GetParents
If parentFeat(0).GetFeatureName.Contains(" ") Then
Continue For
End If
Catch ex As Exception
End Try
End If
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 when the NX session terminates
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination
End Function
End Module
Thanks & Regards,
Sam