Documenter

 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.

Rhino Script

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 " &amp; 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 = "_" &amp; name &amp; "_" &amp; view &amp; "." &amp; ext 
	file = LCase(Replace(doc, ".3dm", temp, 1, -1, 1)) 
	GetRenderFileName = Chr(34) &amp; folder &amp; file &amp; Chr(34) 
End Function