Field3D
FrustumFieldMappingIO Class Reference

#include <FieldMappingIO.h>

Inheritance diagram for FrustumFieldMappingIO:
FieldMappingIO RefBase

List of all members.

Public Types

typedef FrustumFieldMappingIO class_type
typedef boost::intrusive_ptr
< FrustumFieldMappingIO
Ptr

Public Member Functions

virtual std::string className () const
 Returns the class name.
 FrustumFieldMappingIO ()
 Ctor.
virtual FieldMapping::Ptr read (hid_t mappingGroup)
 Reads the field mapping and tries to create a FrustumFieldMapping object from it.
virtual bool write (hid_t mappingGroup, FieldMapping::Ptr mapping)
 Writes the given field mapping to disk.

Static Public Member Functions

static const char * classType ()
 RTTI replacement.
static FieldMappingIO::Ptr create ()

Public Attributes

 DEFINE_FIELD_RTTI_CONCRETE_CLASS

Private Types

typedef FieldMappingIO base
 Convenience typedef for referring to base class.

Detailed Description

Handles IO for a FrustumFieldMapping object

Definition at line 254 of file FieldMappingIO.h.


Member Typedef Documentation

typedef boost::intrusive_ptr<FrustumFieldMappingIO> FrustumFieldMappingIO::Ptr

Reimplemented from FieldMappingIO.

Definition at line 261 of file FieldMappingIO.h.

Reimplemented from FieldMappingIO.

Definition at line 265 of file FieldMappingIO.h.

Convenience typedef for referring to base class.

Reimplemented from FieldMappingIO.

Definition at line 302 of file FieldMappingIO.h.


Constructor & Destructor Documentation

FrustumFieldMappingIO::FrustumFieldMappingIO ( ) [inline]

Ctor.

Definition at line 276 of file FieldMappingIO.h.

   : FieldMappingIO()
  { }

Member Function Documentation

static const char* FrustumFieldMappingIO::classType ( ) [inline, static]

RTTI replacement.

Reimplemented from FieldMappingIO.

Definition at line 268 of file FieldMappingIO.h.

  {
    return "FrustumFieldMappingIO";
  }
static FieldMappingIO::Ptr FrustumFieldMappingIO::create ( ) [inline, static]

Definition at line 280 of file FieldMappingIO.h.

Referenced by initIO().

  { return Ptr(new FrustumFieldMappingIO); }
FieldMapping::Ptr FrustumFieldMappingIO::read ( hid_t  mappingGroup) [virtual]

Reads the field mapping and tries to create a FrustumFieldMapping object from it.

Returns:
Null pointer if no object was read

Implements FieldMappingIO.

Definition at line 234 of file FieldMappingIO.cpp.

References FrustumFieldMapping::PerspectiveDistribution, Msg::print(), Hdf5Util::readAttribute(), and Msg::SevWarning.

{
  float time;
  M44d ssMtx, csMtx;
  int numSamples=0;

  FrustumFieldMapping::Ptr fm(new FrustumFieldMapping);
  
  // Read number of time samples

  try {
    if (!readAttribute(mappingGroup, k_frustumMappingNumSamples, 1, numSamples)) {
      Msg::print(Msg::SevWarning, "Couldn't read attribute " + 
                 k_frustumMappingNumSamples);
      return FieldMapping::Ptr();
    }
  } catch (...) {
    //do nothing
  }

  // Read each time sample

  for (int i = 0; i < numSamples; ++i) {
    string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
    string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
    string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
    if (!readAttribute(mappingGroup, timeAttr, 1, time)) {
      Msg::print(Msg::SevWarning, "Couldn't read attribute " + timeAttr);
      return FieldMapping::Ptr();
    }
    std::vector<unsigned int> attrSize;
    attrSize.assign(2,4);

    if (!readAttribute(mappingGroup, ssAttr, attrSize, ssMtx.x[0][0])) {
      Msg::print(Msg::SevWarning, "Couldn't read attribute " + ssAttr);
      return FieldMapping::Ptr();
    }
    if (!readAttribute(mappingGroup, csAttr, attrSize, csMtx.x[0][0])) {
      Msg::print(Msg::SevWarning, "Couldn't read attribute " + csAttr);
      return FieldMapping::Ptr();
    }

    fm->setTransforms(time, ssMtx, csMtx);
  }


  // Read Z distribution

  int distInt;
  FrustumFieldMapping::ZDistribution dist;
  
  try {
    if (!readAttribute(mappingGroup, k_frustumMappingZDistribution, 1, distInt)) {
      Msg::print(Msg::SevWarning, "Couldn't read attribute " + 
                 k_frustumMappingZDistribution);
      return FieldMapping::Ptr();
    }
    dist = static_cast<FrustumFieldMapping::ZDistribution>(distInt); 
  } catch (...) {
    dist = FrustumFieldMapping::PerspectiveDistribution;
  }

  fm->setZDistribution(dist);

  return fm;
}
bool FrustumFieldMappingIO::write ( hid_t  mappingGroup,
FieldMapping::Ptr  mapping 
) [virtual]

Writes the given field mapping to disk.

Returns:
true if successful, otherwise false

Implements FieldMappingIO.

Definition at line 304 of file FieldMappingIO.cpp.

References Msg::print(), Msg::SevWarning, and Hdf5Util::writeAttribute().

{
  typedef FrustumFieldMapping::MatrixCurve::SampleVec SampleVec;

  FrustumFieldMapping::Ptr fm =
    FIELD_DYNAMIC_CAST<FrustumFieldMapping>(mapping);

  if (!fm) {
    Msg::print(Msg::SevWarning, "Couldn't get FrustumFieldMapping from pointer");
    return false;
  }

  // First write number of time samples

  const SampleVec &ssSamples = fm->screenToWorldSamples();
  const SampleVec &csSamples = fm->cameraToWorldSamples();
  int numSamples = static_cast<int>(ssSamples.size());

  if (!writeAttribute(mappingGroup, k_frustumMappingNumSamples, 1, numSamples)) {
    Msg::print(Msg::SevWarning, "Couldn't add attribute " + 
               k_frustumMappingNumSamples);
    return false;
  }

  // Then write each sample

  for (int i = 0; i < numSamples; ++i) {
    string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
    string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
    string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
    if (!writeAttribute(mappingGroup, timeAttr, 1, ssSamples[i].first)) {
      Msg::print(Msg::SevWarning, "Couldn't add attribute " + timeAttr);
      return false;
    }

    std::vector<unsigned int> attrSize;
    attrSize.assign(2,4);

    if (!writeAttribute(mappingGroup, ssAttr,attrSize,
                        ssSamples[i].second.x[0][0])) {
      Msg::print(Msg::SevWarning, "Couldn't add attribute " + ssAttr);
      return false;
    }
    if (!writeAttribute(mappingGroup, csAttr, attrSize,
                        csSamples[i].second.x[0][0])) {
      Msg::print(Msg::SevWarning, "Couldn't add attribute " + csAttr);
      return false;
    }
  }

  // Write distribution type

  int dist = static_cast<int>(fm->zDistribution());

  if (!writeAttribute(mappingGroup, k_frustumMappingZDistribution, 1, dist)) {
    Msg::print(Msg::SevWarning, "Couldn't add attribute " + 
               k_frustumMappingNumSamples);
    return false;
  }

  return true;
}
std::string FrustumFieldMappingIO::className ( ) const [virtual]

Returns the class name.

Implements FieldMappingIO.

Definition at line 369 of file FieldMappingIO.cpp.

References FIELD3D_NAMESPACE_OPEN::k_frustumMappingName().


Member Data Documentation


The documentation for this class was generated from the following files: