Hi;
I want to merge polysurface into a single NURBS surface with my code, but aways failed. What wrong with my code?
CRhinoGetObject go;
go.SetCommandPrompt(L"select surfaces");
go.GetObjects(1, 0);
if (go.CommandResult() != CRhinoCommand::success)
{
return CRhinoCommand::cancel;
}
ON_2dPoint p(go.Object(0).Surface()->Domain(0).Mid(), go.Object(0).Surface()->Domain(1).Max());
ON_2dPoint p1(go.Object(1).Surface()->Domain(0).Mid(), go.Object(1).Surface()->Domain(1).Min());
ON_Brep* br_me = RhinoMergeSrf(
go.Object(0).Surface()->BrepForm(),
go.Object(1).Surface()->BrepForm(),
RhinoApp().ActiveDoc()->AbsoluteTolerance(),
RhinoApp().ActiveDoc()->AngleToleranceRadians(),
&p, &p1, 1.0, true
);
RhinoApp().ActiveDoc()->AddBrepObject(*br_me);
return CRhinoCommand::success;
dale
(Dale Fugier)
2
Hi @suc_kiet,
Does this example help any?
CRhinoCommand::result CCommandTest::RunCommand(const CRhinoCommandContext& context)
{
CRhinoGetObject go;
go.SetCommandPrompt(L"Select a pair of surfaces to merge");
go.SetGeometryFilter(CRhinoGetObject::surface_object);
go.EnableSubObjectSelect(false);
go.EnableReferenceObjectSelect(false);
go.GetObjects(2, 2);
if (go.CommandResult() != CRhinoCommand::success)
return go.CommandResult();
CRhinoObjRef objref[2];
const ON_Brep* brep[2] = { nullptr, nullptr };
ON_2dPoint picked_point[2] = { ON_2dPoint::UnsetPoint, ON_2dPoint::UnsetPoint };
for (int i = 0; i < 2; i++)
{
objref[i] = go.Object(i);
brep[i] = objref[i].Brep();
if (nullptr == brep[i])
return CRhinoCommand::failure;
objref[i].SurfaceParameter(&picked_point[i][0], &picked_point[i][1]);
}
double tol = context.m_doc.AbsoluteTolerance();
double angtol = context.m_doc.AngleToleranceRadians();
CRhinoCommand::result rc = CRhinoCommand::failure;
ON_Brep* out_brep = RhinoMergeSrf(brep[0], brep[1], tol, angtol, &picked_point[0], &picked_point[1]);
if (nullptr != out_brep)
{
// Make sure to allow creased surfaces
CRhinoKeepKinkySurfaces keep_kinky_surfaces;
CRhinoBrepObject* brep_obj = new CRhinoBrepObject();
brep_obj->SetBrep(out_brep);
out_brep = nullptr;
if (context.m_doc.ReplaceObject(objref[0], brep_obj))
{
context.m_doc.DeleteObject(objref[1]);
rc = CRhinoCommand::success;
}
else
{
delete brep_obj;
rc = CRhinoCommand::failure;
}
}
context.m_doc.Redraw();
return rc;
}
– Dale
Hi @dale,
Wow, this is really a surprise