Revision: 6848
http://playerstage.svn.sourceforge.net/playerstage/?rev=6848&view=rev
Author: natepak
Date: 2008-07-11 13:04:18 -0700 (Fri, 11 Jul 2008)
Log Message:
-----------
Gui can be configured via xml
Modified Paths:
--------------
code/gazebo/trunk/doc/xmltags.html
code/gazebo/trunk/server/Simulator.cc
code/gazebo/trunk/server/gui/GLFrame.cc
code/gazebo/trunk/server/gui/GLFrame.hh
code/gazebo/trunk/server/gui/GLFrameManager.cc
code/gazebo/trunk/server/gui/GLFrameManager.hh
code/gazebo/trunk/server/gui/GLWindow.cc
code/gazebo/trunk/server/gui/GLWindow.hh
code/gazebo/trunk/server/gui/Gui.cc
code/gazebo/trunk/server/gui/Gui.hh
code/gazebo/trunk/worlds/pioneer2dx.world
code/gazebo/trunk/worlds/stereocamera.world
code/gazebo/trunk/worlds/test.world
Modified: code/gazebo/trunk/doc/xmltags.html
===================================================================
--- code/gazebo/trunk/doc/xmltags.html 2008-07-11 19:51:49 UTC (rev 6847)
+++ code/gazebo/trunk/doc/xmltags.html 2008-07-11 20:04:18 UTC (rev 6848)
@@ -35,6 +35,8 @@
<linearStart>#</linearStart> <!-- Distance at which the fog starts -->
<linearEnd>#</linearEnd> <!-- Distance at which the fog reaches full
density-->
</fog>
+
+ <grid>true|false</grid> <!-- Enable / disable the ground plane grid -->
</rendering:ogre>
<!-- A model. There is no limit to the number of models in a world-->
Modified: code/gazebo/trunk/server/Simulator.cc
===================================================================
--- code/gazebo/trunk/server/Simulator.cc 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/server/Simulator.cc 2008-07-11 20:04:18 UTC (rev
6848)
@@ -146,14 +146,12 @@
int height = childNode->GetTupleInt("size",1,480);
int x = childNode->GetTupleInt("pos",0,0);
int y = childNode->GetTupleInt("pos",1,0);
- std::string type = childNode->GetString("type","fltk",1);
- gzmsg(1) << "Creating GUI:\n\tType[" << type
- << "] Pos[" << x << " " << y
- << "] Size[" << width << " " << height << "]\n";
+ //gzmsg(1) << "Creating GUI: Pos[" << x << " " << y << "] Size[" <<
width << " " << height << "]\n";
// Create the GUI
- this->gui = new Gui(x, y, width, height, type+"::Gazebo");
+ this->gui = new Gui(x, y, width, height, "Gazebo");
+ this->gui->Load(childNode);
}
}
catch (GazeboError e)
Modified: code/gazebo/trunk/server/gui/GLFrame.cc
===================================================================
--- code/gazebo/trunk/server/gui/GLFrame.cc 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/server/gui/GLFrame.cc 2008-07-11 20:04:18 UTC (rev
6848)
@@ -26,6 +26,7 @@
#include <boost/bind.hpp>
+#include "XMLConfig.hh"
#include "CameraManager.hh"
#include "Global.hh"
#include "Pose3d.hh"
@@ -90,6 +91,10 @@
this->resizable(NULL);
this->resizable(this->glWindow);
+
+ // Set default starting pose of the camera
+ this->startPose.pos.Set(-2, 0, 2);
+ this->startPose.rot.SetFromEuler( Vector3(0, DTOR(30), 0) );
}
////////////////////////////////////////////////////////////////////////////////
@@ -99,10 +104,24 @@
}
////////////////////////////////////////////////////////////////////////////////
+// Load the frame
+void GLFrame::Load( XMLConfigNode *node )
+{
+
+ if (node)
+ {
+ this->startPose.pos = node->GetVector3("xyz", Vector3(0,0,0));
+ this->startPose.rot = node->GetRotation("rpy", Quatern());
+ }
+
+}
+
+////////////////////////////////////////////////////////////////////////////////
// Initialize the frame
void GLFrame::Init()
{
this->glWindow->Init();
+ this->glWindow->GetCamera()->SetWorldPose(this->startPose);
CameraManager::Instance()->ConnectAddCameraSignal(
boost::bind(&GLFrame::CameraAddedSlot, this, _1) );
}
@@ -163,13 +182,12 @@
// Switch view callback
void GLFrame::ViewCB(Fl_Widget *widget, void *data)
{
- /*GLFrame *frame = reinterpret_cast<GLFrame *>(data);
+ GLFrame *frame = reinterpret_cast<GLFrame *>(data);
Fl_Choice *choice = dynamic_cast<Fl_Choice *>(widget);
CameraManager *manager = CameraManager::Instance();
OgreCamera *cam = manager->GetCamera(choice->text());
- frame->glWindow->SetActiveCamera( cam );
- */
+ frame->glWindow->SetViewStyle(choice->text());
}
////////////////////////////////////////////////////////////////////////////////
Modified: code/gazebo/trunk/server/gui/GLFrame.hh
===================================================================
--- code/gazebo/trunk/server/gui/GLFrame.hh 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/server/gui/GLFrame.hh 2008-07-11 20:04:18 UTC (rev
6848)
@@ -39,6 +39,7 @@
{
class GLWindow;
class OgreCamera;
+ class XMLConfigNode;
class GLFrame : public Fl_Group
{
@@ -48,6 +49,9 @@
/// \brief Destructor
public: virtual ~GLFrame();
+ /// \brief Load the frame
+ public: void Load( XMLConfigNode *node );
+
/// \brief Initialize
public: void Init();
@@ -89,6 +93,9 @@
private: Fl_Output *outputXYZ;
private: Fl_Output *outputRPY;
+
+ /// Starting pose of the camera
+ private: Pose3d startPose;
};
}
Modified: code/gazebo/trunk/server/gui/GLFrameManager.cc
===================================================================
--- code/gazebo/trunk/server/gui/GLFrameManager.cc 2008-07-11 19:51:49 UTC
(rev 6847)
+++ code/gazebo/trunk/server/gui/GLFrameManager.cc 2008-07-11 20:04:18 UTC
(rev 6848)
@@ -24,6 +24,8 @@
* SVN: $Id:$
*/
+#include "XMLConfig.hh"
+
#include "GLFrame.hh"
#include "GLWindow.hh"
#include "GLFrameManager.hh"
@@ -34,12 +36,13 @@
// Constructor
GLFrameManager::GLFrameManager(int x, int y, int w, int h, const std::string
&name) : Fl_Tile(x,y,w,h, name.c_str())
{
- GLFrame *frame = NULL;
+ //GLFrame *frame = NULL;
// Create a deafult view
- frame = new GLFrame(x, y, w, h,"");
+ /*frame = new GLFrame(x, y, w, h,"");
this->frames.push_back(frame);
this->add(frame);
+ */
this->end();
@@ -59,11 +62,77 @@
}
+void GLFrameManager::Load( XMLConfigNode *node )
+{
+ GLFrame *frame = NULL;
+ int windowCount = 0;
+ XMLConfigNode *rowNode = NULL;
+ XMLConfigNode *camNode = NULL;
+
+ if (node)
+ {
+ rowNode = node->GetChild("row");
+
+ float frameHeight, frameWidth;
+ int width = this->w();
+ int height = this->h();
+ int x = this->x();
+ int y = this->y();
+
+ // Process each row
+ while (rowNode)
+ {
+ camNode = rowNode->GetChild("camera");
+
+ std::string heightStr = rowNode->GetString("height","",1);
+
+ frameHeight = atof( heightStr.substr(0, heightStr.find( "%", 0 )
).c_str() );
+
+ frameHeight = frameHeight/100.0 * height;
+
+ // Process each camera
+ while (camNode)
+ {
+ std::string widthStr = camNode->GetString("width","",1);
+ frameWidth = atof( widthStr.substr(0, widthStr.find( "%", 0 )
).c_str() );
+
+ frameWidth = frameWidth/100.0 * width;
+
+ windowCount = this->children();
+
+ // Create the frame
+ frame = new GLFrame( x, y, (int)frameWidth, (int)frameHeight, "" );
+ frame->Load(camNode);
+
+ this->frames.push_back( frame );
+ this->insert(*frame, windowCount);
+
+ x += (int)frameWidth;
+
+ camNode = camNode->GetNext();
+ }
+
+ y += (int)frameHeight;
+ x = this->x();
+
+ rowNode = rowNode->GetNext();
+ }
+ }
+
+ // Create a big default window if no frames have been defined
+ if (this->frames.size() == 0)
+ {
+ frame = new GLFrame( this->x(), this->y(), this->w(), this->h(), "" );
+ this->frames.push_back( frame );
+ this->insert(*frame, windowCount);
+ }
+
+}
+
////////////////////////////////////////////////////////////////////////////////
/// Initalize the window manager
void GLFrameManager::Init()
{
-
std::vector<GLFrame *>::iterator iter;
for (iter = this->frames.begin(); iter != this->frames.end(); iter++)
{
@@ -83,6 +152,7 @@
}
}
+
////////////////////////////////////////////////////////////////////////////////
// Split a frame
void GLFrameManager::Split(GLFrame *parent, const std::string &type)
Modified: code/gazebo/trunk/server/gui/GLFrameManager.hh
===================================================================
--- code/gazebo/trunk/server/gui/GLFrameManager.hh 2008-07-11 19:51:49 UTC
(rev 6847)
+++ code/gazebo/trunk/server/gui/GLFrameManager.hh 2008-07-11 20:04:18 UTC
(rev 6848)
@@ -34,6 +34,7 @@
{
class GLFrame;
class GLWindow;
+ class XMLConfigNode;
/// \brief Class to manage all the GL frames
class GLFrameManager : public Fl_Tile
@@ -44,6 +45,9 @@
/// \brief Destructor
public: virtual ~GLFrameManager();
+ /// \brief Load the frame manager
+ public: void Load( XMLConfigNode *node );
+
/// \brief Initalize the window manager
public: void Init();
Modified: code/gazebo/trunk/server/gui/GLWindow.cc
===================================================================
--- code/gazebo/trunk/server/gui/GLWindow.cc 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/server/gui/GLWindow.cc 2008-07-11 20:04:18 UTC (rev
6848)
@@ -445,3 +445,26 @@
{
this->activeCamera = camera;
}
+
+////////////////////////////////////////////////////////////////////////////////
+/// Set the style of the view = "front, left, top, user"
+void GLWindow::SetViewStyle(std::string view)
+{
+ UserCamera *cam = this->GetCamera();
+ Pose3d pose = cam->GetWorldPose();
+
+ if (view == "Top")
+ {
+ pose.rot.SetFromEuler( Vector3(0, DTOR(90), 0) );
+ }
+ else if (view == "Left")
+ {
+ pose.rot.SetFromEuler( Vector3(0, 0, DTOR(90) ) );
+ }
+ else if (view == "Front")
+ {
+ pose.rot.SetFromEuler( Vector3(0, 0,0) );
+ }
+
+ cam->SetWorldPose( pose );
+}
Modified: code/gazebo/trunk/server/gui/GLWindow.hh
===================================================================
--- code/gazebo/trunk/server/gui/GLWindow.hh 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/server/gui/GLWindow.hh 2008-07-11 20:04:18 UTC (rev
6848)
@@ -95,6 +95,9 @@
/// \brief Set the active camera
public: void SetActiveCamera( OgreCamera *camera );
+ /// \brief Set the style of the view = "front, left, top, user"
+ public: void SetViewStyle(std::string view);
+
/// \brief Handle a mouse button push
private: void HandleMousePush();
Modified: code/gazebo/trunk/server/gui/Gui.cc
===================================================================
--- code/gazebo/trunk/server/gui/Gui.cc 2008-07-11 19:51:49 UTC (rev 6847)
+++ code/gazebo/trunk/server/gui/Gui.cc 2008-07-11 20:04:18 UTC (rev 6848)
@@ -31,6 +31,7 @@
#include <FL/Fl_Choice.H>
#include "Global.hh"
+#include "XMLConfig.hh"
#include "GLFrameManager.hh"
#include "OgreAdaptor.hh"
#include "OgreCreator.hh"
@@ -64,7 +65,6 @@
this->statusbar->gui = this;
}
-
// Create the toolbar
//this->toolbar = new Toolbar(this->w()-200, 30, 200, this->h()-60);
@@ -92,6 +92,13 @@
}
////////////////////////////////////////////////////////////////////////////////
+/// Load the gui
+void Gui::Load( XMLConfigNode *node )
+{
+ this->frameMgr->Load( node->GetChild("frames") );
+}
+
+////////////////////////////////////////////////////////////////////////////////
/// Initalize the gui
void Gui::Init()
{
Modified: code/gazebo/trunk/server/gui/Gui.hh
===================================================================
--- code/gazebo/trunk/server/gui/Gui.hh 2008-07-11 19:51:49 UTC (rev 6847)
+++ code/gazebo/trunk/server/gui/Gui.hh 2008-07-11 20:04:18 UTC (rev 6848)
@@ -42,6 +42,7 @@
class Toolbar;
class StatusBar;
class GLFrameManager;
+ class XMLConfigNode;
/// \brief FLTK Main Window
class Gui : public Fl_Window
@@ -52,6 +53,9 @@
/// \brief Destructor
public: virtual ~Gui();
+ /// \brief Load the gui
+ public: virtual void Load(XMLConfigNode *node);
+
/// \brief Initalize the gui
public: virtual void Init();
Modified: code/gazebo/trunk/worlds/pioneer2dx.world
===================================================================
--- code/gazebo/trunk/worlds/pioneer2dx.world 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/worlds/pioneer2dx.world 2008-07-11 20:04:18 UTC (rev
6848)
@@ -30,6 +30,8 @@
<type>fltk</type>
<size>800 600</size>
<pos>0 0</pos>
+ <xyz>0 0 0</xyz>
+ <rpy>0 0 0</rpy>
</rendering:gui>
<rendering:ogre>
Modified: code/gazebo/trunk/worlds/stereocamera.world
===================================================================
--- code/gazebo/trunk/worlds/stereocamera.world 2008-07-11 19:51:49 UTC (rev
6847)
+++ code/gazebo/trunk/worlds/stereocamera.world 2008-07-11 20:04:18 UTC (rev
6848)
@@ -105,10 +105,10 @@
<saveFramePath>frames</saveFramePath>
<baseline>0.2</baseline>
- <controller:stereo_camera name="stereo_camera_controller">
+ <controller:stereocamera name="stereo_camera_controller">
<interface:stereocamera name="stereo_iface_0" />
<interface:camera name="camera_iface_0" />
- </controller:stereo_camera>
+ </controller:stereocamera>
</sensor:stereocamera>
</body:empty>
</model:physical>
Modified: code/gazebo/trunk/worlds/test.world
===================================================================
--- code/gazebo/trunk/worlds/test.world 2008-07-11 19:51:49 UTC (rev 6847)
+++ code/gazebo/trunk/worlds/test.world 2008-07-11 20:04:18 UTC (rev 6848)
@@ -27,9 +27,30 @@
</physics:ode>
<rendering:gui>
- <type>fltk</type>
<size>800 600</size>
- <pos>0 0</pos>
+ <pos>100 100</pos>
+ <frames>
+ <row height="50%">
+ <camera width="50%">
+ <xyz>-1 0 4</xyz>
+ <rpy>0 34 0</rpy>
+ </camera>
+ <camera width="50%">
+ <xyz>0 0 10</xyz>
+ <rpy>0 90 0</rpy>
+ </camera>
+ </row>
+ <row height="50%">
+ <camera width="50%">
+ <xyz>0 0 0</xyz>
+ <rpy>0 0 0</rpy>
+ </camera>
+ <camera width="50%">
+ <xyz>10 0 1</xyz>
+ <rpy>0 0 90</rpy>
+ </camera>
+ </row>
+ </frames>
</rendering:gui>
<rendering:ogre>
@@ -62,22 +83,22 @@
</body:plane>
</model:physical>
- <model:physical name="cylinder1_model">
- <xyz>1 -1.5 0.5</xyz>
+ <model:physical name="sphere1_model">
+ <xyz>2.15 -1.68 .7</xyz>
<rpy>0.0 0.0 0.0</rpy>
+ <static>true</static>
- <body:cylinder name="cylinder1_body">
- <geom:cylinder name="cylinder1_geom">
- <size>0.5 1</size>
- <mass>1.0</mass>
- <laserFiducialId>1</laserFiducialId>
-
+ <body:sphere name="sphere1_body">
+ <geom:sphere name="sphere1_geom">
+ <size>0.1</size>
+
<visual>
- <mesh>unit_cylinder</mesh>
- <material>Gazebo/RustyBarrel</material>
+ <scale>0.1 0.1 0.1</scale>
+ <mesh>unit_sphere</mesh>
+ <material>Gazebo/Rocky</material>
</visual>
- </geom:cylinder>
- </body:cylinder>
+ </geom:sphere>
+ </body:sphere>
</model:physical>
@@ -97,7 +118,7 @@
<controller:differential_position2d name="controller1">
<leftJoint>left_wheel_hinge</leftJoint>
<rightJoint>right_wheel_hinge</rightJoint>
- <wheelSeparation>0.34</wheelSeparation>
+ <wheelSeparation>0.39</wheelSeparation>
<wheelDiameter>0.15</wheelDiameter>
<torque>5</torque>
<interface:position name="position_iface_0"/>
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