.TH "SoVRMLCylinderSensor" 3 "Thu May 29 2014" "Version 4.0.0a" "Coin" \" -*- nroff -*- .ad l .nh .SH NAME SoVRMLCylinderSensor \- .PP The \fBSoVRMLCylinderSensor\fP class maps pointer motion into rotations around the Y axis\&. .PP \fBThe detailed class documentation is taken verbatim from the VRML97 standard (ISO/IEC 14772-1:1997)\&. It is copyright The Web3D Consortium, and is used by permission of the Consortium:\fP .SH SYNOPSIS .br .PP .PP \fC#include \fP .PP Inherits \fBSoVRMLDragSensor\fP\&. .SS "Public Member Functions" .in +1c .ti -1c .RI "virtual \fBSoType\fP \fBgetTypeId\fP (void) const " .br .RI "\fIReturns the type identification of an object derived from a class inheriting \fBSoBase\fP\&. This is used for run-time type checking and 'downward' casting\&. \fP" .ti -1c .RI "\fBSoVRMLCylinderSensor\fP (void)" .br .in -1c .SS "Static Public Member Functions" .in +1c .ti -1c .RI "static \fBSoType\fP \fBgetClassTypeId\fP (void)" .br .ti -1c .RI "static void \fBinitClass\fP (void)" .br .in -1c .SS "Public Attributes" .in +1c .ti -1c .RI "\fBSoSFFloat\fP \fBdiskAngle\fP" .br .ti -1c .RI "\fBSoSFFloat\fP \fBmaxAngle\fP" .br .ti -1c .RI "\fBSoSFFloat\fP \fBminAngle\fP" .br .ti -1c .RI "\fBSoSFFloat\fP \fBoffset\fP" .br .ti -1c .RI "\fBSoSFRotation\fP \fBrotation_changed\fP" .br .in -1c .SS "Protected Member Functions" .in +1c .ti -1c .RI "virtual const \fBSoFieldData\fP * \fBgetFieldData\fP (void) const " .br .ti -1c .RI "virtual SbBool \fBdragStart\fP (void)" .br .ti -1c .RI "virtual void \fBdrag\fP (void)" .br .ti -1c .RI "virtual void \fBdragFinish\fP (void)" .br .ti -1c .RI "virtual \fB~SoVRMLCylinderSensor\fP ()" .br .in -1c .SS "Static Protected Member Functions" .in +1c .ti -1c .RI "static const \fBSoFieldData\fP ** \fBgetFieldDataPtr\fP (void)" .br .in -1c .SS "Additional Inherited Members" .SH "Detailed Description" .PP The \fBSoVRMLCylinderSensor\fP class maps pointer motion into rotations around the Y axis\&. .PP \fBThe detailed class documentation is taken verbatim from the VRML97 standard (ISO/IEC 14772-1:1997)\&. It is copyright The Web3D Consortium, and is used by permission of the Consortium:\fP .PP .nf CylinderSensor { exposedField SFBool autoOffset TRUE exposedField SFFloat diskAngle 0.262 # (0,/2) exposedField SFBool enabled TRUE exposedField SFFloat maxAngle -1 # [-2,2] exposedField SFFloat minAngle 0 # [-2,2] exposedField SFFloat offset 0 # (-inf, inf) eventOut SFBool isActive eventOut SFRotation rotation_changed eventOut SFVec3f trackPoint_changed } .fi .PP .PP The CylinderSensor node maps pointer motion (e\&.g\&., a mouse or wand) into a rotation on an invisible cylinder that is aligned with the Y-axis of the local coordinate system\&. The CylinderSensor uses the descendent geometry of its parent node to determine whether it is liable to generate events\&. .PP The enabled exposed field enables and disables the CylinderSensor node\&. If TRUE, the sensor reacts appropriately to user events\&. If FALSE, the sensor does not track user input or send events\&. If enabled receives a FALSE event and isActive is TRUE, the sensor becomes disabled and deactivated, and outputs an isActive FALSE event\&. If enabled receives a TRUE event the sensor is enabled and ready for user activation\&. .PP A CylinderSensor node generates events when the pointing device is activated while the pointer is indicating any descendent geometry nodes of the sensor's parent group\&. See 4\&.6\&.7\&.5, Activating and manipulating sensors (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.7.5), for more details on using the pointing device to activate the CylinderSensor\&. .PP Upon activation of the pointing device while indicating the sensor's geometry, an isActive TRUE event is sent\&. The initial acute angle between the bearing vector and the local Y-axis of the CylinderSensor node determines whether the sides of the invisible cylinder or the caps (disks) are used for manipulation\&. If the initial angle is less than the diskAngle, the geometry is treated as an infinitely large disk lying in the local Y=0 plane and coincident with the initial intersection point\&. Dragging motion is mapped into a rotation around the local +Y-axis vector of the sensor's coordinate system\&. The perpendicular vector from the initial intersection point to the Y-axis defines zero rotation about the Y-axis\&. For each subsequent position of the bearing, a rotation_changed event is sent that equals the sum of the rotation about the +Y-axis vector (from the initial intersection to the new intersection) plus the offset value\&. trackPoint_changed events reflect the unclamped drag position on the surface of this disk\&. When the pointing device is deactivated and autoOffset is TRUE, offset is set to the last value of rotation_changed and an offset_changed event is generated\&. See 4\&.6\&.7\&.4, Drag sensors (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.7.4), for a more general description of autoOffset and offset fields\&. .PP If the initial acute angle between the bearing vector and the local Y-axis of the CylinderSensor node is greater than or equal to diskAngle, then the sensor behaves like a cylinder\&. The shortest distance between the point of intersection (between the bearing and the sensor's geometry) and the Y-axis of the parent group's local coordinate system determines the radius of an invisible cylinder used to map pointing device motion and marks the zero rotation value\&. For each subsequent position of the bearing, a rotation_changed event is sent that equals the sum of the right-handed rotation from the original intersection about the +Y-axis vector plus the offset value\&. trackPoint_changed events reflect the unclamped drag position on the surface of the invisible cylinder\&. When the pointing device is deactivated and autoOffset is TRUE, offset is set to the last rotation angle and an offset_changed event is generated\&. More details are available in 4\&.6\&.7\&.4, Drag sensors (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.7.4)\&. .PP When the sensor generates an isActive TRUE event, it grabs all further motion events from the pointing device until it is released and generates an isActive FALSE event (other pointing-device sensors shall not generate events during this time)\&. Motion of the pointing device while isActive is TRUE is referred to as a 'drag\&.' If a 2D pointing device is in use, isActive events will typically reflect the state of the primary button associated with the device (i\&.e\&., isActive is TRUE when the primary button is pressed and FALSE when it is released)\&. If a 3D pointing device (e\&.g\&., a wand) is in use, isActive events will typically reflect whether the pointer is within or in contact with the sensor's geometry\&. .PP While the pointing device is activated, trackPoint_changed and rotation_changed events are output and are interpreted from pointing device motion based on the sensor's local coordinate system at the time of activation\&. trackPoint_changed events represent the unclamped intersection points on the surface of the invisible cylinder or disk\&. If the initial angle results in cylinder rotation (as opposed to disk behaviour) and if the pointing device is dragged off the cylinder while activated, browsers may interpret this in a variety of ways (e\&.g\&., clamp all values to the cylinder and continuing to rotate as the point is dragged away from the cylinder)\&. Each movement of the pointing device while isActive is TRUE generates trackPoint_changed and rotation_changed events\&. The minAngle and maxAngle fields clamp rotation_changed events to a range of values\&. If minAngle is greater than maxAngle, rotation_changed events are not clamped\&. .PP The minAngle and maxAngle fields are restricted to the range [-2, 2]\&. More information about this behaviour is described in 4\&.6\&.7\&.3, Pointing-device sensors, 4\&.6\&.7\&.4, Drag sensors (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.7.4), and 4\&.6\&.7\&.5 (http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-VRML97/part1/concepts.html#4.6.7.5), Activating and manipulating sensors\&. .SH "Constructor & Destructor Documentation" .PP .SS "SoVRMLCylinderSensor::SoVRMLCylinderSensor (void)" Constructor\&. .SS "SoVRMLCylinderSensor::~SoVRMLCylinderSensor ()\fC [protected]\fP, \fC [virtual]\fP" Destructor\&. .SH "Member Function Documentation" .PP .SS "\fBSoType\fP SoVRMLCylinderSensor::getTypeId (void) const\fC [virtual]\fP" .PP Returns the type identification of an object derived from a class inheriting \fBSoBase\fP\&. This is used for run-time type checking and 'downward' casting\&. Usage example: .PP .PP .nf void foo(SoNode * node) { if (node->getTypeId() == SoFile::getClassTypeId()) { SoFile * filenode = (SoFile *)node; // safe downward cast, knows the type } } .fi .PP .PP For application programmers wanting to extend the library with new nodes, engines, nodekits, draggers or others: this method needs to be overridden in \fIall\fP subclasses\&. This is typically done as part of setting up the full type system for extension classes, which is usually accomplished by using the pre-defined macros available through for instance \fBInventor/nodes/SoSubNode\&.h\fP (SO_NODE_INIT_CLASS and SO_NODE_CONSTRUCTOR for node classes), Inventor/engines/SoSubEngine\&.h (for engine classes) and so on\&. .PP For more information on writing Coin extensions, see the class documentation of the toplevel superclasses for the various class groups\&. .PP Reimplemented from \fBSoVRMLDragSensor\fP\&. .SS "const \fBSoFieldData\fP * SoVRMLCylinderSensor::getFieldData (void) const\fC [protected]\fP, \fC [virtual]\fP" Returns a pointer to the class-wide field data storage object for this instance\&. If no fields are present, returns \fCNULL\fP\&. .PP Reimplemented from \fBSoVRMLDragSensor\fP\&. .SS "SbBool SoVRMLCylinderSensor::dragStart (void)\fC [protected]\fP, \fC [virtual]\fP" \fIThis API member is considered internal to the library, as it is not likely to be of interest to the application programmer\&.\fP .PP Called when dragger is selected (picked) by the user\&. .PP Implements \fBSoVRMLDragSensor\fP\&. .SS "void SoVRMLCylinderSensor::drag (void)\fC [protected]\fP, \fC [virtual]\fP" \fIThis API member is considered internal to the library, as it is not likely to be of interest to the application programmer\&.\fP .PP Called when user drags the mouse after picking the dragger\&. .PP Implements \fBSoVRMLDragSensor\fP\&. .SS "void SoVRMLCylinderSensor::dragFinish (void)\fC [protected]\fP, \fC [virtual]\fP" \fIThis API member is considered internal to the library, as it is not likely to be of interest to the application programmer\&.\fP .PP Called when mouse button is released after picking and interacting with the dragger\&. .PP Implements \fBSoVRMLDragSensor\fP\&. .SH "Member Data Documentation" .PP .SS "\fBSoSFFloat\fP SoVRMLCylinderSensor::diskAngle" Angle where sensor starts to behave like a disk\&. .SS "\fBSoSFFloat\fP SoVRMLCylinderSensor::maxAngle" Maximum angle around Y-axis\&. .SS "\fBSoSFFloat\fP SoVRMLCylinderSensor::minAngle" Minimum angle around Y axis\&. .SS "\fBSoSFFloat\fP SoVRMLCylinderSensor::offset" Current rotation value\&. Initial value is 0\&.0\&. .SS "\fBSoSFRotation\fP SoVRMLCylinderSensor::rotation_changed" This eventOut is signaled during sensor interaction\&. .SH "Author" .PP Generated automatically by Doxygen for Coin from the source code\&.