1 // placement.cxx - 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 #include <simgear_config.h>
10 #include <simgear/compiler.h>
12 #include <string.h> // for strcmp()
18 #include "location.hxx"
19 #include "placementtrans.hxx"
21 #include "placement.hxx"
25 ////////////////////////////////////////////////////////////////////////
26 // Implementation of SGModelPlacement.
27 ////////////////////////////////////////////////////////////////////////
29 SGModelPlacement::SGModelPlacement ()
36 _selector(new ssgSelector),
37 _position(new ssgPlacementTransform),
38 _location(new SGLocation)
42 SGModelPlacement::~SGModelPlacement ()
47 SGModelPlacement::init( ssgBranch * model )
50 _position->addKid(model);
52 _selector->addKid(_position);
53 _selector->clrTraversalMaskBits(SSGTRAV_HOT);
57 SGModelPlacement::update()
59 _location->setPosition( _lon_deg, _lat_deg, _elev_ft );
60 _location->setOrientation( _roll_deg, _pitch_deg, _heading_deg );
63 sgCopyMat4( rotation, _location->getTransformMatrix() );
64 _position->setTransform(_location->get_absolute_view_pos(), rotation);
68 SGModelPlacement::getVisible () const
70 return (_selector->getSelect() != 0);
74 SGModelPlacement::setVisible (bool visible)
76 _selector->select(visible);
80 SGModelPlacement::setLongitudeDeg (double lon_deg)
86 SGModelPlacement::setLatitudeDeg (double lat_deg)
92 SGModelPlacement::setElevationFt (double elev_ft)
98 SGModelPlacement::setPosition (double lon_deg, double lat_deg, double elev_ft)
106 SGModelPlacement::setRollDeg (double roll_deg)
108 _roll_deg = roll_deg;
112 SGModelPlacement::setPitchDeg (double pitch_deg)
114 _pitch_deg = pitch_deg;
118 SGModelPlacement::setHeadingDeg (double heading_deg)
120 _heading_deg = heading_deg;
124 SGModelPlacement::setOrientation (double roll_deg, double pitch_deg,
127 _roll_deg = roll_deg;
128 _pitch_deg = pitch_deg;
129 _heading_deg = heading_deg;