A pool of resources
Documentor

    


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.


platform: Rhino Script
function: Representation Aid

 


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


Reply