SOTRANSFORMERDRAGGER(3iv)

πŸ’– SoTransformerDragger(3IV) πŸ’–

okay bestie, welcome to the SoTransformerDragger(3IV) manual. This one is a box-like object you scale, rotate, and translate by dragging with the mouse. She is literally giving main character energy, fr fr. πŸ’…


✨ NAME ✨

SoTransformerDragger β€” box-like object you scale, rotate, and translate by dragging with the mouse


🌈 INHERITS FROM 🌈

SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit > SoDragger > SoTransformerDragger

πŸ¦‹ SYNOPSIS πŸ¦‹

okay so here is the whole cast list, no cap:

#include <Inventor/draggers/SoTransformerDragger.h>

   Fields from class SoTransformerDragger:

SoSFRotation        rotation
SoSFVec3f           translation
SoSFVec3f           scaleFactor
SoSFFloat           minDiscRotDot

   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 SoTransformerDragger:

                  SoTransformerDragger()
static const SoNodekitCatalog *
                  getClassNodekitCatalog() const
static SoType       getClassTypeId()
static const SoNodekitCatalog *
                  getClassNodekitCatalog() const
static SoType       getClassTypeId()
void                setColinearThreshold(int newVal )
int                 getColinearThreshold()
void                setLocateHighlighting(SbBool onOff )
SbBool              isLocateHighlighting()
void                unsquishKnobs()

   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)

πŸ’– DESCRIPTION πŸ’–

SoTransformerDragger is a dragger shaped like a box. It has small cubes at the corners and small balls sticking out of the middle of each face. Click and drag any face of the box for 2D translation in the plane of that face. Drag any corner-cube to scale the box uniformly. Pick any of the mid-face balls to rotate the whole dragger about its center. Iconic behavior, honestly. πŸŽ€

The SoTransformerDragger uses locate highlighting, so you can tell which part you are about to select before pressing the mouse button. By default, the locate highlight color is gold. ✨

Click-drag any face to translate the dragger within the plane of that face. The face you selected will highlight in yellow. While you drag, yellow feedback arrows display the two directions of motion. Press the <Shift> key and the arrows turn orange; you may now pick between these two directions to constrain the motion. The direction you move the cursor in will determine which direction is chosen. Press the <Control> key and the dragger will translate perpendicular to that plane. The translation field is modified as the face is dragged.

Click a corner to scale the dragger. The corner you selected will turn yellow and radial lines will indicate that you may move toward and away from the center of the box. Drag radially and you will perform uniform scale. Press the <Control> key to scale about the opposite corner instead of the center of the box.

To stretch the dragger non-uniformly, press <Shift> when you drag the corner cube. Now you will see three orange arrows indicating that your gesture will determine which direction to choose. Move the cursor and the selected arrow will turn yellow while the others disappear. Now the dragger will stretch only in the direction you selected. Pressing <Control> at the same time as <Shift> allows you to stretch the dragger while keeping the opposite side pinned in place. When you drag a corner, this modifies the scaleFactor and possibly the translation field of the dragger.

Click one of the spherical knobs to rotate the dragger. When you first click, you'll see two orange lines and two purple circles. The purple circles indicate the two ways you can rotate. The orange lines are, once again, the two choices for your mouse gesture. Each line begins you moving around one of the two circles. Once you move the cursor far enough, the selected line turns yellow and you begin rotating the dragger about the selected circle. The other circle and line will disappear.

To perform unconstrained ("free") rotation, just press <Shift> while you drag the spherical knob. There will be no choices; instead all three purple circles will be displayed, forming a ball that you can roll around. Regardless of how you rotate, dragging the spherical knobs will modify the rotatation field of the dragger. Depending on how it is centered and what transforms precede it in the scene graph, rotation is likely to affect the translation and scaleFactor fields as well.

Pressing the <Control> key will change the center of rotation in both the constrained and unconstrained (<Shift>) case. By default, rotation occurs about the center of the bounding box. With <Control> depressed, rotation occurs about the middle of the opposite side of the bounding box. The purple feedback will change to illustrate this; the feedback circles increase in size and purple crosshairs sprout at the new rotational center.

Ordinarily, the knobs of the dragger are unsquished upon readin from file and when the mouse button is released at the end of a drag. If you want this to happen more often, then you should call the method unsquishKnobs.

As with all draggers, if you change the fields the dragger will move to match the new settings.

Remember: This is not an SoTransform!. If you want to move other objects with this dragger, you can either:

  • [a] Use an SoTransformerManip, which is subclassed from SoTransform. It creates one of these draggers and uses it as the interface to change its fields. (see the SoTransformerManip man page).
  • [b] Use field-to-field connections to connect the fields of this dragger to those of any SoTransformation node.

You can change the parts in any instance of this dragger using setPart(). The default part geometries are defined as resources for this SoTransformerDragger 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/transformerDragger.iv into your own directory, editing the file, and then setting the environment variable SO_DRAGGER_DIR to be a path to that directory.


πŸ‘‘ FIELDS πŸ‘‘

  • SoSFRotation rotation β€” Orientation of the dragger. πŸ’…
  • SoSFVec3f translation β€” Position of the dragger. πŸ“
  • SoSFVec3f scaleFactor β€” Scale of the dragger. πŸ“
  • SoSFFloat minDiscRotDot β€” Specifies the minimum dot product between eyeDir and rotPlane normal before switching from record-player-type rotation to rolling-pin-type rotation. This transition is made so that rotations don't get screwy when the circle is edge-on. Lies in range [0-1]. Best to leave this alone. 🚫

✨ METHODS ✨

ok so here's where the dragger actually does stuff πŸ’… all of these are the public methods, and yes, the manpage lists a couple of them twice, so bestie, you're getting them twice too. no cap, that's just what it says. 🫢

  • SoTransformerDragger() β€” the Constructor. that's it, that's the whole thing, it builds the thing. iconic behavior. ✨
  • static const SoNodekitCatalog * getClassNodekitCatalog() const β€” Returns an SoNodekitCatalog for this class.
  • static SoType getClassTypeId() β€” Returns type identifier for this class.
  • static const SoNodekitCatalog * getClassNodekitCatalog() const β€” Returns an SoNodekitCatalog for this class. (yes babe it's listed again. twice the catalog, twice the slay. πŸ’–)
  • static SoType getClassTypeId() β€” Returns type identifier for this class. (also a rerun. the manpage said it twice so I'm saying it twice. periodt.)
  • void setColinearThreshold(int newVal )
  • int getColinearThreshold() β€” okay so these two are a pair, and the tea is: when you're picking a direction for constraining based on gesture, this parameter decides how many pixels have to separate two axes before they count as actually distinct. if they get judged as "the same", then the shorter of the two gets discarded. so basically: pixels apart = different vibes, pixels together = one vibe, and the little one goes πŸ«₯
  • void setLocateHighlighting(SbBool onOff )
  • SbBool isLocateHighlighting() β€” Controls whether or not locate highlighting is used. Default is TRUE. so by default, yes, the highlight is happening. πŸ’…
  • void unsquishKnobs() β€” Tells the dragger to unsquish its rotation and scale knobs during the next traversal. ordinarily the knobs only get unsquished upon readin from file and when the mouse button is released at the end of a drag. if you want this to happen more often, then you should call this method. the knobs are being compressed and you're giving them room to breathe, and honestly? relatable. πŸ¦‹

πŸŽ€ CATALOG PARTS πŸŽ€

All parts

ngl this was a table in the original and I'm not allowed to do tables, so here's every single part, its type, its default type, and whether it's NULL by default. spoiler: every single one is yes. all of them. the whole roster. πŸ‘‘

  • callbackList β€” Part Type: NodeKitListPart β€” Default Type: -- β€” NULL by Default: yes
  • surroundScale β€” Part Type: SurroundScale β€” Default Type: -- β€” NULL by Default: yes
  • translator1 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator1Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator2 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator2Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator3 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator3Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator4 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator4Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator5 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator5Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator6 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translator6Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator1 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator1Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator2 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator2Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator3 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator3Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator4 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator4Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator5 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator5Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator6 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • rotator6Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale1 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale1Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale2 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale2Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale3 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale3Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale4 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale4Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale5 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale5Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale6 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale6Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale7 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale7Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale8 β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scale8Active β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • xAxisFeedbackActive β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • xAxisFeedbackSelect β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • xCrosshairFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • yAxisFeedbackActive β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • yAxisFeedbackSelect β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • yCrosshairFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • zAxisFeedbackActive β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • zAxisFeedbackSelect β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • zCrosshairFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • translateBoxFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • scaleBoxFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • posXWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • posXRoundWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • posYWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • posYRoundWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • posZWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • posZRoundWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • negXWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • negXRoundWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • negYWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • negYRoundWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • negZWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • negZRoundWallFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • radialFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • xCircleFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • yCircleFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes
  • zCircleFeedback β€” Part Type: Separator β€” Default Type: -- β€” NULL by Default: yes

Extra information for list parts from above table

only one of the parts above is a list part, and here's its whole situation 🌸

  • callbackList β€” Container Type: Separator β€” Permissible Types: Callback, EventCallback

🌈 DRAGGER RESOURCES 🌈

okay bestie this section is the aesthetic section. every part of this dragger can be restyled through resources, and here's every single one with its resource name, which part it maps to, what it looks like, and what it's for. grab a snack, there's a lot. πŸ“

  • Resource: transformerLocateMaterial
    • Part: none
    • Appearance: Gold diffuse and emissive color
    • Description: Locate highlight color used for all parts.
  • Resource: transformerOverallStyle
    • Part: overallStyle
    • Appearance: White Low-Complexity lines
    • Description: If nothing else specified, this is style of the part.
  • Resource: transformerTranslator1
    • Part: translator1
    • Appearance: White Line-Style Square
    • Description: Top face of transformer. Picking this initiates translation in x-z plane.
  • Resource: transformerTranslator2
    • Part: translator2
    • Appearance: White Line-Style Square
    • Description: Bottom face of transformer. Picking this initiates translation in x-z plane.
  • Resource: transformerTranslator3
    • Part: translator3
    • Appearance: White Line-Style Square
    • Description: Left face of transformer. Picking this initiates translation in y-z plane.
  • Resource: transformerTranslator4
    • Part: translator4
    • Appearance: White Line-Style Square
    • Description: Right face of transformer. Picking this initiates translation in y-z plane.
  • Resource: transformerTranslator5
    • Part: translator5
    • Appearance: White Line-Style Square
    • Description: Front face of transformer. Picking this initiates translation in x-y plane.
  • Resource: transformerTranslator6
    • Part: translator6
    • Appearance: White Line-Style Square
    • Description: Back face of transformer. Picking this initiates translation in x-y plane.
  • Resource: transformerTranslator1Active
    • Part: translator1Active
    • Appearance: Yellow version of transformerTranslator1
    • Description: Replaces transformerTranslator1 during dragging.
  • Resource: transformerTranslator2Active
    • Part: translator2Active
    • Appearance: Yellow version of transformerTranslator2
    • Description: Replaces transformerTranslator2 during dragging.

okay so the translator "active" knobs β€” these are the glow-up versions that show up the second you start dragging, bestie. yellow = you're in the middle of something. πŸ’›

  • Resource: transformerTranslator3Active
    • Part: translator3Active
    • Appearance: Yellow version of transformerTranslator3
    • Description: Replaces transformerTranslator3 during dragging.
  • Resource: transformerTranslator4Active
    • Part: translator4Active
    • Appearance: Yellow version of transformerTranslator4
    • Description: Replaces transformerTranslator4 during dragging.
  • Resource: transformerTranslator5Active
    • Part: translator5Active
    • Appearance: Yellow version of transformerTranslator5
    • Description: Replaces transformerTranslator5 during dragging.
  • Resource: transformerTranslator6Active
    • Part: translator6Active
    • Appearance: Yellow version of transformerTranslator6
    • Description: Replaces transformerTranslator6 during dragging.

now the rotators πŸŽ€ green sphere on a lil stick, and grabbing it is the whole vibe β€” that's how you start a rotation, no cap. six of them, one per direction, because of course.

  • Resource: transformerRotator1
    • Part: rotator1
    • Appearance: Green Sphere at end of a stick
    • Description: Top knob of transformer. Picking this initiates rotation.
  • Resource: transformerRotator2
    • Part: rotator2
    • Appearance: Green Sphere at end of a stick
    • Description: Bottom knob of transformer. Picking this initiates rotation.
  • Resource: transformerRotator3
    • Part: rotator3
    • Appearance: Green Sphere at end of a stick
    • Description: Left knob of transformer. Picking this initiates rotation.
  • Resource: transformerRotator4
    • Part: rotator4
    • Appearance: Green Sphere at end of a stick
    • Description: Right knob of transformer. Picking this initiates rotation.
  • Resource: transformerRotator5
    • Part: rotator5
    • Appearance: Green Sphere at end of a stick
    • Description: Front knob of transformer. Picking this initiates rotation.
  • Resource: transformerRotator6
    • Part: rotator6
    • Appearance: Green Sphere at end of a stick
    • Description: Back knob of transformer. Picking this initiates rotation.

and yup, the rotators get their own yellow era too ✨

  • Resource: transformerRotator1Active
    • Part: rotator1Active
    • Appearance: Yellow version of transformerRotator1
    • Description: Replaces transformerRotator1 during dragging.
  • Resource: transformerRotator2Active
    • Part: rotator2Active
    • Appearance: Yellow version of transformerRotator2
    • Description: Replaces transformerRotator2 during dragging.
  • Resource: transformerRotator3Active
    • Part: rotator3Active
    • Appearance: Yellow version of transformerRotator3
    • Description: Replaces transformerRotator3 during dragging.
  • Resource: transformerRotator4Active
    • Part: rotator4Active
    • Appearance: Yellow version of transformerRotator4
    • Description: Replaces transformerRotator4 during dragging.
  • Resource: transformerRotator5Active
    • Part: rotator5Active
    • Appearance: Yellow version of transformerRotator5
    • Description: Replaces transformerRotator5 during dragging.
  • Resource: transformerRotator6Active
    • Part: rotator6Active
    • Appearance: Yellow version of transformerRotator6
    • Description: Replaces transformerRotator6 during dragging.

scale o'clock 🧊 little white cubes, eight of them, one tucked into every single corner of the transformer. pick a cube, start scaling. that's the whole thing. the corners are literally listed by their signs so you can't get lost:

  • Resource: transformerScale1
    • Part: scale1
    • Appearance: Small white cube in (+x+y+z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale2
    • Part: scale2
    • Appearance: Small white cube in (+x+y-z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale3
    • Part: scale3
    • Appearance: Small white cube in (+x-y+z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale4
    • Part: scale4
    • Appearance: Small white cube in (+x-y-z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale5
    • Part: scale5
    • Appearance: Small white cube in (-x+y+z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale6
    • Part: scale6
    • Appearance: Small white cube in (-x+y-z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale7
    • Part: scale7
    • Appearance: Small white cube in (-x-y+z) corner of transformer
    • Description: Picking this initiates scaling.
  • Resource: transformerScale8
    • Part: scale8
    • Appearance: Small white cube in (-x-y-z) corner of transformer
    • Description: Picking this initiates scaling.

and the active cubes! ⭐ heads up, these ones describe themselves in terms of their own Active names β€” that's how the page words it, so that's how it stays:

  • Resource: transformerScale1Active
    • Part: scale1Active
    • Appearance: Yellow version of transformerScale1Active
    • Description: Replaces transformerScale1Active during dragging.
  • Resource: transformerScale2Active
    • Part: scale2Active
    • Appearance: Yellow version of transformerScale2Active
    • Description: Replaces transformerScale2Active during dragging.
  • Resource: transformerScale3Active
    • Part: scale3Active
    • Appearance: Yellow version of transformerScale3Active
    • Description: Replaces transformerScale3Active during dragging.
  • Resource: transformerScale4Active
    • Part: scale4Active
    • Appearance: Yellow version of transformerScale4Active
    • Description: Replaces transformerScale4Active during dragging.
  • Resource: transformerScale5Active
    • Part: scale5Active
    • Appearance: Yellow version of transformerScale5Active
    • Description: Replaces transformerScale5Active during dragging.
  • Resource: transformerScale6Active
    • Part: scale6Active
    • Appearance: Yellow version of transformerScale6Active
    • Description: Replaces transformerScale6Active during dragging.
  • Resource: transformerScale7Active
    • Part: scale7Active
    • Appearance: Yellow version of transformerScale7Active
    • Description: Replaces transformerScale7Active during dragging.
  • Resource: transformerScale8Active
    • Part: scale8Active
    • Appearance: Yellow version of transformerScale8Active
    • Description: Replaces transformerScale8Active during dragging.

the feedback arrows 🏹 two flavours: Active (yellow, you're allowed to go this way, go off) and Select (orange, the transformer's waiting on you to pick a direction β€” it's giving "choose, bestie").

  • Resource: transformerXAxisFeedbackActive
    • Part: xAxisFeedbackActive
    • Appearance: Yellow arrow along X axis
    • Description: Displayed when translating if X direction is permitted.
  • Resource: transformerXAxisFeedbackSelect
    • Part: xAxisFeedbackSelect
    • Appearance: Orange arrow along X axis
    • Description: Displayed when awaiting gesture to pick between X axis and another direction(s).
  • Resource: transformerYAxisFeedbackActive
    • Part: yAxisFeedbackActive
    • Appearance: Yellow arrow along Y axis
    • Description: Displayed when translating if Y direction is permitted.
  • Resource: transformerYAxisFeedbackSelect
    • Part: yAxisFeedbackSelect
    • Appearance: Orange arrow along Y axis
    • Description: Displayed when awaiting gesture to pick between Y axis and another direction(s).
  • Resource: transformerZAxisFeedbackActive
    • Part: zAxisFeedbackActive
    • Appearance: Yellow arrow along Z axis
    • Description: Displayed when translating if Z direction is permitted.
  • Resource: transformerZAxisFeedbackSelect
    • Part: zAxisFeedbackSelect
    • Appearance: Orange arrow along Z axis
    • Description: Displayed when awaiting gesture to pick between Z axis and another direction(s).

crosshairs!! 🎯 yellow, and they show up when you're translating perpendicular to a plane. note the capital H in crossHair, that's the spelling on the page, don't @ me.

  • Resource: transformerXCrosshairFeedback
    • Part: xCrosshairFeedback
    • Appearance: Yellow crossHair in y-z plane
    • Description: Displayed when translating perpendicular to y-z plane.
  • Resource: transformerYCrosshairFeedback
    • Part: yCrosshairFeedback
    • Appearance: Yellow crossHair in x-z plane
    • Description: Displayed when translating perpendicular to x-z plane.
  • Resource: transformerZCrosshairFeedback
    • Part: zCrosshairFeedback
    • Appearance: Yellow crossHair in x-y plane
    • Description: Popped up when you're translating perpendicular to the x-y plane.
  • Resource: transformerXCircleFeedback
    • Part: xCircleFeedback
    • Appearance: Purple Unit Circle about X axis
    • Description: Shows up when rotating about the X axis.
  • Resource: transformerYCircleFeedback
    • Part: yCircleFeedback
    • Appearance: Purple Unit Circle about Y axis
    • Description: Shows up when rotating about the Y axis.
  • Resource: transformerZCircleFeedback
    • Part: zCircleFeedback
    • Appearance: Purple Unit Circle about Z axis
    • Description: Shows up when rotating about the Z axis.
  • Resource: transformerRadialFeedback
    • Part: radialFeedback
    • Appearance: Purple Rays emanating from center through corners
    • Description: Shows up when scaling uniformly about center. it's giving sunburst πŸ’œ
  • Resource: transformerTranslateBoxFeedback
    • Part: translateBoxFeedback
    • Appearance: Purple Box with one bright yellow side
    • Description: Shows up when translating. It auto-orients itself so the yellow side matches whichever face you selected β€” main character behavior fr ✨
  • Resource: transformerPosXWallFeedback
    • Part: posXWallFeedback
    • Appearance: Purple Plane along Right side of transformer
    • Description: Shows up during <Control> scaling while keeping the right side fixed.
  • Resource: transformerPosYWallFeedback
    • Part: posYWallFeedback
    • Appearance: Purple Plane along Top side of transformer
    • Description: Shows up during <Control> scaling while keeping the top side fixed.
  • Resource: transformerPosZWallFeedback
    • Part: posZWallFeedback
    • Appearance: Purple Plane along Front side of transformer
    • Description: Shows up during <Control> scaling while keeping the front side fixed.
  • Resource: transformerNegXWallFeedback
    • Part: negXWallFeedback
    • Appearance: Purple Plane along Left side of transformer
    • Description: Shows up during <Control> scaling while keeping the left side fixed.
  • Resource: transformerNegYWallFeedback
    • Part: negYWallFeedback
    • Appearance: Purple Plane along Bottom side of transformer
    • Description: Shows up during <Control> scaling while keeping the bottom side fixed.
  • Resource: transformerNegZWallFeedback
    • Part: negZWallFeedback
    • Appearance: Purple Plane along Back side of transformer
    • Description: Shows up during <Control> scaling while keeping the back side fixed.

πŸ’Ύ FILE FORMAT/DEFAULTS πŸ’Ύ

okay bestie this is the whole starter pack, the factory reset, the "no thoughts just defaults" block. every single line, no skips 🫢

TransformerDragger {
   renderCaching          AUTO
   boundingBoxCaching     AUTO
   renderCulling          AUTO
   pickCulling            AUTO
   isActive               FALSE
   translation            0 0 0
   scaleFactor            1 1 1
   rotation               0 0 1  0
   minDiscRotDot          0.025
   callbackList           NULL
   surroundScale          NULL
   translator1            <transformerTranslator1 resource>
   translator1Active      <transformerTranslator1Active resource>
   translator2            <transformerTranslator2 resource>
   translator2Active      <transformerTranslator2Active resource>
   translator3            <transformerTranslator3 resource>
   translator3Active      <transformerTranslator3Active resource>
   translator4            <transformerTranslator4 resource>
   translator4Active      <transformerTranslator4Active resource>
   translator5            <transformerTranslator5 resource>
   translator5Active      <transformerTranslator5Active resource>
   translator6            <transformerTranslator6 resource>
   translator6Active      <transformerTranslator6Active resource>
   rotator1               <transformerRotator1 resource>
   rotator1Active         <transformerRotator1Active resource>
   rotator2               <transformerRotator2 resource>
   rotator2Active         <transformerRotator2Active resource>
   rotator3               <transformerRotator3 resource>
   rotator3Active         <transformerRotator3Active resource>
   rotator4               <transformerRotator4 resource>
   rotator4Active         <transformerRotator4Active resource>
   rotator5               <transformerRotator5 resource>
   rotator5Active         <transformerRotator5Active resource>
   rotator6               <transformerRotator6 resource>
   rotator6Active         <transformerRotator6Active resource>
   scale1                 <transformerScale1 resource>
   scale1Active           <transformerScale1Active resource>
   scale2                 <transformerScale2 resource>
   scale2Active           <transformerScale2Active resource>
   scale3                 <transformerScale3 resource>
   scale3Active           <transformerScale3Active resource>
   scale4                 <transformerScale4 resource>
   scale4Active           <transformerScale4Active resource>
   scale5                 <transformerScale5 resource>
   scale5Active           <transformerScale5Active resource>
   scale6                 <transformerScale6 resource>
   scale6Active           <transformerScale6Active resource>
   scale7                 <transformerScale7 resource>
   scale7Active           <transformerScale7Active resource>
   scale8                 <transformerScale8 resource>
   scale8Active           <transformerScale8Active resource>
   xAxisFeedbackActive    <transformerXAxisFeedbackActive resource>
   xAxisFeedbackSelect    <transformerXAxisFeedbackSelect resource>
   xCrosshairFeedback     <transformerXCrosshairFeedback resource>
   yAxisFeedbackActive    <transformerYAxisFeedbackActive resource>
   yAxisFeedbackSelect    <transformerYAxisFeedbackSelect resource>
   yCrosshairFeedback     <transformerYCrosshairFeedback resource>
   zAxisFeedbackActive    <transformerZAxisFeedbackActive resource>
   zAxisFeedbackSelect    <transformerZAxisFeedbackSelect resource>
   zCrosshairFeedback     <transformerZCrosshairFeedback resource>
   translateBoxFeedback   <transformerTranslateBoxFeedback resource>
   scaleBoxFeedback       <transformerScaleBoxFeedback resource>
   posXWallFeedback       <transformerPosXWallFeedback resource>
   posXRoundWallFeedback  <transformerPosXRoundWallFeedback resource>
   posYWallFeedback       <transformerPosYWallFeedback resource>
   posYRoundWallFeedback  <transformerPosYRoundWallFeedback resource>
   posZWallFeedback       <transformerPosZWallFeedback resource>
   posZRoundWallFeedback  <transformerPosZRoundWallFeedback resource>
   negXWallFeedback       <transformerNegXWallFeedback resource>
   negXRoundWallFeedback  <transformerNegXRoundWallFeedback resource>
   negYWallFeedback       <transformerNegYWallFeedback resource>
   negYRoundWallFeedback  <transformerNegYRoundWallFeedback resource>
   negZWallFeedback       <transformerNegZWallFeedback resource>
   negZRoundWallFeedback  <transformerNegZRoundWallFeedback resource>
   radialFeedback         <transformerRadialFeedback resource>
   xCircleFeedback        <transformerXCircleFeedback resource>
   yCircleFeedback        <transformerYCircleFeedback resource>
   zCircleFeedback        <transformerZCircleFeedback resource>
   none                   <transformerLocateMaterial resource>
}

πŸ‘€ SEE ALSO πŸ‘€

the whole friend group, the squad, the mutuals 🫢 go read these too:

  • SoDragger
  • SoInteractionKit
  • SoLocateHighlight
  • SoCenterballDragger
  • SoDirectionalLightDragger
  • SoDragPointDragger
  • SoHandleBoxDragger
  • SoJackDragger
  • SoPointLightDragger
  • SoRotateCylindricalDragger
  • SoRotateDiscDragger
  • SoRotateSphericalDragger
  • SoScale1Dragger
  • SoScale2Dragger
  • SoScale2UniformDragger
  • SoScaleUniformDragger
  • SoSpotLightDragger
  • SoTabBoxDragger
  • SoTabPlaneDragger
  • SoTrackballDragger
  • SoTransformBoxDragger
  • SoTranslate1Dragger
  • SoTranslate2Dragger

and that's the whole page bestie, you ate that πŸ’…βœ¨ quick lil credits moment: this one's filed under SoTransformerDragger(3IV), that's the source/version tag, and the date on it is the footer date up there at the bottom of the page. ok bye, go drag some transformers, ily πŸŽ€πŸ¦‹