Increase NURBS Surface Degree

Demonstrates how to increase the degree of a NURBS surface.

partial class Examples
{
  public static Result NurbsSurfaceIncreaseDegree(RhinoDoc doc)
  {
    ObjRef obj_ref;
    var rc = RhinoGet.GetOneObject(
      "Select surface", false, ObjectType.Surface, out obj_ref);
    if (rc != Result.Success) return rc;
    if (obj_ref == null) return Result.Failure;
    var surface = obj_ref.Surface();
    if (surface == null) return Result.Failure;
    var nurbs_surface = surface.ToNurbsSurface();

    int new_u_degree = -1;
    rc = RhinoGet.GetInteger(string.Format("New U degree <{0}...11>", nurbs_surface.Degree(0)), true, ref new_u_degree,
      nurbs_surface.Degree(0), 11);
    if (rc != Result.Success) return rc;

    int new_v_degree = -1;
    rc = RhinoGet.GetInteger(string.Format("New V degree <{0}...11>", nurbs_surface.Degree(1)), true, ref new_v_degree,
      nurbs_surface.Degree(1), 11);
    if (rc != Result.Success) return rc;

    rc = Result.Failure;
    if (nurbs_surface.IncreaseDegreeU(new_u_degree))
      if (nurbs_surface.IncreaseDegreeV(new_v_degree))
        if (doc.Objects.Replace(obj_ref.ObjectId, nurbs_surface))
          rc = Result.Success;

    RhinoApp.WriteLine("Result: {0}", rc.ToString());
    doc.Views.Redraw();
    return rc;
  }
}
from Rhino.Commands import Result
from Rhino.Input import RhinoGet
from Rhino.DocObjects import ObjectType
from scriptcontext import doc

def RunCommand():
    rc, obj_ref = RhinoGet.GetOneObject("Select surface", False, ObjectType.Surface)
    if rc != Result.Success: return rc
    if obj_ref == None: return Result.Failure
    surface = obj_ref.Surface()
    if surface == None: return Result.Failure
    nurbs_surface = surface.ToNurbsSurface()

    new_u_degree = -1
    rc, new_u_degree = RhinoGet.GetInteger("New U degree <{0}...11>".format(nurbs_surface.Degree(0)), True, new_u_degree, nurbs_surface.Degree(0), 11)
    if rc != Result.Success: return rc

    new_v_degree = -1
    rc, new_v_degree = RhinoGet.GetInteger("New V degree <{0}...11>".format(nurbs_surface.Degree(1)), True, new_v_degree, nurbs_surface.Degree(1), 11)
    if rc != Result.Success: return rc

    rc = Result.Failure
    if nurbs_surface.IncreaseDegreeU(new_u_degree):
        if nurbs_surface.IncreaseDegreeV(new_v_degree):
            if doc.Objects.Replace(obj_ref.ObjectId, nurbs_surface):
                rc = Result.Success

    print("Result: {0}".format(rc))
    doc.Views.Redraw()
    return rc

if __name__=="__main__":
    RunCommand()