SoTabBoxDragger(3)
πΈ NAME πΈ
Hiii bestie, welcome to the SoTabBoxDragger page, fresh out of the Library Functions Manual (that's the (3) energy, iykyk). And okay so what even is it?
SoTabBoxDragger β it wraps a box around your geometry, and then you can translate it and scale it. That's it. That's the whole vibe. π
This page is a whole trilogy, and this right here is part 1 of 3 β more parts are coming, so don't go anywhere π«Ά
π SYNOPSIS π
#include <Inventor/draggers/SoTabBoxDragger.h>
Inherits SoDragger.
β¨ Public Member Functions β¨
virtual SoType getTypeId (void) constβ hands you the runtimeSoTypeid for this class, the classic "who am I really" move β¨virtual const SoNodekitCatalog * getNodekitCatalog (void) constβ gives you the nodekit catalog, aka the full blueprint of every part this thing is built from πΊοΈSoTabBoxDragger (void)β the constructor, bestie. Call it, get a dragger. Periodt.void adjustScaleTabSize (void)β fiddles with the size of the scale tabs so they actually look right π
π¦ Public Member Functions inherited from SoDragger π¦
okay so these are all the goodies you get for free just by being a SoDragger β no cap, there's a lot of them:
virtual void callback (SoCallbackAction *action)β runs the callback action down through this node.virtual void GLRender (SoGLRenderAction *action)β the render action, aka "draw me" β¨virtual void getMatrix (SoGetMatrixAction *action)β feeds this node's transform into the matrix action.virtual void rayPick (SoRayPickAction *action)β ray pick handling, for when something's aiming at you.virtual void search (SoSearchAction *action)β lets a search action find this node.virtual void write (SoWriteAction *action)β writes this node out.virtual void getPrimitiveCount (SoGetPrimitiveCountAction *action)β counts up the primitives.void setProjectorEpsilon (const float epsilon)β sets the projector epsilon toepsilon.float getProjectorEpsilon (void) constβ reads the projector epsilon back out.void addStartCallback (SoDraggerCB *func, void *data=NULL)β registers a callback that fires when a drag starts π¬void removeStartCallback (SoDraggerCB *func, void *data=NULL)β un-registers that start callback.void addMotionCallback (SoDraggerCB *func, void *data=NULL)β registers a callback for while you're dragging (the motion, the wiggle) πvoid removeMotionCallback (SoDraggerCB *func, void *data=NULL)β takes that motion callback back off.void addFinishCallback (SoDraggerCB *func, void *data=NULL)β registers a callback for when the drag is done, slay.void removeFinishCallback (SoDraggerCB *func, void *data=NULL)β removes the finish callback.void addValueChangedCallback (SoDraggerCB *func, void *data=NULL)β registers a callback for when the value changes.void removeValueChangedCallback (SoDraggerCB *func, void *data=NULL)β removes that one too.void setMinGesture (int pixels)β sets the minimum gesture size, inpixels.int getMinGesture (void) constβ gets that minimum gesture size back.SbBool enableValueChangedCallbacks (SbBool newval)β turns value-changed callbacks on or off withnewval.const SbMatrix & getMotionMatrix (void)β hands you the motion matrix by reference.void addOtherEventCallback (SoDraggerCB *func, void *data=NULL)β registers a callback for all the other events.void removeOtherEventCallback (SoDraggerCB *func, void *data=NULL)β removes that other-events callback.void registerChildDragger (SoDragger *child)β registerschildas a child dragger.void unregisterChildDragger (SoDragger *child)β un-registers it.void registerChildDraggerMovingIndependently (SoDragger *child)β registerschildas a child dragger that moves on its own, main character energy πvoid unregisterChildDraggerMovingIndependently (SoDragger *child)β un-registers that independent mover.SbMatrix getLocalToWorldMatrix (void)β the local-to-world matrix.SbMatrix getWorldToLocalMatrix (void)β the world-to-local matrix.SbVec3f getLocalStartingPoint (void)β where the drag started, in local space.SbVec3f getWorldStartingPoint (void)β where the drag started, in world space.void getPartToLocalMatrix (const SbName &partname, SbMatrix &parttolocalmatrix, SbMatrix &localtopartmatrix)β gives you both the part-to-local and local-to-part matrices forpartname.void transformMatrixLocalToWorld (const SbMatrix &frommatrix, SbMatrix &tomatrix)β convertsfrommatrixfrom local space into world space, intomatrix.void transformMatrixWorldToLocal (const SbMatrix &frommatrix, SbMatrix &tomatrix)β the reverse trip, world space back to local.void transformMatrixToLocalSpace (const SbMatrix &frommatrix, SbMatrix &tomatrix, const SbName &fromspacepartname)β transformsfrommatrixinto the local space offromspacepartname.virtual void setMotionMatrix (const SbMatrix &newmatrix)β sets the motion matrix tonewmatrix.void valueChanged (void)β tells the dragger its value changed.const SbMatrix & getStartMotionMatrix (void)β the motion matrix from when the drag began.virtual void saveStartParameters (void)β stashes the starting parameters away.const SoPath * getPickPath (void) constβ the pick path.const SoEvent * getEvent (void) constβ the event.SoPath * createPathToThis (void)β builds a path pointing at this thing.const SoPath * getSurrogatePartPickedOwner (void) constβ the owner of the surrogate part that got picked.const SbName & getSurrogatePartPickedName (void) constβ the name of that picked surrogate part.const SoPath * getSurrogatePartPickedPath (void) constβ the path of that picked surrogate part.void setStartingPoint (const SoPickedPoint *newpoint)β sets the starting point from aSoPickedPoint.void setStartingPoint (const SbVec3f &newpoint)β sets the starting point from a vector.const SbViewVolume & getViewVolume (void)β the view volume.void setViewVolume (const SbViewVolume &vol)β sets the view volume tovol.const SbViewportRegion & getViewportRegion (void)β the viewport region.void setViewportRegion (const SbViewportRegion ®)β sets the viewport region toreg.SoHandleEventAction * getHandleEventAction (void) constβ the handle-event action.void setHandleEventAction (SoHandleEventAction *newAction)β sets the handle-event action tonewAction.void setTempPathToThis (const SoPath *somethingclose)β sets a temporary path to this, from something close by.virtual void grabEventsSetup (void)β the setup for grabbing events.virtual void grabEventsCleanup (void)β the cleanup after grabbing events.void workFieldsIntoTransform (SbMatrix &mtx)β works the fields into the transformmtx.void setFrontOnProjector (ProjectorFrontSetting newval)β sets the front-on-projector setting tonewval.ProjectorFrontSetting getFrontOnProjector (void) constβ reads that setting back.
π Public Member Functions inherited from SoInteractionKit π
SoInteractionKit (void)β constructor, standard issue.virtual SbBool setPartAsPath (const SbName &partname, SoPath *path)β sets the part calledpartnameto be the givenpath.virtual SbBool setPartAsDefault (const SbName &partname, SoNode *node, SbBool onlyifdefault=TRUE)β setspartnametonodeas the default, but only ifonlyifdefaultsays so.virtual SbBool setPartAsDefault (const SbName &partname, const SbName &nodename, SbBool onlyifdefault=TRUE)β same thing but you name the node withnodenameinstead.SbBool isPathSurrogateInMySubgraph (const SoPath *path, SoPath *&pathToOwner, SbName &surrogatename, SoPath *&surrogatepath, SbBool fillargs=TRUE)β checks whetherpathis a surrogate inside this subgraph, and fills in the owner path, surrogate name and surrogate path.SbBool isPathSurrogateInMySubgraph (const SoPath *path)β the simpler version: just yes or no forpath.virtual SbBool setPart (const SbName &partname, SoNode *from)β sets the partpartnameusingfrom.
π§ Public Member Functions inherited from SoBaseKit π§
SoBaseKit (void)β constructor.virtual SoNode * getPart (const SbName &partname, SbBool makeifneeded)β grabs the partpartname, making it first ifmakeifneededsays to.SbString getPartString (const SoBase *part)β gives you the part string forpart.virtual SoNodeKitPath * createPathToPart (const SbName &partname, SbBool makeifneeded, const SoPath *pathtoextend=NULL)β builds a nodekit path topartname, optionally extendingpathtoextend.SbBool set (const char *namevaluepairliststring)β sets stuff from anamevaluepairliststring.SbBool set (const char *partnamestring, const char *parameterstring)β sets a part using apartnamestringand aparameterstring.virtual void doAction (SoAction *action)β runs the action.virtual SoChildList * getChildren (void) constβ the children list.void printDiagram (void)β prints the diagram, so cute.void printSubDiagram (const SbName &rootname, int level)β prints a sub-diagram starting atrootname, down tolevel.void printTable (void)β prints the table.virtual void addWriteReference (SoOutput *out, SbBool isfromfield=FALSE)β adds a write reference toout.SbBool forceChildDrivenWriteRefs (SoOutput *out)β forces the child-driven write references.
β Public Member Functions inherited from SoNode β
void setOverride (const SbBool state)β sets the override flag tostate.SbBool isOverride (void) constβ is it overriding? yes/no.void setNodeType (const NodeType type)β sets the node type totype.NodeType getNodeType (void) constβ reads the node type.virtual SoNode * copy (SbBool copyconnections=FALSE) constβ copies the node, connections and all if you ask nicely.virtual SbBool affectsState (void) constβ does this node affect state?virtual void GLRenderBelowPath (SoGLRenderAction *action)β GL render, below path flavour.virtual void GLRenderInPath (SoGLRenderAction *action)β GL render, in path flavour.virtual void GLRenderOffPath (SoGLRenderAction *action)β GL render, off path flavour.virtual void pick (SoPickAction *action)β the pick action.virtual void audioRender (SoAudioRenderAction *action)β the audio render action πvirtual void startNotify (void)β kicks off notification.virtual void notify (SoNotList *l)β notifies with the listl.uint32_t getNodeId (void) constβ the node id.virtual void writeInstance (SoOutput *out)β writes the instance out toout.virtual SoFieldContainer * copyThroughConnection (void) constβ copies through the connection.
π Public Member Functions inherited from SoFieldContainer π
void setToDefaults (void)β resets everything to defaults.SbBool hasDefaultValues (void) constβ are all the values default? yes/no.SbBool fieldsAreEqual (const SoFieldContainer *container) constβ compares fields againstcontainer.void copyFieldValues (const SoFieldContainer *container, SbBool copyconnections=FALSE)β copies the field values fromcontainer.SbBool set (const char *const fielddata)β sets fromfielddata.void get (SbString &fielddata)β gets the field data out intofielddata.virtual int getFields (SoFieldList &l) constβ gets the fields into the listl.virtual int getAllFields (SoFieldList &l) constβ gets all the fields intol.virtual SoField * getField (const SbName &name) constβ grabs the field calledname.virtual SoField * getEventIn (const SbName &name) constβ grabs the event-in calledname.virtual SoField * getEventOut (const SbName &name) constβ grabs the event-out calledname.SbBool getFieldName (const SoField *const field, SbName &name) constβ works out the name offield.SbBool enableNotify (const SbBool flag)β toggles notification withflag.SbBool isNotifyEnabled (void) constβ is notification enabled?SbBool set (const char *fielddata, SoInput *input)β sets fromfielddata, reading throughinput.void get (SbString &fielddata, SoOutput *out)β gets the field data out, writing throughout.virtual SbBool validateNewFieldValue (SoField *field, void *newval)β checks whethernewvalis valid forfield.SbBool getIsBuiltIn (void) constβ is it built in?virtual void getFieldsMemorySize (size_t &managed, size_t &unmanaged) constβ reports the managed and unmanaged memory sizes of the fields.void setUserData (void *userdata) constβ attachesuserdatato this.void * getUserData (void) constβ gets that userdata back out.
π Public Member Functions inherited from SoBase π
void ref (void) constβ bumps the reference count up.void unref (void) constβ drops the reference count down.void unrefNoDelete (void) constβ drops the count but does not delete. sneaky but valid.int32_t getRefCount (void) constβ what's the ref count rn?void touch (void)β touches the node, so everyone knows something changed β¨SbBool isOfType (SoType type) constβ is this thing of typetype?virtual SbName getName (void) constβ the name.virtual void setName (const SbName &newname)β renames it tonewname.void addAuditor (void *const auditor, const SoNotRec::Type type)β adds an auditor of the giventype.void removeAuditor (void *const auditor, const SoNotRec::Type type)β removes that auditor.const SoAuditorList & getAuditors (void) constβ the whole auditor list.SbBool shouldWrite (void)β should this be written out?void assertAlive (void) constβ asserts that this object is alive. don't skip this one bestie π
π Static Public Member Functions π
static SoType getClassTypeId (void)β the class-wideSoTypeid.static const SoNodekitCatalog * getClassNodekitCatalog (void)β the class-wide nodekit catalog.static void initClass (void)β initializes the class. call it once, love it forever.
π«Ά Static Public Member Functions inherited from SoDragger π«Ά
static SoType getClassTypeId (void)β the class type id.static const SoNodekitCatalog * getClassNodekitCatalog (void)β the class nodekit catalog.static void setMinScale (float newminscale)β sets the minimum scale tonewminscale.static float getMinScale (void)β reads the minimum scale back.static void workValuesIntoTransform (SbMatrix &mtx, const SbVec3f *translationptr, const SbRotation *rotationptr, const SbVec3f *scalefactorptr, const SbRotation *scaleorientationptr, const SbVec3f *centerptr)β works translation, rotation, scale factor, scale orientation and center all into the transformmtx.static void getTransformFast (SbMatrix &mtx, SbVec3f &translation, SbRotation &rotation, SbVec3f &scalefactor, SbRotation &scaleorientation, const SbVec3f ¢er)β the fast transform extraction, with acenter.static void getTransformFast (SbMatrix &mtx, SbVec3f &translation, SbRotation &rotation, SbVec3f &scalefactor, SbRotation &scaleorientation)β same, no center.static SbMatrix appendTranslation (const SbMatrix &mtx, const SbVec3f &translation, const SbMatrix *conversion=NULL)β appends a translation ontomtx, with optionalconversion.static SbMatrix appendScale (const SbMatrix &mtx, const SbVec3f &scale, const SbVec3f &scalecenter, const SbMatrix *conversion=NULL)β appends a scale aroundscalecenter.static SbMatrix appendRotation (const SbMatrix &mtx, const SbRotation &rot, const SbVec3f &rotcenter, const SbMatrix *conversion=NULL)β appends a rotationrotaroundrotcenter.static void initClass (void)β initializes the class.static void initClasses (void)β initializes all the classes. overachiever behavior π
π Static Public Member Functions inherited from SoInteractionKit π
static SoType getClassTypeId (void)β class type id.static const SoNodekitCatalog * getClassNodekitCatalog (void)β class nodekit catalog.static void initClass (void)β initializes the class.static void setSwitchValue (SoNode *node, const int newVal)β sets the switch value onnodetonewVal.
π¦ Static Public Member Functions inherited from SoBaseKit π¦
static SoType getClassTypeId (void)β class type id.static void initClass (void)β initializes the class.static const SoNodekitCatalog * getClassNodekitCatalog (void)β class nodekit catalog.static SbBool isSearchingChildren (void)β is it searching children?static void setSearchingChildren (const SbBool newval)β sets searching-children tonewval.
π Static Public Member Functions inherited from SoNode π
static uint32_t getCompatibilityTypes (const SoType &nodetype)β the compatibility types fornodetype.static SoType getClassTypeId (void)β class type id.static SoNode * getByName (const SbName &name)β finds a node byname.static int getByName (const SbName &name, SoNodeList &l)β finds nodes bynameand drops them intol.static void initClass (void)β initializes the class.static void initClasses (void)β initializes the classes.static uint32_t getNextNodeId (void)β the next node id.static int getActionMethodIndex (const SoType type)β the action method index fortype.static void getBoundingBoxS (SoAction *action, SoNode *node)β the static bounding-box entry point.static void GLRenderS (SoAction *action, SoNode *node)β the static GL render entry point.static void callbackS (SoAction *action, SoNode *node)β the static callback entry point.static void getMatrixS (SoAction *action, SoNode *node)β the static get-matrix entry point.static void handleEventS (SoAction *action, SoNode *node)β the static handle-event entry point.static void pickS (SoAction *action, SoNode *node)β the static pick entry point.static void rayPickS (SoAction *action, SoNode *node)β the static ray-pick entry point.static void searchS (SoAction *action, SoNode *node)β the static search entry point.static void writeS (SoAction *action, SoNode *node)β the static write entry point.static void audioRenderS (SoAction *action, SoNode *node)β the static audio render entry point πstatic void getPrimitiveCountS (SoAction *action, SoNode *node)β the static primitive-count entry point.
β¨ Static Public Member Functions inherited from SoFieldContainer β¨
bestie these are the ones you get handed down, no need to write them yourself:
static void initClass (void)β sets the class up so the type system knows it exists πstatic SoType getClassTypeId (void)β hands you the SoType for this classstatic void cleanupClass (void)β tears down whateverinitClassbuiltstatic void initCopyDict (void)β gets the copy dictionary ready for businessstatic void addCopy (const SoFieldContainer *orig, const SoFieldContainer *copy)β registers an originalβcopy pairing in that dictstatic SoFieldContainer * checkCopy (const SoFieldContainer *orig)β peeks at the dict to see if orig has a copy alreadystatic SoFieldContainer * findCopy (const SoFieldContainer *orig, const SbBool copyconnections)β same energy, but you also get to say whether connections come alongstatic void copyDone (void)β okay we're done copying, wrap it up π
β¨ Static Public Member Functions inherited from SoBase β¨
the SoBase starter pack, fr fr:
static void initClass (void)β class init, classicstatic SoType getClassTypeId (void)β the type id, as alwaysstatic void addName (SoBase *const base, const char *const name)β gives base a name so you can find it laterstatic void removeName (SoBase *const base, const char *const name)β takes that name away again πstatic void incrementCurrentWriteCounter (void)β bumps the write counter upstatic void decrementCurrentWriteCounter (void)β bumps it back downstatic SoBase * getNamedBase (const SbName &name, SoType type)β looks up a named base of the type you asked forstatic int getNamedBases (const SbName &name, SoBaseList &baselist, SoType type)β the plural version, drops them all into baseliststatic SbBool read (SoInput *input, SoBase *&base, SoType expectedtype)β reads a base off the input, returns whether it workedstatic void setInstancePrefix (const SbString &c)β sets the prefix used for instancesstatic void setTraceRefs (SbBool trace)β turns reference tracing on or offstatic SbBool getTraceRefs (void)β tells you if reference tracing is onstatic SbBool connectRoute (SoInput *input, const SbName &fromnodename, const SbName &fromfieldname, const SbName &tonodename, const SbName &tofieldname)β wires a route up from one node's field to another'sstatic SbBool readRoute (SoInput *input)β reads a route in from the input
π Public Attributes π
SoSFVec3f translationβ the translation, as a vec3f, obviously πSoSFVec3f scaleFactorβ the scale factor, also a vec3f
inherited from SoDragger
SoSFBool isActiveβ are we active right now or nah
inherited from SoInteractionKit
SoSFEnum renderCachingβ caching setting for renderingSoSFEnum boundingBoxCachingβ caching setting for bounding boxesSoSFEnum renderCullingβ culling setting for renderingSoSFEnum pickCullingβ culling setting for picking
π‘οΈ Protected Member Functions π‘οΈ
for the subclass girlies only:
virtual const SoFieldData * getFieldData (void) constβ hands back the field datavirtual ~SoTabBoxDragger (void)β the destructor, it's virtual, it's protected, it's doing its thingvirtual SbBool setUpConnections (SbBool onoff, SbBool doitalways=FALSE)β hooks up (or unhooks) the internal connections; passdoitalways=TRUEif you want it done regardlessvirtual void setDefaultOnNonWritingFields (void)β sets the defaults on the fields that don't get written out
inherited from SoDragger
SoDragger (void)β constructorvirtual ~SoDragger (void)β destructorSbVec2f getNormalizedLocaterPosition (void)β the locater position, but normalizedSbVec2s getLocaterPosition (void)β where the locater is, rawSbVec2s getStartLocaterPosition (void) constβ where the locater was when it all startedvoid setStartLocaterPosition (SbVec2s p)β set that starting position topSbBool isAdequateConstraintMotion (void)β is this motion good enough for the constraintvirtual SbBool shouldGrabBasedOnSurrogate (const SoPath *pickpath, const SoPath *surrogatepath)β decides whether a grab should happen based on the surrogate pathvoid setCameraInfo (SoAction *action)β pulls camera info out of the actionvirtual void handleEvent (SoHandleEventAction *ha)β handles the event, as one doesvoid transferMotion (SoDragger *child)β passes motion along to the child draggervoid setIgnoreInBbox (SbBool newval)β should this be ignored when computing bounding boxesSbBool isIgnoreInBbox (void)β is it being ignored in the bbox or notvirtual void getBoundingBox (SoGetBoundingBoxAction *action)β fills in the bounding boxvoid setActiveChildDragger (SoDragger *newchilddragger)β sets which child dragger is the active oneSoDragger * getActiveChildDragger (void) constβ which child dragger is active rnvoid updateDraggerCache (const SoPath *path)β refreshes the dragger cache for that path
inherited from SoInteractionKit
virtual ~SoInteractionKit ()β destructor sznvirtual void copyContents (const SoFieldContainer *fromFC, SbBool copyConnections)β copies the contents over from fromFC, connections optionalvirtual SbBool setPart (const int partNum, SoNode *node)β assigns node to part number partNumvirtual SbBool readInstance (SoInput *in, unsigned short flags)β reads an instance off the inputvirtual SbBool setAnyPartAsDefault (const SbName &partname, SoNode *node, SbBool anypart=TRUE, SbBool onlyifdefault=TRUE)β sets a part as the default, withanypartandonlyifdefaulttogglesvirtual SbBool setAnyPartAsDefault (const SbName &partname, const SbName &nodename, SbBool anypart=TRUE, SbBool onlyifdefault=TRUE)β same deal but you name the node insteadSbBool setAnySurrogatePath (const SbName &name, SoPath *path, SbBool leafcheck=FALSE, SbBool publiccheck=FALSE)β sets a surrogate path, with optional leaf and public checksvoid connectSeparatorFields (SoSeparator *dest, SbBool onOff)β wires up the separator fields on dest, on or off
inherited from SoBaseKit
virtual ~SoBaseKit ()β destructor again, it's giving consistencyvirtual SoNode * addToCopyDict (void) constβ adds this node to the copy dictionarySoGroup * getContainerNode (const SbName &listname, SbBool makeifneeded=TRUE)β grabs the container node for listname, making it if neededvirtual SoNode * getAnyPart (const SbName &partname, SbBool makeifneeded, SbBool leafcheck=FALSE, SbBool publiccheck=FALSE)β gets any part by name, with all the little togglesvirtual SoNodeKitPath * createPathToAnyPart (const SbName &partname, SbBool makeifneeded, SbBool leafcheck=FALSE, SbBool publiccheck=FALSE, const SoPath *pathtoextend=NULL)β builds a path to any part, optionally extending an existingpathtoextendvirtual SbBool setAnyPart (const SbName &partname, SoNode *from, SbBool anypart=TRUE)β sets any part from a nodevoid createNodekitPartsList (void)β builds the nodekit parts listvoid createFieldList (void)β builds the field listvirtual void createDefaultParts (void)β creates the default parts π«Άconst SoNodekitParts * getNodekitPartsList (void) constβ returns the nodekit parts listconst SbList< SoSFNode * > & getCatalogInstances (void) constβ returns the catalog instancesvoid catalogError (void)β throws a catalog errorvoid countMyFields (SoOutput *out)β counts the fields on the way out
inherited from SoNode
SoNode (void)β constructorvirtual ~SoNode (void)β destructor
inherited from SoFieldContainer
SoFieldContainer (void)β constructorvirtual ~SoFieldContainer (void)β destructor
inherited from SoBase
SoBase (void)β constructorvirtual ~SoBase ()β destructorvirtual void destroy (void)β destroys the thing πSbBool hasMultipleWriteRefs (void) constβ does it have more than one write refSbBool writeHeader (SoOutput *out, SbBool isgroup, SbBool isengine) constβ writes the header, tells it whether it's a group and whether it's an enginevoid writeFooter (SoOutput *out) constβ writes the footer to matchvirtual const char * getFileFormatName (void) constβ the name of the file format
π Static Protected Member Functions π
static const SoFieldData ** getFieldDataPtr (void)β a pointer to the field data pointer, iconicstatic const SoNodekitCatalog ** getClassNodekitCatalogPtr (void)β same energy, but for the nodekit catalogstatic void invalidateSurroundScaleCB (void *f, SoDragger *d)β callback that invalidates the surround scalestatic void fieldSensorCB (void *f, SoSensor *s)β the field sensor callbackstatic void valueChangedCB (void *f, SoDragger *d)β the value-changed callback
inherited from SoDragger
static const SoFieldData ** getFieldDataPtr (void)β field data pointer pointerstatic const SoNodekitCatalog ** getClassNodekitCatalogPtr (void)β nodekit catalog pointer pointerstatic void childTransferMotionAndValueChangedCB (void *, SoDragger *)β when a child transfers motion and the value changesstatic void childValueChangedCB (void *, SoDragger *)β when a child's value changesstatic void childStartCB (void *, SoDragger *)β when a child startsstatic void childMotionCB (void *, SoDragger *)β when a child movesstatic void childFinishCB (void *, SoDragger *)β when a child finishesstatic void childOtherEventCB (void *, SoDragger *)β when a child gets literally any other event
inherited from SoInteractionKit
static const SoFieldData ** getFieldDataPtr (void)β yes, againstatic const SoNodekitCatalog ** getClassNodekitCatalogPtr (void)β and againstatic void readDefaultParts (const char *fileName, const char defaultBuffer[], int defBufSize)β reads the default parts from fileName out of defaultBuffer of size defBufSizestatic void fieldSensorCB (void *, SoSensor *)β the field sensor callback
inherited from SoBaseKit
static const SoFieldData ** getFieldDataPtr (void)β field data pointer pointer, the sequelstatic const SoNodekitCatalog ** getClassNodekitCatalogPtr (void)β nodekit catalog pointer pointer, the sequel
inherited from SoNode
static const SoFieldData ** getFieldDataPtr (void)β ok you get it by now πstatic void setNextActionMethodIndex (int index)β sets the next action method index to indexstatic int getNextActionMethodIndex (void)β reads the next action method indexstatic void incNextActionMethodIndex (void)β bumps the next action method index upstatic void setCompatibilityTypes (const SoType &nodetype, const uint32_t bitmask)β sets compatibility types for nodetype with a bitmask
inherited from SoBase
static uint32_t getCurrentWriteCounter (void)β the current write counter valuestatic void staticDataLock (void)β locks the static datastatic void staticDataUnlock (void)β unlocks it, we're free π¦
π§ Protected Attributes π§
these are the internal parts, lowkey the whole kit:
SoSFNode boxGeomβ the box geometrySoSFNode surroundScaleβ the surround scaleSoSFNode tabPlane1β tab plane number oneSoSFNode tabPlane1Sepβ its separatorSoSFNode tabPlane1Xfβ its transformSoSFNode tabPlane2β tab plane number twoSoSFNode tabPlane2Sepβ its separatorSoSFNode tabPlane2Xfβ its transformSoSFNode tabPlane3β tab plane number threeSoSFNode tabPlane3Sepβ its separatorSoSFNode tabPlane3Xfβ its transformSoSFNode tabPlane4β tab plane number fourSoSFNode tabPlane4Sepβ its separatorSoSFNode tabPlane4Xfβ its transformSoSFNode tabPlane5β tab plane number fiveSoSFNode tabPlane5Sepβ its separatorSoSFNode tabPlane5Xfβ its transformSoSFNode tabPlane6β tab plane number sixSoSFNode tabPlane6Sepβ its separatorSoSFNode tabPlane6Xfβ its transformSoFieldSensor * translFieldSensorβ the sensor watching the translation fieldSoFieldSensor * scaleFieldSensorβ the sensor watching the scale field
inherited from SoDragger
SoSFNode motionMatrixβ the motion matrix β¨
inherited from SoInteractionKit
SoSFNode geomSeparatorβ the geometry separatorSoSFNode topSeparatorβ the top separatorSoFieldSensor * fieldSensorβ the field sensorSoSeparator * oldTopSepβ the previous top separator, kept around
inherited from SoBaseKit
SoSFNode callbackListβ the callback listSoChildList * childrenβ the childrenSbBool connectionsSetUpβ have the connections been set up yet
inherited from SoNode
uint32_t uniqueIdβ every node gets a unique id, periodt
inherited from SoFieldContainer
SbBool isBuiltInβ is it built in or not
π Additional Inherited Members π
Public Types inherited from SoDragger
enum ProjectorFrontSetting { FRONT, BACK, USE_PICK }β where the projector faces: front, back, or just use whatever the pick says
Public Types inherited from SoInteractionKit
enum CacheEnabled { OFF, ON, AUTO }β caching: off, on, or auto, the holy trinity
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 }β every node type bit, all eighteen of them, no cap π―
Protected Types inherited from SoBase
enum BaseFlags { IS_ENGINE = 0x01, IS_GROUP = 0x02 }β two flags, engine or group
Static Protected Attributes inherited from SoNode
static uint32_t nextUniqueId = 1β the next unique id starts at1static int nextActionMethodIndex = 0β and the next action method index starts at0
π Detailed Description π
okay so the SoTabBoxDragger wraps a box around geometry you can then translate and scale. it's giving hands-on, it's giving direct manipulation, and honestly? iconic.
Here's how the dragger looks with its default geometry in the inactive state:
This dragger lets the end-user do translation and non-uniform scaling of geometry with an easy to understand interface.
Click and drag any side of the box to translate β and hold down a SHIFT key to lock it to one axis π. Click and drag any of the tab markers in the corners to scale. The way the different tabs influence the scale operation should be straight-forward and intuitive to the end-user.
The SoTabBoxDragger is a composite dragger, implemented with 6 SoTabPlaneDragger instances set up as the sides of a box. six of them. one per side. it's a whole squad π«Ά
π CONSTRUCTOR & DESTRUCTOR DOCUMENTATION π
π SoTabBoxDragger::SoTabBoxDragger (void)
okay bestie, this is the default constructor and she is booked and busy β she sets up the dragger nodekit catalog with all the interaction and feedback geometry. π
Here's the node kit structure, and the entries that are new versus the parent class are marked with an arrow prefix, so keep an eye out:
CLASS SoTabBoxDragger
-->"this"
"callbackList"
"topSeparator"
"motionMatrix"
--> "surroundScale"
--> "tabPlane1Sep"
--> "tabPlane1Xf"
--> "tabPlane1"
--> "tabPlane2Sep"
--> "tabPlane2Xf"
--> "tabPlane2"
--> "tabPlane3Sep"
--> "tabPlane3Xf"
--> "tabPlane3"
--> "tabPlane4Sep"
--> "tabPlane4Xf"
--> "tabPlane4"
--> "tabPlane5Sep"
--> "tabPlane5Xf"
--> "tabPlane5"
--> "tabPlane6Sep"
--> "tabPlane6Xf"
--> "tabPlane6"
"geomSeparator"
--> "boxGeom"
(if you wanna know how that output formatting works, peek at SoBaseKit::printDiagram(), iykyk β¨)
and now the detailed info on catalog parts, because we are nothing if not thorough:
CLASS SoTabBoxDragger
PVT "this", SoTabBoxDragger ---
"callbackList", SoNodeKitListPart [ SoCallback, SoEventCallback ]
PVT "topSeparator", SoSeparator ---
PVT "motionMatrix", SoMatrixTransform ---
"surroundScale", SoSurroundScale ---
PVT "tabPlane1Sep", SoSeparator ---
PVT "tabPlane1Xf", SoTransform ---
"tabPlane1", SoTabPlaneDragger ---
PVT "tabPlane2Sep", SoSeparator ---
PVT "tabPlane2Xf", SoTransform ---
"tabPlane2", SoTabPlaneDragger ---
PVT "tabPlane3Sep", SoSeparator ---
PVT "tabPlane3Xf", SoTransform ---
"tabPlane3", SoTabPlaneDragger ---
PVT "tabPlane4Sep", SoSeparator ---
PVT "tabPlane4Xf", SoTransform ---
"tabPlane4", SoTabPlaneDragger ---
PVT "tabPlane5Sep", SoSeparator ---
PVT "tabPlane5Xf", SoTransform ---
"tabPlane5", SoTabPlaneDragger ---
PVT "tabPlane6Sep", SoSeparator ---
PVT "tabPlane6Xf", SoTransform ---
"tabPlane6", SoTabPlaneDragger ---
PVT "geomSeparator", SoSeparator ---
"boxGeom", SoSeparator ---
(and for that output formatting, go say hi to SoBaseKit::printTable() πΈ)
π¦ SoTabBoxDragger::~SoTabBoxDragger (void) [protected], [virtual]
The protected destructor, bestie. π«Ά
and no, you don't need to stress about cleanup β dragger classes are derived from SoBase, so they're reference counted and get automatically destroyed when their reference count hits 0. she cleans up after herself, periodt. π
β¨ MEMBER FUNCTION DOCUMENTATION β¨
π SoType SoTabBoxDragger::getTypeId (void) const [virtual]
Returns the type identification of an object derived from a class inheriting SoBase. This is what powers run-time type checking and "downward" casting, fr fr.
Usage example, so you can see it in the wild:
void foo(SoNode * node)
{
if (node->getTypeId() == SoFile::getClassTypeId()) {
SoFile * filenode = (SoFile *)node; // safe downward cast, knows the type
}
}
Now listen β for any application programmer out there wanting to extend the library with new nodes, engines, nodekits, draggers or whatever else: this method needs to be overridden in all subclasses. That's typically done as part of setting up the full type system for your extension classes, which usually happens by using the pre-defined macros available through, for instance, Inventor/nodes/SoSubNode.h (that's SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine.h (for engine classes) and so on and so forth. π
For more info on writing Coin extensions, go check the class documentation of the toplevel superclasses for the various class groups.
Reimplemented from SoDragger.
πΈ const SoFieldData * SoTabBoxDragger::getFieldData (void) const [protected], [virtual]
Hands you a pointer to the class-wide field data storage object for this instance. And if there are no fields present? It returns NULL. that's it, that's the whole vibe. π
Reimplemented from SoDragger.
π§ const SoNodekitCatalog * SoTabBoxDragger::getNodekitCatalog (void) const [virtual]
Returns the nodekit catalog which defines the layout of this class' kit. she's the blueprint bestie. π
Reimplemented from SoDragger.
β void SoTabBoxDragger::adjustScaleTabSize (void)
Signals the dragger to recalculate the size of its tabs. iconic behavior.
Literally, it just calls SoTabPlaneDragger::adjustScaleTabSize() for all 6 planes this dragger consists of. six for six, no skips. π₯
π SbBool SoTabBoxDragger::setUpConnections (SbBool onoff, SbBool doitalways = FALSE) [protected], [virtual]
Sets up all internal connections for instances of this class.
heads up: this method will usually not be of interest to the application programmer β unless you wanna extend the library with new custom nodekits or dragger classes. If that's you, go read the SoBaseKit class documentation. π
Reimplemented from SoInteractionKit.
π void SoTabBoxDragger::setDefaultOnNonWritingFields (void) [protected], [virtual]
quick note bestie: this method is unlikely to be of interest to the application programmer who doesn't want to extend the library with new custom nodekits or draggers. but if you are writing extensions, the info lives in the SoBaseKit class documentation. π«Ά
This is a virtual method, and the code in it should call SoField::setDefault() with argument TRUE on part fields that should not be written upon scenegraph export operations.
This is typically done when:
- field value is
NULLand part isNULLby default - it is a leaf
SoGrouporSoSeparatornode with no children - it is a leaf listpart with no children and an
SoGrouporSoSeparatorcontainer - it is a non-leaf part and it's of
SoGrouptype and all fields are at their default values
Subclasses should usually override this to do additional settings for new member fields. And from the subclass β do not forget to call "upwards" to your superclass' setDefaultOnNonWritingFields() method. π
Reimplemented from SoDragger.
π void SoTabBoxDragger::invalidateSurroundScaleCB (void * d, SoDragger * d) [static], [protected]
surroundScale is invalidated every time a child dragger is activated/deactivated using this callback. she stays in her lane and stays fresh. β¨
π₯ void SoTabBoxDragger::fieldSensorCB (void * d, SoSensor * s) [static], [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer. (i.e. not your problem, bestie π)
π void SoTabBoxDragger::valueChangedCB (void * f, SoDragger * d) [static], [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer. (same energy, different function π¦)
π MEMBER DATA DOCUMENTATION π
π SoSFVec3f SoTabBoxDragger::translation
Continuously updated to contain the current translation from the dragger's local origo position. she's always keeping you posted. π
π§ SoSFVec3f SoTabBoxDragger::scaleFactor
Continuously updated to contain the current vector of scaling along the X, Y and Z axes. all three axes, accounted for. π
π SoFieldSensor* SoTabBoxDragger::translFieldSensor [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer. π
πΈ SoFieldSensor* SoTabBoxDragger::scaleFieldSensor [protected]
This API member is considered internal to the library, as it is not likely to be of interest to the application programmer. π
β AUTHOR β
Generated automatically by Doxygen for Coin from the source code. (yes, the docs wrote themselves, slay π€β¨)
and that's a wrap on the whole page, bestie!! π«Ά this one came from the Coin source, Version 3.1.3, and she's filed under SoTabBoxDragger(3). go forth and drag those tabs, you absolute icon. πππ
π¦ where this page comes from
- fedora 43: Coin3-devel 3.1.3-40.fc43 Β· GPL-2.0-only
- fedora 43: Coin3-devel 3.1.3-40.fc43 Β· GPL-2.0-only
- fedora 44: Coin3-devel 3.1.3-42.fc44 Β· GPL-2.0-only
- fedora 44: Coin3-devel 3.1.3-42.fc44 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms