Go to: Synopsis. Return value. Flags. MEL examples.

Synopsis

surface [-degreeU int] [-degreeV int] [-formU string] [-formV string] [-knotU float] [-knotV float] [-point linear linear linear] [-pointWeight linear linear linear linear]

surface is undoable, NOT queryable, and NOT editable.

The cmd creates a NURBS spline surface (rational or non rational). The surface is created by specifying control vertices (CV's) and knot sequences in the U and V direction. You cannot query the properties of the surface using this command. See examples below.

Return value

string The path to the new surface

Flags

degreeU, degreeV, formU, formV, knotU, knotV, point, pointWeight
Long name (short name) Argument types Properties
-degreeU(-du) int create
Degree in surface U direction. Default is degree 3.
-degreeV(-dv) int create
Degree in surface V direction. Default is degree 3.
-knotU(-ku) float createmultiuse
Knot value(s) in U direction. One flag per knot value. There must be (numberOfPointsInU + degreeInU - 1) knots and the knot vector must be non-decreasing.
-knotV(-kv) float createmultiuse
Knot value(s) in V direction. One flag per knot value. There must be (numberOfPointsInV + degreeInV - 1) knots and the knot vector must be non-decreasing.
-formU(-fu) string create
The string for open is "open" , for closed is "closed" or for periodic is "periodic" in U.
-formV(-fv) string create
The string for open is "open" , for closed is "closed" or for periodic is "periodic" in V.
-point(-p) linear linear linear createmultiuse
To specify non rational CV with (x, y, z) values. "linear" means that this flag can take values with units. Note that you must specify (degree+1) surface points in any direction to create a visible surface span. eg. if the surface is degree 3 in the U direction, you must specify 4 CVs in the U direction. Points are specified in rows of U and columns of V. If you want to incorporate units, add the unit name to the value, eg. "-p 3.3in 5.5ft 6.6yd"
-pointWeight(-pw) linear linear linear linear createmultiuse
To specify rational CV with (x, y, z, w) values. "linear" means that this flag can take values with units. Note that you must specify (degree+1) surface points in any direction to create a visible surface span. eg. if the surface is degree 3 in the U direction, you must specify 4 CVs in the U direction. Points are specified in rows of U and columns of V.

Flag can appear in Create mode of command Flag can appear in Edit mode of command
Flag can appear in Query mode of command Flag can be used more than once in a command.

MEL examples

// This following command produces a flat, rectangular surface that is degree 3
// in both directions.  This means that there must be at least 4 x 4
// points to define the surface, since 4 is the (degree + 1).  There
// must be 6 knots in each direction, because the knot vector must
// be (number of points + degree - 1), ie. (4 points + degree 3 - 1).
// The CVs are specified in rows of U and columns of V, as you
// would read a book from left to right, up to down. ie. in this order:
// surface.cv[0][0] surface.cv[0][1] surface.cv[0][2] surface.cv[0][3]
// surface.cv[1][0] surface.cv[1][1] surface.cv[1][2] surface.cv[1][3]
// surface.cv[2][0] surface.cv[2][1] surface.cv[2][2] surface.cv[2][3]
// surface.cv[3][0] surface.cv[3][1] surface.cv[3][2] surface.cv[3][3]

surface -du 3 -dv 3
        -ku 0 -ku 0 -ku 0 -ku 1 -ku 1 -ku 1
        -kv 0 -kv 0 -kv 0 -kv 1 -kv 1 -kv 1
        -p -0.5  0 0.5 -p -0.5  0 0.16 -p -0.5  0 -0.16 -p -0.5  0 -0.5
        -p -0.16 0 0.5 -p -0.16 0 0.16 -p -0.16 0 -0.16 -p -0.16 0 -0.5
        -p  0.16 0 0.5 -p  0.16 0 0.16 -p  0.16 0 -0.16 -p  0.16 0 -0.5
        -p  0.5  0 0.5 -p  0.5  0 0.16 -p  0.5  0 -0.16 -p  0.1  0 -0.1 ;

// This following command produces a surface that is degree 3 and periodic in
// the U direction, and degree 1 in the V direction.  Notice that
// the first 3 pairs of points match the last 3 pairs of
// points, which is required for a degree 3 periodic surface.

    surface -du 3 -dv 1
         -fu "periodic"  -fv "open"
         -ku 0 -ku 1 -ku 2 -ku 3 -ku 4 -ku 5 -ku 6
         -ku 7 -ku 8 -ku 9 -ku 10 -ku 11 -ku 12
         -kv 0 -kv 1
         -pw 4 -4 0 1    -pw 4 -4 -2.5 1
         -pw 5.5 0 0 1   -pw 5.5 0 -2.5 1
         -pw 4 4 0 1     -pw 4 4 -2.5 1
         -pw 0 5.5 0 1   -pw 0 5.5 -2.5 1
         -pw -4 4 0 1    -pw -4 4 -2.5 1
         -pw -5.5 0 0 1  -pw -5.5 0 -2.5 1
         -pw -4 -4 0 1   -pw -4 -4 -2.5 1
         -pw 0 -5.5 0 1  -pw 0 -5.5 -2.5 1
         -pw 4 -4 0 1    -pw 4 -4 -2.5 1
         -pw 5.5 0 0 1   -pw 5.5 0 -2.5 1
         -pw 4 4 0 1     -pw 4 4 -2.5 1 ;

// This following command produces a surface that is degree 5 in both directions.

   surface -du 5 -dv 5 -fu "open" -fv "open"
         -p -7 0 1 -p -6 0 4 -p -3 0 6 -p 0 0 7 -p 4 0 5 -p 6 0 3
         -p -7 2 1 -p -6 2 4 -p -3 2 7 -p 0 2 8 -p 4 2 5 -p 6 2 3
         -p -7 3 1 -p -6 3 4 -p -3 3 8 -p 0 3 9 -p 4 3 5 -p 6 3 3
         -p -7 4 1 -p -6 4 4 -p -3 4 9 -p 0 4 8 -p 4 4 5 -p 6 4 3
         -p -7 5 1 -p -6 5 4 -p -3 5 8 -p 0 5 7.5 -p 4 5 5 -p 6 5 3
         -p -7 6 1 -p -6 6 4 -p -3 6 6 -p 0 6 7 -p 4 6 5 -p 6 6 3
         -ku 0 -ku 0 -ku 0 -ku 0 -ku 0 -ku 1 -ku 1 -ku 1 -ku 1 -ku 1
         -kv 0 -kv 0 -kv 0 -kv 0 -kv 0 -kv 1 -kv 1 -kv 1 -kv 1 -kv 1;


// How to query surface properties:

getAttr surface1.degreeU;
// Returns an integer that is the surface degree in U
getAttr surface1.degreeV;
// Returns an integer that is the surface degree in V
getAttr surface1.spansU;
// Returns an integer that is the # spans in U
getAttr surface1.spansV;
// Returns an integer that is the # spans in V
getAttr surface1.formU;
// Return 0 = open, 1 = closed, 2 = periodic
getAttr surface1.formV;
// Returns 0 = open, 1 = closed, 2 = periodic

getAttr surface1.minValueU;
getAttr surface1.maxValueU;
getAttr surface1.minValueV;
getAttr surface1.maxValueV;
// These return the minimum and maximum parameter ranges in each direction.

getAttr surface1.cv[0][0];
// Returns the position of a CV of surface1 in local space.  If the
// surface is a result of construction history, use a surface info
// node instead to get the CV position.

getAttr surface1.cv["*"][0];
// Returns the positions of a row of CVs of surface1 in local space.
// If the surface is a result of construction history, use a surface info
// node instead to get the CV positions.

createNode surfaceInfo;
connectAttr -f surfaceShape1.worldSpace surfaceInfo1.inputSurface;
getAttr surfaceInfo1.controlPoints["*"];
// Returns the surface CVs in world space.   A surface info node can
// also be used to query the surface knot vectors.