'\"! tbl | mmdoc '\"macro stdmacro .ie n \{\ . ds Cr \fB . ds Cb \fB .\} .el \{\ . ds Cr \f7 . ds Cb \f8 .\} .TH SoTransformerDragger(3IV) .SH NAME SoTransformerDragger \(em box-like object you scale, rotate, and translate by dragging with the mouse .SH INHERITS FROM SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit > SoDragger > SoTransformerDragger .SH SYNOPSIS .ps -1 \*(Cr#include .sp .in 1i \f1Fields from class SoTransformerDragger: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFRotation .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbrotation .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbtranslation .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbscaleFactor .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFFloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbminDiscRotDot .sp .in 1i \f1Fields from class SoDragger: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisActive .sp .in 1i \f1Fields from class SoInteractionKit: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFEnum .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbrenderCaching .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFEnum .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbboundingBoxCaching .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFEnum .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbrenderCulling .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFEnum .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbpickCulling .sp .in 1i \f1Parts from class SoBaseKit: .in 0.5i .sp .ta 21m .in 1i+21n .ti 0.5i .ta 21m .ds Pt \*(Cr(SoNodeKitListPart) .ie \w'\*(Pt'>=21n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbcallbackList\*(Cr .sp .in 1i \f1Methods from class SoTransformerDragger: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Cr .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbSoTransformerDragger\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic const SoNodekitCatalog * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassNodekitCatalog\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic SoType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassTypeId\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic const SoNodekitCatalog * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassNodekitCatalog\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic SoType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassTypeId\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetColinearThreshold\*(Cr(int newVal ) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crint .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetColinearThreshold\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetLocateHighlighting\*(Cr(SbBool onOff ) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisLocateHighlighting\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbunsquishKnobs\*(Cr() .sp .in 1i \f1Methods from class SoDragger: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbaddStartCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbremoveStartCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbaddMotionCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbremoveMotionCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbaddFinishCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbremoveFinishCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbaddValueChangedCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbremoveValueChangedCallback\*(Cr(SoDraggerCB *f, void *userData = NULL) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbenableValueChangedCallbacks\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetMinGesture\*(Cr(int pixels) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crint .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetMinGesture\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetMinScale\*(Cr(float newMinScale) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic float .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetMinScale\*(Cr() .sp .in 1i \f1Methods from class SoInteractionKit: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual SbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetPartAsPath\*(Cr(const SbName &partName, SoPath *surrogatePath ) .sp .in 1i \f1Methods from class SoBaseKit: .in 0.5i .sp .ta 25m .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(Crvirtual const SoNodekitCatalog * .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetNodekitCatalog\*(Cr() const .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(Crvirtual SoNode * .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetPart\*(Cr(const SbName &partName, SbBool makeIfNeeded) .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(CrSbString .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetPartString\*(Cr(const SoBase *part) .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(Crvirtual SoNodeKitPath * .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbcreatePathToPart\*(Cr(const SbName &partName, SbBool makeIfNeeded, const SoPath *pathToExtend = NULL) .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(Crvirtual SbBool .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetPart\*(Cr(const SbName &partName, SoNode *newPart) .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbset\*(Cr(char *partName, char *parameters) .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbset\*(Cr(char *nameValuePairs) .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(Crstatic SbBool .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisSearchingChildren\*(Cr() .br .in 1i+25n .ti 0.5i .ta 25m .ds Pt \*(Crstatic void .ie \w'\*(Pt'>=25n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetSearchingChildren\*(Cr(SbBool newVal) .sp .in 1i \f1Methods from class SoNode: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetOverride\*(Cr(SbBool state) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisOverride\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoNode * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbcopy\*(Cr(SbBool copyConnections = FALSE) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual SbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbaffectsState\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic SoNode * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetByName\*(Cr(const SbName &name) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic int .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetByName\*(Cr(const SbName &name, SoNodeList &list) .sp .in 1i \f1Methods from class SoFieldContainer: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetToDefaults\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbhasDefaultValues\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbfieldsAreEqual\*(Cr(const SoFieldContainer *fc) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbcopyFieldValues\*(Cr(const SoFieldContainer *fc, SbBool copyConnections = FALSE) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbget\*(Cr(SbString &fieldDataString) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual int .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetFields\*(Cr(SoFieldList &resultList) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual SoField * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetField\*(Cr(const SbName &fieldName) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetFieldName\*(Cr(const SoField *field, SbName &fieldName) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisNotifyEnabled\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbenableNotify\*(Cr(SbBool flag) .sp .in 1i \f1Methods from class SoBase: .in 0.5i .sp .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbref\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbunref\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbunrefNoDelete\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbtouch\*(Cr() .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual SoType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetTypeId\*(Cr() const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisOfType\*(Cr(SoType type) const .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual void .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetName\*(Cr(const SbName &name) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvirtual SbName .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetName\*(Cr() const .sp .in 1i \f1Macros from class SoBaseKit: .in 0.5i .sp \*(CbSO_GET_PART\*(Cr(kit, partName, partClass) .br \*(CbSO_CHECK_PART\*(Cr(kit, partName, partClass) .sp .SH DESCRIPTION \*(CbSoTransformerDragger\f1 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. .sp The \*(CbSoTransformerDragger\f1 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. .sp Click-drag any \f2face\f1 to translate the dragger within the plane of that face. The face you selected will highlight \&in yellow. While you drag, yellow \f2feedback arrows\f1 display the two directions of motion. Press the \*(Cr\f1 key and the arrows turn orange; you may now pick between these two directions to \f2constrain\f1 the motion. The direction you move \&the cursor in will determine which direction is chosen. Press the \*(Cr\f1 key and the dragger will translate \f2perpendicular\f1 to that plane. The \*(Cbtranslation\f1 field is modified as the face is dragged. .sp Click a \f2corner\f1 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 \*(Cr\f1 key to scale \&about the opposite corner instead of the center of the box. .sp To stretch the dragger non-uniformly, press \*(Cr\f1 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 \*(Cr\f1 \&at the same time as \*(Cr\f1 allows you to stretch the dragger while keeping the opposite side pinned in place. When you drag a corner, this modifies the \*(CbscaleFactor\f1 and possibly the \*(Cbtranslation\f1 field of the dragger. .sp Click one of \&the \f2spherical knobs\f1 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. .sp To perform unconstrained ("free") rotation, just press \*(Cr\f1 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 \*(Cbrotatation\f1 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 \*(Cbtranslation\f1 and \*(CbscaleFactor\f1 fields as well. .sp Pressing the \*(Cr\f1 key will change the center of rotation in both the constrained and unconstrained (\*(Cr\f1) case. \&By default, rotation occurs about the center of the bounding box. With \*(Cr\f1 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. .sp 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 \*(CbunsquishKnobs\f1. .sp As with all draggers, if you change the fields the dragger will move to match the new settings. .sp \*(CrRemember:\f1 \&This is \f2not\f1 an \*(CbSoTransform!\f1. If you want to move other objects with this dragger, you can either: .sp [a] Use an \*(CbSoTransformerManip\f1, which is subclassed from \*(CbSoTransform\f1. It creates one of these draggers and uses it as the interface to change its \&fields. (see the \*(CbSoTransformerManip\f1 man page). .sp [b] Use field-to-field connections to connect the fields of this dragger to those of any \*(CbSoTransformation\f1 node. .sp You can change the parts in any instance of this dragger using \*(CbsetPart()\f1. The default \&part geometries are defined as resources for this \*(CbSoTransformerDragger\f1 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 \*(Cb/usr/share/data/draggerDefaults/transformerDragger.iv\f1 into your own directory, editing the file, and then setting the environment variable \*(CbSO_DRAGGER_DIR\f1 to be a path to that directory. .SH FIELDS .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFRotation .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbrotation .br .in 1i \f1Orientation of the dragger. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(Cbtranslation .br .in 1i \f1Position of the dragger. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFVec3f .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbscaleFactor .br .in 1i \f1Scale of the dragger. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSoSFFloat .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbminDiscRotDot .br .in 1i \f1Specifies 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. .sp .in 0.5i .SH METHODS .ta 20m .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Cr .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbSoTransformerDragger\*(Cr() .br .in 1i \f1Constructor. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic const SoNodekitCatalog * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassNodekitCatalog\*(Cr() const .br .in 1i \f1Returns an \*(CbSoNodekitCatalog\f1 for this class .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic SoType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassTypeId\*(Cr() .br .in 1i \f1Returns type identifier for this class. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic const SoNodekitCatalog * .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassNodekitCatalog\*(Cr() const .br .in 1i \f1Returns an \*(CbSoNodekitCatalog\f1 for this class .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crstatic SoType .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetClassTypeId\*(Cr() .br .in 1i \f1Returns type identifier for this class. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetColinearThreshold\*(Cr(int newVal ) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crint .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbgetColinearThreshold\*(Cr() .br .in 1i \f1When picking a direction for constraining based on gesture, this paramater determines how many pixels must separate two axes before they are regarded as distinct. If they are deemed "the same" \&then the shorter of the two will be discarded. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbsetLocateHighlighting\*(Cr(SbBool onOff ) .br .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(CrSbBool .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbisLocateHighlighting\*(Cr() .br .in 1i \f1Controls whether or not locate highlighting is used. Default is TRUE. .sp .in 0.5i .in 1i+20n .ti 0.5i .ta 20m .ds Pt \*(Crvoid .ie \w'\*(Pt'>=20n \{\ .ne 3 \*(Pt .ti 0.5i \c\ \} .el\{\ .ne 2 \*(Pt \c\ \} \*(CbunsquishKnobs\*(Cr() .br .in 1i \f1Tells the dragger to unsquish its rotation and scale knobs during the next traversal. Ordinarily, the knobs are only 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. .sp .in 0.5i .SH CATALOG PARTS .ne 78 .TS box, tab(!); cb s s s lb lb lb lb lb lb lb lb l l l c. All parts !!!NULL by Part Name!Part Type!Default Type!Default callbackList!NodeKitListPart!--!yes surroundScale!SurroundScale!--!yes translator1!Separator!--!yes translator1Active!Separator!--!yes translator2!Separator!--!yes translator2Active!Separator!--!yes translator3!Separator!--!yes translator3Active!Separator!--!yes translator4!Separator!--!yes translator4Active!Separator!--!yes translator5!Separator!--!yes translator5Active!Separator!--!yes translator6!Separator!--!yes translator6Active!Separator!--!yes rotator1!Separator!--!yes rotator1Active!Separator!--!yes rotator2!Separator!--!yes rotator2Active!Separator!--!yes rotator3!Separator!--!yes rotator3Active!Separator!--!yes rotator4!Separator!--!yes rotator4Active!Separator!--!yes rotator5!Separator!--!yes rotator5Active!Separator!--!yes rotator6!Separator!--!yes rotator6Active!Separator!--!yes scale1!Separator!--!yes scale1Active!Separator!--!yes scale2!Separator!--!yes scale2Active!Separator!--!yes scale3!Separator!--!yes scale3Active!Separator!--!yes scale4!Separator!--!yes scale4Active!Separator!--!yes scale5!Separator!--!yes scale5Active!Separator!--!yes scale6!Separator!--!yes scale6Active!Separator!--!yes scale7!Separator!--!yes scale7Active!Separator!--!yes scale8!Separator!--!yes scale8Active!Separator!--!yes xAxisFeedbackActive!Separator!--!yes xAxisFeedbackSelect!Separator!--!yes xCrosshairFeedback!Separator!--!yes yAxisFeedbackActive!Separator!--!yes yAxisFeedbackSelect!Separator!--!yes yCrosshairFeedback!Separator!--!yes zAxisFeedbackActive!Separator!--!yes zAxisFeedbackSelect!Separator!--!yes zCrosshairFeedback!Separator!--!yes translateBoxFeedback!Separator!--!yes scaleBoxFeedback!Separator!--!yes posXWallFeedback!Separator!--!yes posXRoundWallFeedback!Separator!--!yes posYWallFeedback!Separator!--!yes posYRoundWallFeedback!Separator!--!yes posZWallFeedback!Separator!--!yes posZRoundWallFeedback!Separator!--!yes negXWallFeedback!Separator!--!yes negXRoundWallFeedback!Separator!--!yes negYWallFeedback!Separator!--!yes negYRoundWallFeedback!Separator!--!yes negZWallFeedback!Separator!--!yes negZRoundWallFeedback!Separator!--!yes radialFeedback!Separator!--!yes xCircleFeedback!Separator!--!yes yCircleFeedback!Separator!--!yes zCircleFeedback!Separator!--!yes .TE .ne 10 .TS box, tab(!); cb s s lb lb lbw(30n) l l l. Extra information for list parts from above table .sp Part Name!Container Type!Permissible Types callbackList!Separator!T{ Callback, EventCallback T} .TE .SH DRAGGER RESOURCES .ta 20m \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerLocateMaterial .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: none .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Gold diffuse and emissive color .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Locate highlight color used for all parts. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerOverallStyle .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: overallStyle .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Low-Complexity lines .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: If nothing else specified, this is style of the part. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator1 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator1 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Line-Style Square .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Top face of transformer. Picking this initiates translation in x-z plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator2 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator2 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Line-Style Square .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Bottom face of transformer. Picking this initiates translation in x-z plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator3 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator3 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Line-Style Square .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Left face of transformer. Picking this initiates translation in y-z plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator4 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator4 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Line-Style Square .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Right face of transformer. Picking this initiates translation in y-z plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator5 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator5 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Line-Style Square .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Front face of transformer. Picking this initiates translation in x-y plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator6 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator6 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White Line-Style Square .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Back face of transformer. Picking this initiates translation in x-y plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator1Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator1Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerTranslator1 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerTranslator1 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator2Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator2Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerTranslator2 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerTranslator2 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator3Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator3Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerTranslator3 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerTranslator3 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator4Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator4Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerTranslator4 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerTranslator4 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator5Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator5Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerTranslator5 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerTranslator5 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslator6Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translator6Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerTranslator6 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerTranslator6 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator1 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator1 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Green Sphere at end of a stick .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Top knob of transformer. Picking this initiates rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator2 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator2 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Green Sphere at end of a stick .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Bottom knob of transformer. Picking this initiates rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator3 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator3 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Green Sphere at end of a stick .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Left knob of transformer. Picking this initiates rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator4 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator4 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Green Sphere at end of a stick .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Right knob of transformer. Picking this initiates rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator5 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator5 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Green Sphere at end of a stick .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Front knob of transformer. Picking this initiates rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator6 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator6 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Green Sphere at end of a stick .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Back knob of transformer. Picking this initiates rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator1Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator1Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerRotator1 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerRotator1 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator2Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator2Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerRotator2 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerRotator2 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator3Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator3Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerRotator3 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerRotator3 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator4Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator4Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerRotator4 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerRotator4 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator5Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator5Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerRotator5 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerRotator5 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRotator6Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator6Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerRotator6 .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerRotator6 during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale1 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale1 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (+x+y+z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale2 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale2 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (+x+y-z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale3 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale3 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (+x-y+z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale4 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale4 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (+x-y-z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale5 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale5 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (-x+y+z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale6 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale6 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (-x+y-z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale7 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale7 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (-x-y+z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale8 .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale8 .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Small white cube in (-x-y-z) corner of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates scaling. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale1Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale1Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale1Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale1Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale2Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale2Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale2Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale2Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale3Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale3Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale3Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale3Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale4Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale4Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale4Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale4Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale5Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale5Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale5Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale5Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale6Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale6Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale6Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale6Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale7Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale7Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale7Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale7Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerScale8Active .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scale8Active .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of transformerScale8Active .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Replaces transformerScale8Active during dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerXAxisFeedbackActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: xAxisFeedbackActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow arrow along X axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating if X direction is permitted. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerXAxisFeedbackSelect .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: xAxisFeedbackSelect .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Orange arrow along X axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when awaiting gesture to pick between X axis and another direction(s). .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerYAxisFeedbackActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: yAxisFeedbackActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow arrow along Y axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating if Y direction is permitted. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerYAxisFeedbackSelect .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: yAxisFeedbackSelect .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Orange arrow along Y axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when awaiting gesture to pick between Y axis and another direction(s). .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerZAxisFeedbackActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: zAxisFeedbackActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow arrow along Z axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating if Z direction is permitted. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerZAxisFeedbackSelect .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: zAxisFeedbackSelect .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Orange arrow along Z axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when awaiting gesture to pick between Z axis and another direction(s). .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerXCrosshairFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: xCrosshairFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow crossHair in y-z plane .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating perpendicular to y-z plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerYCrosshairFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: yCrosshairFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow crossHair in x-z plane .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating perpendicular to x-z plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerZCrosshairFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: zCrosshairFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow crossHair in x-y plane .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating perpendicular to x-y plane. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerXCircleFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: xCircleFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Unit Circle about X axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when rotating about X axis .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerYCircleFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: yCircleFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Unit Circle about Y axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when rotating about Y axis .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerZCircleFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: zCircleFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Unit Circle about Z axis .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when rotating about Z axis .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerRadialFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: radialFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Rays emanating from center through corners .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling uniformly about center. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerTranslateBoxFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: translateBoxFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Box with one bright yellow side .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when translating. Automatically oriented so yellow side matches selected face. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerPosXWallFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: posXWallFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Plane along Right side of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling and keeping right side fixed. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerPosYWallFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: posYWallFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Plane along Top side of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling and keeping top side fixed. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerPosZWallFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: posZWallFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Plane along Front side of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling and keeping front side fixed. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerNegXWallFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: negXWallFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Plane along Left side of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling and keeping left side fixed. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerNegYWallFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: negYWallFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Plane along Bottom side of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling and keeping bottom side fixed. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformerNegZWallFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: negZWallFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Purple Plane along Back side of transformer .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed when scaling and keeping back side fixed. .sp .SH FILE FORMAT/DEFAULTS .nf \*(CrTransformerDragger { .in 1i .ta 23m 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 translator1Active translator2 translator2Active translator3 translator3Active translator4 translator4Active translator5 translator5Active translator6 translator6Active rotator1 rotator1Active rotator2 rotator2Active rotator3 rotator3Active rotator4 rotator4Active rotator5 rotator5Active rotator6 rotator6Active scale1 scale1Active scale2 scale2Active scale3 scale3Active scale4 scale4Active scale5 scale5Active scale6 scale6Active scale7 scale7Active scale8 scale8Active xAxisFeedbackActive xAxisFeedbackSelect xCrosshairFeedback yAxisFeedbackActive yAxisFeedbackSelect yCrosshairFeedback zAxisFeedbackActive zAxisFeedbackSelect zCrosshairFeedback translateBoxFeedback scaleBoxFeedback posXWallFeedback posXRoundWallFeedback posYWallFeedback posYRoundWallFeedback posZWallFeedback posZRoundWallFeedback negXWallFeedback negXRoundWallFeedback negYWallFeedback negYRoundWallFeedback negZWallFeedback negZRoundWallFeedback radialFeedback xCircleFeedback yCircleFeedback zCircleFeedback none .in 0.5i } .SH SEE ALSO \*(CbSoDragger, SoInteractionKit, SoLocateHighlight, SoCenterballDragger, SoDirectionalLightDragger, SoDragPointDragger, SoHandleBoxDragger, SoJackDragger, SoPointLightDragger, SoRotateCylindricalDragger, SoRotateDiscDragger, \&SoRotateSphericalDragger, SoScale1Dragger, SoScale2Dragger, SoScale2UniformDragger, SoScaleUniformDragger, SoSpotLightDragger, SoTabBoxDragger, SoTabPlaneDragger, SoTrackballDragger, SoTransformBoxDragger, \&SoTranslate1Dragger, SoTranslate2Dragger