💻 Rhino 5
🔼 Rhino Script
🛠️ Visual Basic
This tool takes the Layer Color, Print Width, Line Type, and Print Color from a user-selected set of layers and exports them along with the corresponding layer names to an RLF (Rhino Layer Format) file, which can be opened in any text editor. This file can be loaded into another rhino session and all layers with the corresponding names will be updated to match the properties of the layers from the source file. This makes it simple to match appearance from one file to the next.
The command works as follows
Run the command TransferLayerProperties in the Rhino command line
Toggle between Export and Import
Select the Layers to either read from or override
Select the File path for importing or exporting
The rhino script can be directly copied from below and the and downloadable rhino plugin contains the command.
Option Explicit
'Script written by <David Mans>
'Script copyrighted by <NeoArchaic || Grimshaw Architects>
'Script version Tuesday, 08 December 2015 12:15:08
Call Main()
Sub Main()
Dim Status
'CHOOSE TO IMPORT OR EXPORT
Status = Rhino.GetBoolean("Import or Export", array("Type", "Import", "Export"), array(True))
If (IsNull(Status)) Then Exit Sub
Dim i,j,k
Dim File
Dim Lyrs
If Status(0) Then
'OPTION FOR EXPORTING
Lyrs = Rhino.GetLayers("Select Layers to Export", False)
If (IsNull(Lyrs)) Then Exit Sub
Dim Lines()
ReDim Lines((ubound(Lyrs)+1)*5-1)
For i = 0 To ubound(Lyrs) Step 1
Dim Name, Lcolor, Ptype, Pcolor, Pwidth
Name = Rhino.LayerName(Lyrs(i), False)
Lcolor = Rhino.LayerColor(Lyrs(i))
Ptype = Rhino.LayerLinetype(Lyrs(i))
Pcolor = Rhino.LayerPrintColor(Lyrs(i))
Pwidth = Rhino.LayerPrintWidth(Lyrs(i)) Lines(i * 5 + 0) = cstr(Name)
Lines(i * 5 + 1) = cstr(Lcolor)
Lines(i * 5 + 2) = cstr(Ptype)
Lines(i * 5 + 3) = cstr(Pcolor)
Lines(i * 5 + 4) = cstr(Pwidth)
Next
File = Rhino.SaveFileName("Save", "Text Files (*.RLF)|*.rlf",,, "Text Files (*.RLF)|*.rlf")
If (IsNull(File)) Then Exit Sub
Call Rhino.WriteTextFile(File, Lines, False) Else 'OPTION FOR IMPORTING
File = Rhino.OpenFileName("Open", "Text Files (*.RLF)|*.rlf")
If (IsNull(File)) Then Exit Sub
Dim Txt Txt = Rhino.ReadtextFile(file, False, False)
If (IsNull(Txt)) Then Exit Sub
Dim Names, Lcolors, Ptypess, Pcolors, Pwidths
k = (ubound(Txt) + 1) / 5
ReDim Lcolors(k-1)
ReDim Ptypess(k-1)
ReDim Pcolors(k-1)
ReDim Pwidths(k-1)
Set Names = CreateObject("Scripting.Dictionary")
For i = 0 To k - 1 Step 1
If Not Names.Exists(cstr(Txt(i * 5 + 0))) Then
Names.add cstr(Txt(i * 5 + 0)), cstr(i)
End If
Lcolors(i) = Txt(i * 5 + 1)
Ptypess(i) = Txt(i * 5 + 2)
Pcolors(i) = Txt(i * 5 + 3)
Pwidths(i) = Txt(i * 5 + 4)
Next
Lyrs = Rhino.GetLayers("Select Layers to Override", False)
If (IsNull(Lyrs)) Then Exit Sub
For i = 0 To ubound(Lyrs) Step 1
Dim Current, FullName
Current = Rhino.LayerName(Lyrs(i), False)
If Names.Exists(Current) Then
j = int(Names.item(Current))
Call Rhino.LayerColor(Lyrs(i), int(Lcolors(j)))
Call Rhino.LayerLinetype(Lyrs(i), cstr(Ptypess(j)))
Call Rhino.LayerPrintColor(Lyrs(i), int(Pcolors(j)))
Call Rhino.LayerPrintWidth(Lyrs(i), cdbl(Pwidths(j)))
End If
Next
End If
End Sub
Comments