Rotate Objects Around Center
Windows only
Demonstrates how rotate objects around the center point of their bounding box.
CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
{
// Select objects to rotate
CRhinoGetObject go;
go.SetCommandPrompt( L"Select objects to rotate" );
go.GetObjects( 1, 0 );
if( go.CommandResult() != success )
return go.CommandResult();
// Rotation angle (in degrees)
CRhinoGetNumber gn;
gn.SetCommandPrompt( L"Rotation angle" );
gn.SetDefaultNumber( m_angle );
gn.GetNumber();
if( gn.CommandResult() != success )
return gn.CommandResult();
// Validate input
double angle = gn.Number();
if( angle == 0 )
return nothing;
m_angle = angle;
// Get the active view's construction plane
ON_Plane plane = RhinoActiveCPlane();
// Do not split objects that get kinky
// when they are transformed.
CRhinoKeepKinkySurfaces keep_kinky_srfs;
int i;
for( i = 0; i < go.ObjectCount(); i++ )
{
// Get an object reference
const CRhinoObjRef& ref = go.Object(i);
// Get the real object
const CRhinoObject* obj = ref.Object();
if( !obj )
continue;
// Get the object's tight bounding box
ON_BoundingBox bbox;
if( !obj->GetTightBoundingBox(bbox, false, 0) )
continue;
// Create transformation matrix
ON_Xform xform;
xform.Rotation( m_angle * ON_PI / 180.0, plane.zaxis, bbox.Center() );
// Transform the object
context.m_doc.TransformObject( obj, xform, true, true, true );
}
context.m_doc.Redraw();
return success;
}