M_Rhino_Geometry_Surface_IsPlanar - mcneel/rhinocommon-api-docs GitHub Wiki

Surface.IsPlanar Method

Tests a surface to see if it is planar to zero tolerance.

Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0

Syntax

C#

public bool IsPlanar()

VB

Public Function IsPlanar As Boolean

Return Value

Type: Boolean
true if the surface is planar (flat) to within RhinoMath.ZeroTolerance units (1e-12).

Examples

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()

Version Information

Supported in: 6.0.16224.21491, 5D58w

See Also

Reference

Surface Class
IsPlanar Overload
Rhino.Geometry Namespace

⚠️ **GitHub.com Fallback** ⚠️