top of page
Writer's pictureDavid Mans

Documenter

💻 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 " &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
 


6 views

Recent Posts

See All

Comments


bottom of page