'\"! tbl | mmdoc '\"macro stdmacro .ie n \{\ . ds Cr \fB . ds Cb \fB .\} .el \{\ . ds Cr \f7 . ds Cb \f8 .\} .TH SoCenterballDragger(3IV) .SH NAME SoCenterballDragger \(em striped ball you rotate and re-center by dragging with the mouse .SH INHERITS FROM SoBase > SoFieldContainer > SoNode > SoBaseKit > SoInteractionKit > SoDragger > SoCenterballDragger .SH SYNOPSIS .ps -1 \*(Cr#include .sp .in 1i \f1Fields from class SoCenterballDragger: .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\ \} \*(Cbcenter .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 SoCenterballDragger: .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\ \} \*(CbSoCenterballDragger\*(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 \*(CbSoCenterballDragger\f1 is a composite dragger. Its shape is a sphere defined by three intersecting circles. Where the circles intersect (at the ends of the x, y and z axes) there are sets of small green crosshairs. Dragging \&a pair of crosshairs translates the entire centerball within the plane of the crosshairs. The interface of the sphere and circles is just like \*(CbSoTrackballDragger\f1. Dragging a circle rotates about a constrained axis and \&dragging the areas between them rotates the sphere freely about the center. An invisible but pickable sphere initiates the free-rotation dragging. .sp When you drag the crosshairs, the \*(Cbcenter\f1 field is updated; \&there is no \*(Cbtranslation\f1 field. Dragging other parts of the centerball updates the \*(Cbrotation\f1 field. As with all draggers, if you change the fields the dragger moves in response. .sp The draggers used for the crosshair parts \&are \*(CbSoTranslate2Draggers\f1, so pressing the \*(Cr\f1 key allows you to constrain motion to slide along either the local \*(Cbx axis\f1 or \*(Cby axis\f1 of that crosshair.. The direction is determined by your initial mouse gesture after pressing the key. Releasing \&the key removes the constraint. .sp \f2Remember:\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 \*(CbSoCenterballManip\f1, which is subclassed from \*(CbSoTransform\f1. The manipulator creates one of these draggers \&and uses it as the interface to edit the manipulator's fields. (See the \*(CbSoCenterballManip\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 \*(CbSoCenterballDragger\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/centerballDragger.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 centerball 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\ \} \*(Cbcenter .br .in 1i \f1Center of rotation and scale of the centerball 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\ \} \*(CbSoCenterballDragger\*(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 24 .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 translateToCenter!MatrixTransform!--!yes surroundScale!SurroundScale!--!yes antiSquish!AntiSquish!--!no lightModel!LightModel!--!yes XAxis!Separator!--!yes YAxis!Separator!--!yes ZAxis!Separator!--!yes rotator!RotateSphericalDragger!--!yes YRotator!RotateCylindricalDragger!--!yes ZCenterChanger!Translate2Dragger!--!yes ZRotator!RotateCylindricalDragger!--!yes YCenterChanger!Translate2Dragger!--!yes XCenterChanger!Translate2Dragger!--!yes XRotator!RotateCylindricalDragger!--!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: \*(CbcenterballRotator .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator.rotator .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Invisible but pickable sphere .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: When picked, initiates free rotation about the center point. Slightly smaller radius than the stripes, so you must pick between the stripes to use it. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballRotatorActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: rotator.rotatorActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Invisible sphere .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed during unconstrained 3D rotation instead of centerballRotator. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballStripe .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: XRotator.rotator .br YRotator.rotator .br ZRotator.rotator .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White circle aligned with rotation axis. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: When picked, initiates constrained rotation. Each rotator rotates locally about its Y axis. The centerball contains private transform parts that orient the draggers along three different axes. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballStripeActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: XRotator.rotatorActive .br YRotator.rotatorActive .br ZRotator.rotatorActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: White circle aligned with the rotation axis. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed during constrained rotation instead of the rotator part. The centerball orients the draggers along three different axes. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballCenterChanger .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: XCenterChanger.translator .br YCenterChanger.translator .br ZCenterChanger.translator .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Two sets of small green crosshairs, one located at each intersection of axis and ball. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: When picked, initiates 2D translation of ball through space. Edits the \*(Cbcenter\f1 field, which becomes center for subsequent rotations. Each translator works locally in its X-Y plane. The centerball contains \&private transform parts that place the draggers along three different axes. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballCenterChangerActive .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: XCenterChanger.translatorActive .br YCenterChanger.translatorActive .br ZCenterChanger.translatorActive .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Yellow version of centerballCenterChanger. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Displayed during 2D translation instead of regular translator part. The centerball places the draggers along three different axes. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballCenterXAxisFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: XCenterChanger.xAxisFeedback .br YCenterChanger.xAxisFeedback .br ZCenterChanger.xAxisFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Double-headed purple arrows, one located at each intersection of axis and ball. Located atop X axis of crosshair. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Only shown if dragger is moving and the axis is a permitted direction of motion. When pressing , motion is constrained, and this is displayed only if the primary motion is in the X direction \&of the child dragger's local space. The centerball places the draggers along three different axes; so not all of these parts aligns with the X axis in centerball space. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballCenterYAxisFeedback .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Parts: XCenterChanger.yAxisFeedback .br YCenterChanger.yAxisFeedback .br ZCenterChanger.yAxisFeedback .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Double-headed purple arrows, one located at each intersection of axis and ball. Located atop Y axis of crosshair. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Only shown if dragger is moving and the axis is a permitted direction of motion. When pressing , motion is constrained, and this is displayed only if the primary motion is in the Y direction \&of the child dragger's local space. The centerball places the draggers along three different axes; so not all of these parts aligns with the Y axis in centerball space. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballXAxis .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: XAxis .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Thin yellow line connecting left and right crosshairs. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Feedback shown alone during rotation about X axis; displayed with centerballYAxis and centerballZAxis while center is dragged. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballYAxis .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: YAxis .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Thin yellow line connecting lower and upper crosshairs. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Feedback shown alone during rotation about Y axis; displayed with centerballXAxis and centerballZAxis while center is dragged. .sp \f1.in 0n+.5i .ti 0n+.5i .ta 18m Resource: \*(CbcenterballZAxis .br \f1.in 0n+.5i .ti 0n+.5i .ta 18m Part: ZAxis .br .in 0n+.5i .ti 0n+.5i .ta 18m Appearance: Thin yellow line connecting near and far crosshairs. .br .in 20n+.5i .ti 0n+.5i .ta 18m Description: Feedback shown alone during rotation about Z axis; displayed with centerballXAxis and centerballYAxis while center is dragged. .sp .SH FILE FORMAT/DEFAULTS .nf \*(CrCenterballDragger { .in 1i .ta 33m renderCaching AUTO boundingBoxCaching AUTO renderCulling AUTO pickCulling AUTO isActive FALSE rotation 0 0 1 0 center 0 0 0 callbackList NULL translateToCenter MatrixTransform { matrix 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 } surroundScale NULL antiSquish AntiSquish { sizing LONGEST_DIAGONAL } lightModel LightModel { model PHONG } XAxis YAxis ZAxis rotator RotateSphericalDragger { } YRotator RotateCylindricalDragger { } ZCenterChanger Translate2Dragger { } ZRotator RotateCylindricalDragger { } YCenterChanger Translate2Dragger { } XCenterChanger Translate2Dragger { } XRotator RotateCylindricalDragger { } rotator.rotator rotator.rotatorActive XRotator.rotator YRotator.rotator ZRotator.rotator XRotator.rotatorActive YRotator.rotatorActive ZRotator.rotatorActive XCenterChanger.translator YCenterChanger.translator ZCenterChanger.translator XCenterChanger.translatorActive YCenterChanger.translatorActive ZCenterChanger.translatorActive XCenterChanger.xAxisFeedback YCenterChanger.xAxisFeedback ZCenterChanger.xAxisFeedback XCenterChanger.yAxisFeedback YCenterChanger.yAxisFeedback ZCenterChanger.yAxisFeedback .in 0.5i } .SH SEE ALSO \*(CbSoInteractionKit, SoDragger, SoDirectionalLightDragger, SoDragPointDragger, SoHandleBoxDragger, SoJackDragger, SoPointLightDragger, SoRotateCylindricalDragger, SoRotateDiscDragger, SoRotateSphericalDragger, \&SoScale1Dragger, SoScale2Dragger, SoScale2UniformDragger, SoScaleUniformDragger, SoSpotLightDragger, SoTabBoxDragger, SoTabPlaneDragger, SoTrackballDragger, SoTransformBoxDragger, SoTranslate1Dragger, \&SoTranslate2Dragger