using Rhino;
using Rhino.Commands;
using Rhino.Geometry;
namespace examples_cs
{
public class CreateSurfaceFromPointsAndKnotsCommand : Command
{
public override string EnglishName { get { return "csCreateSurfaceFromPointsAndKnots"; } }
protected override Result RunCommand(RhinoDoc doc, RunMode mode)
{
const bool is_rational = false;
const int number_of_dimensions = 3;
const int u_degree = 2;
const int v_degree = 3;
const int u_control_point_count = 3;
const int v_control_point_count = 5;
var u_knots = new double[u_control_point_count + u_degree - 1];
var v_knots = new double[v_control_point_count + v_degree - 1];
u_knots[0] = u_knots[1] = 0.0;
u_knots[2] = u_knots[3] = 1.0;
v_knots[0] = v_knots[1] = v_knots[2] = 0.0;
v_knots[3] = 1.5;
v_knots[4] = v_knots[5] = v_knots[6] = 2.0;
var control_points = new Point3d[u_control_point_count, v_control_point_count];
for (int u = 0; u < u_control_point_count; u++)
{
for (int v = 0; v < v_control_point_count; v++)
{
control_points[u,v] = new Point3d(u, v, u-v);
}
}
var nurbs_surface = NurbsSurface.Create(
number_of_dimensions,
is_rational,
u_degree + 1,
v_degree + 1,
u_control_point_count,
v_control_point_count
);
for (int u = 0; u < nurbs_surface.KnotsU.Count; u++)
nurbs_surface.KnotsU[u] = u_knots[u];
for (int v = 0; v < nurbs_surface.KnotsV.Count; v++)
nurbs_surface.KnotsV[v] = v_knots[v];
for (int u = 0; u < nurbs_surface.Points.CountU; u++)
{
for (int v = 0; v < nurbs_surface.Points.CountV; v++)
{
nurbs_surface.Points.SetControlPoint(u, v, control_points[u, v]);
}
}
if (nurbs_surface.IsValid)
{
doc.Objects.AddSurface(nurbs_surface);
doc.Views.Redraw();
return Result.Success;
}
return Result.Failure;
}
}
}
from Rhino.Geometry import Point3d, NurbsSurface, ControlPoint
from scriptcontext import doc
def RunCommand():
bIsRational = False
dim = 3
u_degree = 2
v_degree = 3
u_cv_count = 3
v_cv_count = 5
u_knot = [0.0, 0.0, 1.0, 1.0]
v_knot = [0.0, 0.0, 0.0, 1.5, 2.0, 2.0, 2.0]
CV = dict( ((i,j),None) for i in range(2) for j in range(3) )
for i in range(0, u_cv_count):
for j in range(0, v_cv_count):
CV[i,j] = Point3d(i, j, i-j)
nurbs_surface = NurbsSurface.Create(
dim,
bIsRational,
u_degree + 1,
v_degree + 1,
u_cv_count,
v_cv_count
)
for i in range(0, nurbs_surface.KnotsU.Count):
nurbs_surface.KnotsU[i] = u_knot[i]
for j in range(0, nurbs_surface.KnotsV.Count):
nurbs_surface.KnotsV[j] = v_knot[j]
for i in range(0, nurbs_surface.Points.CountU):
for j in range(0, nurbs_surface.Points.CountV):
nurbs_surface.Points.SetControlPoint(i, j, ControlPoint(CV[i, j]))
if nurbs_surface.IsValid:
doc.Objects.AddSurface(nurbs_surface)
doc.Views.Redraw()
if __name__ == "__main__":
RunCommand()
Imports Rhino
Imports Rhino.Commands
Imports Rhino.Geometry
Namespace examples_vb
<System.Runtime.InteropServices.Guid("652FCBE5-D8DC-4472-AB94-5A70998A3895")> _
Public Class CreateSurfaceFromPointsAndKnotsCommand
Inherits Command
Public Overrides ReadOnly Property EnglishName() As String
Get
Return "vbCreateSurfaceFromPointsAndKnots"
End Get
End Property
Protected Overrides Function RunCommand(doc As RhinoDoc, mode As RunMode) As Result
Const isRational As Boolean = False
Const numberOfDimensions As Integer = 3
Const uDegree As Integer = 2
Const vDegree As Integer = 3
Const uControlPointCount As Integer = 3
Const vControlPointCount As Integer = 5
Dim uKnots = New Double(uControlPointCount + uDegree - 2) {}
Dim vKnots = New Double(vControlPointCount + vDegree - 2) {}
uKnots(0) = InlineAssignHelper(uKnots(1), 0.0)
uKnots(2) = InlineAssignHelper(uKnots(3), 1.0)
vKnots(0) = InlineAssignHelper(vKnots(1), InlineAssignHelper(vKnots(2), 0.0))
vKnots(3) = 1.5
vKnots(4) = InlineAssignHelper(vKnots(5), InlineAssignHelper(vKnots(6), 2.0))
Dim controlPoints = New Point3d(uControlPointCount - 1, vControlPointCount - 1) {}
For u As Integer = 0 To uControlPointCount - 1
For v As Integer = 0 To vControlPointCount - 1
controlPoints(u, v) = New Point3d(u, v, u - v)
Next
Next
Dim nurbsSurface__1 = NurbsSurface.Create(numberOfDimensions, isRational, uDegree + 1, vDegree + 1, uControlPointCount, vControlPointCount)
For u As Integer = 0 To nurbsSurface__1.KnotsU.Count - 1
nurbsSurface__1.KnotsU(u) = uKnots(u)
Next
For v As Integer = 0 To nurbsSurface__1.KnotsV.Count - 1
nurbsSurface__1.KnotsV(v) = vKnots(v)
Next
For u As Integer = 0 To nurbsSurface__1.Points.CountU - 1
For v As Integer = 0 To nurbsSurface__1.Points.CountV - 1
nurbsSurface__1.Points.SetControlPoint(u, v, controlPoints(u, v))
Next
Next
If nurbsSurface__1.IsValid Then
doc.Objects.AddSurface(nurbsSurface__1)
doc.Views.Redraw()
Return Result.Success
Else
Return Result.Failure
End If
End Function
Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
target = value
Return value
End Function
End Class
End Namespace