top of page
Writer's pictureDavid Mans

Transfer Layer Properties

💻 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
 


3 views

Recent Posts

See All

Comments


bottom of page