usingRhino.Geometry;partialclassExamples{publicstaticRhino.Commands.ResultIntersectLines(Rhino.RhinoDoc doc){Rhino.Input.Custom.GetObject go =newRhino.Input.Custom.GetObject();
go.SetCommandPrompt("Select lines");
go.GeometryFilter=Rhino.DocObjects.ObjectType.Curve;
go.GetMultiple(2,2);if( go.CommandResult()!=Rhino.Commands.Result.Success)return go.CommandResult();if( go.ObjectCount!=2)returnRhino.Commands.Result.Failure;LineCurve crv0 = go.Object(0).Geometry()asLineCurve;LineCurve crv1 = go.Object(1).Geometry()asLineCurve;if( crv0==null|| crv1==null)returnRhino.Commands.Result.Failure;Line line0 = crv0.Line;Line line1 = crv1.Line;Vector3d v0 = line0.Direction;
v0.Unitize();Vector3d v1 = line1.Direction;
v1.Unitize();if( v0.IsParallelTo(v1)!=0){Rhino.RhinoApp.WriteLine("Selected lines are parallel.");returnRhino.Commands.Result.Nothing;}double a, b;if(!Rhino.Geometry.Intersect.Intersection.LineLine(line0, line1,out a,out b)){Rhino.RhinoApp.WriteLine("No intersection found.");returnRhino.Commands.Result.Nothing;}Point3d pt0 = line0.PointAt(a);Point3d pt1 = line1.PointAt(b);// pt0 and pt1 should be equal, so we will only add pt0 to the document
doc.Objects.AddPoint( pt0 );
doc.Views.Redraw();returnRhino.Commands.Result.Success;}}
importRhinoimport scriptcontext
defIntersectLines():
go =Rhino.Input.Custom.GetObject()
go.SetCommandPrompt("Select lines")
go.GeometryFilter=Rhino.DocObjects.ObjectType.Curve
go.GetMultiple(2,2)if go.CommandResult()!=Rhino.Commands.Result.Success:return go.CommandResult()if go.ObjectCount!=2:returnRhino.Commands.Result.Failure
crv0 = go.Object(0).Geometry()
crv1 = go.Object(1).Geometry()ifnot crv0 ornot crv1:returnRhino.Commands.Result.Failure
line0 = crv0.Line
line1 = crv1.Line
v0 = line0.Direction
v0.Unitize()
v1 = line1.Direction
v1.Unitize()if v0.IsParallelTo(v1)!=0:
print "Selected lines are parallel."returnRhino.Commands.Result.Nothing
rc, a, b =Rhino.Geometry.Intersect.Intersection.LineLine(line0, line1)ifnot rc:
print "No intersection found."returnRhino.Commands.Result.Nothing
pt0 = line0.PointAt(a)
pt1 = line1.PointAt(b)# pt0 and pt1 should be equal, so we will only add pt0 to the document
scriptcontext.doc.Objects.AddPoint(pt0)
scriptcontext.doc.Views.Redraw()returnRhino.Commands.Result.Successif __name__=="__main__":IntersectLines()
ImportsRhino.GeometryPartialClassExamplesPublicSharedFunctionIntersectLines(ByVal doc AsRhino.RhinoDoc)AsRhino.Commands.ResultDim go AsNewRhino.Input.Custom.GetObject()
go.SetCommandPrompt("Select lines")
go.GeometryFilter=Rhino.DocObjects.ObjectType.Curve
go.GetMultiple(2,2)If go.CommandResult()<>Rhino.Commands.Result.SuccessThenReturn go.CommandResult()EndIfIf go.ObjectCount<>2ThenReturnRhino.Commands.Result.FailureEndIfDim crv0 AsLineCurve=TryCast(go.Object(0).Geometry(),LineCurve)Dim crv1 AsLineCurve=TryCast(go.Object(1).Geometry(),LineCurve)If crv0 IsNothingOrElse crv1 IsNothingThenReturnRhino.Commands.Result.FailureEndIfDim line0 AsLine= crv0.LineDim line1 AsLine= crv1.LineDim v0 AsVector3d= line0.Direction
v0.Unitize()Dim v1 AsVector3d= line1.Direction
v1.Unitize()If v0.IsParallelTo(v1)<>0ThenRhino.RhinoApp.WriteLine("Selected lines are parallel.")ReturnRhino.Commands.Result.[Nothing]EndIfDim a AsDouble, b AsDoubleIfNotRhino.Geometry.Intersect.Intersection.LineLine(line0, line1, a, b)ThenRhino.RhinoApp.WriteLine("No intersection found.")ReturnRhino.Commands.Result.[Nothing]EndIfDim pt0 AsPoint3d= line0.PointAt(a)Dim pt1 AsPoint3d= line1.PointAt(b)' pt0 and pt1 should be equal, so we will only add pt0 to the document
doc.Objects.AddPoint(pt0)
doc.Views.Redraw()ReturnRhino.Commands.Result.SuccessEndFunctionEndClass