M_Rhino_Geometry_Surface_IsoCurve - mcneel/rhinocommon-api-docs GitHub Wiki

Surface.IsoCurve Method

Gets isoparametric curve.

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

Syntax

C#

public Curve IsoCurve(
	int direction,
	double constantParameter
)

VB

Public Function IsoCurve ( 
	direction As Integer,
	constantParameter As Double
) As Curve

Parameters

 

direction
Type: System.Int32
0 first parameter varies and second parameter is constant e.g., point on IsoCurve(0,c) at t is srf(t,c) This is a horizontal line from left to right 1 first parameter is constant and second parameter varies e.g., point on IsoCurve(1,c) at t is srf(c,t This is a vertical line from bottom to top.
constantParameter
Type: System.Double
The parameter that was constant on the original surface.

Return Value

Type: Curve
An isoparametric curve or null on error.

Remarks

In this function "direction" indicates which direction the resulting curve runs. 0: horizontal, 1: vertical In the other Surface functions that take a "direction" argument, "direction" indicates if "constantParameter" is a "u" or "v" parameter.

Examples

VB

Imports Rhino
Imports Rhino.DocObjects
Imports Rhino.Commands
Imports Rhino.Input
Imports Rhino.Input.Custom
Imports Rhino.Geometry

Namespace examples_vb
  Public Class ExtractIsocurveCommand
    Inherits Rhino.Commands.Command
    Public Overrides ReadOnly Property EnglishName() As String
      Get
        Return "vbExtractIsocurve"
      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", False, ObjectType.Surface, obj_ref)
      If rc <> Result.Success OrElse obj_ref Is Nothing Then
        Return rc
      End If
      Dim surface = obj_ref.Surface()

      Dim gp = New GetPoint()
      gp.SetCommandPrompt("Point on surface")
      gp.Constrain(surface, False)
      'gp.GeometryFilter = ObjectType.Point;
      Dim option_toggle = New OptionToggle(False, "U", "V")
      gp.AddOptionToggle("Direction", option_toggle)
      Dim point As Point3d = Point3d.Unset
      While True
        Dim grc = gp.[Get]()
        If grc = GetResult.[Option] Then
          Continue While
        ElseIf grc = GetResult.Point Then
          point = gp.Point()
          Exit While
        Else
          Return Result.[Nothing]
        End If
      End While
      If point = Point3d.Unset Then
        Return Result.[Nothing]
      End If

      Dim direction As Integer = If(option_toggle.CurrentValue, 1, 0)
      ' V : U
      Dim u_parameter As Double, v_parameter As Double
      If Not surface.ClosestPoint(point, u_parameter, v_parameter) Then
        Return Result.Failure
      End If

      Dim iso_curve = surface.IsoCurve(direction, If(direction = 1, u_parameter, v_parameter))
      If iso_curve Is Nothing Then
        Return Result.Failure
      End If

      doc.Objects.AddCurve(iso_curve)
      doc.Views.Redraw()
      Return Result.Success
    End Function
  End Class
End Namespace

C#

using Rhino;
using Rhino.DocObjects;
using Rhino.Commands;
using Rhino.Input;
using Rhino.Input.Custom;
using Rhino.Geometry;

namespace examples_cs
{
  public class ExtractIsocurveCommand : Rhino.Commands.Command
  {
    public override string EnglishName
    {
      get { return "csExtractIsocurve"; }
    }

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

      var gp = new GetPoint();
      gp.SetCommandPrompt("Point on surface");
      gp.Constrain(surface, false);
      var option_toggle = new OptionToggle(false, "U", "V");
      gp.AddOptionToggle("Direction", ref option_toggle);
      Point3d point = Point3d.Unset;
      while (true)
      {
        var grc = gp.Get();
        if (grc == GetResult.Option)
          continue;
        else if (grc == GetResult.Point)
        {
          point = gp.Point();
          break;
        }
        else
          return Result.Nothing;
      }
      if (point == Point3d.Unset)
        return Result.Nothing;

      int direction = option_toggle.CurrentValue ? 1 : 0; // V : U
      double u_parameter, v_parameter;
      if (!surface.ClosestPoint(point, out u_parameter, out v_parameter)) return Result.Failure;

      var iso_curve = surface.IsoCurve(direction, direction == 1 ? u_parameter : v_parameter);
      if (iso_curve == null) return Result.Failure;

      doc.Objects.AddCurve(iso_curve);
      doc.Views.Redraw();
      return Result.Success;
    }
  }
}

Python

from Rhino import *
from Rhino.DocObjects import *
from Rhino.Commands import *
from Rhino.Input import *
from Rhino.Input.Custom import *
from Rhino.Geometry import *
from scriptcontext import doc

def RunCommand():
  rc, obj_ref = RhinoGet.GetOneObject("Select surface", False, ObjectType.Surface)
  if rc <> Result.Success or obj_ref == None:
    return rc
  surface = obj_ref.Surface()

  gp = GetPoint()
  gp.SetCommandPrompt("Point on surface")
  gp.Constrain(surface, False)
  option_toggle = OptionToggle(False, "U", "V")
  gp.AddOptionToggle("Direction", option_toggle)
  point = Point3d.Unset

  while True:
    grc = gp.Get()
    if grc == GetResult.Option:
      continue
    elif grc == GetResult.Point:
      point = gp.Point()
      break
    else:
      return Result.Nothing

  if point == Point3d.Unset:
    return Result.Nothing

  direction = 1 if option_toggle.CurrentValue else 0
  b, u_parameter, v_parameter = surface.ClosestPoint(point)
  if not b: return Result.Failure

  iso_curve = surface.IsoCurve(direction, u_parameter if direction == 1 else v_parameter)
  if iso_curve == None: 
    return Result.Failure

  doc.Objects.AddCurve(iso_curve)
  doc.Views.Redraw()
  return Result.Success

if __name__ == "__main__":
  RunCommand()

Version Information

Supported in: 6.0.16224.21491, 5D58w

See Also

Reference

Surface Class
Rhino.Geometry Namespace

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