SoShapeKit(3)

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

πŸ’– SoShapeKit πŸ’–

okay bestie, so you opened SoShapeKit(3) β€” that's the Library Functions Manual entry, and it's giving very important, very structural, very "we built you a whole kit" energy. πŸŽ€ Let's get into it, no cap.


🌸 NAME 🌸

SoShapeKit β€” the class that provides templates to insert what is usually needed for shape nodes. That's the whole job. That's the mission. That's the moment. ✨


✨ SYNOPSIS ✨

#include <Inventor/nodekits/SoShapeKit.h>

Inherits SoSeparatorKit. πŸ‘‘


🫢 Public Member Functions

  • virtual SoType getTypeId (void) const β€” the type-checking glow-up, const edition πŸ’…
  • virtual const SoNodekitCatalog * getNodekitCatalog (void) const β€” hand it over, bestie, we need the catalog
  • SoShapeKit (void) β€” the constructor, the main character entrance πŸ¦‹

🌈 Public Member Functions inherited from SoSeparatorKit

  • SoSeparatorKit (void) β€” the parent's constructor, doing its thing in the background

🌈 Public Member Functions inherited from SoBaseKit

  • SoBaseKit (void) β€” constructor, but make it base-class
  • virtual SoNode * getPart (const SbName &partname, SbBool makeifneeded) β€” fetch a part by name, and tell it whether to make it if it's not there yet
  • SbString getPartString (const SoBase *part) β€” gimme the name string for a part
  • virtual SoNodeKitPath * createPathToPart (const SbName &partname, SbBool makeifneeded, const SoPath *pathtoextend=NULL) β€” build a whole path to a part, optionally extending an existing one
  • virtual SbBool setPart (const SbName &partname, SoNode *from) β€” assign a node to a named part
  • SbBool set (const char *namevaluepairliststring) β€” set stuff from a name/value pair string
  • SbBool set (const char *partnamestring, const char *parameterstring) β€” same vibe, part-name + parameter-string flavour
  • virtual void doAction (SoAction *action) β€” run an action, the generalist
  • virtual void callback (SoCallbackAction *action) β€” callback action, specifically
  • virtual void GLRender (SoGLRenderAction *action) β€” render it, iconic πŸ”₯
  • virtual void getBoundingBox (SoGetBoundingBoxAction *action) β€” bounding box, get it
  • virtual void getMatrix (SoGetMatrixAction *action) β€” matrix, get it
  • virtual void handleEvent (SoHandleEventAction *action) β€” events? handled.
  • virtual void rayPick (SoRayPickAction *action) β€” ray pick, periodt
  • virtual void search (SoSearchAction *action) β€” search, bestie
  • virtual void write (SoWriteAction *action) β€” write it out
  • virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action) β€” count those primitives
  • virtual SoChildList * getChildren (void) const β€” the children list, const and proud
  • void printDiagram (void) β€” print the diagram, we love a visual 🫢
  • void printSubDiagram (const SbName &rootname, int level) β€” sub-diagram, with a root name and a level
  • void printTable (void) β€” print the table
  • virtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE) β€” add a write reference, with the from-field flag defaulting to FALSE
  • SbBool forceChildDrivenWriteRefs (SoOutput *out) β€” force those child-driven write refs

🌈 Public Member Functions inherited from SoNode

  • void setOverride (const SbBool state) β€” set the override state
  • SbBool isOverride (void) const β€” are we overriding? enquire within
  • void setNodeType (const NodeType type) β€” set that node type
  • NodeType getNodeType (void) const β€” get that node type
  • virtual SoNode * copy (SbBool copyconnections=FALSE) const β€” copy it, copyconnections defaults to FALSE
  • virtual SbBool affectsState (void) const β€” does it affect state? ask it
  • virtual void GLRenderBelowPath (SoGLRenderAction *action) β€” render below path
  • virtual void GLRenderInPath (SoGLRenderAction *action) β€” render in path
  • virtual void GLRenderOffPath (SoGLRenderAction *action) β€” render off path
  • virtual void pick (SoPickAction *action) β€” pick, the classic
  • virtual void audioRender (SoAudioRenderAction *action) β€” audio render, sound on πŸ”Š
  • virtual void grabEventsSetup (void) β€” grab events, setup phase
  • virtual void grabEventsCleanup (void) β€” grab events, cleanup phase
  • virtual void startNotify (void) β€” start the notify
  • virtual void notify (SoNotList *l) β€” notify, with the list
  • uint32_t getNodeId (void) const β€” node ID, as a uint32_t
  • virtual void writeInstance (SoOutput *out) β€” write the instance
  • virtual SoFieldContainer * copyThroughConnection (void) const β€” copy through connection, const-style

🌈 Public Member Functions inherited from SoFieldContainer

  • void setToDefaults (void) β€” reset to defaults, clean slate ✨
  • SbBool hasDefaultValues (void) const β€” does it have default values? find out
  • SbBool fieldsAreEqual (const SoFieldContainer *container) const β€” compare fields with another container
  • void copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE) β€” copy field values over, copyconnections defaulting to FALSE
  • SbBool set (const char *const fielddata) β€” set from field data
  • void get (SbString &fielddata) β€” get into an SbString
  • virtual int getFields (SoFieldList &l) const β€” get the fields into a list
  • virtual int getAllFields (SoFieldList &l) const β€” get all the fields into a list, no skipping πŸ‘‘
  • virtual SoField * getField (const SbName &name) const β€” get one field by name
  • virtual SoField * getEventIn (const SbName &name) const β€” get an event in
  • virtual SoField * getEventOut (const SbName &name) const β€” get an event out
  • SbBool getFieldName (const SoField *const field, SbName &name) const β€” field β†’ name, reverse lookup
  • SbBool enableNotify (const SbBool flag) β€” toggle notify with a flag
  • SbBool isNotifyEnabled (void) const β€” is notify on tho?
  • SbBool set (const char *fielddata, SoInput *input) β€” set with field data and an input
  • void get (SbString &fielddata, SoOutput *out) β€” get with an output
  • virtual SbBool validateNewFieldValue (SoField *field, void *newval) β€” validate that new field value
  • SbBool getIsBuiltIn (void) const β€” is it built in?
  • virtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) const β€” memory size of fields, split into managed and unmanaged
  • void setUserData (void *userdata) const β€” stash your user data
  • void * getUserData (void) const β€” retrieve your user data

🌈 Public Member Functions inherited from SoBase

  • void ref (void) const β€” ref it up
  • void unref (void) const β€” unref it
  • void unrefNoDelete (void) const β€” unref but don't delete, the sneaky one
  • int32_t getRefCount (void) const β€” ref count, as an int32_t
  • void touch (void) β€” touch it, wake it up
  • SbBool isOfType (SoType type) const β€” is it of this type?
  • virtual SbName getName (void) const β€” get the name
  • virtual void setName (const SbName &newname) β€” set a new 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 β€” get the auditors list
  • SbBool shouldWrite (void) β€” should it write? the moment of truth
  • void assertAlive (void) const β€” assert that it's alive, dramatic but necessary πŸ’€

πŸ‘‘ Static Public Member Functions

  • static SoType getClassTypeId (void) β€” class type ID, static and slaying
  • static const SoNodekitCatalog * getClassNodekitCatalog (void) β€” the class-level catalog
  • static void initClass (void) β€” init the class, do it

🌈 Static Public Member Functions inherited from SoSeparatorKit

  • static SoType getClassTypeId (void) β€” same name, parent edition
  • static const SoNodekitCatalog * getClassNodekitCatalog (void) β€” parent catalog
  • static void initClass (void) β€” parent init

🌈 Static Public Member Functions inherited from SoBaseKit

  • static SoType getClassTypeId (void) β€” type ID again
  • static void initClass (void) β€” init again
  • static const SoNodekitCatalog * getClassNodekitCatalog (void) β€” catalog again
  • static SbBool isSearchingChildren (void) β€” is it searching children?
  • static void setSearchingChildren (const SbBool newval) β€” set searching children to a new value

🌈 Static Public Member Functions inherited from SoNode

  • static uint32_t getCompatibilityTypes (const SoType &nodetype) β€” compatibility types for a node type
  • static SoType getClassTypeId (void) β€” type ID, obviously
  • static SoNode * getByName (const SbName &name) β€” look up a node by name
  • static int getByName (const SbName &name, SoNodeList &l) β€” look up by name into a SoNodeList
  • static void initClass (void) β€” init
  • static void initClasses (void) β€” init all the classes, plural energy
  • static uint32_t getNextNodeId (void) β€” next node ID, as a uint32_t
  • static int getActionMethodIndex (const SoType type) β€” action method index for a type
  • static void getBoundingBoxS (SoAction *action, SoNode *node) β€” the static bounding-box one
  • static void GLRenderS (SoAction *action, SoNode *node) β€” the static GL render one
  • static void callbackS (SoAction *action, SoNode *node) β€” the static callback one
  • static void getMatrixS (SoAction *action, SoNode *node) β€” the static matrix one
  • static void handleEventS (SoAction *action, SoNode *node) β€” the static handle-event one
  • static void pickS (SoAction *action, SoNode *node) β€” the static pick one
  • static void rayPickS (SoAction *action, SoNode *node) β€” the static ray-pick one
  • static void searchS (SoAction *action, SoNode *node) β€” the static search one
  • static void writeS (SoAction *action, SoNode *node) β€” the static write one
  • static void audioRenderS (SoAction *action, SoNode *node) β€” the static audio-render one
  • static void getPrimitiveCountS (SoAction *action, SoNode *node) β€” the static primitive-count one

🌈 Static Public Member Functions inherited from SoFieldContainer

  • static void initClass (void) β€” init the class
  • static SoType getClassTypeId (void) β€” class type ID
  • static void cleanupClass (void) β€” cleanup the class, we love a tidy queen 🧚
  • static void initCopyDict (void) β€” init the copy dict
  • static void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy) β€” add a copy: original and copy
  • static SoFieldContainer * checkCopy (const SoFieldContainer *orig) β€” check a copy
  • static SoFieldContainer * findCopy (const SoFieldContainer *orig, const SbBool copyconnections) β€” find a copy, with the copy-connections flag
  • static void copyDone (void) β€” copy done, wrap it up

🌈 Static Public Member Functions inherited from SoBase

  • static void initClass (void) β€” init
  • static SoType getClassTypeId (void) β€” type ID
  • static void addName (SoBase *const base, const char *const name) β€” add a name to a base
  • static void removeName (SoBase *const base, const char *const name) β€” remove a name from a base
  • static void incrementCurrentWriteCounter (void) β€” increment the current write counter
  • static void decrementCurrentWriteCounter (void) β€” decrement the current write counter
  • static SoBase * getNamedBase (const SbName &name, SoType type) β€” get a named base of a type
  • static int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type) β€” get named bases into a SoBaseList
  • static SbBool read (SoInput *input, SoBase *&base, SoType expectedtype) β€” read it in, with an expected type
  • static void setInstancePrefix (const SbString &c) β€” set the instance prefix
  • static void setTraceRefs (SbBool trace) β€” set trace refs
  • static SbBool getTraceRefs (void) β€” get trace refs
  • static SbBool connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname) β€” connect a route from node/field to node/field, all those names
  • static SbBool readRoute (SoInput *input) β€” read a route

πŸŽ€ Protected Member Functions

  • virtual const SoFieldData * getFieldData (void) const β€” get the field data, protected and precious
  • virtual ~SoShapeKit () β€” the destructor, RIP bestie πŸ’€
  • virtual void setDefaultOnNonWritingFields (void) β€” set the default on non-writing fields

🌈 Protected Member Functions inherited from SoSeparatorKit

  • virtual ~SoSeparatorKit () β€” parent destructor
  • virtual SbBool setUpConnections (SbBool onoff, SbBool doitalways=FALSE) β€” set up connections, doitalways defaulting to FALSE

🌈 Protected Member Functions inherited from SoBaseKit

  • virtual ~SoBaseKit () β€” base destructor
  • virtual SoNode * addToCopyDict (void) const β€” add to the copy dict
  • virtual void copyContents (const SoFieldContainer *fromfc, SbBool copyconnections) β€” copy the contents over
  • SoGroup * getContainerNode (const SbName &listname, SbBool makeifneeded=TRUE) β€” get the container node, makeifneeded defaults to TRUE
  • virtual SoNode * getAnyPart (const SbName &partname, SbBool makeifneeded, SbBool leafcheck=FALSE, SbBool publiccheck=FALSE) β€” get any part, with leafcheck and publiccheck both defaulting to FALSE
  • virtual SoNodeKitPath * createPathToAnyPart (const SbName &partname, SbBool makeifneeded, SbBool leafcheck=FALSE, SbBool publiccheck=FALSE, const SoPath *pathtoextend=NULL) β€” create a path to any part, and pathtoextend defaults to NULL
  • virtual SbBool setAnyPart (const SbName &partname, SoNode *from, SbBool anypart=TRUE) β€” set any part, anypart defaults to TRUE
  • void createNodekitPartsList (void) β€” create the nodekit parts list
  • void createFieldList (void) β€” create the field list
  • virtual void createDefaultParts (void) β€” create the default parts
  • const SoNodekitParts * getNodekitPartsList (void) const β€” get the nodekit parts list
  • const SbList< SoSFNode * > & getCatalogInstances (void) const β€” get the catalog instances
  • void catalogError (void) β€” catalog error, uh oh πŸ™ˆ
  • virtual SbBool readInstance (SoInput *in, unsigned short flags) β€” read the instance, with flags
  • void countMyFields (SoOutput *out) β€” count my fields
  • virtual SbBool setPart (const int partNum, SoNode *node) β€” set a part by number

🌈 Protected Member Functions inherited from SoNode

  • SoNode (void) β€” protected constructor
  • virtual ~SoNode () β€” protected destructor

🌈 Protected Member Functions inherited from SoFieldContainer

  • SoFieldContainer (void) β€” protected constructor
  • virtual ~SoFieldContainer () β€” protected destructor

🌈 Protected Member Functions inherited from SoBase

  • SoBase (void) β€” protected constructor
  • virtual ~SoBase () β€” protected destructor
  • virtual void destroy (void) β€” destroy it
  • SbBool hasMultipleWriteRefs (void) const β€” does it have multiple write refs?
  • SbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) const β€” write the header, with is-group and is-engine flags
  • void writeFooter (SoOutput *out) const β€” write the footer
  • virtual const char * getFileFormatName (void) const β€” get the file format name

🌟 Static Protected Member Functions

  • static const SoFieldData ** getFieldDataPtr (void) β€” pointer to the field data pointer, yes really
  • static const SoNodekitCatalog ** getClassNodekitCatalogPtr (void) β€” pointer to the class catalog pointer

🌈 Static Protected Member Functions inherited from SoSeparatorKit

  • static const SoFieldData ** getFieldDataPtr (void) β€” parent field data ptr
  • static const SoNodekitCatalog ** getClassNodekitCatalogPtr (void) β€” parent catalog ptr

🌈 Static Protected Member Functions inherited from SoBaseKit

  • static const SoFieldData ** getFieldDataPtr (void) β€” field data ptr
  • static const SoNodekitCatalog ** getClassNodekitCatalogPtr (void) β€” catalog ptr

🌈 Static Protected Member Functions inherited from SoNode

  • static const SoFieldData ** getFieldDataPtr (void) β€” field data ptr
  • static void setNextActionMethodIndex (int index) β€” set the next action method index
  • static int getNextActionMethodIndex (void) β€” get the next action method index
  • static void incNextActionMethodIndex (void) β€” increment the next action method index
  • static void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask) β€” set compatibility types with a bitmask

🌈 Static Protected Member Functions inherited from SoBase

  • static uint32_t getCurrentWriteCounter (void) β€” get the current write counter
  • static void staticDataLock (void) β€” lock the static data πŸ”’
  • static void staticDataUnlock (void) β€” unlock the static data πŸ”“

part 1 done bestie, do not leave yet β€” there's more of this page coming and it's only gonna get better πŸ¦‹

πŸ›‘οΈ Protected Attributes πŸ›‘οΈ

okay bestie, these are the protected attributes β€” they're like the backstage pass 🎟️. only subclasses and the class itself can touch them, but we're gonna list every single one because we don't gatekeep here πŸ’–.

  • SoSFNode coordinate3
  • SoSFNode coordinate4
  • SoSFNode localTransform
  • SoSFNode materialBinding
  • SoSFNode normal
  • SoSFNode normalBinding
  • SoSFNode profileCoordinate2
  • SoSFNode profileCoordinate3
  • SoSFNode profileList
  • SoSFNode shape
  • SoSFNode shapeHints
  • SoSFNode shapeSeparator
  • SoSFNode textureCoordinate2
  • SoSFNode textureCoordinateBinding
  • SoSFNode textureCoordinateFunction

✨ Protected Attributes inherited from SoSeparatorKit ✨

these are the ones you get from the parent, no extra work required:

  • SoSFNode appearance
  • SoSFNode childList
  • SoSFNode pickStyle
  • SoSFNode texture2Transform
  • SoSFNode topSeparator
  • SoSFNode transform
  • SoSFNode units

πŸ’« Protected Attributes inherited from SoBaseKit πŸ’«

  • SoSFNode callbackList
  • SoChildList * children
  • SbBool connectionsSetUp

🌸 Protected Attributes inherited from SoNode 🌸

  • uint32_t uniqueId

πŸŽ€ Protected Attributes inherited from SoFieldContainer πŸŽ€

  • SbBool isBuiltIn

🌈 Additional Inherited Members 🌈

πŸ‘‘ Public Types inherited from SoSeparatorKit

enum CacheEnabled { OFF, ON, AUTO }

⭐ 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,
    COIN_3_0 = 0x8000, INVENTOR_6_0 = 0x10000 }

πŸ’… Public Attributes inherited from SoSeparatorKit

  • SoSFEnum renderCaching
  • SoSFEnum boundingBoxCaching
  • SoSFEnum renderCulling
  • SoSFEnum pickCulling

🧚 Protected Types inherited from SoBase

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

🌟 Static Protected Attributes inherited from SoNode

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

πŸ“– Detailed Description πŸ“–

so SoShapeKit is literally the template queen πŸ‘‘. it provides templates to insert what is usually needed for shape nodes. periodt.

here's the node kit structure β€” new entries versus the parent class are marked with an arrow prefix πŸ‘‡:

CLASS SoShapeKit
-->"this"
      "callbackList"
      "topSeparator"
         "pickStyle"
         "appearance"
         "units"
         "transform"
         "texture2Transform"
-->      "materialBinding"
-->      "normalBinding"
-->      "textureCoordinateBinding"
-->      "shapeHints"
-->      "coordinate3"
-->      "coordinate4"
-->      "normal"
-->      "textureCoordinate2"
-->      "profileCoordinate2"
-->      "profileCoordinate3"
-->      "profileList"
         "childList"
-->      "textureCoordinateFunction"
-->      "localTransform"
-->      "shapeSeparator"
-->         "shape"

(see SoBaseKit::printDiagram() for information about the output formatting.)

and here's the detailed tea β˜• on the catalog parts:

CLASS SoShapeKit
PVT   "this",  SoShapeKit  ---
      "callbackList",  SoNodeKitListPart [ SoCallback, SoEventCallback ]
PVT   "topSeparator",  SoSeparator  ---
      "pickStyle",  SoPickStyle  ---
      "appearance",  SoAppearanceKit  ---
      "units",  SoUnits  ---
      "transform",  SoTransform  ---
      "texture2Transform",  SoTexture2Transform  ---
      "materialBinding",  SoMaterialBinding  ---
      "normalBinding",  SoNormalBinding  ---
      "textureCoordinateBinding",  SoTextureCoordinateBinding  ---
      "shapeHints",  SoShapeHints  ---
      "coordinate3",  SoCoordinate3  ---
      "coordinate4",  SoCoordinate4  ---
      "normal",  SoNormal  ---
      "textureCoordinate2",  SoTextureCoordinate2  ---
      "profileCoordinate2",  SoProfileCoordinate2  ---
      "profileCoordinate3",  SoProfileCoordinate3  ---
      "profileList",  SoNodeKitListPart [ SoProfile ]
      "childList",  SoNodeKitListPart [ SoShapeKit, SoSeparatorKit ]
      "textureCoordinateFunction",  SoTextureCoordinateFunction  --- , (default type = SoTextureCoordinateDefault)
      "localTransform",  SoTransform  ---
PVT   "shapeSeparator",  SoSeparator  ---
      "shape",  SoShape  --- , (default type = SoCube)

(see SoBaseKit::printTable() for information about the output formatting.)


πŸ› οΈ Constructor & Destructor Documentation πŸ› οΈ

SoShapeKit::SoShapeKit (void )

Constructor. bestie, this is how you birth a new SoShapeKit ✨.

SoShapeKit::~SoShapeKit () [protected], [virtual]

Destructor. and this is the cleanup crew 🧹, protected and virtual.


πŸ’– Member Function Documentation πŸ’–

SoType SoShapeKit::getTypeId (void ) const [virtual]

so getTypeId() gives you the type identification of any object derived from a class that inherits SoBase. it's used for run-time type checking and for doing "downward" casts (iykyk). here's a usage example:

void foo(SoNode * node)
{
  if (node->getTypeId() == SoFile::getClassTypeId()) {
    SoFile * filenode = (SoFile *)node;  // safe downward cast, knows the type
  }
}

and for all my application programmers out there who wanna extend the library with new nodes, engines, nodekits, draggers, or whatever: you need to override this method in all subclasses. it's usually part of setting up the full type system for extension classes, which you do with the pre-defined macros from 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.

want more tea on writing Coin extensions? check the class documentation of the toplevel superclasses for the various class groups.

Reimplemented from SoSeparatorKit.

const SoFieldData * SoShapeKit::getFieldData (void ) const [protected], [virtual]

this one hands you a pointer to the class-wide field data storage object for this instance. if there are no fields, it returns NULL (rip).

Reimplemented from SoSeparatorKit.

const SoNodekitCatalog * SoShapeKit::getNodekitCatalog (void ) const [virtual]

returns the nodekit catalog that defines the layout of this class' kit. basically the blueprint πŸ—ΊοΈ.

Reimplemented from SoSeparatorKit.

void SoShapeKit::setDefaultOnNonWritingFields (void ) [protected], [virtual]

(ngl, this method is probably not for you if you're just using the library and not writing custom nodekits or draggers. but if you are writing extensions, check the SoBaseKit class documentation for the full scoop.)

it's a virtual method, and the code inside should call SoField::setDefault() with argument TRUE on part fields that shouldn't be written when you export the scenegraph.

this is typically done when:

  1. field value is NULL and part is NULL by default
  2. it's a leaf SoGroup or SoSeparator node with no children
  3. it's a leaf listpart with no children and an SoGroup or SoSeparator container
  4. it's a non-leaf part and it's of SoGroup type and all fields are at their default values

subclasses should usually override this to do extra settings for new member fields. and from the subclass, don't forget to call "upwards" to your superclass' setDefaultOnNonWritingFields() method. πŸ’…

Reimplemented from SoSeparatorKit.


πŸ‘‘ Author πŸ‘‘

Generated automatically by Doxygen for Coin from the source code. no cap, it's a robot's work but we made it cute πŸ’–.


and that's the whole vibe! this was Coin Version 3.1.3, and the page is SoShapeKit(3). slay, bestie, go forth and build shapes βœ¨πŸ¦‹

πŸ“¦ where this page comes from