M_Rhino_Geometry_Plane_DistanceTo_1 - mcneel/rhinocommon-api-docs GitHub Wiki
Returns the signed distance from testPoint to its projection onto this plane. If the point is below the plane, a negative distance is returned.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0
C#
public double DistanceTo(
Point3d testPoint
)
VB
Public Function DistanceTo (
testPoint As Point3d
) As Double
- testPoint
- Type: Rhino.Geometry.Point3d
Point to test.
Type: Double
Signed distance from this plane to testPoint.
VB
Imports System.Linq
Imports Rhino
Imports Rhino.DocObjects
Imports Rhino.Geometry
Imports Rhino.Commands
Imports Rhino.Input
Namespace examples_vb
Public Class IsPlanarSurfaceInPlaneCommand
Inherits Command
Public Overrides ReadOnly Property EnglishName() As String
Get
Return "vbIsPlanarSurfaceInPlane"
End Get
End Property
Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
Dim obj_ref As ObjRef = Nothing
Dim rc = RhinoGet.GetOneObject("select surface", True, ObjectType.Surface, obj_ref)
If rc <> Result.Success Then
Return rc
End If
Dim surface = obj_ref.Surface()
Dim corners As Point3d() = Nothing
rc = RhinoGet.GetRectangle(corners)
If rc <> Result.Success Then
Return rc
End If
Dim plane = New Plane(corners(0), corners(1), corners(2))
Dim is_or_isnt = If(IsSurfaceInPlane(surface, plane, doc.ModelAbsoluteTolerance), "", " not ")
RhinoApp.WriteLine("Surface is{0} in plane.", is_or_isnt)
Return Result.Success
End Function
Private Function IsSurfaceInPlane(surface As Surface, plane As Plane, tolerance As Double) As Boolean
If Not surface.IsPlanar(tolerance) Then
Return False
End If
Dim bbox = surface.GetBoundingBox(True)
Return bbox.GetCorners().All(Function(corner) Math.Abs(plane.DistanceTo(corner)) <= tolerance)
End Function
End Class
End Namespace
C#
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);
}
}
}
Python
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()
Supported in: 6.0.16224.21491, 5D58w