'\"! tbl | mmdoc '\"macro stdmacro .ie n \{\ . ds Cr \fB . ds Cb \fB .\} .el \{\ . ds Cr \f7 . ds Cb \f8 .\} .TH SoTransformBoxDragger(3IV) .SH NAME SoTransformBoxDragger \(em box-like object you scale, rotate, and translate by dragging with the mouse .SH INHERITS FROM SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit > SoDragger > SoTransformBoxDragger .SH SYNOPSIS .ps -1 \*(Cr#include .sp .in 1i \f1Fields from class SoTransformBoxDragger: .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 .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 SoTransformBoxDragger: .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\ \} \*(CbSoTransformBoxDragger\*(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() .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 \*(CbSoTransformBoxDragger\f1 is a composite dragger shaped like a box with small cubes at the corners. Click and drag any of these cubes to scale the box uniformly. Drag any edge of the box to rotate the whole dragger about its center, \&along an axis parallel to that edge. Pick any face of the box for 2D translation in the plane of that face. .sp Although the box looks just about like a wireframe cube, it is composed of many different \&simple draggers arranged in a composite assembly. When one part is dragged, the transformBox makes sure they all move together. Each of the parts of the box is a different dragger with the default geometry \&changed. The faces of the box are \*(CbSoTranslate2Draggers\f1, the edges are \*(CbSoRotateCylindricalDraggers\f1, and the cubes are an \*(CbSoScaleUniformDragger\f1. Drag them and the dragger will update its \*(Cbtranslation\f1, \*(Cbrotation\f1 and \*(CbscaleFactor\f1 fields to reflect the changes. 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 \*(CbSoTransformBoxManip\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 \*(CbSoTransformBoxManip\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 \*(CbSoTransformBoxDragger\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/transformBoxDragger.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 .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\ \} \*(CbSoTransformBoxDragger\*(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 .SH CATALOG PARTS .ne 22 .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 antiSquish!AntiSquish!--!no scaler!ScaleUniformDragger!--!yes rotator1!RotateCylindricalDragger!--!yes rotator2!RotateCylindricalDragger!--!yes rotator3!RotateCylindricalDragger!--!yes translator1!Translate2Dragger!--!yes translator2!Translate2Dragger!--!yes translator3!Translate2Dragger!--!yes translator4!Translate2Dragger!--!yes translator5!Translate2Dragger!--!yes translator6!Translate2Dragger!--!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: \*(CbtransformBoxScalerScaler .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scaler.scaler .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Eight small white cubes at the corners of the box .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this initiates uniform 3D scaling of the dragger. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxScalerScalerActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scaler.scalerActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of the regular scaler part .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed while the dragger is being scaled. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxScalerFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scaler.feedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Empty separator .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Removes any feedback geometry created in the constructor of the \*(CbSoScaleUniformDragger\f1. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxScalerFeedbackActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: scaler.feedbackActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Empty separator .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Removes any feedbackActive geometry created in the constructor of the \*(CbSoScaleUniformDragger\f1. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxRotatorRotator .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: rotator1.rotator .br rotator2.rotator .br rotator3.rotator .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Four white lines along the edges of the box .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking this begins rotational dragging. In each of the three rotateCylindrical draggers, the lines of the rotator part are oriented parallel to the axis of rotation. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxRotatorRotatorActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: rotator1.rotatorActive .br rotator2.rotatorActive .br rotator3.rotatorActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Four yellow lines along the edges of the box .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed while the dragger is being rotated .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxRotatorFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: rotator1.feedback .br rotator2.feedback .br rotator3.feedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Empty separator .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Removes any feedback geometry created in the constructor of the \*(CbSoRotateCylindricalDragger\f1. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxRotatorFeedbackActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: rotator1.feedbackActive .br rotator2.feedbackActive .br rotator3.feedbackActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Thin purple line through center of box .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed to show axis of rotation during rotational dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxTranslatorTranslator .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: translator1.translator .br translator2.translator .br translator3.translator .br translator4.translator .br translator5.translator .br translator6.translator .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Invisible but pickable square surface .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Picking these begins 2-D translational dragging within the plane of one of the sides of the box. The invisible squares of the six translate2Draggers are arranged to form the sides of the box. \&The squares are easy to discern, although rendered as invisible; they are bounded by the lines of the rotational dragger parts. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxTranslatorTranslatorActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: translator1.translatorActive .br translator2.translatorActive .br translator3.translatorActive .br translator4.translatorActive .br translator5.translatorActive .br translator6.translatorActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Invisible square surface .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Shown during 2-D translational dragging. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxTranslatorXAxisFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: translator1.xAxisFeedback .br translator2.xAxisFeedback .br translator3.xAxisFeedback .br translator4.xAxisFeedback .br translator5.xAxisFeedback .br translator6.xAxisFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Short thin purple line .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Only shown if dragger is moving and the axis is a permissable direction of motion. When pressing , motion is constrained, and this is displayed only if the primary motion is in the X direction. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbtransformBoxTranslatorYAxisFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: translator1.yAxisFeedback .br translator2.yAxisFeedback .br translator3.yAxisFeedback .br translator4.yAxisFeedback .br translator5.yAxisFeedback .br translator6.yAxisFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Short thin purple line .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Only shown if dragger is moving and the axis is a permissable direction of motion. When pressing , motion is constrained, and this is displayed only if the primary motion is in the Y direction. .sp .SH FILE FORMAT/DEFAULTS .nf \*(CrTransformBoxDragger { .in 1i .ta 30m renderCaching AUTO boundingBoxCaching AUTO renderCulling AUTO pickCulling AUTO isActive FALSE rotation 0 0 1 0 translation 0 0 0 scaleFactor 1 1 1 callbackList NULL surroundScale NULL antiSquish AntiSquish { sizing BIGGEST_DIMENSION } scaler ScaleUniformDragger { } rotator1 RotateCylindricalDragger { } rotator2 RotateCylindricalDragger { } rotator3 RotateCylindricalDragger { } translator1 Translate2Dragger { } translator2 Translate2Dragger { } translator3 Translate2Dragger { } translator4 Translate2Dragger { } translator5 Translate2Dragger { } translator6 Translate2Dragger { } scaler.scaler scaler.scalerActive scaler.feedback scaler.feedbackActive rotator1.rotator rotator2.rotator rotator3.rotator rotator1.rotatorActive rotator2.rotatorActive rotator3.rotatorActive rotator1.feedback rotator2.feedback rotator3.feedback rotator1.feedbackActive rotator2.feedbackActive rotator3.feedbackActive translator1.translator translator2.translator translator3.translator translator4.translator translator5.translator translator6.translator translator1.translatorActive translator2.translatorActive translator3.translatorActive translator4.translatorActive translator5.translatorActive translator6.translatorActive translator1.xAxisFeedback translator2.xAxisFeedback translator3.xAxisFeedback translator4.xAxisFeedback translator5.xAxisFeedback translator6.xAxisFeedback translator1.yAxisFeedback translator2.yAxisFeedback translator3.yAxisFeedback translator4.yAxisFeedback translator5.yAxisFeedback translator6.yAxisFeedback .in 0.5i } .SH SEE ALSO \*(CbSoInteractionKit, SoDragger, SoCenterballDragger, SoDirectionalLightDragger, SoDragPointDragger, SoHandleBoxDragger, SoJackDragger, SoPointLightDragger, SoRotateCylindricalDragger, SoRotateDiscDragger, \&SoRotateSphericalDragger, SoScale1Dragger, SoScale2Dragger, SoScale2UniformDragger, SoScaleUniformDragger, SoSpotLightDragger, SoTabBoxDragger, SoTabPlaneDragger, SoTrackballDragger, SoTransformerDragger, \&SoTranslate1Dragger, SoTranslate2Dragger