1 // placement.hxx - manage the placment of a 3D model.
2 // Written by David Megginson, started 2002.
4 // This file is in the Public Domain, and comes with no warranty.
7 #ifndef _SG_PLACEMENT_HXX
8 #define _SG_PLACEMENT_HXX 1
11 # error This library requires C++
14 #include <osg/ref_ptr>
18 #include <simgear/props/props.hxx>
20 #include "placementtrans.hxx"
22 // Has anyone done anything *really* stupid, like making min and max macros?
31 ////////////////////////////////////////////////////////////////////////
33 ////////////////////////////////////////////////////////////////////////
36 * A wrapper for a model with a definite placement.
38 class SGModelPlacement
43 virtual ~SGModelPlacement ();
45 virtual void init( osg::Node* model );
47 virtual void update();
49 virtual osg::Node* getSceneGraph () { return _selector.get(); }
51 virtual bool getVisible () const;
52 virtual void setVisible (bool visible);
54 virtual double getLongitudeDeg () const { return _position.getLongitudeDeg(); }
55 virtual double getLatitudeDeg () const { return _position.getLatitudeDeg(); }
56 virtual double getElevationFt () const { return _position.getElevationFt(); }
58 virtual void setLongitudeDeg (double lon_deg);
59 virtual void setLatitudeDeg (double lat_deg);
60 virtual void setElevationFt (double elev_ft);
61 virtual void setPosition (double lon_deg, double lat_deg, double elev_ft);
62 void setPosition(const SGGeod& position);
63 const SGGeod& getPosition() const { return _position; }
65 virtual double getRollDeg () const { return _roll_deg; }
66 virtual double getPitchDeg () const { return _pitch_deg; }
67 virtual double getHeadingDeg () const { return _heading_deg; }
69 virtual void setRollDeg (double roll_deg);
70 virtual void setPitchDeg (double pitch_deg);
71 virtual void setHeadingDeg (double heading_deg);
72 virtual void setOrientation (double roll_deg, double pitch_deg,
74 void setOrientation(const SGQuatd& orientation);
76 void setReferenceTime(const double& referenceTime);
77 void setBodyLinearVelocity(const SGVec3d& velocity);
78 void setBodyAngularVelocity(const SGVec3d& velocity);
90 osg::ref_ptr<osg::Switch> _selector;
91 osg::ref_ptr<SGPlacementTransform> _transform;
94 #endif // _SG_PLACEMENT_HXX