Revision: 6816
http://playerstage.svn.sourceforge.net/playerstage/?rev=6816&view=rev
Author: jeremy_asher
Date: 2008-07-08 10:58:53 -0700 (Tue, 08 Jul 2008)
Log Message:
-----------
Tweaked camera reset code to fix a few bugs and improve functionality
Modified Paths:
--------------
code/stage/trunk/libstage/canvas.cc
code/stage/trunk/libstage/model.cc
code/stage/trunk/libstage/stage.hh
code/stage/trunk/worlds/fasr.world
Modified: code/stage/trunk/libstage/canvas.cc
===================================================================
--- code/stage/trunk/libstage/canvas.cc 2008-07-08 17:32:51 UTC (rev 6815)
+++ code/stage/trunk/libstage/canvas.cc 2008-07-08 17:58:53 UTC (rev 6816)
@@ -53,7 +53,7 @@
showTrailRise( "Trails/Rising blocks", "show_trailrise", "^r", false ),
showTrails( "Trails/Fast", "show_trailfast", "^f", false ),
showTree( "Debug/Tree", "show_tree", "^t", false ),
- perspectiveCam( "Perspective camera", "pcam_on", "r", false ),
+ pCamOn( "Perspective camera", "pcam_on", "r", false ),
visualizeAll( "Visualize All", "vis_all", "^v", true )
{
end();
@@ -64,6 +64,7 @@
this->world = world;
selected_models = NULL;
last_selection = NULL;
+ wf = NULL;
perspective_camera.setPose( 0.0, -4.0, 3.0 );
current_camera = &camera;
@@ -244,7 +245,7 @@
switch(event)
{
case FL_MOUSEWHEEL:
- if( perspectiveCam == true ) {
+ if( pCamOn == true ) {
perspective_camera.scroll( Fl::event_dy() / 10.0 );
}
else {
@@ -263,13 +264,13 @@
int dx = Fl::event_x() - startx;
int dy = Fl::event_y() - starty;
- if( perspectiveCam == true ) {
+ if( pCamOn == true ) {
perspective_camera.addYaw( -dx );
perspective_camera.addPitch( -dy );
}
else {
- camera.setPitch( - 0.5 *
static_cast<double>( dy ) );
- camera.setYaw( - 0.5 *
static_cast<double>( dx ) );
+ camera.addPitch( - 0.5 *
static_cast<double>( dy ) );
+ camera.addYaw( - 0.5 *
static_cast<double>( dx ) );
}
invalidate();
redraw();
@@ -279,7 +280,7 @@
int dx = Fl::event_x() - startx;
int dy = Fl::event_y() - starty;
- if( perspectiveCam == true ) {
+ if( pCamOn == true ) {
perspective_camera.move( -dx, dy, 0.0 );
}
else {
@@ -365,7 +366,7 @@
else {
// started dragging on empty space or an
// unselected model, move the canvas
- if( perspectiveCam == true ) {
+ if( pCamOn == true ) {
perspective_camera.move( -dx, dy, 0.0 );
}
else {
@@ -409,7 +410,9 @@
world->TogglePause();
break;
case ' ': // space bar
- camera.resetAngle();
+ //current_camera->reset();
+ if ( wf )
+ current_camera->Load( wf, wf->LookupEntity(
"window" ) );
//invalidate();
if( Fl::event_state( FL_CTRL ) ) {
resetCamera();
@@ -417,16 +420,16 @@
redraw();
break;
case FL_Left:
- if( perspectiveCam == false ) { camera.move( -10, 0 );
}
+ if( pCamOn == false ) { camera.move( -10, 0 ); }
else { perspective_camera.strafe( -0.5 ); } break;
case FL_Right:
- if( perspectiveCam == false ) {camera.move( 10, 0 ); }
+ if( pCamOn == false ) {camera.move( 10, 0 ); }
else { perspective_camera.strafe( 0.5 ); } break;
case FL_Down:
- if( perspectiveCam == false ) {camera.move( 0, -10 ); }
+ if( pCamOn == false ) {camera.move( 0, -10 ); }
else { perspective_camera.forward( -0.5 ); } break;
case FL_Up:
- if( perspectiveCam == false ) {camera.move( 0, 10 ); }
+ if( pCamOn == false ) {camera.move( 0, 10 ); }
else { perspective_camera.forward( 0.5 ); } break;
default:
return 0; // keypress unhandled
@@ -558,6 +561,8 @@
float scale_x = w() / (max_x - min_x) * 0.9;
float scale_y = h() / (max_y - min_y) * 0.9;
camera.setScale( scale_x < scale_y ? scale_x : scale_y );
+
+ //TODO reset perspective cam
}
void StgCanvas::renderFrame()
@@ -827,7 +832,7 @@
void StgCanvas::perspectiveCb( Fl_Widget* w, void* p )
{
StgCanvas* canvas = static_cast<StgCanvas*>( w );
- Option* opt = static_cast<Option*>( p ); // perspectiveCam
+ Option* opt = static_cast<Option*>( p ); // pCamOn
if ( opt ) {
// Perspective mode is on, change camera
canvas->current_camera = &canvas->perspective_camera;
@@ -851,8 +856,8 @@
showFootprints.createMenuItem( menu, path );
showGrid.createMenuItem( menu, path );
showStatus.createMenuItem( menu, path );
- perspectiveCam.createMenuItem( menu, path );
- perspectiveCam.menuCallback( perspectiveCb, this );
+ pCamOn.createMenuItem( menu, path );
+ pCamOn.menuCallback( perspectiveCb, this );
showOccupancy.createMenuItem( menu, path );
showTrailArrows.createMenuItem( menu, path );
showTrails.createMenuItem( menu, path );
@@ -864,6 +869,7 @@
void StgCanvas::Load( Worldfile* wf, int sec )
{
+ this->wf = wf;
camera.Load( wf, sec );
perspective_camera.Load( wf, sec );
@@ -882,7 +888,7 @@
showTrails.Load( wf, sec );
showTree.Load( wf, sec );
showScreenshots.Load( wf, sec );
- perspectiveCam.Load( wf, sec );
+ pCamOn.Load( wf, sec );
invalidate(); // we probably changed something
}
@@ -907,7 +913,7 @@
showTrails.Save( wf, sec );
showTree.Save( wf, sec );
showScreenshots.Save( wf, sec );
- perspectiveCam.Save( wf, sec );
+ pCamOn.Save( wf, sec );
}
@@ -916,7 +922,7 @@
static bool loaded_texture = false;
//Enable the following to debug camera model
- // if( loaded_texture == true && perspectiveCam == true )
+ // if( loaded_texture == true && pCamOn == true )
// return;
if (!valid() )
@@ -987,7 +993,7 @@
// install a font
gl_font( FL_HELVETICA, 12 );
- if( perspectiveCam == true ) {
+ if( pCamOn == true ) {
perspective_camera.setAspect( static_cast< float >( w() ) /
static_cast< float >( h() ) );
perspective_camera.SetProjection();
current_camera = &perspective_camera;
@@ -1005,7 +1011,7 @@
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
- if( perspectiveCam == true ) {
+ if( pCamOn == true ) {
if( showFollow && last_selection ) {
//Follow the selected robot
stg_pose_t gpose = last_selection->GetGlobalPose();
Modified: code/stage/trunk/libstage/model.cc
===================================================================
--- code/stage/trunk/libstage/model.cc 2008-07-08 17:32:51 UTC (rev 6815)
+++ code/stage/trunk/libstage/model.cc 2008-07-08 17:58:53 UTC (rev 6816)
@@ -1012,7 +1012,7 @@
{
float stheta = dtor( canvas->current_camera->pitch() );
float sphi = - dtor( canvas->current_camera->yaw() );
- if( canvas->perspectiveCam == true ) {
+ if( canvas->pCamOn == true ) {
sphi = atan2(
( pose.x -
canvas->current_camera->x() )
,
Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh 2008-07-08 17:32:51 UTC (rev 6815)
+++ code/stage/trunk/libstage/stage.hh 2008-07-08 17:58:53 UTC (rev 6816)
@@ -1798,6 +1798,9 @@
inline float x( void ) const { return _x; }
inline float y( void ) const { return _y; }
inline float z( void ) const { return _z; }
+
+ virtual void reset() = 0;
+ virtual void Load( Worldfile* wf, int sec ) = 0;
//TODO data should be passed in somehow else. (at least min/max
stuff)
//virtual void SetProjection( float pixels_width, float
pixels_height, float y_min, float y_max ) const = 0;
@@ -1850,6 +1853,8 @@
inline float farClip( void ) const { return _z_far; }
inline void setClip( float near, float far ) { _z_far = far;
_z_near = near; }
+ inline void reset() { setPitch( 70 ); setYaw( 0 ); }
+
void Load( Worldfile* wf, int sec );
void Save( Worldfile* wf, int sec );
};
@@ -1871,8 +1876,10 @@
virtual void SetProjection( void ) const;
void move( float x, float y );
- inline void setYaw( float yaw ) { _yaw += yaw; }
- inline void setPitch( float pitch ) {
+ inline void setYaw( float yaw ) { _yaw = yaw; }
+ inline void setPitch( float pitch ) { _pitch = pitch; }
+ inline void addYaw( float yaw ) { _yaw += yaw; }
+ inline void addPitch( float pitch ) {
_pitch += pitch;
if( _pitch > 90 )
_pitch = 90;
@@ -1884,7 +1891,7 @@
inline void setPose( float x, float y) { _x = x; _y = y; }
void scale( float scale, float shift_x = 0, float h = 0, float
shift_y = 0, float w = 0 );
- inline void resetAngle( void ) { _pitch = _yaw = 0; }
+ inline void reset( void ) { _pitch = _yaw = 0; }
inline float scale() const { return _scale; }
@@ -1904,7 +1911,8 @@
StgCamera* current_camera;
StgOrthoCamera camera;
StgPerspectiveCamera perspective_camera;
- bool dirty_buffer;
+ bool dirty_buffer;
+ Worldfile* wf;
int startx, starty;
bool selectedModel;
@@ -1939,7 +1947,7 @@
showTrailRise,
showTrails,
showTree,
- perspectiveCam,
+ pCamOn,
visualizeAll;
public:
Modified: code/stage/trunk/worlds/fasr.world
===================================================================
--- code/stage/trunk/worlds/fasr.world 2008-07-08 17:32:51 UTC (rev 6815)
+++ code/stage/trunk/worlds/fasr.world 2008-07-08 17:58:53 UTC (rev 6816)
@@ -2,9 +2,9 @@
# Authors: Richard Vaughanwo
# $Id: fasr.world,v 1.4 2008-04-01 23:57:41 rtv Exp $
-include "inc/pioneer.inc"
-include "inc/map.inc"
-include "inc/sick.inc"
+include "pioneer.inc"
+include "map.inc"
+include "sick.inc"
interval_sim 100 # simulation timestep in milliseconds
interval_real 10 # real-time interval between simulation updates in
milliseconds
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
-------------------------------------------------------------------------
Sponsored by: SourceForge.net Community Choice Awards: VOTE NOW!
Studies have shown that voting for your favorite open source project,
along with a healthy diet, reduces your potential for chronic lameness
and boredom. Vote Now at http://www.sourceforge.net/community/cca08
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit