Set Hierarchical Layer Names
Windows only
Demonstrates how to rename layers in a hierarchical manner using RhinoScript.
Option Explicit
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' SetHierarchicalLayerNames
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub SetHierarchicalLayerNames()
' String that separates layer names
Const separator = "-"
' Get all of the layer names.
Dim all_layer
all_layer = Rhino.LayerNames
' If only one layer, just bail.
If UBound(all_layer) = 0 Then Exit Sub
' Build an array of layers who have no parent
' and that are from a reference file.
Dim root_layers(), layer_count
layer_count = 0
Dim layer_name, parent_layer
For Each layer_name In all_layer
parent_layer = Rhino.ParentLayer(layer_name)
If IsNull(parent_layer) And Rhino.IsLayerReference(layer_name) = vbFalse Then
ReDim Preserve root_layers(layer_count)
root_layers(layer_count) = layer_name
layer_count = layer_count + 1
End If
Next
' If the lists are the same size, then there are not
' child layers. So, just bail.
If UBound(all_layer) = UBound(root_layers) Then Exit Sub
' Process the list of parentless layers
ProcessLayerList root_layers, separator
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ProcessLayerList
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ProcessLayerList(layer_list, separator)
' Process each layer in the array. Note,
' this is a recursive function.
Dim layer_name, layer_children
For Each layer_name In layer_list
ProcessLayer layer_name, separator
Next
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ProcessLayer
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub ProcessLayer(layer_name, separator)
' Get the layer's parent
Dim parent_layer, renamed_layer, layer_children
parent_layer = Rhino.ParentLayer(layer_name)
' If the layer has a parent, then modify its name
' to include its parent name.
If IsNull(parent_layer) Then
renamed_layer = layer_name
Else
renamed_layer = parent_layer & separator & layer_name
Rhino.RenameLayer layer_name, renamed_layer
End If
' Get the layer's immediate children
layer_children = Rhino.LayerChildren(renamed_layer)
If IsArray(layer_children) Then
' Process these layers too
ProcessLayerList layer_children, separator
End If
End Sub