static bool CreateSurfacesExample( CRhinoDoc& doc ) { const int bIsRational = false; const int dim = 3; const int u_degree = 2; const int v_degree = 3; const int u_cv_count = 3; const int v_cv_count = 5; // The knot vectors do NOT have the 2 superfluous knots // at the start and end of the knot vector. If you are // coming from a system that has the 2 superfluous knots, // just ignore them when creating NURBS surfaces. double u_knot[ u_cv_count + u_degree - 1 ]; double v_knot[ v_cv_count + v_degree - 1 ]; // make up a quadratic knot vector with no interior knots u_knot[0] = u_knot[1] = 0.0; u_knot[2] = u_knot[3] = 1.0; // make up a cubic knot vector with one simple interior knot v_knot[0] = v_knot[1] = v_knot[2] = 0.0; v_knot[3] = 1.5; v_knot[4] = v_knot[5] = v_knot[6] = 2.0; // Rational control points can be in either homogeneous // or euclidean form. Non-rational control points do not // need to specify a weight. ON_3dPoint CV[u_cv_count][v_cv_count]; int i, j; for ( i = 0; i < u_cv_count; i++ ) { for ( j = 0; j < v_cv_count; j++ ) { CV[i][j].x = i; CV[i][j].y = j; CV[i][j].z = i-j; } } ON_NurbsSurface nurbs_surface( dim, bIsRational, u_degree+1, v_degree+1, u_cv_count, v_cv_count ); for ( i = 0; i < nurbs_surface.KnotCount(0); i++ ) nurbs_surface.SetKnot( 0, i, u_knot[i] ); for ( j = 0; j < nurbs_surface.KnotCount(1); j++ ) nurbs_surface.SetKnot( 1, j, v_knot[j] ); for ( i = 0; i < nurbs_surface.CVCount(0); i++ ) { for ( j = 0; j < nurbs_surface.CVCount(1); j++ ) { nurbs_surface.SetCV( i, j, CV[i][j] ); } } bool ok = false; if ( nurbs_surface.IsValid() ) { doc.AddSurfaceObject( nurbs_surface ); doc.Redraw(); ok = true; } return ok; }
static bool CreateSurfacesExample(MRhinoDoc doc) { const bool bIsRational = false; const int dim = 3; const int u_degree = 2; const int v_degree = 3; const int u_cv_count = 3; const int v_cv_count = 5; // The knot vectors do NOT have the 2 superfluous knots // at the start and end of the knot vector. If you are // coming from a system that has the 2 superfluous knots, // just ignore them when creating NURBS surfaces. double[] u_knot = new double[u_cv_count + u_degree - 1]; double[] v_knot = new double[v_cv_count + v_degree - 1]; // make up a quadratic knot vector with no interior knots u_knot[0] = u_knot[1] = 0.0; u_knot[2] = u_knot[3] = 1.0; // make up a cubic knot vector with one simple interior knot v_knot[0] = v_knot[1] = v_knot[2] = 0.0; v_knot[3] = 1.5; v_knot[4] = v_knot[5] = v_knot[6] = 2.0; // Rational control points can be in either homogeneous // or euclidean form. Non-rational control points do not // need to specify a weight. On3dPoint[,] CV = new On3dPoint[u_cv_count, v_cv_count]; for (int i = 0; i < u_cv_count; i++) { for (int j = 0; j < v_cv_count; j++) { CV[i, j] = new On3dPoint(); CV[i, j].x = i; CV[i, j].y = j; CV[i, j].z = i - j; } } OnNurbsSurface nurbs_surface = new OnNurbsSurface( dim, bIsRational, u_degree + 1, v_degree + 1, u_cv_count, v_cv_count ); for (int i = 0; i < nurbs_surface.KnotCount(0); i++) nurbs_surface.SetKnot(0, i, u_knot[i]); for (int j = 0; j < nurbs_surface.KnotCount(1); j++) nurbs_surface.SetKnot(1, j, v_knot[j]); for (int i = 0; i < nurbs_surface.CVCount(0); i++) { for (int j = 0; j < nurbs_surface.CVCount(1); j++) nurbs_surface.SetCV(i, j, CV[i, j]); } bool ok = false; if (nurbs_surface.IsValid()) { doc.AddSurfaceObject(nurbs_surface); doc.Redraw(); ok = true; } return ok; }
Function CreateSurfacesExample(ByRef doc As MRhinoDoc) As Boolean Const bIsRational As Boolean = False Const dimension As Integer = 3 Const u_degree As Integer = 2 Const v_degree As Integer = 3 Const u_cv_count As Integer = 3 Const v_cv_count As Integer = 5 ' The knot vectors do NOT have the 2 superfluous knots ' at the start and end of the knot vector. If you are ' coming from a system that has the 2 superfluous knots, ' just ignore them when creating NURBS surfaces. Dim u_knot(u_cv_count + u_degree - 2) As Double Dim v_knot(v_cv_count + v_degree - 2) As Double ' make up a quadratic knot vector with no interior knots u_knot(0) = 0.0 u_knot(1) = 0.0 u_knot(2) = 1.0 u_knot(3) = 1.0 ' make up a cubic knot vector with one simple interior knot v_knot(0) = 0.0 v_knot(1) = 0.0 v_knot(2) = 0.0 v_knot(3) = 1.5 v_knot(4) = 2.0 v_knot(5) = 2.0 v_knot(6) = 2.0 ' Rational control points can be in either homogeneous ' or euclidean form. Non-rational control points do not ' need to specify a weight. Dim CV(,) As On3dPoint = New On3dPoint(u_cv_count, v_cv_count) {} For i As Integer = 0 To u_cv_count - 1 For j As Integer = 0 To v_cv_count - 1 CV(i, j) = New On3dPoint() CV(i, j).x = i CV(i, j).y = j CV(i, j).z = i - j Next Next Dim nurbs_surface As New OnNurbsSurface(dimension, bIsRational, u_degree + 1, v_degree + 1, u_cv_count, v_cv_count) For i As Integer = 0 To nurbs_surface.KnotCount(0) - 1 nurbs_surface.SetKnot(0, i, u_knot(i)) Next For j As Integer = 0 To nurbs_surface.KnotCount(1) - 1 nurbs_surface.SetKnot(1, j, v_knot(j)) Next For i As Integer = 0 To nurbs_surface.CVCount(0) - 1 For j As Integer = 0 To nurbs_surface.CVCount(1) - 1 nurbs_surface.SetCV(i, j, CV(i, j)) Next Next Dim ok As Boolean = False If (nurbs_surface.IsValid()) Then doc.AddSurfaceObject(nurbs_surface) doc.Redraw() ok = True End If Return ok End Function