osgEarth 2.1.1
|
Public Types | |
enum | Components { COMP_NONE = 0x00, COMP_POSITION = 0x01, COMP_HEADING = 0x02, COMP_PITCH = 0x04, COMP_ROLL = 0x08, COMP_ORIENTATION = COMP_HEADING | COMP_PITCH | COMP_ROLL, COMP_ALL = COMP_POSITION | COMP_ORIENTATION } |
enum | RotationOrder { HPR, RPH } |
Public Member Functions | |
ObjectLocator (const osgEarth::Map *map) | |
ObjectLocator (ObjectLocator *parent, unsigned int compsToInherit=COMP_ALL) | |
void | setPosition (const osg::Vec3d &pos) |
const osg::Vec3d & | getPosition () const |
void | setOrientation (const osg::Vec3d &hpr_deg) |
const osg::Vec3d & | getOrientation () const |
void | setTime (double t) |
double | getTime () const |
void | setRotationOrder (RotationOrder value) |
RotationOrder | getRotationOrder () const |
void | setParentLocator (ObjectLocator *parent, unsigned int componentsToInherit=COMP_ALL) |
ObjectLocator * | getParentLocator () |
const ObjectLocator * | getParentLocator () const |
void | setComponentsToInherit (unsigned int compMask) |
unsigned int | getComponentsToInherit () const |
const Map * | getMap () const |
bool | isEmpty () const |
bool | isValid () const |
bool | getLocatorPosition (osg::Vec3d &output) const |
bool | getPositionMatrix (osg::Matrixd &output) const |
bool | getLocatorOrientation (osg::Vec3d &output) const |
bool | getOrientationMatrix (osg::Matrixd &output, unsigned inherit=COMP_ALL) const |
bool | getLocatorMatrix (osg::Matrixd &output, unsigned components=COMP_ALL) const |
virtual bool | inSyncWith (int exRev) const |
Private Attributes | |
osg::observer_ptr< const osgEarth::Map > | _map |
osg::ref_ptr< ObjectLocator > | _parentLoc |
unsigned int | _componentsToInherit |
RotationOrder | _rotOrder |
osg::Vec3d | _pos |
osg::Vec3d | _hpr |
double | _timestamp |
bool | _isEmpty |
ObjectLocator - a revisioned object that generates a positional matrix for a node.
Definition at line 16 of file ObjectLocator.
Flags that represent separable location components.
Definition at line 21 of file ObjectLocator.
{ COMP_NONE = 0x00, COMP_POSITION = 0x01, COMP_HEADING = 0x02, COMP_PITCH = 0x04, COMP_ROLL = 0x08, COMP_ORIENTATION = COMP_HEADING | COMP_PITCH | COMP_ROLL, COMP_ALL = COMP_POSITION | COMP_ORIENTATION };
The order in which rotation are calculated
Definition at line 32 of file ObjectLocator.
ObjectLocator::ObjectLocator | ( | const osgEarth::Map * | map | ) |
Constructs a new locator that will generate positional matricies based on the specified SRS and rotation order.
Definition at line 34 of file ObjectLocator.cpp.
: _map ( map ), _componentsToInherit( COMP_ALL ), _timestamp ( 0.0 ), _isEmpty ( true ), _rotOrder ( HPR ) { if ( !_map.valid() ) OE_WARN << LC << "Illegal: cannot create an ObjectLocator with a NULL Map." << std::endl; }
ObjectLocator::ObjectLocator | ( | ObjectLocator * | parent, |
unsigned int | compsToInherit = COMP_ALL |
||
) |
Constucts a new relative locator that inherits the mask of specified components from a parent locator.
Definition at line 45 of file ObjectLocator.cpp.
: _timestamp( 0.0 ), _isEmpty ( false ), _rotOrder ( HPR ) { setParentLocator( parentLoc, inheritMask ); _map = parentLoc->_map.get(); }
unsigned int osgEarth::Util::ObjectLocator::getComponentsToInherit | ( | ) | const [inline] |
Definition at line 89 of file ObjectLocator.
{ return _componentsToInherit; }
bool ObjectLocator::getLocatorMatrix | ( | osg::Matrixd & | output, |
unsigned | components = COMP_ALL |
||
) | const |
Gets a matrix that can be used to position and orient an object corresponding to this locator, returning true upon success.
Definition at line 203 of file ObjectLocator.cpp.
{ bool ok = true; osg::Matrixd pos, rot; if ( comps & COMP_POSITION ) if ( !getPositionMatrix(pos) ) ok = false; if ( comps & COMP_ORIENTATION ) if ( !getOrientationMatrix(rot, comps) ) ok = false; output = rot * pos; return ok; }
bool ObjectLocator::getLocatorOrientation | ( | osg::Vec3d & | output | ) | const |
Gets the aggregate orientation (HPR degrees) represented by this locator, returning true upon success.
Definition at line 143 of file ObjectLocator.cpp.
{ if ( !isValid() ) return false; output = _hpr; if ( _parentLoc.valid() && (_componentsToInherit & COMP_ORIENTATION) != 0 ) { osg::Vec3d parentHPR; _parentLoc->getLocatorOrientation( parentHPR ); output += parentHPR; } return true; }
bool ObjectLocator::getLocatorPosition | ( | osg::Vec3d & | output | ) | const |
Gets the aggregate position represented by this locator, returning true upon success.
Definition at line 102 of file ObjectLocator.cpp.
{ if ( !isValid() ) return false; output = _pos; if ( _parentLoc.valid() && (_componentsToInherit & COMP_POSITION) != 0 ) { osg::Vec3d parentPos; _parentLoc->getLocatorPosition( parentPos ); output += parentPos; } return true; }
const Map* osgEarth::Util::ObjectLocator::getMap | ( | ) | const [inline] |
Gets the map associated with this locator.
Definition at line 92 of file ObjectLocator.
{ return _map.get(); }
const osg::Vec3d& osgEarth::Util::ObjectLocator::getOrientation | ( | ) | const [inline] |
Definition at line 63 of file ObjectLocator.
{ return _hpr; }
bool ObjectLocator::getOrientationMatrix | ( | osg::Matrixd & | output, |
unsigned | inherit = COMP_ALL |
||
) | const |
Gets the aggregate orientation matrix for this locator, returning true upon success.
Definition at line 161 of file ObjectLocator.cpp.
{ if ( !isValid() ) return false; if ( (inherit & COMP_ORIENTATION) == 0 ) return true; if ( _hpr[0] != 0.0 || _hpr[1] != 0.0 || _hpr[2] != 0.0 ) { // first figure out the orientation osg::Quat azim_q; if ( inherit & COMP_HEADING ) azim_q = osg::Quat( osg::DegreesToRadians(_hpr[0]), osg::Vec3d(0,0,1) ); osg::Quat pitch_q; if ( inherit & COMP_PITCH ) pitch_q = osg::Quat( -osg::DegreesToRadians(_hpr[1]), osg::Vec3d(1,0,0) ); osg::Quat roll_q; if ( inherit & COMP_ROLL ) roll_q = osg::Quat( osg::DegreesToRadians(_hpr[2]), osg::Vec3d(0,1,0) ); // these look backwards, but it's actually a fast way to avoid inverting a matrix if ( _rotOrder == HPR ) output.set( roll_q.conj() * pitch_q.conj() * azim_q.conj() ); else if ( _rotOrder == RPH ) output.set( azim_q.conj() * pitch_q.conj() * roll_q.conj() ); } if ( _parentLoc.valid() && (_componentsToInherit * COMP_ORIENTATION) != 0 ) { osg::Matrixd parentRot; if ( _parentLoc->getOrientationMatrix(parentRot, _componentsToInherit) ) output = output * parentRot; } return true; }
ObjectLocator* osgEarth::Util::ObjectLocator::getParentLocator | ( | ) | [inline] |
Definition at line 84 of file ObjectLocator.
{ return _parentLoc.get(); }
const ObjectLocator* osgEarth::Util::ObjectLocator::getParentLocator | ( | ) | const [inline] |
Definition at line 85 of file ObjectLocator.
{ return _parentLoc.get(); }
const osg::Vec3d& osgEarth::Util::ObjectLocator::getPosition | ( | ) | const [inline] |
Definition at line 56 of file ObjectLocator.
{ return _pos; }
bool ObjectLocator::getPositionMatrix | ( | osg::Matrixd & | output | ) | const |
Gets the aggregate positioning matrix for this locator, returning true upon success.
Definition at line 120 of file ObjectLocator.cpp.
{ osg::Vec3d pos; if ( !getLocatorPosition(pos) ) return false; if ( _map->isGeocentric() ) { _map->getProfile()->getSRS()->getEllipsoid()->computeLocalToWorldTransformFromLatLongHeight( osg::DegreesToRadians(pos.y()), osg::DegreesToRadians(pos.x()), pos.z(), output ); } else { output.makeTranslate(pos); } return true; }
RotationOrder osgEarth::Util::ObjectLocator::getRotationOrder | ( | ) | const [inline] |
Definition at line 76 of file ObjectLocator.
{ return _rotOrder; }
double osgEarth::Util::ObjectLocator::getTime | ( | ) | const [inline] |
Definition at line 70 of file ObjectLocator.
{ return _timestamp; }
bool ObjectLocator::inSyncWith | ( | int | exRev | ) | const [virtual] |
Override Revisioned::inSync to track with the parent locator's revision.
Definition at line 221 of file ObjectLocator.cpp.
{ return _parentLoc.valid() ? _parentLoc->inSyncWith( exRev ) : osgEarth::Revisioned<osg::Referenced>::inSyncWith( exRev ); }
bool ObjectLocator::isEmpty | ( | ) | const |
Whether the locator contains a valid position/orientation.
Definition at line 55 of file ObjectLocator.cpp.
{ return _parentLoc.valid() ? _parentLoc->isEmpty() : _isEmpty; }
bool osgEarth::Util::ObjectLocator::isValid | ( | ) | const [inline] |
Whether this location contains valid data
Definition at line 98 of file ObjectLocator.
void osgEarth::Util::ObjectLocator::setComponentsToInherit | ( | unsigned int | compMask | ) |
Policy for inheriting parent locator's components
void ObjectLocator::setOrientation | ( | const osg::Vec3d & | hpr_deg | ) |
void ObjectLocator::setParentLocator | ( | ObjectLocator * | parent, |
unsigned int | componentsToInherit = COMP_ALL |
||
) |
The optional parent locator. If a Locator has a parent, it inherits position and orientation from that parent as prescribed by the Components flags. Otherwise, the Locator is absolute.
Definition at line 61 of file ObjectLocator.cpp.
{ if ( newParent == this ) { OE_WARN << LC << "Illegal state, locator cannot be its own parent." << std::endl; return; } _parentLoc = newParent; _componentsToInherit = inheritMask; if ( newParent ) { _map = newParent->_map.get(); } if ( !_map.valid() ) { OE_WARN << "Illegal state, cannot create a Locator with a NULL srs" << std::endl; } dirty(); }
void ObjectLocator::setPosition | ( | const osg::Vec3d & | pos | ) |
void osgEarth::Util::ObjectLocator::setRotationOrder | ( | RotationOrder | value | ) | [inline] |
The order in which to calculate heading, pitch, and roll rotations
Definition at line 75 of file ObjectLocator.
{ _rotOrder = value; }
void osgEarth::Util::ObjectLocator::setTime | ( | double | t | ) | [inline] |
The timestamp associated with this locator's position information. (Note: setting the time does not "dirty" the locator)
Definition at line 69 of file ObjectLocator.
{ _timestamp = t; }
unsigned int osgEarth::Util::ObjectLocator::_componentsToInherit [private] |
Definition at line 140 of file ObjectLocator.
osg::Vec3d osgEarth::Util::ObjectLocator::_hpr [private] |
Definition at line 143 of file ObjectLocator.
bool osgEarth::Util::ObjectLocator::_isEmpty [private] |
Definition at line 145 of file ObjectLocator.
osg::observer_ptr<const osgEarth::Map> osgEarth::Util::ObjectLocator::_map [private] |
Definition at line 138 of file ObjectLocator.
osg::ref_ptr<ObjectLocator> osgEarth::Util::ObjectLocator::_parentLoc [private] |
Definition at line 139 of file ObjectLocator.
osg::Vec3d osgEarth::Util::ObjectLocator::_pos [private] |
Definition at line 142 of file ObjectLocator.
Definition at line 141 of file ObjectLocator.
double osgEarth::Util::ObjectLocator::_timestamp [private] |
Definition at line 144 of file ObjectLocator.