Skip to content

M_Rhino_Geometry_SurfaceCurvature_Direction

Will Pearson edited this page Aug 12, 2016 · 2 revisions

SurfaceCurvature.Direction Method

Gets the principal curvature direction vector.

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

Syntax

C#

public Vector3d Direction(
	int direction
)

VB

Public Function Direction ( 
	direction As Integer
) As Vector3d

Parameters

 

direction
Type: System.Int32
Direction index, valid values are 0 and 1.

Return Value

Type: Vector3d
The specified direction vector.

Examples

VB

Imports Rhino
Imports Rhino.DocObjects
Imports Rhino.Input
Imports Rhino.Commands

Namespace examples_vb
  Public Class PrincipalCurvatureCommand
    Inherits Command
    Public Overrides ReadOnly Property EnglishName() As String
      Get
        Return "vbPrincipalCurvature"
      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 for curvature measurement", True,
                                     ObjectType.Surface, obj_ref)
      If rc <> Result.Success Then
        Return rc
      End If
      Dim surface = obj_ref.Surface()

      Dim gp = New Rhino.Input.Custom.GetPoint()
      gp.SetCommandPrompt("Select point on surface for curvature measurement")
      gp.Constrain(surface, False)
      gp.[Get]()
      If gp.CommandResult() <> Result.Success Then
        Return gp.CommandResult()
      End If
      Dim point_on_surface = gp.Point()

      Dim u As Double, v As Double
      If Not surface.ClosestPoint(point_on_surface, u, v) Then
        Return Result.Failure
      End If

      Dim surface_curvature = surface.CurvatureAt(u, v)
      If surface_curvature Is Nothing Then
        Return Result.Failure
      End If

      RhinoApp.WriteLine("Surface curvature evaluation at parameter: ({0}, {1})", u, v)

      RhinoApp.WriteLine("  3-D Point: {0}", surface_curvature.Point)
      RhinoApp.WriteLine("  3-D Normal: {0}", surface_curvature.Normal)
      RhinoApp.WriteLine("  Maximum principal curvature: {0} ({1})", surface_curvature.Kappa(0), surface_curvature.Direction(0))
      RhinoApp.WriteLine("  Minimum principal curvature: {0} ({1})", surface_curvature.Kappa(1), surface_curvature.Direction(1))
      RhinoApp.WriteLine("  Gaussian curvature: {0}", surface_curvature.Gaussian)
      RhinoApp.WriteLine("  Mean curvature: {0}", surface_curvature.Mean)
      Return Result.Success
    End Function
  End Class
End Namespace

C#

using Rhino;
using Rhino.DocObjects;
using Rhino.Input;
using Rhino.Commands;

namespace examples_cs
{
  public class PrincipalCurvatureCommand : Command
  {
    public override string EnglishName { get { return "csPrincipalCurvature"; } }

    protected override Result RunCommand(RhinoDoc doc, RunMode mode)
    {
      ObjRef obj_ref;
      var rc = RhinoGet.GetOneObject("Select surface for curvature measurement", true, 
        ObjectType.Surface, out obj_ref);
      if (rc != Result.Success)
        return rc;
      var surface = obj_ref.Surface();

      var gp = new Rhino.Input.Custom.GetPoint();
      gp.SetCommandPrompt("Select point on surface for curvature measurement");
      gp.Constrain(surface, false);
      gp.Get();
      if (gp.CommandResult() != Result.Success)
        return gp.CommandResult();
      var point_on_surface = gp.Point();

      double u, v;
      if (!surface.ClosestPoint(point_on_surface, out u, out v))
        return Result.Failure;

      var surface_curvature = surface.CurvatureAt(u, v);
      if (surface_curvature == null)
        return Result.Failure;

      RhinoApp.WriteLine("Surface curvature evaluation at parameter: ({0}, {1})", u, v);

      RhinoApp.WriteLine("  3-D Point: ({0}, {1}, {2})",
        surface_curvature.Point.X,
        surface_curvature.Point.Y,
        surface_curvature.Point.Z);

      RhinoApp.WriteLine("  3-D Normal: ({0}, {1}, {2})",
        surface_curvature.Normal.X,
        surface_curvature.Normal.Y,
        surface_curvature.Normal.Z);

      RhinoApp.WriteLine(string.Format("  Maximum principal curvature: {0} ({1}, {2}, {3})", 
        surface_curvature.Kappa(0), 
        surface_curvature.Direction(0).X, 
        surface_curvature.Direction(0).Y, 
        surface_curvature.Direction(0).Z));

      RhinoApp.WriteLine(string.Format("  Minimum principal curvature: {0} ({1}, {2}, {3})", 
        surface_curvature.Kappa(1), 
        surface_curvature.Direction(1).X, 
        surface_curvature.Direction(1).Y, 
        surface_curvature.Direction(1).Z));

      RhinoApp.WriteLine("  Gaussian curvature: {0}", surface_curvature.Gaussian);
      RhinoApp.WriteLine("  Mean curvature: {0}", surface_curvature.Mean);

      return Result.Success;
    }
  }
}

Python

import rhinoscriptsyntax as rs

surface_id,_,_,_,_,_ = rs.GetSurfaceObject("Select surface for curvature measurement")
point = rs.GetPointOnSurface(surface_id, 
    "Select point on surface for curvature measurement")
u,v = rs.SurfaceClosestPoint(surface_id, point)

#point, normal, kappa_u, direction_u, kappa_v, direction_v, gaussian, mean =
surface_curvature = rs.SurfaceCurvature(surface_id, (u,v))

point, normal, kappa_u, direction_u, kappa_v, direction_v, gaussian, mean = surface_curvature

print "Surface curvature evaluation at parameter: ({0}, {1})".format(u,v)

print "  3-D Point: ({0}, {1}, {2})".format(point.X, point.Y, point.Z)

print "  3-D Normal: ({0}, {1}, {2})".format(normal.X, normal.Y, normal.Z)

print "  Maximum principal curvature: {0} ({1}, {2}, {3})".format(
  kappa_u, direction_u.X, direction_u.Y, direction_u.Z)

print "  Minimum principal curvature: {0} ({1}, {2}, {3})".format(
  kappa_v, direction_v.X, direction_v.Y, direction_v.Z)

print "  Gaussian curvature: {0}".format(gaussian)
print "  Mean curvature: {0}".format(mean)

Version Information

Supported in: 6.0.16224.21491, 5D58w

See Also

Reference

SurfaceCurvature Class
Rhino.Geometry Namespace

Clone this wiki locally