SODRAGPOINTDRAGGER(3iv)
π SoDragPointDragger β the manual, but make it make sense (part 1 of 2)
okay bestie, so we're in SoDragPointDragger(3IV) territory. This is an Inventor toolkit situation and it is so much less scary than the manpage makes it look. Sit down, grab a strawberry thing, let's go. π
β¨ NAME β¨
SoDragPointDragger β an object you can translate in 3D by dragging with the mouse. that's it. that's the whole vibe. you grab it, you move it, it moves in all three dimensions. iconic behavior honestly. π«Ά
πΈ INHERITS FROM πΈ
the family tree goes like this, oldest ancestor first:
SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit > SoDragger > SoDragPointDragger
so it's a whole lineage. it inherited the good genes. π
β SYNOPSIS β
first, the include, exact as always:
#include <Inventor/draggers/SoDragPointDragger.h>
π Fields from class SoDragPointDragger
SoSFVec3ftranslationβ the one field this class brings to the party
π Fields from class SoDragger
SoSFBoolisActive
π Fields from class SoInteractionKit
SoSFEnumrenderCachingSoSFEnumboundingBoxCachingSoSFEnumrenderCullingSoSFEnumpickCulling
π Parts from class SoBaseKit
(SoNodeKitListPart)callbackList
π Methods from class SoDragPointDragger
SoDragPointDragger()void setJumpLimit(float limit)float getJumpLimit() constvoid showNextDraggerSet()static const SoNodekitCatalog *getClassNodekitCatalog() conststatic 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() conststatic 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() constvirtual 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() constSoNode *copy(SbBool copyConnections = FALSE) constvirtual SbBool affectsState() conststatic SoNode *getByName(const SbName &name)static int getByName(const SbName &name, SoNodeList &list)
π Methods from class SoFieldContainer
void setToDefaults()SbBool hasDefaultValues() constSbBool fieldsAreEqual(const SoFieldContainer *fc) constvoid copyFieldValues(const SoFieldContainer *fc, SbBool copyConnections = FALSE)void get(SbString &fieldDataString)virtual int getFields(SoFieldList &resultList) constvirtual SoField *getField(const SbName &fieldName) constSbBool getFieldName(const SoField *field, SbName &fieldName) constSbBool isNotifyEnabled() constSbBool enableNotify(SbBool flag)
π Methods from class SoBase
void ref()void unref() constvoid unrefNoDelete() constvoid touch()virtual SoType getTypeId() constSbBool isOfType(SoType type) constvirtual 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)
π DESCRIPTION π
okay so. SoDragPointDragger is a compound dragger, and what it does is translate in all three dimensions when you drag it with the mouse. all three. not two. three. she's flexible like that. π
Here's the tea on how she's built: she's made up of six smaller draggers, and she only ever shows two at a time. Each pair is one plane dragger plus one line dragger. The line dragger sits perpendicular to the plane, so together that plane/line duo lets you move through all of 3-space. teamwork makes the dream work fr fr. π¦
DragPoint has three of these pairs total, oriented along the x, y, and z axes of its local space. Wanna cycle through the three pairs? Hit the <Control> key with the cursor hovering over the dragger. and no, you do not need to press the mouse button. just vibes and a keyboard. β¨
The line draggers are SoTranslate1Draggers and the plane draggers are SoTranslate2Draggers. Which means you can hold <Shift> to constrain a plane dragger's motion along one of the two axes inside that plane β exactly like the SoTranslate2Draggers man page describes. iykyk. π
Now, the extra-fancy part. DragPoint adds extra feedback parts so you actually have a clue where you are in three-space instead of just guessing like a fool. There are three feedback planes and three feedback axes; each one corresponds to one of the plane or line draggers, but it spans a much greater distance.
- When you drag along a line, that line's bigger feedback axis shows up, and it stays anchored in space while the dragger slides along it. This helps you feel the dragger's motion relative to the rest of the scene.
- When you drag within a plane, the bigger β but transparent β feedback plane acts like a ground plane for you to move on top of.
- Where the dragger sits inside that plane is pinpointed by two intersecting axes that always cross below the cursor and stretch out to the edges of the plane.
- When you move dragPoint to the edge of the feedback plane (or line), the feedback jumps to a new location in that direction, so the dragger never leaves the feedback behind. she never abandons her feedback. loyal. π«Ά
The primary directions of motion come from the dragger's local space. Transforms earlier in the scene will affect the dragger, its children, and the orientation of its directions of motion. keep that in mind bestie, it matters.
This node has a translation field which always reflects its position in local space. Set the field and the dragger moves to that point. You can also connect fields of other nodes or engines from this one, so they follow the dragger's motion around like little ducklings. π£
Now, even though the child draggers each have their own resources defining default part geometries, the dragPoint dragger overrides these with a whole new set of resources. She also defines resources for the feedback parts she adds. All of that is detailed in the Dragger Resources section of the online reference page for this class. And you can change the parts in any instance of this dragger using setPart().
Wanna make your program use different default resources for the parts? The move is:
- copy the file
/usr/share/data/draggerDefaults/dragPointDragger.ivinto your own directory - edit that file
- set the environment variable
SO_DRAGGER_DIRto be a path to that directory
boom. custom defaults. you're welcome. π
π FIELDS π
SoSFVec3ftranslationβ Position of the dragger. that's her location. that's where she's at, literally and figuratively. π
π METHODS π
SoDragPointDragger()β Constructor. the birth of an icon. β¨void setJumpLimit(float limit)float getJumpLimit() const
Set and get the point at which the feedback axes will jump to a new position. For example, if set to .1 β which is the default, btw β the feedback axes will jump when the dragger gets within 10% of the end of the axis. so she bails a little early. respectfully. π
void showNextDraggerSet()
The dragPoint dragger contains three pairs of draggers, each one holding a plane dragger and a line dragger (peep the Description above for the full lore). The dragger starts with the (y-line/xz-plane) pair displayed. Call this method and it cycles next through the (z-line/xy-plane), then the (x-line/yz-plane). round and round she goes. π
static const SoNodekitCatalog *getClassNodekitCatalog() constβ Returns anSoNodekitCatalogfor this class.static SoType getClassTypeId()β Returns type identifier for this class.
and that's where part 1 wraps up bestie β part 2 is right behind it, don't go anywhere. πΈ
π CATALOG PARTS π
okay bestie, here's the whole cast list of parts this dragger brings to the function π Every single one of them is NULL by default, so nothing's set up until you set it up, iykyk.
All parts β Part Name, Part Type, Default Type, and whether it's NULL by default:
callbackListβ Part Type:NodeKitListPart; Default Type:--; NULL by default: yesxTranslatorβ Part Type:Translate1Dragger; Default Type:--; NULL by default: yesxyTranslatorβ Part Type:Translate2Dragger; Default Type:--; NULL by default: yesxzTranslatorβ Part Type:Translate2Dragger; Default Type:--; NULL by default: yeszTranslatorβ Part Type:Translate1Dragger; Default Type:--; NULL by default: yesyzTranslatorβ Part Type:Translate2Dragger; Default Type:--; NULL by default: yesyTranslatorβ Part Type:Translate1Dragger; Default Type:--; NULL by default: yesxFeedbackβ Part Type:Separator; Default Type:--; NULL by default: yesyFeedbackβ Part Type:Separator; Default Type:--; NULL by default: yeszFeedbackβ Part Type:Separator; Default Type:--; NULL by default: yesyzFeedbackβ Part Type:Separator; Default Type:--; NULL by default: yesxzFeedbackβ Part Type:Separator; Default Type:--; NULL by default: yesxyFeedbackβ Part Type:Separator; Default Type:--; NULL by default: yes
πΈ Extra information for list parts from above table πΈ
these ones are special, they're list parts so they get extra deets π¦
callbackListβ Container Type:Separator; Permissible Types:Callback,EventCallback
π DRAGGER RESOURCES π
this is the good part, the resource glow-up section β¨ For each one you get its Resource name, the Part it lives on, its Appearance, and what it does. Slay.
dragPointXTranslatorTranslator- Part:
xTranslator.translator - Appearance: white cylinder with axis aligned in X direction
- Description: picking this initiates linear motion in X direction
- Part:
dragPointXTranslatorTranslatorActive- Part:
xTranslator.translatorActive - Appearance: yellow cylinder with axis aligned in X direction
- Description: shown when moving in X direction
- Part:
dragPointYTranslatorTranslator- Part:
yTranslator.translator - Appearance: white cylinder with axis aligned in Y direction
- Description: picking this initiates linear motion in Y direction
- Part:
dragPointYTranslatorTranslatorActive- Part:
yTranslator.translatorActive - Appearance: yellow cylinder with axis aligned in Y direction
- Description: shown when moving in Y direction
- Part:
dragPointZTranslatorTranslator- Part:
zTranslator.translator - Appearance: white cylinder with axis aligned in Z direction
- Description: picking this initiates linear motion in Z direction
- Part:
dragPointZTranslatorTranslatorActive- Part:
zTranslator.translatorActive - Appearance: yellow cylinder with axis aligned in Z direction
- Description: shown when moving in Z direction
- Part:
dragPointYZTranslatorTranslator- Part:
yzTranslator.translator - Appearance: white flattened cube within the yz plane of motion
- Description: picking this initiates planar motion in yz plane
- Part:
dragPointYZTranslatorTranslatorActive- Part:
yzTranslator.translatorActive - Appearance: yellow flattened cube within the yz plane of motion
- Description: shown when moving in yz plane
- Part:
dragPointXZTranslatorTranslator- Part:
xzTranslator.translator - Appearance: white flattened cube within the xz plane of motion
- Description: picking this initiates planar motion in xz plane
- Part:
dragPointXZTranslatorTranslatorActive- Part:
xzTranslator.translatorActive - Appearance: yellow flattened cube within the xz plane of motion
- Description: shown when moving in xz plane
- Part:
dragPointXYTranslatorTranslator- Part:
xyTranslator.translator - Appearance: white flattened cube within the xy plane of motion
- Description: picking this initiates planar motion in xy plane
- Part:
dragPointXYTranslatorTranslatorActive- Part:
xyTranslator.translatorActive - Appearance: yellow flattened cube within the xy plane of motion
- Description: shown when moving in xy plane
- Part:
dragPointXFeedback- Part:
xFeedback - Appearance: douple-headed purple arrow
- Description: feedback for motion in x direction
- Part:
dragPointYFeedback- Part:
yFeedback - Appearance: douple-headed purple arrow
- Description: feedback for motion in y direction
- Part:
dragPointZFeedback- Part:
zFeedback - Appearance: douple-headed purple arrow
- Description: feedback for motion in z direction
- Part:
dragPointYZFeedback- Part:
yzFeedback - Appearance: semi-transparent green square in yz plane
- Description: feedback for motion in yz plane
- Part:
dragPointXZFeedback- Part:
xzFeedback - Appearance: semi-transparent green square in yz plane
- Description: feedback for motion in xz plane
- Part:
dragPointXYFeedback- Part:
xyFeedback - Appearance: semi-transparent green square in yz plane
- Description: feedback for motion in xy plane
- Part:
π not me pointing out that yes, the feedback appearances are literally spelleddouple-headedand yes, the XZ and XY feedback entries really do sayyz planeβ that's what the page says bestie, I just work here π
π FILE FORMAT/DEFAULTS π
here's the whole default tree, verbatim, no edits, periodt π
DragPointDragger {
renderCaching AUTO
boundingBoxCaching AUTO
renderCulling AUTO
pickCulling AUTO
isActive FALSE
translation 0 0 0
callbackList NULL
xTranslator Translate1Dragger {
}
xyTranslator Translate2Dragger {
}
xzTranslator Translate2Dragger {
}
zTranslator Translate1Dragger {
}
yzTranslator Translate2Dragger {
}
yTranslator Translate1Dragger {
}
xFeedback <dragPointXFeedback resource>
yFeedback <dragPointYFeedback resource>
zFeedback <dragPointZFeedback resource>
yzFeedback <dragPointYZFeedback resource>
xzFeedback <dragPointXZFeedback resource>
xyFeedback <dragPointXYFeedback resource>
xTranslator.translator <dragPointXTranslatorTranslator resource>
xTranslator.translatorActive <dragPointXTranslatorTranslatorActive resource>
yTranslator.translator <dragPointYTranslatorTranslator resource>
yTranslator.translatorActive <dragPointYTranslatorTranslatorActive resource>
zTranslator.translator <dragPointZTranslatorTranslator resource>
zTranslator.translatorActive <dragPointZTranslatorTranslatorActive resource>
yzTranslator.translator <dragPointYZTranslatorTranslator resource>
yzTranslator.translatorActive <dragPointYZTranslatorTranslatorActive resource>
xzTranslator.translator <dragPointXZTranslatorTranslator resource>
xzTranslator.translatorActive <dragPointXZTranslatorTranslatorActive resource>
xyTranslator.translator <dragPointXYTranslatorTranslator resource>
xyTranslator.translatorActive <dragPointXYTranslatorTranslatorActive resource>
}
π«Ά SEE ALSO π«Ά
the friend group, the whole squad, go say hi to all of them π
SoInteractionKitSoDraggerSoCenterballDraggerSoDragPointDraggerSoHandleBoxDraggerSoJackDraggerSoPointLightDraggerSoRotateCylindricalDraggerSoRotateDiscDraggerSoRotateSphericalDraggerSoScale1DraggerSoScale2DraggerSoScale2UniformDraggerSoScaleUniformDraggerSoSpotLightDraggerSoTabBoxDraggerSoTabPlaneDraggerSoTrackballDraggerSoTransformBoxDraggerSoTransformerDraggerSoTranslate1DraggerSoTranslate2Dragger
and that's a wrap on SoDragPointDragger(3IV), bestie π the footer of this page is literally just SoDragPointDragger(3IV)() β that's your source/version tag and the date slot, and yeah the date part is sitting there empty, which is honestly such a mood πβ¨ go drag some points, you're the main character, periodt π
π¦
π¦ 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