SoIndexedNurbsSurface(3)

πŸ“¦ version 2.5.0, in fedora 43, fedora 44

✨ SoIndexedNurbsSurface(3) ✨

okay bestie, welcome to the SoIndexedNurbsSurface page from the Library Functions Manual πŸ’– this one's a whole icon β€” the class that renders NURBS surfaces. buckle up, it's a long one, and this is only part 1 🫢


🌸 NAME 🌸

SoIndexedNurbsSurface β€” the class that can be used to render NURBS surfaces. literally its whole job, and it eats πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

#include <Inventor/nodes/SoIndexedNurbsSurface.h>

Inherits SoShape.

so yeah, it's a shape node β€” it inherits all the SoShape behavior like the nepo baby it is, but in a good way πŸ‘‘


πŸ’œ Public Member Functions πŸ’œ

  • virtual SoType getTypeId (void) const β€” hands you the SoType of this node. classic identity check ✨
  • SoIndexedNurbsSurface (void) β€” the constructor. makes you a brand new one, no notes πŸ’…
  • virtual void GLRender (SoGLRenderAction *action) β€” the render girlie. does the actual drawing when the action comes calling 🎨
  • virtual void rayPick (SoRayPickAction *action) β€” handles ray picking so you can click on this thing and have it notice you 🫢
  • virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action) β€” reports how many primitives this surface is giving. counting vibes only πŸ”’
  • void sendPrimitive (SoAction *, SoPrimitiveVertex *) β€” ships out a primitive vertex to the action. no cap πŸ“€

🧚 Public Member Functions inherited from SoShape

  • virtual SbBool affectsState (void) const β€” tells you if this node touches the traversal state
  • virtual void notify (SoNotList *nl) β€” the notification pipeline moment
  • virtual void getBoundingBox (SoGetBoundingBoxAction *action) β€” computes the bounding box for the action
  • virtual void callback (SoCallbackAction *action) β€” the callback-action handler
  • const SoBoundingBoxCache * getBoundingBoxCache (void) const β€” gives you the cached bounding box, so it doesn't have to recompute every time. efficient queen πŸ‘‘

πŸ’– Public Member Functions inherited from SoNode

  • void setOverride (const SbBool state) β€” flip override mode on or off
  • SbBool isOverride (void) const β€” is it overridden? we simply must know
  • void setNodeType (const NodeType type) β€” sets the node type
  • NodeType getNodeType (void) const β€” reads back the node type
  • virtual SoNode * copy (SbBool copyconnections=0) const β€” makes a copy, optionally with connections
  • virtual void doAction (SoAction *action) β€” runs the action through this node
  • virtual void GLRenderBelowPath (SoGLRenderAction *action) β€” GL render, below-path flavor
  • virtual void GLRenderInPath (SoGLRenderAction *action) β€” GL render, in-path flavor
  • virtual void GLRenderOffPath (SoGLRenderAction *action) β€” GL render, off-path flavor
  • virtual void getMatrix (SoGetMatrixAction *action) β€” the matrix grab
  • virtual void handleEvent (SoHandleEventAction *action) β€” event handling behavior
  • virtual void pick (SoPickAction *action) β€” the picking handler
  • virtual void search (SoSearchAction *action) β€” search action handler
  • virtual void write (SoWriteAction *action) β€” write action handler
  • virtual void audioRender (SoAudioRenderAction *action) β€” yes, audio render. immersive fr πŸ”Š
  • virtual void grabEventsSetup (void) β€” sets up event grabbing
  • virtual void grabEventsCleanup (void) β€” cleans up that event grabbing
  • virtual void startNotify (void) β€” kicks off notification
  • uint32_t getNodeId (void) const β€” the node's unique id number
  • virtual SoChildList * getChildren (void) const β€” the child list (this node is not a group, but the API's there)
  • virtual void writeInstance (SoOutput *out) β€” writes this instance out
  • virtual SoNode * addToCopyDict (void) const β€” adds itself to the copy dictionary
  • virtual void copyContents (const SoFieldContainer *from, SbBool copyconnections) β€” copies the field contents over
  • virtual SoFieldContainer * copyThroughConnection (void) const β€” copy through a connection

🌈 Public Member Functions inherited from SoFieldContainer

  • void setToDefaults (void) β€” resets everything to defaults
  • SbBool hasDefaultValues (void) const β€” are we running stock? yes or no
  • SbBool fieldsAreEqual (const SoFieldContainer *container) const β€” field-by-field comparison
  • void copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=0) β€” yoinks field values from another container
  • SbBool set (const char *const fielddata) β€” set from a field data string
  • void get (SbString &fielddata) β€” get as a field data string
  • virtual int getFields (SoFieldList &l) const β€” fills your list with fields
  • virtual int getAllFields (SoFieldList &l) const β€” all of them
  • virtual SoField * getField (const SbName &name) const β€” fetch a field by name
  • virtual SoField * getEventIn (const SbName &name) const β€” fetch an event-in by name
  • virtual SoField * getEventOut (const SbName &name) const β€” fetch an event-out by name
  • SbBool getFieldName (const SoField *const field, SbName &name) const β€” reverse lookup: field β†’ name
  • SbBool enableNotify (const SbBool flag) β€” toggle notifications
  • SbBool isNotifyEnabled (void) const β€” are notifications on?
  • SbBool set (const char *fielddata, SoInput *in) β€” set with an SoInput for context
  • void get (SbString &fielddata, SoOutput *out) β€” get with an SoOutput for context
  • virtual SbBool validateNewFieldValue (SoField *field, void *newval) β€” validation hook
  • virtual void addWriteReference (SoOutput *out, SbBool isfromfield=0) β€” registers a write reference
  • SbBool getIsBuiltIn (void) const β€” built-in or not?
  • void setUserData (void *userdata) const β€” stash your own pointer
  • void * getUserData (void) const β€” get that pointer back

πŸ’€ Public Member Functions inherited from SoBase

  • void ref (void) const β€” up the ref count
  • void unref (void) const β€” down the ref count
  • void unrefNoDelete (void) const β€” down the count, don't delete
  • int32_t getRefCount (void) const β€” how many refs we got
  • void touch (void) β€” touch it, triggers the notification chain
  • SbBool isOfType (SoType type) const β€” type check
  • virtual SbName getName (void) const β€” the name
  • virtual void setName (const SbName &newname) β€” set the name
  • void addAuditor (void *const auditor, const SoNotRec::Type type) β€” add an auditor
  • void removeAuditor (void *const auditor, const SoNotRec::Type type) β€” remove an auditor
  • const SoAuditorList & getAuditors (void) const β€” the auditor list
  • SbBool shouldWrite (void) β€” should this be written out?
  • void assertAlive (void) const β€” the alive check. drama, but necessary πŸ’€

⭐ Static Public Member Functions ⭐

  • static SoType getClassTypeId (void) β€” the class's SoType
  • static void initClass (void) β€” sets the class up in the type system. must be called before you use it, periodt

πŸŽ€ Static Public Member Functions inherited from SoShape

  • static SoType getClassTypeId (void)
  • static void initClass (void)
  • static void getScreenSize (SoState *const state, const SbBox3f &boundingbox, SbVec2s &rectsize)
  • static float getDecimatedComplexity (SoState *state, float complexity)

πŸ¦‹ Static Public Member Functions inherited from SoNode

  • static uint32_t getCompatibilityTypes (const SoType &nodetype)
  • static SoType getClassTypeId (void)
  • static SoNode * getByName (const SbName &name)
  • static int getByName (const SbName &name, SoNodeList &l)
  • static void initClass (void)
  • static void initClasses (void)
  • static uint32_t getNextNodeId (void)
  • static int getActionMethodIndex (const SoType type)
  • static void getBoundingBoxS (SoAction *action, SoNode *node)
  • static void GLRenderS (SoAction *action, SoNode *node)
  • static void callbackS (SoAction *action, SoNode *node)
  • static void getMatrixS (SoAction *action, SoNode *node)
  • static void handleEventS (SoAction *action, SoNode *node)
  • static void pickS (SoAction *action, SoNode *node)
  • static void rayPickS (SoAction *action, SoNode *node)
  • static void searchS (SoAction *action, SoNode *node)
  • static void writeS (SoAction *action, SoNode *node)
  • static void audioRenderS (SoAction *action, SoNode *node)
  • static void getPrimitiveCountS (SoAction *action, SoNode *node)

πŸ’… Static Public Member Functions inherited from SoFieldContainer

  • static void initClass (void)
  • static SoType getClassTypeId (void)
  • static void initCopyDict (void)
  • static void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy)
  • static SoFieldContainer * checkCopy (const SoFieldContainer *orig)
  • static SoFieldContainer * findCopy (const SoFieldContainer *orig, const SbBool copyconnections)
  • static void copyDone (void)

πŸ“ Static Public Member Functions inherited from SoBase

  • static void initClass (void)
  • static SoType getClassTypeId (void)
  • static void addName (SoBase *const base, const char *const name)
  • static void removeName (SoBase *const base, const char *const name)
  • static void incrementCurrentWriteCounter (void)
  • static void decrementCurrentWriteCounter (void)
  • static SoBase * getNamedBase (const SbName &name, SoType type)
  • static int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type)
  • static SbBool read (SoInput *in, SoBase *&base, SoType expectedtype)
  • static void setInstancePrefix (const SbString &c)
  • static void setTraceRefs (SbBool trace)
  • static SbBool getTraceRefs (void)
  • static SbBool connectRoute (SoInput *in, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)
  • static SbBool readRoute (SoInput *in)

πŸ‘‘ Public Attributes πŸ‘‘

these are the fields, bestie. the real main characters πŸ’–

  • SoSFInt32 numUControlPoints β€” number of control points in the U direction
  • SoSFInt32 numVControlPoints β€” number of control points in the V direction
  • SoMFInt32 coordIndex β€” the index into the coordinates for the surface
  • SoMFFloat uKnotVector β€” the knot vector for U, because NURBS said "we're doing math today" ✨
  • SoMFFloat vKnotVector β€” the knot vector for V
  • SoSFInt32 numSControlPoints β€” number of control points in the S (texture) direction
  • SoSFInt32 numTControlPoints β€” number of control points in the T (texture) direction
  • SoMFInt32 textureCoordIndex β€” the index into the texture coordinates
  • SoMFFloat sKnotVector β€” knot vector for S
  • SoMFFloat tKnotVector β€” knot vector for T

🌸 Protected Member Functions 🌸

  • virtual const SoFieldData * getFieldData (void) const β€” the field data table lookup
  • virtual ~SoIndexedNurbsSurface () β€” the destructor. bye girlie πŸ‘‹
  • virtual void generatePrimitives (SoAction *action) β€” generates the primitives for the action
  • virtual void computeBBox (SoAction *action, SbBox3f &box, SbVec3f &center) β€” computes the bounding box and center
  • SoDetail * createTriangleDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, const SoPrimitiveVertex *v3, SoPickedPoint *pp) β€” builds the triangle detail for ray picks

🧚 Protected Member Functions inherited from SoShape

  • SoShape (void)
  • virtual ~SoShape ()
  • float getComplexityValue (SoAction *action)
  • virtual SbBool shouldGLRender (SoGLRenderAction *action)
  • void beginSolidShape (SoGLRenderAction *action)
  • void endSolidShape (SoGLRenderAction *action)
  • void GLRenderBoundingBox (SoGLRenderAction *action)
  • SbBool shouldPrimitiveCount (SoGetPrimitiveCountAction *action)
  • SbBool shouldRayPick (SoRayPickAction *const action)
  • void computeObjectSpaceRay (SoRayPickAction *const action)
  • void computeObjectSpaceRay (SoRayPickAction *const action, const SbMatrix &matrix)
  • virtual SoDetail * createLineSegmentDetail (SoRayPickAction *action, const SoPrimitiveVertex *v1, const SoPrimitiveVertex *v2, SoPickedPoint *pp)
  • virtual SoDetail * createPointDetail (SoRayPickAction *action, const SoPrimitiveVertex *v, SoPickedPoint *pp)
  • void invokeTriangleCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2, const SoPrimitiveVertex *const v3)
  • void invokeLineSegmentCallbacks (SoAction *const action, const SoPrimitiveVertex *const v1, const SoPrimitiveVertex *const v2)
  • void invokePointCallbacks (SoAction *const action, const SoPrimitiveVertex *const v)
  • void beginShape (SoAction *const action, const TriangleShape shapetype, SoDetail *const detail=NULL)
  • void shapeVertex (const SoPrimitiveVertex *const v)
  • void endShape (void)
  • void generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoTextureCoordinateElement *const tce, const float s, const float t, const SbVec3f &normal)
  • void generateVertex (SoPrimitiveVertex *const pv, const SbVec3f &point, const SbBool useTexFunc, const SoTextureCoordinateElement *const tce, const float s, const float t, const float r, const SbVec3f &normal)
  • SbBool startVertexArray (SoGLRenderAction *action, const SoCoordinateElement *coords, const SbVec3f *pervertexnormals, const SbBool texpervertex, const SbBool colorpervertex)
  • void finishVertexArray (SoGLRenderAction *action, const SbBool vbo, const SbBool normpervertex, const SbBool texpervertex, const SbBool colorpervertex)

πŸ’œ Protected Member Functions inherited from SoNode

  • SoNode (void)
  • virtual ~SoNode ()
  • virtual SbBool readInstance (SoInput *in, unsigned short flags)

πŸ¦‹ Protected Member Functions inherited from SoFieldContainer

  • SoFieldContainer (void)
  • ~SoFieldContainer ()

πŸ’… Protected Member Functions inherited from SoBase

  • SoBase (void)
  • virtual ~SoBase ()
  • virtual void destroy (void)
  • SbBool hasMultipleWriteRefs (void) const
  • SbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) const
  • void writeFooter (SoOutput *out) const
  • virtual const char * getFileFormatName (void) const

⭐ Static Protected Member Functions ⭐

  • static const SoFieldData ** getFieldDataPtr (void) β€” pointer to the field data pointer. yes it's a double pointer, we love a lil indirection πŸ’…

🌈 Static Protected Member Functions inherited from SoShape

  • static const SoFieldData ** getFieldDataPtr (void)

πŸŽ€ Static Protected Member Functions inherited from SoNode

  • static const SoFieldData ** getFieldDataPtr (void)
  • static void setNextActionMethodIndex (int index)
  • static int getNextActionMethodIndex (void)
  • static void incNextActionMethodIndex (void)
  • static void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask)

that's it for part 1 bestie, don't go anywhere πŸ’–

🧬 Static Protected Member Functions inherited from SoBase

  • static uint32_t getCurrentWriteCounter (void) β€” it's giving static protected member function energy. πŸ’…
  • static void staticDataLock (void) β€” locking it down, no cap. πŸ”’
  • static void staticDataUnlock (void) β€” and we unlock, periodt. πŸ”“

πŸ«‚ Friends

  • class SoIndexedNurbsSurfaceP β€” the bestie friend class. 🫢

🧬 Additional Inherited Members

Public Types inherited from SoShape

enum TriangleShape { TRIANGLE_STRIP, TRIANGLE_FAN, TRIANGLES, POLYGON, QUADS, QUAD_STRIP, POINTS, LINES, LINE_STRIP }

Public Types inherited from SoNode

enum NodeType { INVENTOR = 0x0000, VRML1 = 0x0001, VRML2 = 0x0002, INVENTOR_1 = 0x0004, INVENTOR_2_0 = 0x0008, INVENTOR_2_1 = 0x0010, INVENTOR_2_5 = 0x0020, INVENTOR_2_6 = 0x0040, COIN_1_0 = 0x0080, COIN_2_0 = 0x0100, EXTENSION = 0x0200, COIN_2_2 = 0x0400, COIN_2_3 = 0x0800, COIN_2_4 = 0x1000, INVENTOR_5_0 = 0x2000, COIN_2_5 = 0x4000 }

Protected Types inherited from SoBase

enum BaseFlags { IS_ENGINE = 0x01, IS_GROUP = 0x02 }

Protected Attributes inherited from SoNode

  • uint32_t uniqueId β€” the unique ID, bestie. πŸ†”

Protected Attributes inherited from SoFieldContainer

  • SbBool isBuiltIn β€” built-in or not, that is the question. πŸ’…

Static Protected Attributes inherited from SoNode

  • static uint32_t nextUniqueId = 0
  • static int nextActionMethodIndex = 0

✨ Detailed Description ✨

The SoIndexedNurbsSurface class can be used to render NURBS surfaces. It's literally that girl. πŸ’…

It is very similar to the SoNurbsSurface class, but controlpoints can be specified using indices. Slay.

FILE FORMAT/DEFAULTS:

IndexedNurbsSurface {
    numUControlPoints 0
    numVControlPoints 0
    coordIndex 0
    uKnotVector 0
    vKnotVector 0
    numSControlPoints 0
    numTControlPoints 0
    textureCoordIndex -1
    sKnotVector 0
    tKnotVector 0
}

πŸ› οΈ Constructor & Destructor Documentation

πŸ—οΈ SoIndexedNurbsSurface::SoIndexedNurbsSurface (void )

  • Constructor. It constructs, periodt. πŸ—οΈ
  • References coordIndex, numSControlPoints, numTControlPoints, numUControlPoints, numVControlPoints, sKnotVector, SoIndexedNurbsSurface(), textureCoordIndex, tKnotVector, uKnotVector, and vKnotVector.
  • Referenced by getFieldData(), and SoIndexedNurbsSurface().

πŸ’€ SoIndexedNurbsSurface::~SoIndexedNurbsSurface () [protected], [virtual]

  • Destructor. It's giving cleanup crew energy. 🧹

🧠 Member Function Documentation

πŸ” SoType SoIndexedNurbsSurface::getTypeId (void ) const [virtual]

  • Returns the type identification of an object derived from a class inheriting SoBase. This is used for run-time type checking and "downward" casting. No cap.
  • Usage example, iykyk:
void foo(SoNode * node)
{
  if (node->getTypeId() == SoFile::getClassTypeId()) {
    SoFile * filenode = (SoFile *)node;  // safe downward cast, knows the type
  }
  else if (node->getTypeId().isOfType(SoGroup::getClassTypeId())) {
    SoGroup * group = (SoGroup *)node;  // safe downward cast, knows the type
  }
}
  • For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in all subclasses. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the pre-defined macros available through for instance Inventor/nodes/SoSubNode.h (SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine.h (for engine classes) and so on. Ngl, that's the whole vibe.
  • For more information on writing Coin extensions, see the class documentation of the toplevel superclasses for the various class groups.
  • Reimplemented from SoShape.

πŸ” const SoFieldData * SoIndexedNurbsSurface::getFieldData (void ) const [protected], [virtual]

  • Returns a pointer to the class-wide field data storage object for this instance. If no fields are present, returns NULL. Fr fr.
  • Reimplemented from SoShape.
  • References SoIndexedNurbsSurface().

πŸ” void SoIndexedNurbsSurface::GLRender (SoGLRenderAction * action) [virtual]

  • Action method for the SoGLRenderAction.
  • This is called during rendering traversals. Nodes influencing the rendering state in any way or who wants to throw geometry primitives at OpenGL overrides this method.
  • Reimplemented from SoShape.
  • References SoAction::getState(), and SoShape::shouldGLRender().

πŸ” void SoIndexedNurbsSurface::rayPick (SoRayPickAction * action) [virtual]

  • Calculates picked point based on primitives generated by subclasses.
  • Reimplemented from SoShape.
  • References SoAction::getState(), SoState::pop(), SoDebugError::postWarning(), SoState::push(), SoShape::rayPick(), and SoShape::shouldRayPick().

πŸ” void SoIndexedNurbsSurface::getPrimitiveCount (SoGetPrimitiveCountAction * action) [virtual]

  • Action method for the SoGetPrimitiveCountAction.
  • Calculates the number of triangle, line segment and point primitives for the node and adds these to the counters of the action.
  • Nodes influencing how geometry nodes calculates their primitive count also overrides this method to change the relevant state variables.
  • Reimplemented from SoShape.
  • References SoShape::getPrimitiveCount().

πŸ” void SoIndexedNurbsSurface::sendPrimitive (SoAction * , SoPrimitiveVertex * )

  • This method is part of the original SGI Inventor API, but not implemented in Coin, as it looks like a method that should probably have been private in Open Inventor. Not me reading that. πŸ’€

πŸ” void SoIndexedNurbsSurface::generatePrimitives (SoAction * action) [protected], [virtual]

  • The method implements action behavior for shape nodes for SoCallbackAction. It is invoked from SoShape::callback(). (Subclasses should not override SoNode::callback().)
  • The subclass implementations uses the convenience methods SoShape::beginShape(), SoShape::shapeVertex(), and SoShape::endShape(), with SoDetail instances, to pass the primitives making up the shape back to the caller.
  • Implements SoShape.

πŸ” void SoIndexedNurbsSurface::computeBBox (SoAction * action, SbBox3f & box, SbVec3f & center) [protected], [virtual]

  • Calculates the bounding box of all control points and sets the center to the average of these points.
  • Implements SoShape.
  • References coordIndex, SbBox3f::extendBy(), SbVec4f::getReal(), SoAction::getState(), and SbBox3f::makeEmpty().

πŸ” SoDetail * SoIndexedNurbsSurface::createTriangleDetail (SoRayPickAction * action, const SoPrimitiveVertex * v1, const SoPrimitiveVertex * v2, const SoPrimitiveVertex * v3, SoPickedPoint * pp) [protected], [virtual]

  • Will create triangle detail for a SoPickedPoint. This method will only be called internally, when generatePrimitives() is used for picking (SoShape::rayPick() is not overridden).
  • This method returns NULL in Open Inventor, and subclasses will need to override this method to create details for a SoPickedPoint.
  • This is not necessary with Coin. Of course, if you choose to override it, it will work in the same way as Open Inventor.
  • For this to work, you must supply a face or line detail when generating primitives. If you supply NULL for the detail argument in SoShape::beginShape(), you'll have to override this method.
  • Reimplemented from SoShape.

πŸ“¦ Member Data Documentation

SoSFInt32 SoIndexedNurbsSurface::numUControlPoints

  • Number of control points in the U direction.
  • Referenced by SoIndexedNurbsSurface().

SoSFInt32 SoIndexedNurbsSurface::numVControlPoints

  • Number of control points in the V direction.
  • Referenced by SoIndexedNurbsSurface().

SoMFInt32 SoIndexedNurbsSurface::coordIndex

  • The coordinate control point indices.
  • Referenced by computeBBox(), and SoIndexedNurbsSurface().

SoMFFloat SoIndexedNurbsSurface::uKnotVector

  • The Bezier knot vector for the U direction.
  • Referenced by SoIndexedNurbsSurface().

SoMFFloat SoIndexedNurbsSurface::vKnotVector

  • The Bezier knot vector for the V direction.
  • Referenced by SoIndexedNurbsSurface().

SoSFInt32 SoIndexedNurbsSurface::numSControlPoints

  • Number of control points in the S direction.
  • Referenced by SoIndexedNurbsSurface().

SoSFInt32 SoIndexedNurbsSurface::numTControlPoints

  • Number of control points in the T direction.
  • Referenced by SoIndexedNurbsSurface().

SoMFInt32 SoIndexedNurbsSurface::textureCoordIndex

  • The texture coordinate control point indices.
  • Referenced by SoIndexedNurbsSurface().

SoMFFloat SoIndexedNurbsSurface::sKnotVector

  • The Bezier knot vector for the S direction.
  • Referenced by SoIndexedNurbsSurface().

SoMFFloat SoIndexedNurbsSurface::tKnotVector

  • The Bezier knot vector for the T direction.
  • Referenced by SoIndexedNurbsSurface().

πŸ‘©β€πŸ’» Author

Generated automatically by Doxygen for Coin from the source code. It's giving documentation royalty. πŸ‘‘


This iconic page is brought to you by Coin, Version 2.5.0, and it's the SoIndexedNurbsSurface(3) manpage. No cap. πŸ’–βœ¨

πŸ“¦ where this page comes from