💻 Rhino 5
🔼 Rhino Script
🛠️ Visual Basic
This rhinoscript takes a collection of objects and produces a series of documentation drawings in Orthographic, Auxillary, and Isometric projection producing a total of 26 drawings. Using a batch make2d command, as well as an application of batch render (adapted from work by Che Wei Wang) this script allows for basic documentation of an object within the tolerances of the given tools.
Option Explicit
'Script written by <David Mans (adapted from work by Che Wei Wang www.cwwang.com>
'Script copyrighted by <Neoarchaic Studio>
'Script version Sunday, September 28, 2008 12:18:06 AM
Call Main()
Sub Main()
Dim objects, folder, name, arrResults, arrDrawings
objects = Rhino.GetObjects("Select Objects")
If isNull(objects) Then Exit Sub
arrDrawings = Rhino.GetBoolean("DrawingTypes", array("orthoElev", "no", "yes", "auxElev", "no", "yes", "auxTop", "no", "yes", "auxBottom", "no", "yes", "isoTop", "no", "yes", "isoBottom", "no", "yes"), array(True, False, False, False, False, True))
arrResults = Rhino.GetBoolean("Output Options", array("drawings", "no", "yes", "renders", "no", "yes"), array(True, False))
If arrResults(1) = True Then
name = Rhino.GetString("Enter prefix for jpeg file naming")
folder = Rhino.BrowseForFolder("testFolder", "SelectFolder", "RenderFolder")
If IsNull(folder) Then Exit Sub
End If
Call multiIso(objects, array(0, 0, 0), folder, name, arrResults, arrDrawings)
End Sub
Function multiIso(arrObjects, origin, folder, name, arrBool, arrMode)
multiIso = Null
Dim strView
Dim k: k = 0
Dim count
Dim arrPoint(),arrTitle()
ReDim arrPoint(k),arrTitle(k)
If arrMode(0) = True Then
ReDim Preserve arrPoint(k+5),arrTitle(k+5),arrSwitch(k+5)
'plans and elevations
arrTitle(k) = "Top"
arrPoint(k) = Array(0, 0, 1)
arrTitle(k + 1) = "Bottom"
arrPoint(k + 1) = Array(0, 0, -1)
arrTitle(k + 2) = "Front"
arrPoint(k + 2) = Array(0, -1, 0)
arrTitle(k + 3) = "Back"
arrPoint(k + 3) = Array(0, 1, 0)
arrTitle(k + 4) = "Left"
arrPoint(k + 4) = Array(-1, 0, 0)
arrTitle(k + 5) = "Right"
arrPoint(k + 5) = Array(1, 0, 0)
k = k + 5
End If
If arrMode(1) = True Then
ReDim Preserve arrPoint(k+4),arrTitle(k+4),arrSwitch(k+4)
'auxilary orthographic elevation
arrSwitch(k) = True
arrTitle(k) = "FrontLeft"
arrPoint(k) = Array(-1, -1, 0)
arrTitle(k + 1) = "FrontRight"
arrPoint(k + 1) = Array(1, -1, 0)
arrTitle(k + 2) = "BackLeft"
arrPoint(k + 2) = Array(-1, 1, 0)
arrTitle(k + 3) = "BackRight"
arrPoint(k + 3) = Array(1, 1, 0)
k = k + 4
End If
If arrMode(2) = True Then
ReDim Preserve arrPoint(k+4),arrTitle(k+4),arrSwitch(k+4)
'auxilary orthographic top
arrSwitch(k) = True
arrTitle(k) = "TopFront"
arrPoint(k) = Array(0, -1, 1)
arrTitle(k + 1) = "TopBack"
arrPoint(k + 1) = Array(0, 1, 1)
arrTitle(k + 2) = "TopLeft"
arrPoint(k + 2) = Array(-1, 0, 1)
arrTitle(k + 3) = "TopRight"
arrPoint(k + 3) = Array(1, 0, 1)
k = k + 4
End If
If arrMode(3) = True Then
ReDim Preserve arrPoint(k+4),arrTitle(k+4),arrSwitch(k+4)
'auxilary orthographic bottom
arrSwitch(k) = True
arrTitle(k) = "BottomFront"
arrPoint(k) = Array(0, -1, -1)
arrTitle(k + 1) = "BottomBack"
arrPoint(k + 1) = Array(0, 1, -1)
arrTitle(k + 2) = "BottomLeft"
arrPoint(k + 2) = Array(-1, 0, -1)
arrTitle(k + 3) = "BottomRight"
arrPoint(k + 3) = Array(1, 0, -1)
k = k + 4
End If
If arrMode(4) = True Then
ReDim Preserve arrPoint(k+4),arrTitle(k+4),arrSwitch(k+4)
'axonometric isometric top
arrSwitch(k) = True
arrTitle(k) = "TopFrontLeft"
arrPoint(k) = Array(-1, -1, 1)
arrTitle(k + 1) = "TopFrontRight"
arrPoint(k + 1) = Array(1, -1, 1)
arrTitle(k + 2) = "TopBackLeft"
arrPoint(k + 2) = Array(-1, 1, 1)
arrTitle(k + 3) = "TopBackRight"
arrPoint(k + 3) = Array(1, 1, 1)
k = k + 4
End If
If arrMode(5) = True Then
ReDim Preserve arrPoint(k+4),arrTitle(k+4),arrSwitch(k+4)
'axonometric isometric bottom
arrSwitch(k) = True
arrTitle(k) = "BottomFrontLeft"
arrPoint(k) = Array(-1, -1, -1)
arrTitle(k + 1) = "BottomFrontRight"
arrPoint(k + 1) = Array(1, -1, -1)
arrTitle(k + 2) = "BottomBackLeft"
arrPoint(k + 2) = Array(-1, 1, -1)
arrTitle(k + 3) = "BottomBackRight"
arrPoint(k + 3) = Array(1, 1, -1)
k = k + 4
End If
count = k - 1
Dim arrOrigin, vect
arrOrigin = Array(0, 0, 0)
Call Rhino.Command("-_SetView c t ", False)
strView = Rhino.CurrentView()
Dim j,m,n,u
u = 0
Dim obox: obox = Rhino.BoundingBox(arrObjects)
Dim i,r,s,t
Dim arrLabel
Dim invSel
Dim arrDrawings(),bbox(), dblLength(), dblHeight(), dblDist
ReDim arrDrawings(count),bbox(count), dblLength(count), dblHeight(count)
Call Rhino.EnableRedraw(False)
If arrBool(0) = True Then
If j = 0 And m = 0 And n = 0 Then
Call Rhino.SelectObjects(arrObjects)
Call Rhino.Command("-_Make2d ", False)
Call Rhino.DeleteObjects(Rhino.SelectedObjects())
Else
Call Rhino.Command("-_SetView c t ", False)
End If
Call Rhino.ViewProjection(strView, 1)
For i = 0 To count Step 1
Call Rhino.ViewCameraTarget(strView, arrPoint(i), arrOrigin)
Call Rhino.UnselectAllObjects()
Call Rhino.SelectObjects(arrObjects)
Call Rhino.ZoomSelected()
Call Rhino.Command("-_Make2d d c _Enter", False)
arrDrawings(i) = Rhino.SelectedObjects()
bbox(i) = Rhino.BoundingBox(arrDrawings(i))
dblLength(i) = Rhino.Distance(bbox(i)(0), bbox(i)(1))
dblHeight(i) = Rhino.Distance(bbox(i)(0), bbox(i)(3))
Call Rhino.UnselectAllObjects()
Next
r = 0
s = 0
t = 0
For i = 0 To count Step 1
ReDim Preserve arrHeight(s)
arrHeight(s) = dblHeight(i)
s = s + 1
If arrSwitch(i) = True Then
t = t + Rhino.max(arrHeight) + 3
ReDim arrHeight(0)
s = 0
r = 0
End If
If r > 0 Then
r = dblLength(i) * 0.5 + dblLength(i - 1) * 0.5 + r
End If
Call Rhino.MoveObjects(arrDrawings(i), origin, array(r, u + t, 0))
Call Rhino.AddText(CStr(arrTitle(i)), array(r, u + t - dblHeight(i) * 0.2, 0), dblHeight(i) * 0.1)
r = r + 3
If i = count Then
t = t + dblHeight(i) * 1.5
End If
Next
End If
If arrBool(1) = True Then
If isArray(arrObjects) Then
Call Rhino.SelectObjects(arrObjects)
Else
Call Rhino.SelectObject(arrObjects)
End If
invSel = Rhino.InvertSelectedObjects()
If isNull(invSel) Then
Else
Call Rhino.HideObjects(invSel)
End If
Call Rhino.UnselectAllObjects()
Call Rhino.Command("-_SetView c t ", False)
For i = 0 To count Step 1
Call Rhino.ViewCameraTarget(strView, arrPoint(i), arrOrigin)
Call Rhino.SelectObjects(arrObjects)
Call Rhino.ZoomSelected()
Call Rhino.Command("_-Render", False)
Call Rhino.Command("_-SaveRenderWindowAs " & GetRenderFileName(name, folder, CStr(arrTitle(i)), "png"), False)
Call Rhino.Command("_-CloseRenderWindow", False)
Call Rhino.UnselectAllObjects()
Next
End If
Call Rhino.EnableRedraw(True)
Call Rhino.Command("-_SetView c t", False)
Call Rhino.Command("-_Show _Enter", False)
Call Rhino.ZoomExtents()
End Function
Function GetRenderFileName(name, folder, view, ext)
Dim doc, file, temp
doc = Rhino.DocumentName
temp = "_" & name & "_" & view & "." & ext
file = LCase(Replace(doc, ".3dm", temp, 1, -1, 1))
GetRenderFileName = Chr(34) & folder & file & Chr(34)
End Function
Comments