Revision: 7110
          http://playerstage.svn.sourceforge.net/playerstage/?rev=7110&view=rev
Author:   natepak
Date:     2008-10-21 21:46:11 +0000 (Tue, 21 Oct 2008)

Log Message:
-----------
Added the ability to save frames from a user camera

Modified Paths:
--------------
    code/gazebo/trunk/server/gui/GLFrame.cc
    code/gazebo/trunk/server/gui/GLFrame.hh
    code/gazebo/trunk/server/rendering/OgreCamera.cc
    code/gazebo/trunk/server/rendering/OgreCamera.hh
    code/gazebo/trunk/server/rendering/UserCamera.cc
    code/gazebo/trunk/server/rendering/UserCamera.hh

Modified: code/gazebo/trunk/server/gui/GLFrame.cc
===================================================================
--- code/gazebo/trunk/server/gui/GLFrame.cc     2008-10-20 20:02:26 UTC (rev 
7109)
+++ code/gazebo/trunk/server/gui/GLFrame.cc     2008-10-21 21:46:11 UTC (rev 
7110)
@@ -107,11 +107,14 @@
 // Load the frame
 void GLFrame::Load( XMLConfigNode *node )
 {
+  this->saveFrames = false;
 
   if (node)
   {
     this->startPose.pos = node->GetVector3("xyz", Vector3(0,0,0));
     this->startPose.rot = node->GetRotation("rpy", Quatern());
+    this->saveFrames = node->GetBool("saveFrames",false,0);
+    this->savePathname = node->GetString("saveFramePath","",0);
   }
 
 }
@@ -122,6 +125,8 @@
 {
   this->glWindow->Init();
   this->glWindow->GetCamera()->SetWorldPose(this->startPose);
+  this->glWindow->GetCamera()->EnableSaveFrame(this->saveFrames);
+  this->glWindow->GetCamera()->SetSaveFramePathname(this->savePathname);
 
   CameraManager::Instance()->ConnectAddCameraSignal( 
boost::bind(&GLFrame::CameraAddedSlot, this, _1) );
 }

Modified: code/gazebo/trunk/server/gui/GLFrame.hh
===================================================================
--- code/gazebo/trunk/server/gui/GLFrame.hh     2008-10-20 20:02:26 UTC (rev 
7109)
+++ code/gazebo/trunk/server/gui/GLFrame.hh     2008-10-21 21:46:11 UTC (rev 
7110)
@@ -96,6 +96,9 @@
 
     /// Starting pose of the camera
     private: Pose3d startPose;
+
+    private: bool saveFrames;
+    private: std::string savePathname;
   };
 }
 

Modified: code/gazebo/trunk/server/rendering/OgreCamera.cc
===================================================================
--- code/gazebo/trunk/server/rendering/OgreCamera.cc    2008-10-20 20:02:26 UTC 
(rev 7109)
+++ code/gazebo/trunk/server/rendering/OgreCamera.cc    2008-10-21 21:46:11 UTC 
(rev 7110)
@@ -313,6 +313,21 @@
 }
 
 //////////////////////////////////////////////////////////////////////////////
+// Set the save frame pathname
+void OgreCamera::SetSaveFramePathname(const std::string &pathname)
+{
+  this->savePathnameP->SetValue( pathname );
+
+  // Create the directory to store frames
+  if (this->saveFramesP->GetValue())
+  {
+    std::string command;
+    command = "mkdir " + this->savePathnameP->GetValue() + " 2>>/dev/null";
+    system(command.c_str());
+  }
+}
+
+//////////////////////////////////////////////////////////////////////////////
 /// Toggle saving of frames
 void OgreCamera::ToggleSaveFrame()
 {

Modified: code/gazebo/trunk/server/rendering/OgreCamera.hh
===================================================================
--- code/gazebo/trunk/server/rendering/OgreCamera.hh    2008-10-20 20:02:26 UTC 
(rev 7109)
+++ code/gazebo/trunk/server/rendering/OgreCamera.hh    2008-10-21 21:46:11 UTC 
(rev 7110)
@@ -141,7 +141,10 @@
   
     /// \brief Enable or disable saving
     public: void EnableSaveFrame(bool enable);
-  
+ 
+    /// \brief Set the save frame pathname
+    public: void SetSaveFramePathname(const std::string &pathname);
+
     /// \brief Toggle saving of frames
     public: void ToggleSaveFrame();
   

Modified: code/gazebo/trunk/server/rendering/UserCamera.cc
===================================================================
--- code/gazebo/trunk/server/rendering/UserCamera.cc    2008-10-20 20:02:26 UTC 
(rev 7109)
+++ code/gazebo/trunk/server/rendering/UserCamera.cc    2008-10-21 21:46:11 UTC 
(rev 7110)
@@ -36,13 +36,21 @@
 
 using namespace gazebo;
 
+int UserCamera::count = 0;
+
 
////////////////////////////////////////////////////////////////////////////////
 /// Constructor
 UserCamera::UserCamera(GLWindow *parentWindow)
   : OgreCamera("UserCamera")
 {
+  std::stringstream stream;
+
   this->window = OgreCreator::CreateWindow(parentWindow, 
                      parentWindow->w(), parentWindow->h());
+
+
+  stream << "UserCamera_" << this->count++;
+  this->name = stream.str(); 
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -75,6 +83,7 @@
   this->SetAspectRatio( Ogre::Real(this->viewport->getActualWidth()) / 
Ogre::Real(this->viewport->getActualHeight()) );
 
   this->viewport->setVisibilityMask(this->visibilityMask);
+
 }
 
 
////////////////////////////////////////////////////////////////////////////////
@@ -84,6 +93,25 @@
   OgreCamera::UpdateCam();
 
   OgreAdaptor::Instance()->UpdateWindow(this->window, this);
+
+
+  if (this->saveFramesP->GetValue())
+  {
+    char tmp[1024];
+    if (!this->savePathnameP->GetValue().empty())
+    {
+      sprintf(tmp, "%s/%s-%04d.jpg", this->savePathnameP->GetValue().c_str(),
+          this->name.c_str(), this->saveCount);
+    }
+    else
+    {
+      sprintf(tmp, "%s-%04d.jpg", this->name.c_str(), this->saveCount);
+    }
+
+    this->window->writeContentsToFile(tmp);
+
+    this->saveCount++;
+  }
 }
 
 

Modified: code/gazebo/trunk/server/rendering/UserCamera.hh
===================================================================
--- code/gazebo/trunk/server/rendering/UserCamera.hh    2008-10-20 20:02:26 UTC 
(rev 7109)
+++ code/gazebo/trunk/server/rendering/UserCamera.hh    2008-10-21 21:46:11 UTC 
(rev 7110)
@@ -80,6 +80,7 @@
 
     private: std::string name;
     private: static unsigned int cameraCount;
+    private: static int count;
   };
 }
 


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Playerstage-commit mailing list
Playerstage-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/playerstage-commit

Reply via email to