SOINDEXEDNURBSSURFACE(3iv)
π SoIndexedNurbsSurface β indexed NURBS surface shape node π
okay so bestie, welcome to the SoIndexedNurbsSurface(3IV) page, aka the Open Inventor node that lets you sculpt a whole smooth curvy NURBS surface out of knot vectors and indexed control points. it's giving math but make it fashion. let's go β¨
π INHERITS FROM π
so the whole family tree is a little something like this:
SoBase > SoFieldContainer > SoNode > SoShape > SoIndexedNurbsSurface
she inherits everything from her ancestors, as one does. π
π SYNOPSIS π
first things first, you gotta pull in the header:
#include <Inventor/nodes/SoIndexedNurbsSurface.h>
β¨ Fields from class SoIndexedNurbsSurface β¨
these are hers, her very own:
SoSFInt32 numUControlPoints
SoSFInt32 numVControlPoints
SoMFInt32 coordIndex
SoMFFloat uKnotVector
SoMFFloat vKnotVector
SoSFInt32 numSControlPoints
SoSFInt32 numTControlPoints
SoMFInt32 textureCoordIndex
SoMFFloat sKnotVector
SoMFFloat tKnotVector
π¦ Methods from class SoIndexedNurbsSurface π¦
SoIndexedNurbsSurface()
static SoType getClassTypeId()
πΈ Methods from class SoNode πΈ
void setOverride(SbBool state)
SbBool isOverride() const
SoNode * copy(SbBool copyConnections = FALSE) const
virtual SbBool affectsState() const
static SoNode * getByName(const SbName &name)
static int getByName(const SbName &name, SoNodeList &list)
π Methods from class SoFieldContainer π
void setToDefaults()
SbBool hasDefaultValues() const
SbBool fieldsAreEqual(const SoFieldContainer *fc) const
void copyFieldValues(const SoFieldContainer *fc, SbBool
copyConnections = FALSE)
SbBool set(const char *fieldDataString)
void get(SbString &fieldDataString)
virtual int getFields(SoFieldList &resultList) const
virtual SoField * getField(const SbName &fieldName) const
SbBool getFieldName(const SoField *field, SbName &fieldName)
const
SbBool isNotifyEnabled() const
SbBool enableNotify(SbBool flag)
π§ Methods from class SoBase π§
void ref()
void unref() const
void unrefNoDelete() const
void touch()
virtual SoType getTypeId() const
SbBool isOfType(SoType type) const
virtual void setName(const SbName &name)
virtual SbName getName() const
π DESCRIPTION π
okay so this shape node is literally a NURBS surface, built from the knot vectors and the control points you specify. no cap. π«Ά
the uKnotVector and vKnotVector fields hold floating-point arrays of values β those values are the coordinates of the knot points in the surface, and bestie you must enter them in non-decreasing order. that's the vibe check, they gotta be sorted. π
the numUControlPoints and numVControlPoints fields tell her how many control points the surface will have in the U and V parametric directions, and she'll use the current coordinates that are indexed from the coordIndex field. so it's an indexed surface, iykyk. β¨
now the fun part, the order drama:
- you can get a surface of minimum order (2) in the U or V directions by specifying two more knots than control points in that direction and having at least two control points in that direction. and this surface would appear creased in one direction. so like, intentionally crunchy. π
- you can get a surface of maximum order (8) in the U or V directions by specifying eight more knots than control points in that direction and having at least eight control points in that direction. that's the max, periodt. π
more lore:
- the control points of the NURBS surface are transformed by the current cumulative transformation.
- the surface is drawn with the current light model and drawing style.
- the coordinates, normals, and texture coordinates of a surface are generated, so you cannot bind explicit normals or texture coordinates to a NURBS surface. nope, not allowed, she generates her own. π
- the first material in the state is applied to the entire surface. one material, whole surface, no switching up mid-way.
- the surface is trimmed according to the currently defined profiles curves.
and now, texture talk π (this part is lowkey important):
when default texture coordinates are applied to a NURBS surface, the edges of the texture square are stretched to fit the surface. the axes of the texture are called S and T; S is horizontal and T is vertical. the axes of the NURBS surface are called U and V; U is horizontal and V is vertical. don't mix them up bestie, that's the whole plot twist. π
you can also define texture coordinates explicitly with the S,T location point, the knot vectors, and the current texture coordinates. so you do have options. slay. π
β¨ FIELDS β¨
one bullet per field, no skipping, let's get into it:
SoSFInt32numUControlPointsSoSFInt32numVControlPoints
number of control points in the U and V directions. π₯
SoMFInt32coordIndex
coordinate indices. that's the index list, that's the pointer to which coords you're using. π«Ά
SoMFFloatuKnotVectorSoMFFloatvKnotVector
the knot vectors in the U and V directions. πΈ
SoSFInt32numSControlPointsSoSFInt32numTControlPoints
number of control points in the S and T directions. π¦
SoMFInt32textureCoordIndex
texture coordinate indices. β¨
SoMFFloatsKnotVectorSoMFFloattKnotVector
the knot vectors in the S and T directions. π
π METHODS π
SoIndexedNurbsSurface()
creates an indexed NURBS surface node with default settings. brand new baby node, defaults and all. π
static SoType getClassTypeId()
returns the type identifier for this class. it's her ID, her passport. π
π₯ ACTION BEHAVIOR π₯
how she acts when the actions come knocking:
SoGLRenderAction
draws the surface based on the current coordinates, material, and so on. π
SoRayPickAction
picks the surface based on the current coordinates and transformation. π―
SoGetBoundingBoxAction
computes the bounding box that encloses all control points of the surface with the current transformation applied to them. sets the center to the average of the control points. π¦
SoCallbackAction
if any triangle callbacks are registered with the action, they will be invoked for each successive triangle approximating the surface. so many triangles bestie, so many. π
π FILE FORMAT/DEFAULTS π
here's exactly what she looks like written out, verbatim, every number preserved:
IndexedNurbsSurface {
numUControlPoints 0
numVControlPoints 0
numSControlPoints 0
numTControlPoints 0
coordIndex 0
uKnotVector 0
vKnotVector 0
sKnotVector 0
tKnotVector 0
textureCoordIndex -1
}
ngl bestie, peep that textureCoordIndex -1 β she's the odd one out and she knows it. π
π¦ SEE ALSO π¦
go read these next, they're the friend group:
SoIndexedNurbsCurveSoNurbsSurfaceSoProfile
okay that's the whole page, you ate it, you understood it, periodt. π
β¨ this was SoIndexedNurbsSurface(3IV)() β same title energy top and bottom, iconic and consistent, no notes. go build something curvy bestie ππ«Άπ
π¦ where this page comes from
- debian bookworm: inventor-doc 2.1.5-10+dfsg-2 Β· LGPL-2.0-or-later
- debian trixie: inventor-doc 2.1.6+ds-2 Β· LGPL-2.0-or-later
- ubuntu jammy: inventor-doc 2.1.5-10-24
- ubuntu noble: inventor-doc 2.1.5-10+dfsg-2.1build2 Β· LGPL-2.0-or-later
- ubuntu questing: inventor-doc 2.1.6+ds-2
- ubuntu resolute: inventor-doc 2.1.6.1+ds-1 Β· LGPL-2.0-or-later
- ubuntu stonking: inventor-doc 2.1.6.1+ds-1 Β· LGPL-2.0-or-later
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms