Site Tools

Deleting Blocks

Developer: .NET
Summary: Demonstrates how to delete instance references and definitions.
Notice: The Rhino.NET SDK is deprecated in Rhino 5. This example adapted for the new RhinoCommon SDK is here.


What is the correct way to delete all instances of a block, including the definition?



public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
  // Prompt for the instance (block) name
  MRhinoGetString gs = new MRhinoGetString();
  gs.SetCommandPrompt("Name of block to delete");
  if (gs.CommandResult() != IRhinoCommand.result.success)
    return gs.CommandResult();
  string idef_name = gs.String().Trim();
  if (string.IsNullOrEmpty(idef_name))
    return IRhinoCommand.result.nothing;
  // Find the instance definition by name
  int idef_index = context.m_doc.m_instance_definition_table.FindInstanceDefinition(idef_name, true);
  if (idef_index < 0 || idef_index >= context.m_doc.m_instance_definition_table.InstanceDefinitionCount())
    RhUtil.RhinoApp().Print(string.Format("Block definition \"{0}\" not found.\n", idef_name));
    return IRhinoCommand.result.nothing;
  // Verify the instance definition can be deleted
  IRhinoInstanceDefinition idef = context.m_doc.m_instance_definition_table[idef_index];
  if (idef.IsReference())
    RhUtil.RhinoApp().Print(string.Format("Block definition \"{0}\" is from a reference file.\n", idef_name));
    return IRhinoCommand.result.nothing;
  // Get all of instance references
  IRhinoInstanceObject[] iref_object_list = null;
  int iref_count = idef.GetReferences(out iref_object_list);
  // Try deleting the instance references
  int num_deleted = 0;
  for (int i = 0; i < iref_count; i++)
    IRhinoInstanceObject iref = iref_object_list[i];
    if (null == iref)
    if (iref.IsDeleted() || iref.IsReference())
    MRhinoObjRef obj_ref = new MRhinoObjRef(iref_object_list[i]);
    if (context.m_doc.DeleteObject(obj_ref, true))
  if (num_deleted > 0)
  RhUtil.RhinoApp().Print(string.Format("{0} \"{1}\" block(s) found, {2} deleted.\n", iref_count, idef_name, num_deleted));
  // Try deleting the instance definition
  bool iref_deleted = false;
  if (num_deleted == iref_count)
    if (context.m_doc.m_instance_definition_table.DeleteInstanceDefinition(idef_index, true, false))
      iref_deleted = true;
  if (iref_deleted)
    RhUtil.RhinoApp().Print(string.Format("Block definition \"{0}\" deleted.\n", idef_name));
    RhUtil.RhinoApp().Print(string.Format("Block definition \"{0}\" not deleted.\n", idef_name));
  return IRhinoCommand.result.success;

developer/deleteblock.txt ยท Last modified: 2020/08/14 (external edit)