M_Rhino_Geometry_Surface_IsoCurve - mcneel/rhinocommon-api-docs GitHub Wiki
Gets isoparametric curve.
Namespace: Rhino.Geometry
Assembly: RhinoCommon (in RhinoCommon.dll) Version: Rhino 6.0
C#
public Curve IsoCurve(
int direction,
double constantParameter
)
VB
Public Function IsoCurve (
direction As Integer,
constantParameter As Double
) As Curve
- 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.
Type: Curve
An 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.
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()
Supported in: 6.0.16224.21491, 5D58w