Transforming Breps
Windows only
Samples
The Short Way
CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context ) { CRhinoGetObject go; go.SetCommandPrompt( L"Select brep" ); go.SetGeometryFilter( ON::brep_object ); go.GetObjects(1,1); if( go.CommandResult() != success ) return go.CommandResult(); CRhinoObjRef ref = go.Object(0); // Simple translation transformation ON_Xform xform; xform.Translation( ON_3dVector(18,-18,-25) ); context.m_doc.TransformObject( ref, xform ); context.m_doc.Redraw(); return success; }
The Long Way
CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context ) { CRhinoGetObject go; go.SetCommandPrompt( L"Select brep" ); go.SetGeometryFilter( ON::brep_object ); go.GetObjects(1,1); if( go.CommandResult() != success ) return go.CommandResult(); const CRhinoObjRef& ref = go.Object(0); const CRhinoObject* obj = ref.Object(); if( !obj ) return failure; const ON_Brep* brep = ref.Brep(); if( !brep ) return failure; ON_Brep* dupe = brep->Duplicate(); if( !dupe ) return failure; // Simple translation transformation ON_Xform xform; xform.Translation( ON_3dVector(18,-18,-25) ); if( !dupe->Transform( xform ) ) { RhinoApp().Print( L"Unable to transform object.\n" ); delete dupe; return failure; } ON_3dmObjectAttributes attribs = obj->Attributes(); context.m_doc.AddBrepObject( *dupe, &attribs ); // Since CRhinoDoc::AddBrepObject() make a copy of the input // brep, we are responsible for deleting the original. Otherwise // we will leak memory; delete dupe; // Delete the selected object context.m_doc.DeleteObject( ref ); context.m_doc.Redraw(); return success; }