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;
}
