RhinoCommon API
SurfaceIsoCurve Method |
Gets isoparametric curve.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll)
Since: 5.0

public Curve IsoCurve( int direction, double constantParameter )
Public Function IsoCurve ( direction As Integer, constantParameter As Double ) As Curve
Parameters
- direction
- Type: SystemInt32
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: SystemDouble
The parameter that was constant on the original surface.
Return Value
Type: CurveAn isoparametric curve or null on error.

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.

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