SOTRANSFORMBOXDRAGGER(3iv)
SoTransformBoxDragger(3IV) π
okay bestie, welcome to the SoTransformBoxDragger(3IV) manual page, the main-character entry of the dragger cinematic universe β¨ no cap
NAME
SoTransformBoxDragger β box-like object you scale, rotate, and translate by dragging with the mouse π
INHERITS FROM
SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit > SoDragger > SoTransformBoxDragger
it's giving very long family tree, and every single one of those ancestors is showing up to the function π
SYNOPSIS
#include <Inventor/draggers/SoTransformBoxDragger.h>
Fields from class SoTransformBoxDragger:
SoSFRotation rotation
SoSFVec3f translation
SoSFVec3f scaleFactor
Fields from class SoDragger:
SoSFBool isActive
Fields from class SoInteractionKit:
SoSFEnum renderCaching
SoSFEnum boundingBoxCaching
SoSFEnum renderCulling
SoSFEnum pickCulling
Parts from class SoBaseKit:
(SoNodeKitListPart) callbackList
Methods from class SoTransformBoxDragger:
SoTransformBoxDragger()
static const SoNodekitCatalog *
getClassNodekitCatalog() const
static SoType getClassTypeId()
Methods from class SoDragger:
void addStartCallback(SoDraggerCB *f, void *userData =
NULL)
void removeStartCallback(SoDraggerCB *f, void *userData =
NULL)
void addMotionCallback(SoDraggerCB *f, void *userData =
NULL)
void removeMotionCallback(SoDraggerCB *f, void *userData =
NULL)
void addFinishCallback(SoDraggerCB *f, void *userData =
NULL)
void removeFinishCallback(SoDraggerCB *f, void *userData =
NULL)
void addValueChangedCallback(SoDraggerCB *f, void *userData
= NULL)
void removeValueChangedCallback(SoDraggerCB *f, void
*userData = NULL)
SbBool enableValueChangedCallbacks()
void setMinGesture(int pixels)
int getMinGesture() const
static void setMinScale(float newMinScale)
static float getMinScale()
Methods from class SoInteractionKit:
virtual SbBool setPartAsPath(const SbName &partName, SoPath
*surrogatePath )
Methods from class SoBaseKit:
virtual const SoNodekitCatalog *
getNodekitCatalog() const
virtual SoNode * getPart(const SbName &partName, SbBool
makeIfNeeded)
SbString getPartString(const SoBase *part)
virtual SoNodeKitPath * createPathToPart(const SbName &partName, SbBool
makeIfNeeded, const SoPath *pathToExtend =
NULL)
virtual SbBool setPart(const SbName &partName, SoNode *newPart)
SbBool set(char *partName, char *parameters)
SbBool set(char *nameValuePairs)
static SbBool isSearchingChildren()
static void setSearchingChildren(SbBool newVal)
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)
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
Macros from class SoBaseKit:
SO_GET_PART(kit, partName, partClass)
SO_CHECK_PART(kit, partName, partClass)
like, that's a whole lot of inherited slay, and honestly? we love an heirloom π§
DESCRIPTION
so SoTransformBoxDragger is a composite dragger shaped like a box with little cubes chillin' at the corners πβ¨ Click and drag any of those cubes and boom, you scale the box uniformly. Drag any edge of the box and the whole dragger rotates about its center, along an axis parallel to that edge. Pick any face of the box and you get 2D translation in the plane of that face. it's giving three-in-one, the way that a single widget said "I contain multitudes" ππ
Although the box looks just about like a wireframe cube, bestie it is secretly composed of many different simple draggers arranged in a composite assembly. When one part gets dragged, the transformBox makes sure they all move together β no part left behind, periodt. Each of the parts of the box is a different dragger with the default geometry changed. The faces of the box are SoTranslate2Draggers, the edges are SoRotateCylindricalDraggers, and the cubes are an SoScaleUniformDragger. Drag them and the dragger will update its translation, rotation and scaleFactor fields to reflect the changes. As with all draggers, if you change the fields the dragger will move to match the new settings. two-way street, iconic behavior π₯
Remember: This is not an SoTransform! β οΈ do not come for it, it is simply not that girl
If you want to move other objects with this dragger, you can either:
- [a] Use an
SoTransformBoxManip, which is subclassed fromSoTransform. It creates one of these draggers and uses it as the interface to change its fields. (see theSoTransformBoxManipman page). π - [b] Use field-to-field connections to connect the fields of this dragger to those of any
SoTransformationnode. π¦
You can change the parts in any instance of this dragger using setPart(). The default part geometries are defined as resources for this SoTransformBoxDragger class. They are detailed in the Dragger Resources section of the online reference page for this class. You can make your program use different default resources for the parts by copying the file /usr/share/data/draggerDefaults/transformBoxDragger.iv into your own directory, editing the file, and then setting the environment variable SO_DRAGGER_DIR to be a path to that directory. π yes, that is a real path, go touch grass in your own directory
FIELDS
SoSFRotationrotationβ Orientation of the dragger. πSoSFVec3ftranslationβ Position of the dragger. πSoSFVec3fscaleFactorβ Scale of the dragger. π
three fields, three vibes, all of them carrying the whole look β¨
METHODS
SoTransformBoxDragger()β Constructor. the birth of a legend πstatic const SoNodekitCatalog * getClassNodekitCatalog() constβ Returns anSoNodekitCatalogfor this class. the family scrapbook πstatic SoType getClassTypeId()β Returns type identifier for this class. your little ID card, bestie πͺͺ
CATALOG PARTS
All parts π
here's the full roster β Part Name, Part Type, Default Type, and NULL by Default:
callbackListβ Part Type:NodeKitListPartβ Default Type:--β NULL by Default: yessurroundScaleβ Part Type:SurroundScaleβ Default Type:--β NULL by Default: yesantiSquishβ Part Type:AntiSquishβ Default Type:--β NULL by Default: noscalerβ Part Type:ScaleUniformDraggerβ Default Type:--β NULL by Default: yesrotator1β Part Type:RotateCylindricalDraggerβ Default Type:--β NULL by Default: yesrotator2β Part Type:RotateCylindricalDraggerβ Default Type:--β NULL by Default: yesrotator3β Part Type:RotateCylindricalDraggerβ Default Type:--β NULL by Default: yestranslator1β Part Type:Translate2Draggerβ Default Type:--β NULL by Default: yestranslator2β Part Type:Translate2Draggerβ Default Type:--β NULL by Default: yestranslator3β Part Type:Translate2Draggerβ Default Type:--β NULL by Default: yestranslator4β Part Type:Translate2Draggerβ Default Type:--β NULL by Default: yestranslator5β Part Type:Translate2Draggerβ Default Type:--β NULL by Default: yestranslator6β Part Type:Translate2Draggerβ Default Type:--β NULL by Default: yes
six translators?? the way this dragger has a full entourage π every single one of them is a yes on NULL by default except antiSquish, who said "not me" π
Extra information for list parts from above table π
callbackListβ Container Type:Separatorβ Permissible Types:Callback,EventCallback
that's the only list part up there, and it's very much booked and busy π
π DRAGGER RESOURCES π
okay bestie, this is where it gets juicy β every part of the dragger is its own little resource, and you can swap each one out. let's go one by one, no skips, periodt. π
transformBoxScalerScalerπ- Part:
scaler.scaler - Appearance: Eight small white cubes at the corners of the box β¨
- Description: pick this and boom β you're doing uniform 3D scaling of the dragger. slay.
- Part:
transformBoxScalerScalerActiveπ- Part:
scaler.scalerActive - Appearance: Yellow version of the regular scaler part
- Description: this is what shows up while the dragger is being scaled. it's the glow-up version fr.
- Part:
transformBoxScalerFeedback- Part:
scaler.feedback - Appearance: Empty separator
- Description: this removes any feedback geometry that got created in the constructor of the
SoScaleUniformDragger. it's giving "no thoughts, empty" but make it functional.
- Part:
transformBoxScalerFeedbackActive- Part:
scaler.feedbackActive - Appearance: Empty separator
- Description: same energy β this removes any
feedbackActivegeometry created in the constructor of theSoScaleUniformDragger.
- Part:
transformBoxRotatorRotatorπ- Parts:
rotator1.rotatorrotator2.rotatorrotator3.rotator
- Appearance: Four white lines along the edges of the box
- Description: pick this and rotational dragging begins, bestie. and here's the tea β in each of the three
rotateCylindricaldraggers, the lines of therotatorpart are oriented parallel to the axis of rotation. iconic.
- Parts:
transformBoxRotatorRotatorActiveπ- Parts:
rotator1.rotatorActiverotator2.rotatorActiverotator3.rotatorActive
- Appearance: Four yellow lines along the edges of the box
- Description: displayed while the dragger is being rotated πβ¨
- Parts:
transformBoxRotatorFeedback- Parts:
rotator1.feedbackrotator2.feedbackrotator3.feedback
- Appearance: Empty separator
- Description: removes any feedback geometry created in the constructor of the
SoRotateCylindricalDragger. bye bye extra geometry π
- Parts:
transformBoxRotatorFeedbackActiveπ- Parts:
rotator1.feedbackActiverotator2.feedbackActiverotator3.feedbackActive
- Appearance: Thin purple line through center of box
- Description: shown to reveal the axis of rotation during rotational dragging. so you always know which way you're spinning. π¦
- Parts:
transformBoxTranslatorTranslatorπ«Ά- Parts:
translator1.translatortranslator2.translatortranslator3.translatortranslator4.translatortranslator5.translatortranslator6.translator
- Appearance: Invisible but pickable square surface
- Description: picking these starts 2-D translational dragging within the plane of one of the sides of the box. and get this β the invisible squares of the six
translate2Draggersare arranged to form the sides of the box. the squares are easy to discern even though they're rendered as invisible, because they're bounded by the lines of the rotational dragger parts. invisible but make it findable, iykyk. π
- Parts:
transformBoxTranslatorTranslatorActive- Parts:
translator1.translatorActivetranslator2.translatorActivetranslator3.translatorActivetranslator4.translatorActivetranslator5.translatorActivetranslator6.translatorActive
- Appearance: Invisible square surface
- Description: shown during 2-D translational dragging.
- Parts:
transformBoxTranslatorXAxisFeedbackπ- Parts:
translator1.xAxisFeedbacktranslator2.xAxisFeedbacktranslator3.xAxisFeedbacktranslator4.xAxisFeedbacktranslator5.xAxisFeedbacktranslator6.xAxisFeedback
- Appearance: Short thin purple line
- Description: only shown if the dragger is moving and the axis is a permissable direction of motion. when you press
<shift>, motion gets constrained, and this only shows up if the primary motion is in the X direction. no cap.
- Parts:
transformBoxTranslatorYAxisFeedbackπ- Parts:
translator1.yAxisFeedbacktranslator2.yAxisFeedbacktranslator3.yAxisFeedbacktranslator4.yAxisFeedbacktranslator5.yAxisFeedbacktranslator6.yAxisFeedback
- Appearance: Short thin purple line
- Description: same deal β only shown if the dragger is moving and the axis is a permissable direction of motion. with
<shift>held, motion is constrained, and this appears only if the primary motion is in the Y direction.
- Parts:
π FILE FORMAT/DEFAULTS π
here's the whole vibe laid out, every single default, character for character. don't touch unless you know what you're doing, bestie π
TransformBoxDragger {
renderCaching AUTO
boundingBoxCaching AUTO
renderCulling AUTO
pickCulling AUTO
isActive FALSE
rotation 0 0 1 0
translation 0 0 0
scaleFactor 1 1 1
callbackList NULL
surroundScale NULL
antiSquish AntiSquish {
sizing BIGGEST_DIMENSION }
scaler ScaleUniformDragger {
}
rotator1 RotateCylindricalDragger {
}
rotator2 RotateCylindricalDragger {
}
rotator3 RotateCylindricalDragger {
}
translator1 Translate2Dragger {
}
translator2 Translate2Dragger {
}
translator3 Translate2Dragger {
}
translator4 Translate2Dragger {
}
translator5 Translate2Dragger {
}
translator6 Translate2Dragger {
}
scaler.scaler <transformBoxScalerScaler resource>
scaler.scalerActive <transformBoxScalerScalerActive resource>
scaler.feedback <transformBoxScalerFeedback resource>
scaler.feedbackActive <transformBoxScalerFeedbackActive resource>
rotator1.rotator <transformBoxRotatorRotator resource>
rotator2.rotator <transformBoxRotatorRotator resource>
rotator3.rotator <transformBoxRotatorRotator resource>
rotator1.rotatorActive <transformBoxRotatorRotatorActive resource>
rotator2.rotatorActive <transformBoxRotatorRotatorActive resource>
rotator3.rotatorActive <transformBoxRotatorRotatorActive resource>
rotator1.feedback <transformBoxRotatorFeedback resource>
rotator2.feedback <transformBoxRotatorFeedback resource>
rotator3.feedback <transformBoxRotatorFeedback resource>
rotator1.feedbackActive <transformBoxRotatorFeedbackActive resource>
rotator2.feedbackActive <transformBoxRotatorFeedbackActive resource>
rotator3.feedbackActive <transformBoxRotatorFeedbackActive resource>
translator1.translator <transformBoxTranslatorTranslator resource>
translator2.translator <transformBoxTranslatorTranslator resource>
translator3.translator <transformBoxTranslatorTranslator resource>
translator4.translator <transformBoxTranslatorTranslator resource>
translator5.translator <transformBoxTranslatorTranslator resource>
translator6.translator <transformBoxTranslatorTranslator resource>
translator1.translatorActive <transformBoxTranslatorTranslatorActive resource>
translator2.translatorActive <transformBoxTranslatorTranslatorActive resource>
translator3.translatorActive <transformBoxTranslatorTranslatorActive resource>
translator4.translatorActive <transformBoxTranslatorTranslatorActive resource>
translator5.translatorActive <transformBoxTranslatorTranslatorActive resource>
translator6.translatorActive <transformBoxTranslatorTranslatorActive resource>
translator1.xAxisFeedback <transformBoxTranslatorXAxisFeedback resource>
translator2.xAxisFeedback <transformBoxTranslatorXAxisFeedback resource>
translator3.xAxisFeedback <transformBoxTranslatorXAxisFeedback resource>
translator4.xAxisFeedback <transformBoxTranslatorXAxisFeedback resource>
translator5.xAxisFeedback <transformBoxTranslatorXAxisFeedback resource>
translator6.xAxisFeedback <transformBoxTranslatorXAxisFeedback resource>
translator1.yAxisFeedback <transformBoxTranslatorYAxisFeedback resource>
translator2.yAxisFeedback <transformBoxTranslatorYAxisFeedback resource>
translator3.yAxisFeedback <transformBoxTranslatorYAxisFeedback resource>
translator4.yAxisFeedback <transformBoxTranslatorYAxisFeedback resource>
translator5.yAxisFeedback <transformBoxTranslatorYAxisFeedback resource>
translator6.yAxisFeedback <transformBoxTranslatorYAxisFeedback resource>
}
that's the full default setup, every field accounted for, nothing skipped. keep going bestie, there's more π β¨
π SEE ALSO π
okay so if you've made it this far you're clearly a girl who reads docs and honestly? iconic behavior π . Here's the whole friend group this page runs with β go say hi, they're all part of the same vibe:
SoInteractionKitSoDraggerSoCenterballDraggerSoDirectionalLightDraggerSoDragPointDraggerSoHandleBoxDraggerSoJackDraggerSoPointLightDraggerSoRotateCylindricalDraggerSoRotateDiscDraggerSoRotateSphericalDraggerSoScale1DraggerSoScale2DraggerSoScale2UniformDraggerSoScaleUniformDraggerSoSpotLightDraggerSoTabBoxDraggerSoTabPlaneDraggerSoTrackballDraggerSoTransformerDraggerSoTranslate1DraggerSoTranslate2Dragger
ngl bestie, that's the entire dragger cinematic universe right there.SoDraggeris the mom of the family (everyone inherits from her),SoInteractionKitis the whole friend group chat, and the rest are the individual little gremlins that each do one specific job.SoTransformBoxDraggeris literally one of them, so likeβ¦ you already know her. πΈ
and that's a wrap on SoTransformBoxDragger(3IV), bestie π fr fr you read the WHOLE page, every flag, every field, every catalog part, no skimming, no cap β that's main character energy and I'm obsessed π«Ά
this lil masterpiece comes to you from the 3IV section of the manual, and the footer's carrying the SoTransformBoxDragger(3IV) source/version stamp plus its date, so if you ever need to cite it or check which version you're looking at, that's where the receipts live π
go forth and drag those boxes, queen πβ¨
π¦ 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