Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

developer:sdksamples:meshcurveintersect [2015/09/14]
developer:sdksamples:meshcurveintersect [2020/08/14] (current)
Line 1: Line 1:
 +====== Intersecting Curves with Meshes ======
 +====== C++ ======
 +> **Summary:** //Demonstrates how to intersect a curve with a mesh using the Rhino SDK.//
 +
 +=====Question=====
 +I would like to verify that a polyline intesects with a mesh. Can this be done using the Rhino SDK?
 +
 +=====Answer=====
 +Sure can. The following example code demonstrates how to do this.
 +
 +===== C++ =====
 +<code c++>
 +CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
 +{
 +  CRhinoGetObject gm;
 +  gm.SetCommandPrompt( L"Select mesh to intersect" );
 +  gm.SetGeometryFilter( CRhinoGetObject::mesh_object );
 +  gm.GetObjects( 1, 1 );
 +  if( gm.CommandResult() != CRhinoCommand::success )
 +    return gm.CommandResult();
 +
 +  const ON_Mesh* mesh = gm.Object(0).Mesh();
 +  if( 0 == mesh )
 +    return CRhinoCommand::failure;
 +
 +  CRhinoGetObject gc;
 +  gc.SetCommandPrompt( L"Select curve to intersect with mesh" );
 +  gc.SetGeometryFilter( CRhinoGetObject::curve_object );
 +  gc.EnablePreSelect( false );
 +  gc.EnableDeselectAllBeforePostSelect( false );
 +  gc.GetObjects( 1, 1 );
 +  if( gc.CommandResult() != CRhinoCommand::success )
 +    return gc.CommandResult();
 +
 +  const ON_Curve* curve = gc.Object(0).Curve();
 +  if( 0 == curve )
 +    return CRhinoCommand::failure;
 +
 +  double tol = context.m_doc.AbsoluteTolerance();
 +
 +  ON_PolylineCurve pline;
 +  if( RhinoConvertCurveToPolyline(*curve, 0, 0, 0, 0, 0.0, tol, 0.0, 0, pline) )
 +  {
 +    const ON_MeshTree* mesh_tree = mesh->MeshTree(true);
 +    if( mesh_tree )
 +    {
 +      ON_SimpleArray<ON_CMX_EVENT> cmx;
 +      if( mesh_tree->IntersectPolyline(pline.m_pline.Count(), pline.m_pline.Array(), cmx) )
 +      {
 +        int i;
 +        for( i = 0; i < cmx.Count(); i++ )
 +          context.m_doc.AddPointObject( cmx[i].m_M[0].m_P );
 +        context.m_doc.Redraw();
 +      }
 +      else
 +      {
 +        RhinoApp().Print( L"Objects do not intersect.\n" );
 +      }
 +    }
 +  }
 +
 +  return CRhinoCommand::success;
 +}
 +</code>
 +
 +
 +{{tag>Developer cplusplus}}
  
developer/sdksamples/meshcurveintersect.txt ยท Last modified: 2020/08/14 (external edit)