topical media & game development

talk show tell print

lib-game-delta3d-sdk-examples-testRecorder-camerarecorderadaptor.cpp / cpp



  
////////////////////////////////////////////////////////////////////////

// NOTE - This test is provided for historical reference. The ability to // record and playback is provided via the AAR Record and Playback // components in dtGame. See testAAR for a example of using this behavior.
////////////////////////////////////////////////////////////////////////

\author John K. Grant \date August 26, 2005 \file CameraRecorderAdaptor.h

  
  include <camerarecorderadaptor.h>
  include <osgserializer.h>
  
  include <dtCore/camera.h>
  include <dtCore/transform.h>
  include <dtUtil/log.h>
  include <dtUtil/xerceswriter.h>
  include <dtUtil/xercesutils.h>
  
  include <xercesc/dom/DOMDocument.hpp>
  include <xercesc/dom/DOMElement.hpp>
  
  include <functional>
  
  XERCES_CPP_NAMESPACE_USE
  
  // -- CameraRecorderAdaptor implementation -- //
  CameraRecorderAdaptor::CameraRecorderAdaptor(dtCore::Camera* cam)
     : BaseClass("CameraRecorderAdaptor")
     , mCamera(cam)
  {
     OSGSerializer::Initialize();
  }
  
  CameraRecorderAdaptor::~CameraRecorderAdaptor()
  {
  }
  
  CameraRecorderAdaptor::FrameData* CameraRecorderAdaptor::CreateFrameData() const
  {
     dtCore::Transform xform;
     mCamera->GetTransform(xform);
  
     FrameData* fd = new FrameData();
     xform.Get(fd->mMatrix);
     return fd;
  }
  
  void CameraRecorderAdaptor::UseFrameData(const FrameData* d)
  {
     dtCore::Transform xform;
     mCamera->GetTransform(xform);
     xform.Set(d->mMatrix);
     mCamera->SetTransform(xform);
  }
  
  CameraRecorderAdaptor::FrameData* CameraRecorderAdaptor::Deserialize(XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* doc,
                                                                       XERCES_CPP_NAMESPACE_QUALIFIER DOMElement* adaptor) const
  {
     char* nodename = XMLString::transcode( adaptor->getNodeName());
     std::string nname(nodename);
     XMLString::release(&nodename);
     LOG_INFO("Deserializing Node: " + nname)
  
     // what to do with this data?  pack it into the FrameData packet? probably yes.
     std::string cameraname = dtUtil::FindAttributeValueFor("Name", adaptor->getAttributes());
  
     XERCES_CPP_NAMESPACE_QUALIFIER DOMTreeWalker* adaptorwalker = doc->createTreeWalker(adaptor,
                                                                                         DOMNodeFilter::SHOW_ELEMENT,
                                                                                         0, true);
  
     FrameData* fd(0);
     for (XERCES_CPP_NAMESPACE_QUALIFIER DOMNode* child=adaptorwalker->firstChild();
          child != 0;
          child=adaptorwalker->nextSibling())
     {
        DOMElement* element = static_cast<XERCES_CPP_NAMESPACE_QUALIFIER DOMElement*>( child );
        char* childname = XMLString::transcode(child->getNodeName());
        std::string cname(childname);
        XMLString::release(&childname);
  
        if (cname == "OSGMatrix")
        {
           LOG_INFO("Attempting to decode: " + cname)
           fd = new FrameData( OSGSerializer::OSGMatrix(element));
           break;
        }
     }
  
     //DOMNodeList* children = adaptor->getChildNodes();
     //unsigned int n = children->getLength();
  
     //if ( n > 0 )
     //{
     //   DOMNode* child = children->item(0);
     //   DOMElement* element = static_cast<DOMElement*>( child );
     //   fd = new FrameData( Serializer::OSGMatrix( element ) );
     //}
  
     return fd;
  }
  
  DOMElement* CameraRecorderAdaptor::Serialize(const FrameData* d, XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument* doc) const
  {
     XMLCh* CAMERA_RECORDER_ADAPTOR_STRING = XMLString::transcode("CameraRecorderAdaptor");
     XMLCh* NAME = XMLString::transcode("Name");
     DOMElement* element = doc->createElement(CAMERA_RECORDER_ADAPTOR_STRING);
  
  
\warning does this leak the transcode? element->setAttribute(NAME, XMLString::transcode(mCamera->GetName().c_str()));

     DOMElement* matrixelement = OSGSerializer::OSGMatrix(d->mMatrix, doc);
     element->appendChild(matrixelement);
  
     XMLString::release(&NAME);
     XMLString::release(&CAMERA_RECORDER_ADAPTOR_STRING);
     return element;
  }
  
  // -- FrameData implementation -- //
  typedef CameraRecorderAdaptor CRA;
  CRA::FrameData::FrameData() : mMatrix()
  {
  }
  
  CRA::FrameData::FrameData(const osg::Matrix& m) : mMatrix(m)
  {
  }
  
  CRA::FrameData::~FrameData()
  {
  }
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.