Click or drag to resize

InstanceDefinitionTableModify Method (Int32, String, String, Boolean)

Modifies the instance definition name and description. Does not change instance definition ID or geometry.

Namespace:  Rhino.DocObjects.Tables
Assembly:  RhinoCommon (in RhinoCommon.dll)
Since: 5.0
public bool Modify(
	int idefIndex,
	string newName,
	string newDescription,
	bool quiet


Type: SystemInt32
The index of the instance definition to be modified.
Type: SystemString
The new name.
Type: SystemString
The new description string.
Type: SystemBoolean
If true, information message boxes pop up when illegal changes are attempted.

Return Value

Type: Boolean
true if successful.
using Rhino;
using Rhino.Input;
using Rhino.Commands;

namespace examples_cs
  public class RenameBlockCommand : Command
    public override string EnglishName { get { return "csRenameBlock"; } }

    protected override Result RunCommand(RhinoDoc doc, RunMode mode)
      // Get the name of the insance definition to rename
      var instance_definition_name = "";
      var rc = RhinoGet.GetString("Name of block to rename", true, ref instance_definition_name);
      if (rc != Result.Success)
        return rc;
      if (string.IsNullOrWhiteSpace(instance_definition_name))
        return Result.Nothing;

      // Verify instance definition exists
      var instance_definition = doc.InstanceDefinitions.Find(instance_definition_name, true);
      if (instance_definition == null) {
        RhinoApp.WriteLine("Block '{0}' not found.", instance_definition_name);
        return Result.Nothing;

      // Verify instance definition is rename-able
      if (instance_definition.IsDeleted || instance_definition.IsReference) {
        RhinoApp.WriteLine("Unable to rename block '{0}'.", instance_definition_name);
        return Result.Nothing;

      // Get the new instance definition name
      string instance_definition_new_name = "";
      rc = RhinoGet.GetString("Name of block to rename", true, ref instance_definition_new_name);
      if (rc != Result.Success)
        return rc;
      if (string.IsNullOrWhiteSpace(instance_definition_new_name))
        return Result.Nothing;

      // Verify the new instance definition name is not already in use
      var existing_instance_definition = doc.InstanceDefinitions.Find(instance_definition_new_name, true);
      if (existing_instance_definition != null && !existing_instance_definition.IsDeleted) {
        RhinoApp.WriteLine("Block '{0}' already exists.", existing_instance_definition);
        return Result.Nothing;

      // change the block name
      if (!doc.InstanceDefinitions.Modify(instance_definition.Index, instance_definition_new_name, instance_definition.Description, true)) {
        RhinoApp.WriteLine("Could not rename {0} to {1}", instance_definition.Name, instance_definition_new_name);
        return Result.Failure;

      return Result.Success;
import rhinoscriptsyntax as rs
from scriptcontext import doc

def Rename():
    blockName = rs.GetString("block to rename")
    instanceDefinition = doc.InstanceDefinitions.Find(blockName, True)
    if not instanceDefinition: 
        print "{0} block does not exist".format(blockName)

    newName = rs.GetString("new name")
    instanceDefinition = doc.InstanceDefinitions.Find(newName, True)
    if instanceDefinition: 
        print "the name '{0}' is already taken by another block".format(newName)

    rs.RenameBlock(blockName, newName)

if __name__ == "__main__":
See Also