.TH "SoSFRotation" 3 "Tue Jun 23 2026 23:48:38" "Version 4.0.10" "Coin" \" -*- nroff -*- .ad l .nh .SH NAME SoSFRotation \- The \fBSoSFRotation\fP class is a container for an \fBSbRotation\fP\&. .SH SYNOPSIS .br .PP .PP \fR#include \fP .PP Inherits \fBSoSField\fP\&. .SS "Public Member Functions" .in +1c .ti -1c .RI "virtual \fBSoType\fP \fBgetTypeId\fP (void) const" .br .ti -1c .RI "virtual void \fBcopyFrom\fP (const \fBSoField\fP &field)" .br .ti -1c .RI "const \fBSoSFRotation\fP & \fBoperator=\fP (const \fBSoSFRotation\fP &field)" .br .ti -1c .RI "virtual SbBool \fBisSame\fP (const \fBSoField\fP &field) const" .br .ti -1c .RI "const \fBSbRotation\fP & \fBgetValue\fP (void) const" .br .ti -1c .RI "void \fBsetValue\fP (const \fBSbRotation\fP &newvalue)" .br .ti -1c .RI "const \fBSbRotation\fP & \fBoperator=\fP (const \fBSbRotation\fP &newvalue)" .br .ti -1c .RI "int \fBoperator==\fP (const \fBSoSFRotation\fP &field) const" .br .ti -1c .RI "int \fBoperator!=\fP (const \fBSoSFRotation\fP &field) const" .br .ti -1c .RI "void \fBgetValue\fP (\fBSbVec3f\fP &axis, float &angle) const" .br .ti -1c .RI "void \fBsetValue\fP (const float q0, const float q1, const float q2, const float q3)" .br .ti -1c .RI "void \fBsetValue\fP (const float q[4])" .br .ti -1c .RI "void \fBsetValue\fP (const \fBSbVec3f\fP &axis, const float angle)" .br .in -1c Public Member Functions inherited from \fBSoSField\fP .in +1c .ti -1c .RI "virtual \fB~SoSField\fP ()" .br .in -1c Public Member Functions inherited from \fBSoField\fP .in +1c .ti -1c .RI "virtual \fB~SoField\fP ()" .br .ti -1c .RI "void \fBsetIgnored\fP (SbBool ignore)" .br .ti -1c .RI "SbBool \fBisIgnored\fP (void) const" .br .ti -1c .RI "void \fBsetDefault\fP (SbBool defaultVal)" .br .ti -1c .RI "SbBool \fBisDefault\fP (void) const" .br .ti -1c .RI "SbBool \fBisOfType\fP (const \fBSoType\fP type) const" .br .ti -1c .RI "void \fBenableConnection\fP (SbBool flag)" .br .ti -1c .RI "SbBool \fBisConnectionEnabled\fP (void) const" .br .ti -1c .RI "SbBool \fBconnectFrom\fP (\fBSoEngineOutput\fP *master, SbBool notnotify=FALSE, SbBool append=FALSE)" .br .ti -1c .RI "SbBool \fBappendConnection\fP (\fBSoEngineOutput\fP *master, SbBool notnotify=FALSE)" .br .ti -1c .RI "void \fBdisconnect\fP (\fBSoEngineOutput\fP *engineoutput)" .br .ti -1c .RI "SbBool \fBisConnectedFromEngine\fP (void) const" .br .ti -1c .RI "SbBool \fBgetConnectedEngine\fP (\fBSoEngineOutput\fP *&master) const" .br .ti -1c .RI "SbBool \fBconnectFrom\fP (\fBSoField\fP *master, SbBool notnotify=FALSE, SbBool append=FALSE)" .br .ti -1c .RI "SbBool \fBappendConnection\fP (\fBSoField\fP *master, SbBool notnotify=FALSE)" .br .ti -1c .RI "void \fBdisconnect\fP (\fBSoField\fP *field)" .br .ti -1c .RI "SbBool \fBisConnectedFromField\fP (void) const" .br .ti -1c .RI "SbBool \fBgetConnectedField\fP (\fBSoField\fP *&master) const" .br .ti -1c .RI "int \fBgetNumConnections\fP (void) const" .br .ti -1c .RI "int \fBgetForwardConnections\fP (\fBSoFieldList\fP &slavelist) const" .br .ti -1c .RI "int \fBgetConnections\fP (\fBSoFieldList\fP &masterlist) const" .br .ti -1c .RI "void \fBdisconnect\fP (void)" .br .ti -1c .RI "SbBool \fBisConnected\fP (void) const" .br .ti -1c .RI "void \fBsetContainer\fP (\fBSoFieldContainer\fP *cont)" .br .ti -1c .RI "\fBSoFieldContainer\fP * \fBgetContainer\fP (void) const" .br .ti -1c .RI "SbBool \fBset\fP (const char *valuestring)" .br .ti -1c .RI "void \fBget\fP (\fBSbString\fP &valuestring)" .br .ti -1c .RI "SbBool \fBshouldWrite\fP (void) const" .br .ti -1c .RI "virtual void \fBtouch\fP (void)" .br .ti -1c .RI "virtual void \fBstartNotify\fP (void)" .br .ti -1c .RI "virtual void \fBnotify\fP (\fBSoNotList\fP *nlist)" .br .ti -1c .RI "SbBool \fBenableNotify\fP (SbBool on)" .br .ti -1c .RI "SbBool \fBisNotifyEnabled\fP (void) const" .br .ti -1c .RI "void \fBaddAuditor\fP (void *f, \fBSoNotRec::Type\fP type)" .br .ti -1c .RI "void \fBremoveAuditor\fP (void *f, \fBSoNotRec::Type\fP type)" .br .ti -1c .RI "int \fBoperator==\fP (const \fBSoField\fP &f) const" .br .ti -1c .RI "int \fBoperator!=\fP (const \fBSoField\fP &f) const" .br .ti -1c .RI "virtual void \fBconnectionStatusChanged\fP (int numconnections)" .br .ti -1c .RI "SbBool \fBisReadOnly\fP (void) const" .br .ti -1c .RI "virtual void \fBfixCopy\fP (SbBool copyconnections)" .br .ti -1c .RI "virtual SbBool \fBreferencesCopy\fP (void) const" .br .ti -1c .RI "void \fBcopyConnection\fP (const \fBSoField\fP *fromfield)" .br .ti -1c .RI "virtual SbBool \fBread\fP (\fBSoInput\fP *input, const \fBSbName\fP &name)" .br .ti -1c .RI "virtual void \fBwrite\fP (\fBSoOutput\fP *out, const \fBSbName\fP &name) const" .br .ti -1c .RI "virtual void \fBcountWriteRefs\fP (\fBSoOutput\fP *out) const" .br .ti -1c .RI "void \fBsetFieldType\fP (int type)" .br .ti -1c .RI "int \fBgetFieldType\fP (void) const" .br .ti -1c .RI "SbBool \fBgetDirty\fP (void) const" .br .ti -1c .RI "void \fBsetDirty\fP (SbBool dirty)" .br .ti -1c .RI "void \fBevaluate\fP (void) const" .br .in -1c .SS "Static Public Member Functions" .in +1c .ti -1c .RI "static void * \fBcreateInstance\fP (void)" .br .ti -1c .RI "static \fBSoType\fP \fBgetClassTypeId\fP (void)" .br .ti -1c .RI "static void \fBinitClass\fP (void)" .br .in -1c Static Public Member Functions inherited from \fBSoSField\fP .in +1c .ti -1c .RI "static void \fBinitClass\fP (void)" .br .ti -1c .RI "static \fBSoType\fP \fBgetClassTypeId\fP (void)" .br .ti -1c .RI "static void \fBatexit_cleanup\fP (void)" .br .in -1c Static Public Member Functions inherited from \fBSoField\fP .in +1c .ti -1c .RI "static void \fBinitClass\fP (void)" .br .ti -1c .RI "static void \fBinitClasses\fP (void)" .br .ti -1c .RI "static void \fBcleanupClass\fP (void)" .br .ti -1c .RI "static \fBSoType\fP \fBgetClassTypeId\fP (void)" .br .in -1c .SS "Protected Attributes" .in +1c .ti -1c .RI "\fBSbRotation\fP \fBvalue\fP" .br .in -1c .SS "Additional Inherited Members" Public Types inherited from \fBSoField\fP .in +1c .ti -1c .RI "enum \fBFieldType\fP { \fBNORMAL_FIELD\fP = 0, \fBEVENTIN_FIELD\fP, \fBEVENTOUT_FIELD\fP, \fBEXPOSED_FIELD\fP }" .br .in -1c Protected Member Functions inherited from \fBSoSField\fP .in +1c .ti -1c .RI "\fBSoSField\fP (void)" .br .in -1c Protected Member Functions inherited from \fBSoField\fP .in +1c .ti -1c .RI "\fBSoField\fP (void)" .br .ti -1c .RI "void \fBvalueChanged\fP (SbBool resetdefault=TRUE)" .br .ti -1c .RI "virtual void \fBevaluateConnection\fP (void) const" .br .ti -1c .RI "virtual SbBool \fBreadConnection\fP (\fBSoInput\fP *in)" .br .ti -1c .RI "virtual void \fBwriteConnection\fP (\fBSoOutput\fP *out) const" .br .ti -1c .RI "SbBool \fBisDestructing\fP (void) const" .br .ti -1c .RI "virtual \fBSoNotRec\fP \fBcreateNotRec\fP (\fBSoBase\fP *cont)" .br .in -1c .SH "Detailed Description" .PP The \fBSoSFRotation\fP class is a container for an \fBSbRotation\fP\&. This field is used where nodes, engines or other field containers need to store a single rotation definition\&. .PP Fields of this type stores their value to file as a rotation axis vector plus a rotation angle: "axis0 axis1 axis2 angle"\&. .PP Note that there is one \fIvery\fP common mistake that is easy to make when setting the value of an \fBSoSFRotation\fP field, and that is to inadvertently use the wrong \fBSbRotation\fP constructor\&. This example should clarify the problem: .PP .PP .nf mytransformnode\->rotation\&.setValue(0, 0, 1, 1\&.5707963f); .fi .PP .PP The programmer clearly tries to set a PI/2 rotation around the Z axis, but this will fail, as the \fBSbRotation\fP constructor invoked above is the one that takes as arguments the 4 floats of a \fIquaternion\fP\&. What the programmer almost certainly wanted to do was to use the \fBSbRotation\fP constructor that takes a rotation vector and a rotation angle, which is invoked like this: .PP .PP .nf mytransformnode\->rotation\&.setValue(SbVec3f(0, 0, 1), 1\&.5707963f); .fi .PP .PP \fBSee also\fP .RS 4 \fBSoMFRotation\fP .RE .PP .SH "Member Function Documentation" .PP .SS "void * SoSFRotation::createInstance (void )\fR [static]\fP" \fIThis API member is considered internal to the library, as it is not likely to be of interest to the application programmer\&.\fP .br .br Creates a new instance of the class type corresponding to the \fBSoType\fP object\&. .SS "\fBSoType\fP SoSFRotation::getClassTypeId (void )\fR [static]\fP" This static method returns the \fBSoType\fP object associated with objects of this class\&. .SS "\fBSoType\fP SoSFRotation::getTypeId (void ) const\fR [virtual]\fP" Returns the type identification of an object derived from a class inheriting \fBSoField\fP\&. This is used for runtime type checking and "downward" casting\&. .PP Implements \fBSoField\fP\&. .SS "void SoSFRotation::copyFrom (const \fBSoField\fP & f)\fR [virtual]\fP" Copy value(s) from \fIf\fP into this field\&. \fIf\fP must be of the same type as this field\&. .PP Implements \fBSoField\fP\&. .SS "SbBool SoSFRotation::isSame (const \fBSoField\fP & f) const\fR [virtual]\fP" Check for equal type and value(s)\&. .PP Implements \fBSoField\fP\&. .SS "void SoSFRotation::initClass (void )\fR [static]\fP" Internal method called upon initialization of the library (from \fBSoDB::init()\fP) to set up the type system\&. .SS "void SoSFRotation::getValue (\fBSbVec3f\fP & axis, float & angle) const" Return value of rotation as an \fIaxis\fP and an \fIangle\fP around this \fIaxis\fP\&. .SS "void SoSFRotation::setValue (const float q0, const float q1, const float q2, const float q3)" Set the rotation from a set of quaternion values\&. .SS "void SoSFRotation::setValue (const float q[4])" Set the rotation from a set of quaternion values\&. .SS "void SoSFRotation::setValue (const \fBSbVec3f\fP & axis, const float angle)" Set the rotation from an \fIaxis\fP and an \fIangle\fP around this \fIaxis\fP\&. .SH "Author" .PP Generated automatically by Doxygen for Coin from the source code\&.