Project Curves onto Breps
Windows only
Problem
You want to project curves onto a brep, but you do not function any C/C++ function to do this. Is there a solution for this?
Solution
It is true that the Rhino C/C++ SDK does not currently have a function that will project a curve onto a brep. But, using some of the existing functions, you can write your own function without too much effort.
To project a curve onto a brep, you need to do the following:
- Extrude the curve through the brep using the
RhinoExtrudeCurveStraight()
function. - Intersect the two breps using
RhinoIntersectBreps()
function. - The results of the brep intersection will be the projected curves.
Sample
The following sample code demonstrates how one might write such a function…
/*
Description:
Projects a curve onto a surface or polysurface
Parameters:
brep - [in] The brep to project the curve onto.
curve - [in] The curve to project.
dir - [in] The direction of the projection.
tol - [in] The intersection tolerance.
output_curves - [out] The output curves.
NOTE, the caller is responsible
for destroying these curves.
Returns:
true if successful.
false if unsuccessful.
*/
bool ProjectCurveToBrep(
const ON_Brep& brep,
const ON_Curve& curve,
const ON_3dVector& dir,
double tolerance,
ON_SimpleArray<ON_Curve*>& output_curves
)
{
ON_3dVector n = dir;
if( !n.Unitize() )
return false;
ON_BoundingBox bbox = brep.BoundingBox();
bbox.Union( curve.BoundingBox() );
ON_Surface* pExtrusion = RhinoExtrudeCurveStraight( &curve, dir, bbox.Diagonal().Length() );
if( 0 == pExtrusion )
return false;
ON_Brep* pBrep = ON_Brep::New();
pBrep->Create( pExtrusion );
BOOL rc = RhinoIntersectBreps( *pBrep, brep, tolerance, output_curves );
delete pBrep; // Don't leak...
return ( rc ) ? true : false;
}