Extend Surface
Windows only
Demonstrates how to use RhinoExtendSurface() to extend a surface object.
CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
{
CRhinoGetObject go;
go.SetCommandPrompt( L"Select edge of surface to extend" );
go.SetGeometryFilter(CRhinoGetObject::edge_object);
go.SetGeometryAttributeFilter( CRhinoGetObject::edge_curve );
go.GetObjects( 1, 1 );
if( go.CommandResult() != CRhinoCommand::success )
return go.CommandResult();
const CRhinoObjRef& objref = go.Object(0);
const ON_Surface* srf = objref.Surface();
if( !srf )
{
RhinoApp().Print( L"Unable to extend polysurfaces.\n" );
return CRhinoCommand::nothing;
}
const ON_Brep* brep = objref.Brep();
const ON_BrepFace* face = objref.Face();
if( !brep | !face | face->m_face_index < 0 )
return CRhinoCommand::failure;
if( !brep->IsSurface() )
{
RhinoApp().Print( L"Unable to extend trimmed surfaces.\n" );
return CRhinoCommand::nothing;
}
const ON_BrepTrim* trim = objref.Trim();
if( !trim )
return CRhinoCommand::failure;
ON_Surface::ISO edge_index( trim->m_iso );
int dir = edge_index % 2;
if( srf->IsClosed(1-dir) )
{
RhinoApp().Print(L"Unable to extend surface at seam.\n" );
return CRhinoCommand::nothing;
}
if( edge_index < ON_Surface::W_iso | edge_index > ON_Surface::N_iso )
{
RhinoApp().Print( L"Selected edge must be an underlying surface edge.\n" );
return CRhinoCommand::nothing;
}
ON_Surface* myface = srf->DuplicateSurface();
if( !myface )
return CRhinoCommand::failure;
bool rc = RhinoExtendSurface( myface, edge_index, 5.0, true);
if( rc )
{
ON_Brep* mybrep = new ON_Brep();
mybrep->Create( myface );
CRhinoBrepObject* obj = new CRhinoBrepObject();
obj->SetBrep( mybrep );
context.m_doc.ReplaceObject( CRhinoObjRef(objref.Object()), obj );
context.m_doc.Redraw();
}
return CRhinoCommand::success;
}