PlaneDistanceTo Method (Point3d) |
Namespace: Rhino.Geometry
using System.Linq; using Rhino; using Rhino.DocObjects; using Rhino.Geometry; using Rhino.Commands; using Rhino.Input; namespace examples_cs { public class IsPlanarSurfaceInPlaneCommand : Command { public override string EnglishName { get { return "csIsPlanarSurfaceInPlane"; } } protected override Result RunCommand(RhinoDoc doc, RunMode mode) { ObjRef obj_ref; var rc = RhinoGet.GetOneObject("select surface", true, ObjectType.Surface, out obj_ref); if (rc != Result.Success) return rc; var surface = obj_ref.Surface(); Point3d[] corners; rc = RhinoGet.GetRectangle(out corners); if (rc != Result.Success) return rc; var plane = new Plane(corners[0], corners[1], corners[2]); var is_or_isnt = ""; if (IsSurfaceInPlane(surface, plane, doc.ModelAbsoluteTolerance)) is_or_isnt = " not "; RhinoApp.WriteLine("Surface is{0} in plane.", is_or_isnt); return Result.Success; } private bool IsSurfaceInPlane(Surface surface, Plane plane, double tolerance) { if (!surface.IsPlanar(tolerance)) return false; var bbox = surface.GetBoundingBox(true); return bbox.GetCorners().All( corner => System.Math.Abs(plane.DistanceTo(corner)) <= tolerance); } } }
import Rhino from Rhino.Geometry import * import rhinoscriptsyntax as rs from scriptcontext import doc import math def RunCommand(): surface_id = rs.GetSurfaceObject()[0] if surface_id == None: return surface = rs.coercesurface(surface_id) corners = rs.GetRectangle() if corners == None: return plane = Plane(corners[0], corners[1], corners[2]) is_or_isnt = "" if IsSurfaceInPlane(surface, plane, doc.ModelAbsoluteTolerance) else " not " print "Surface is{0} in plane.".format(is_or_isnt) def IsSurfaceInPlane(surface, plane, tolerance): if not surface.IsPlanar(tolerance): return False bbox = surface.GetBoundingBox(True) rc = True for corner in bbox.GetCorners(): if math.fabs(plane.DistanceTo(corner)) > tolerance: rc = False break return rc if __name__ == "__main__": RunCommand()