Merge polysurface into a single NURBS surface

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;


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 :grinning: