💻 Rhino 5
🔼 Rhino Script
🛠️ Visual Basic
It may be a very simple script, but it is a handy one to have around. The command is modeled after adobe Illustrator’s transform each feature and follows its namesake.
Option Explicit
'Script written by <David Mans>
'Script copyrighted by <Neoarchaic Design>
'Script version Thursday, April 10, 2008 11:13:06 PM
Call Main()
Sub Main()
Dim objects
objects = Rhino.GetObjects("Select Objects")
If isNull(objects) Then Exit Sub
Call Rhino.enableredraw(False)
transformEach(objects)
Call Rhino.enableredraw(True)
End Sub
Function transformEach(objects)
transformEach = Null
Dim arrItems, arrValues, arrReturns
arrItems = array("rotate_X", "rotate_Y", "rotate_Z", "scale_X", "scale_Y", "scale_Z")
arrValues = array(0, 0, 0, 1, 1, 1)
arrReturns = Rhino.PropertyListBox(arrItems, arrValues,, "Transform Parameters")
If isNull(arrReturns) Then Exit Function
Dim i,count
Dim bBox,tempLn,origin,world
count = uBound(objects)
For i = 0 To count Step 1
'determine each objects center
bBox = Rhino.BoundingBox(objects(i))
tempLn = Rhino.AddLine(bBox(0), bBox(6))
origin = Rhino.CurveMidPoint(tempLn)
world = Rhino.WorldXYPlane()
'if scale values have been changed scale each object according to each of the three independent world axis
If arrReturns(3) <> 0 Or arrReturns(4) <> 0 Or arrReturns(5) <> 0 Then
Call Rhino.ScaleObject(objects(i), origin, array(CDbl(arrReturns(3)), CDbl(arrReturns(4)), CDbl(arrReturns(5))))
End If
'if rotation values have been changed rotate each object about its local world based axis
If arrReturns(0) <> 0 Then
Call Rhino.RotateObject(objects(i), origin, CDbl(arrReturns(0)), world(1))
End If
If arrReturns(1) <> 0 Then
Call Rhino.RotateObject(objects(i), origin, CDbl(arrReturns(1)), world(2))
End If
If arrReturns(2) <> 0 Then
Call Rhino.RotateObject(objects(i), origin, CDbl(arrReturns(2)), world(3))
End If
Call Rhino.DeleteObject(tempLn)
Next
End Function
Comments