Replacing Points with Blocks
Windows only
Problem
Imagine you have a number of point objects in your model and you would like to replace them with a block so they appear as markers. How can this be done without running the Insert command a bunch of times?
Solution
The following sample code demonstrates how to replace point objects with block objects using RhinoScript…
' Replaces points with blocks Sub ReplacePointsWithBlocks ' Select points to replace with a block Dim arrObjects arrObjects = Rhino.GetObjects("Select points to replace with a block", 1, True, True) If Not IsArray(arrObjects) Then Exit Sub ' Get the names of all block definitions in the document Dim arrBlocks arrBlocks = Rhino.BlockNames(True) If Not IsArray(arrBlocks) Then Rhino.Print "No block definitions found in the document." Exit Sub End If ' Select a block name from a list Dim strBlock strBlock = Rhino.ListBox(arrBlocks, "Select block", "Replace Points") If IsNull(strBlock) Then Exit Sub ' Turn off redrawing (faster) Rhino.EnableRedraw True ' Process each selected point object Dim strObject, arrPoint For Each strObject In arrObjects ' Get the point object's coordinates arrPoint = Rhino.PointCoordinates(strObject) ' Insert the block at that location Rhino.InsertBlock strBlock, arrPoint Next ' Delete all of the point objects Rhino.DeleteObjects arrObjects ' Turn redrawing back on Rhino.EnableRedraw True End Sub
Inverse
The following script will do just the opposite - it will replace block objects with point objects…
' Replaces blocks with points Sub ReplaceBlocksWithPoints ' Select blocks to replace with points Dim arrObjects arrObjects = Rhino.GetObjects("Select blocks to replace with points", 4096, True, True) If Not IsArray(arrObjects) Then Exit Sub ' Turn off redrawing (faster) Rhino.EnableRedraw True ' Process each selected block object Dim strObject, arrPoint For Each strObject In arrObjects ' Get the block's insertion point arrPoint = Rhino.BlockInstanceInsertPoint(strObject) ' Add a point object at that location Rhino.AddPoint arrPoint Next ' Delete all of the block objects Rhino.DeleteObjects arrObjects ' Turn redrawing back on Rhino.EnableRedraw True End Sub