Site Tools


Replacing Points with Blocks

RhinoScript

Summary: Demonstrates how to replace point objects with block objects using RhinoScript.

Question

I have a number of point objects in my model. I would like to replace them with a block so they appear as markers. How can I do this without running the Insert command a bunch of times?

Answer

The following sample code demonstrates how to replace point objects with block objects using RhinoScript. To use this script:

  1. Save the attached script to a text file with a .RVB extension.
  2. Load the file into RhinoScript using the LoadScript command.
  3. Run the script over and over using the RunScript command.

See the introduction section of the RhinoScript help file for more details on loading and running scripts.

 ' 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

Also, 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
developer/scriptsamples/replacepointswithblocks.txt ยท Last modified: 2010/01/26 (external edit)