Hide/show surface bodies

Hide/show surface bodies

Anonymous
Not applicable
735 Views
4 Replies
Message 1 of 5

Hide/show surface bodies

Anonymous
Not applicable

I'm trying to hide some of my surface bodies along with my solid bodies, but I'm not sure if I have written the code correctly

 

Sub Main
	
	Dim Type11 As New List(Of String)
		Type11.Add("Type 1-1")	'<- Solid body
		Type11.Add("1-1 A")		'<- Surface body
		Type11.Add("1-1 B")		'<- Surface body
	
	Dim Type21 As New List(Of String)
		Type21.Add("Type 2-1")	'<- Solid body
		Type21.Add("2-1 A")		'<- Surface body
		Type21.Add("2-1 B")		'<- Surface body
		
	Dim Type12 As New List(Of String)
		Type12.Add("Type 1-2")	'<- Solid body
		Type12.Add("1-2 A")		'<- Surface body
		Type12.Add("1-2 B")		'<- Surface body
		
	Dim Type22 As New List(Of String)
		Type22.Add("Type 2-2")	'<- Solid body
		Type22.Add("2-2 A")		'<- Surface body
		Type22.Add("2-2 B")		'<- Surface body
		
	
	'-----------------------------------------

	
	If Type = "1" And RailDirection = "Straight" Then
		VisibleBodies(Type11, True)
		VisibleBodies(Type21, False)
		VisibleBodies(Type12, False)
		VisibleBodies(Type22, False)
	
	ElseIf Type = "2" And RailDirection = "Straight" Then
		VisibleBodies(Type11, False)
		VisibleBodies(Type21, True)
		VisibleBodies(Type12, False)
		VisibleBodies(Type22, False)
		
	ElseIf Type = "1" And RailDirection = "Corner" Then
		VisibleBodies(Type11, False)
		VisibleBodies(Type21, False)
		VisibleBodies(Type12, True)
		VisibleBodies(Type22, False)
		
	ElseIf Type = "2" And RailDirection = "Corner" Then
		VisibleBodies(Type11, False)
		VisibleBodies(Type21, False)
		VisibleBodies(Type12, False)
		VisibleBodies(Type22, True)

	End If

	ThisDoc.Document.Update()
End Sub

Sub VisibleBodies(bodylist As List(Of String), VisibleBody As Boolean)
Dim oDoc As PartDocument
oDoc = ThisDoc.Document
For Each solid As SurfaceBody In oDoc.ComponentDefinition.SurfaceBodies
If bodylist.Contains(solid.Name) Then
	solid.Visible = VisibleBody
End If
Next
End Sub
0 Likes
Accepted solutions (1)
736 Views
4 Replies
Replies (4)
Message 2 of 5

Anonymous
Not applicable

As an alternative, maybe a code that just controls visibility of surface bodies - I've attached a part. It has the parameter, but needs the coding (that's where I'm stuck)

0 Likes
Message 3 of 5

Sergio.D.Suárez
Mentor
Mentor
Accepted solution

Hi, I have not yet opened your new file, try the following code maybe it can be useful. regards

 

 

Sub Main
	
	Dim Type11 As New List(Of String)
		Type11.Add("Type 1-1")	'<- Solid body
		Type11.Add("1-1 A")		'<- Surface body
		Type11.Add("1-1 B")		'<- Surface body
	
	Dim Type21 As New List(Of String)
		Type21.Add("Type 2-1")	'<- Solid body
		Type21.Add("2-1 A")		'<- Surface body
		Type21.Add("2-1 B")		'<- Surface body
		
	Dim Type12 As New List(Of String)
		Type12.Add("Type 1-2")	'<- Solid body
		Type12.Add("1-2 A")		'<- Surface body
		Type12.Add("1-2 B")		'<- Surface body
		
	Dim Type22 As New List(Of String)
		Type22.Add("Type 2-2")	'<- Solid body
		Type22.Add("2-2 A")		'<- Surface body
		Type22.Add("2-2 B")		'<- Surface body
		
	'-----------------------------------------

	If Type = "1" And RailDirection = "Straight" Then
		VisibleBodies(Type11, True)
		VisibleBodies(Type21, False)
		VisibleBodies(Type12, False)
		VisibleBodies(Type22, False)
	
	ElseIf Type = "2" And RailDirection = "Straight" Then
		VisibleBodies(Type11, False)
		VisibleBodies(Type21, True)
		VisibleBodies(Type12, False)
		VisibleBodies(Type22, False)
		
	ElseIf Type = "1" And RailDirection = "Corner" Then
		VisibleBodies(Type11, False)
		VisibleBodies(Type21, False)
		VisibleBodies(Type12, True)
		VisibleBodies(Type22, False)
		
	ElseIf Type = "2" And RailDirection = "Corner" Then
		VisibleBodies(Type11, False)
		VisibleBodies(Type21, False)
		VisibleBodies(Type12, False)
		VisibleBodies(Type22, True)

	End If

	ThisDoc.Document.Update()
End Sub

Sub VisibleBodies(bodylist As List(Of String), VisibleBody As Boolean)

	Dim oDoc As PartDocument  = ThisDoc.Document
	For Each solid As SurfaceBody In oDoc.ComponentDefinition.SurfaceBodies
		If bodylist.Contains(solid.Name) Then
			solid.Visible = VisibleBody
		End If
	Next
	For Each oWS As WorkSurface In oDoc.ComponentDefinition.WorkSurfaces
		For Each Solid As SurfaceBody In oWS.SurfaceBodies
			If bodylist.Contains(Solid.Name) Then
				Solid.Visible = VisibleBody
			End If
		Next
	Next
End Sub

 I hope this helps. regards


Please accept as solution and give likes if applicable.

I am attaching my Upwork profile for specific queries.

Sergio Daniel Suarez
Mechanical Designer

| Upwork Profile | LinkedIn

0 Likes
Message 4 of 5

Sergio.D.Suárez
Mentor
Mentor

 

Dim oDoc As PartDocument  = ThisDoc.Document
Dim oWS As WorkSurface = oDoc.ComponentDefinition.WorkSurfaces.Item(2)
	
For Each solid As SurfaceBody In oWS.SurfaceBodies
	solid.Visible = False
Next

Here I share an idea of how to hide the worksurface through the item. It can be very useful. regards 


Please accept as solution and give likes if applicable.

I am attaching my Upwork profile for specific queries.

Sergio Daniel Suarez
Mechanical Designer

| Upwork Profile | LinkedIn

0 Likes
Message 5 of 5

Anonymous
Not applicable

That's spot on! 🙂

0 Likes