Offsetting Meshes
Windows only
Problem
RhinoScript can generate a closed mesh as a result of a base mesh and an offset. Rhino’s OffsetMesh command does this task very well if you use the solidify option, but RhinoScript’s MeshOffset
function does not have this option. Let’s take a look at creating a solid mesh with RhinoScript…
Solution
RhinoScript’s MeshOffset
function does not have a solidify option, but you can accomplish what you want by simply scripting Rhino’s OffsetMesh command, instead of calling RhinoScript’s MeshOffset
function.
The following example function will offset a mesh by scripting Rhino’s OffsetMesh command…
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Offset and solidify a mesh object '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Function OffsetMeshSolidify(strMesh, dblDistance) ' Declare local variables Dim arrSaved, strCommand ' Save any selected objects arrSaved = Rhino.SelectedObjects ' Unselect all objects Rhino.UnSelectAllObjects ' Select the mesh Call Rhino.SelectObject(strMesh) ' Script the OffsetMesh command strCommand = "_-OffsetMesh _CapMeshes=_Yes " & CStr(dblDistance) & " _Enter" Call Rhino.Command(strCommand, 0) ' Get the results of the command If Rhino.LastCommandResult = 0 Then OffsetMeshSolidify = Rhino.LastCreatedObjects()(0) Else OffsetMeshSolidify = Null End If ' Unselect all objects Rhino.UnSelectAllObjects ' If any objects were selected before calling ' this function, re-select them If IsArray(arrSaved) Then Rhino.SelectObjects(arrSaved) End Function
You can test the above function with the following code…
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' This procedure tests the OffsetMeshSolidify function '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Sub TestOffsetMeshSolidify() ' Declare local constants and variables Const rhMesh = 32 Dim strMesh, dblDistance, strOffset ' Select a mesh to offset strMesh = Rhino.GetObject("Select mesh to offset", rhMesh, True) If IsNull(strMesh) Then Exit Sub ' Get the offset distance dblDistance = Rhino.GetReal("Offset distance", 1.0) If IsNull(dblDistance) Then Exit Sub If (dblDistance = 0.0) Then Exit Sub ' Call our mesh offsetting function... strOffset = OffsetMeshSolidify(strMesh, dblDistance) End Sub