Summary: Demonstrates how to get the intersection between a surface and a curve
Public Overrides Function RunCommand(ByVal context As IRhinoCommandContext)_ As IRhinoCommand.result 'get a surface Dim getsurface As New MRhinoGetObject() getsurface.SetCommandPrompt("Select Surface") getsurface.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.surface_object_ Or IRhinoGetObject.GEOMETRY_TYPE_FILTER.polysrf_object) getsurface.GetObjects(1, 1) If (getsurface.CommandResult() <> IRhinoCommand.result.success) Then Return getsurface.CommandResult() End If 'get a curve Dim getcurve As New MRhinoGetObject() getcurve.SetCommandPrompt("Select Curve") getcurve.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.curve_object) getcurve.GetObjects(1, 1) If (getcurve.CommandResult() <> IRhinoCommand.result.success) Then Return getcurve.CommandResult() End If Dim brep As IOnBrep = getsurface.Object(0).Brep() Dim curve As IOnCurve = getcurve.Object(0).Curve() If (brep Is Nothing Or curve Is Nothing) Then Return IRhinoCommand.result.failure End If Dim tol As Double = context.m_doc.AbsoluteTolerance() Dim curves(0) As OnCurve Dim points As New On3dPointArray Dim rc As Boolean = RhUtil.RhinoCurveBrepIntersect(curve, brep, tol, curves, points) If (rc = True) Then For i As Integer = 0 To points.Count() - 1 context.m_doc.AddPointObject(points(i)) Next context.m_doc.Redraw() End If Return IRhinoCommand.result.success End Function
public override IRhinoCommand.result RunCommand(IRhinoCommandContext context) { // get a surface MRhinoGetObject getsurface = new MRhinoGetObject(); getsurface.SetCommandPrompt("Select Surface"); getsurface.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.surface_object | IRhinoGetObject.GEOMETRY_TYPE_FILTER.polysrf_object); getsurface.GetObjects(1, 1); if(getsurface.CommandResult() != IRhinoCommand.result.success) return getsurface.CommandResult(); // get a curve MRhinoGetObject getcurve = new MRhinoGetObject(); getcurve.SetCommandPrompt("Select Curve"); getcurve.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.curve_object); getcurve.GetObjects(1, 1); if(getcurve.CommandResult() != IRhinoCommand.result.success) return getcurve.CommandResult(); IOnBrep brep = getsurface.Object(0).Brep(); IOnCurve curve = getcurve.Object(0).Curve(); if(brep == null | curve == null) return IRhinoCommand.result.failure; double tol = context.m_doc.AbsoluteTolerance(); OnCurve[] curves = null; On3dPointArray points = null; bool rc = RhUtil.RhinoCurveBrepIntersect(curve, brep, tol,out curves,out points); if( rc && points != null ) { for( int i=0; i<points.Count(); i++ ) context.m_doc.AddPointObject(points[i]); context.m_doc.Redraw(); } return IRhinoCommand.result.success; }