The following sample RhinoScript code demonstrates how to render named views. In this script, the user will be prompted to select from a list of both user-defined named views and standard named view, such as Top, Left, etc. The script will then output render bitmaps into a selected folder. This script uses the currently active view as the render window, thus the size of the rendered images is dependent on how large the active view is at the time. But, this script could easily be modified to render to any size window.
To use this script:
See the introduction section of the RhinoScript help file for more details on loading and running scripts.
Option Explicit
' Renders one or more named views to a user-defined folder
Sub RenderNamedViews
' Let the user pick the named view to render
Dim render_views
render_views = GetRenderViews
If Not IsArray(render_views) Then Exit Sub
' Let the user pick the folder to save the renderings
Dim folder
folder = Rhino.BrowseForFolder(Rhino.DocumentPath, "Browse for folder", "Batch Render")
If IsNull(folder) Then Exit Sub
' Save the active view
Dim saved_view_name
saved_view_name = Rhino.CurrentView
Rhino.Command "_-NamedView _Save $$_save_$$ _Enter", 0
' Process each named view
Dim view
For Each view In render_views
If IsStandardView(view) Then
' If the named view is a standard view
Rhino.Command "_-SetView _World _" & view, 0
Else
' If the named view is not a standard view
Rhino.Command "_-NamedView _Restore " & view & " _Enter", 0
End If
' Render the scene with the current render engine
Rhino.Command "_-Render"
' Save the render to a jpg file
Rhino.Command "_-SaveRenderWindowAs " & GetRenderFileName(folder, view, "jpg")
' Close the render window
Rhino.Command "_-CloseRenderWindow"
Next
' Restore the active view
Rhino.Command "_-NamedView _Restore $$_save_$$ _Enter", 0
Rhino.RenameView Rhino.CurrentView, saved_view_name
' Delete the temporary named view
Rhino.Command "_-NamedView _Delete $$_save_$$ _Enter", 0
End Sub
' Returns an array of view names to render
Function GetRenderViews()
GetRenderViews = vbNull
Dim all_views, selected_views
all_views = GetAllViews
selected_views = Rhino.MultiListBox(all_views, "Select views to render.", "Batch Render")
If IsArray(selected_views) Then
GetRenderViews = selected_views
End If
End Function
' Returns a render-formatted file name
Function GetRenderFileName(folder, view, ext)
Dim doc, file, temp
doc = Rhino.DocumentName
temp = "_" & view & "." & ext
file = LCase(Replace(doc, ".3dm", temp, 1, -1, 1))
GetRenderFileName = Chr(34) & folder & file & Chr(34)
End Function
' Returns an array of both standard and named view names
Function GetAllViews()
Dim all_views, std_views, named_views
std_views = GetStandardViews
named_views = Rhino.NamedViews
If IsArray(named_views) Then
all_views = Rhino.JoinArrays(std_views, named_views)
all_views = Rhino.CullDuplicateStrings(all_views)
GetAllViews = Rhino.SortStrings(all_views)
Else
GetAllViews = std_views
End If
End Function
' Returns an array of standard view names
Function GetStandardViews()
GetStandardViews = Array("Back", "Bottom", "Front", "Left", "Perspective", "Right", "Top")
End Function
' Verifies a string is a standard view name
Function IsStandardView(str)
IsStandardView = vbFalse
Dim std_views, i
std_views = GetStandardViews
For i = 0 To UBound(std_views)
If StrComp(std_views(i), str, 1) = 0 Then
IsStandardView = vbTrue
Exit For
End If
Next
End Function