Projecting Points to Breps
Windows only
Problem
You would like to project a 2D point (x,y) onto a brep object in order to acquire the z-coordinate.
Solution
Use the RhinoProjectPointsToBreps
function. In order to use this function you will need to provide the following:
- An array of one or more Brep objects.
- An array of one or more points to project.
- A projection direction (vector).
Sample
The following sample code demonstrates how you can use this function…
CRhinoCommand::result CCommandFoobarCpp::RunCommand( const CRhinoCommandContext& context )
{
CRhinoGetObject go;
go.SetCommandPrompt(L"Select surface or polysurface");
go.SetGeometryFilter(
CRhinoGetObject::surface_object |
CRhinoGetObject::polysrf_object
);
go.GetObjects(1, 1);
if (go.CommandResult() != CRhinoCommand::success)
return go.CommandResult();
const ON_Brep* brep = go.Object(0).Brep();
if (0 == brep)
return CRhinoCommand::failure;
ON_3dPoint point(0.0, 0.0, 0.0); // some point on the world x-y plane
// Prepare input to RhinoProjectPointsToBreps
ON_SimpleArray<const ON_Brep*> Breps;
Breps.Append(brep);
ON_3dPointArray Points;
Points.Append(point);
ON_3dVector ProjDir(0.0, 0.0, 1.0); // world z-axis
ON_3dPointArray OutPoints;
ON_SimpleArray<int> Indices;
bool rc = RhinoProjectPointsToBreps(
Breps,
Points,
ProjDir,
OutPoints,
Indices,
context.m_doc.AbsoluteTolerance()
);
if (rc == true)
{
for (int i = 0; i < OutPoints.Count(); i++)
{
ON_3dPoint pt = OutPoints[i];
context.m_doc.AddPointObject(pt);
}
context.m_doc.Redraw();
}
return CRhinoCommand::success;
}