Go to: Synopsis. Return value. Flags. MEL examples.
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.
string | The path to the new surface |
degreeU, degreeV, formU, formV, knotU, knotV, point, pointWeight
Long name (short name) |
Argument types |
Properties |
|
-degreeU(-du)
|
int
|
|
|
Degree in surface U direction. Default is degree 3.
|
|
-degreeV(-dv)
|
int
|
|
|
Degree in surface V direction. Default is degree 3.
|
|
-formU(-fu)
|
string
|
|
|
The string for open is "open" , for closed is "closed" or
for periodic is "periodic" in U.
|
|
-formV(-fv)
|
string
|
|
|
The string for open is "open" , for closed is "closed" or
for periodic is "periodic" in V.
|
|
-knotU(-ku)
|
float
|
|
|
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
|
|
|
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.
|
|
-point(-p)
|
linear linear linear
|
|
|
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
|
|
|
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.
|
// 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.