Renaming Layers
Windows only
Overview
Rhino layers (CRhinoLayer
) are stored on a layer table (CRhinoLayerTable
) which is located on the active document. The process for modifying an existing layer, such as changing its name, is:
- Get the existing layer.
- Make a copy of it.
- Modify the copy.
- Call
CRhinoLayerTable::ModifyLayer()
.
Sample
The following code sample demonstrates how to rename an existing layer…
CRhinoCommand::result CCommandTestSdk::RunCommand(const CRhinoCommandContext& context)
{
// Get the layer name
CRhinoGetString gs;
gs.SetCommandPrompt( L"Name of layer to rename" );
gs.GetString();
if( gs.CommandResult() != CRhinoCommand::success )
return gs.CommandResult();
// Validate the string
ON_wString layer_name = gs.String();
layer_name.TrimLeftAndRight();
if( layer_name.IsEmpty() )
return CRhinoCommand::nothing;
// Get a reference to the layer table
CRhinoLayerTable& layer_table = context.m_doc.m_layer_table;
// Find the layer
int layer_index = layer_table.FindLayer( layer_name );
if( layer_index < 0 )
{
RhinoApp().Print( L"Layer \"%s\" does not exist.\n", layer_name );
return CRhinoCommand::cancel;
}
// Get the new layer name
gs.SetCommandPrompt( L"New layer name" );
gs.GetString();
if( gs.CommandResult() != CRhinoCommand::success )
return gs.CommandResult();
// Validate the string
ON_wString new_name = gs.String();
layer_name.TrimLeftAndRight();
if( layer_name.IsEmpty() )
return CRhinoCommand::nothing;
// Compare both names
if( layer_name.CompareNoCase(new_name) == 0 )
return CRhinoCommand::nothing;
// Get the layer
const CRhinoLayer& layer = layer_table[layer_index];
// Make a copy of it, and modify the name
ON_Layer onlayer( layer );
onlayer.SetLayerName( new_name );
// Modify the exising layer with the new definition
CRhinoCommand::result rc = CRhinoCommand::cancel;
if( layer_table.ModifyLayer(onlayer, layer_index) )
rc = CRhinoCommand::success;
return rc;
}