Field3D

#include <FieldMappingIO.h>

Inheritance diagram for FrustumFieldMappingIO:
FieldMappingIO RefBase

Public Types

typedef FrustumFieldMappingIO class_type
 
typedef boost::intrusive_ptr< FrustumFieldMappingIOPtr
 
- Public Types inherited from FieldMappingIO
typedef FieldMappingIO class_type
 
typedef boost::intrusive_ptr< FieldMappingIOPtr
 
- Public Types inherited from RefBase
typedef boost::intrusive_ptr< RefBasePtr
 
typedef boost::weak_ptr< RefBaseWeakPtr
 

Public Member Functions

virtual std::string className () const
 Returns the class name. More...
 
 FrustumFieldMappingIO ()
 Ctor. More...
 
virtual FieldMapping::Ptr read (hid_t mappingGroup)
 Reads the field mapping and tries to create a FrustumFieldMapping object from it. More...
 
virtual bool write (hid_t mappingGroup, FieldMapping::Ptr mapping)
 Writes the given field mapping to disk. More...
 
- Public Member Functions inherited from FieldMappingIO
 FieldMappingIO ()
 Ctor. More...
 
virtual ~FieldMappingIO ()
 Dtor. More...
 
- Public Member Functions inherited from RefBase
void ref () const
 Used by boost::intrusive_pointer. More...
 
size_t refcnt ()
 Used by boost::intrusive_pointer. More...
 
void unref () const
 Used by boost::intrusive_pointer. More...
 
WeakPtr weakPtr () const
 
 RefBase ()
 
 RefBase (const RefBase &)
 Copy constructor. More...
 
RefBaseoperator= (const RefBase &)
 Assignment operator. More...
 
virtual ~RefBase ()
 Destructor. More...
 
virtual bool checkRTTI (const char *typenameStr)=0
 This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();. More...
 
bool matchRTTI (const char *typenameStr)
 Performs a check to see if the given typename string matches this class' This needs to be implemented in -all- subclasses, even abstract ones. More...
 

Static Public Member Functions

static FieldMappingIO::Ptr create ()
 
static const char * staticClassType ()
 
- Static Public Member Functions inherited from FieldMappingIO
static const char * staticClassType ()
 RTTI replacement. More...
 
- Static Public Member Functions inherited from RefBase
static const char * staticClassType ()
 

Public Attributes

 DEFINE_FIELD_RTTI_CONCRETE_CLASS
 
- Public Attributes inherited from FieldMappingIO
 DEFINE_FIELD_RTTI_ABSTRACT_CLASS
 

Private Types

typedef FieldMappingIO base
 Convenience typedef for referring to base class. More...
 

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

Definition at line 261 of file FieldMappingIO.h.

Convenience typedef for referring to base class.

Definition at line 302 of file FieldMappingIO.h.

Constructor & Destructor Documentation

FrustumFieldMappingIO::FrustumFieldMappingIO ( )
inline

Ctor.

Definition at line 276 of file FieldMappingIO.h.

277  : FieldMappingIO()
278  { }
FieldMappingIO()
Ctor.

Member Function Documentation

static const char* FrustumFieldMappingIO::staticClassType ( )
inlinestatic

Definition at line 268 of file FieldMappingIO.h.

269  {
270  return "FrustumFieldMappingIO";
271  }
static FieldMappingIO::Ptr FrustumFieldMappingIO::create ( )
inlinestatic

Definition at line 280 of file FieldMappingIO.h.

References FieldMappingIO::className(), FieldMappingIO::read(), and FieldMappingIO::write().

Referenced by initIO().

281  { return Ptr(new FrustumFieldMappingIO); }
boost::intrusive_ptr< FrustumFieldMappingIO > Ptr
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.

235 {
236  float time;
237  M44d ssMtx, csMtx;
238  int numSamples=0;
239 
241 
242  // Read number of time samples
243 
244  try {
245  if (!readAttribute(mappingGroup, k_frustumMappingNumSamples, 1, numSamples)) {
246  Msg::print(Msg::SevWarning, "Couldn't read attribute " +
247  k_frustumMappingNumSamples);
248  return FieldMapping::Ptr();
249  }
250  } catch (...) {
251  //do nothing
252  }
253 
254  // Read each time sample
255 
256  for (int i = 0; i < numSamples; ++i) {
257  string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
258  string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
259  string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
260  if (!readAttribute(mappingGroup, timeAttr, 1, time)) {
261  Msg::print(Msg::SevWarning, "Couldn't read attribute " + timeAttr);
262  return FieldMapping::Ptr();
263  }
264  std::vector<unsigned int> attrSize;
265  attrSize.assign(2,4);
266 
267  if (!readAttribute(mappingGroup, ssAttr, attrSize, ssMtx.x[0][0])) {
268  Msg::print(Msg::SevWarning, "Couldn't read attribute " + ssAttr);
269  return FieldMapping::Ptr();
270  }
271  if (!readAttribute(mappingGroup, csAttr, attrSize, csMtx.x[0][0])) {
272  Msg::print(Msg::SevWarning, "Couldn't read attribute " + csAttr);
273  return FieldMapping::Ptr();
274  }
275 
276  fm->setTransforms(time, ssMtx, csMtx);
277  }
278 
279 
280  // Read Z distribution
281 
282  int distInt;
284 
285  try {
286  if (!readAttribute(mappingGroup, k_frustumMappingZDistribution, 1, distInt)) {
287  Msg::print(Msg::SevWarning, "Couldn't read attribute " +
288  k_frustumMappingZDistribution);
289  return FieldMapping::Ptr();
290  }
291  dist = static_cast<FrustumFieldMapping::ZDistribution>(distInt);
292  } catch (...) {
294  }
295 
296  fm->setZDistribution(dist);
297 
298  return fm;
299 }
Imath::M44d M44d
Definition: SpiMathLib.h:82
FIELD3D_API bool readAttribute(hid_t location, const std::string &attrName, std::string &value)
Reads a string attribute.
FIELD3D_API void print(Severity severity, const std::string &message)
Sends the string to the assigned output, prefixing the message with the severity. ...
Definition: Log.cpp:66
boost::intrusive_ptr< FieldMapping > Ptr
Definition: FieldMapping.h:92
Represents the mapping of a field by a perspective transform.
Definition: FieldMapping.h:547
ZDistribution
Enumerates the Z slice distribution. .f3d files will store values as an int, so be very careful not t...
Definition: FieldMapping.h:568
boost::intrusive_ptr< FrustumFieldMapping > Ptr
Convenience typedef.
Definition: FieldMapping.h:554
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().

305 {
307 
309  FIELD_DYNAMIC_CAST<FrustumFieldMapping>(mapping);
310 
311  if (!fm) {
312  Msg::print(Msg::SevWarning, "Couldn't get FrustumFieldMapping from pointer");
313  return false;
314  }
315 
316  // First write number of time samples
317 
318  const SampleVec &ssSamples = fm->screenToWorldSamples();
319  const SampleVec &csSamples = fm->cameraToWorldSamples();
320  int numSamples = static_cast<int>(ssSamples.size());
321 
322  if (!writeAttribute(mappingGroup, k_frustumMappingNumSamples, 1, numSamples)) {
323  Msg::print(Msg::SevWarning, "Couldn't add attribute " +
324  k_frustumMappingNumSamples);
325  return false;
326  }
327 
328  // Then write each sample
329 
330  for (int i = 0; i < numSamples; ++i) {
331  string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
332  string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
333  string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
334  if (!writeAttribute(mappingGroup, timeAttr, 1, ssSamples[i].first)) {
335  Msg::print(Msg::SevWarning, "Couldn't add attribute " + timeAttr);
336  return false;
337  }
338 
339  std::vector<unsigned int> attrSize;
340  attrSize.assign(2,4);
341 
342  if (!writeAttribute(mappingGroup, ssAttr,attrSize,
343  ssSamples[i].second.x[0][0])) {
344  Msg::print(Msg::SevWarning, "Couldn't add attribute " + ssAttr);
345  return false;
346  }
347  if (!writeAttribute(mappingGroup, csAttr, attrSize,
348  csSamples[i].second.x[0][0])) {
349  Msg::print(Msg::SevWarning, "Couldn't add attribute " + csAttr);
350  return false;
351  }
352  }
353 
354  // Write distribution type
355 
356  int dist = static_cast<int>(fm->zDistribution());
357 
358  if (!writeAttribute(mappingGroup, k_frustumMappingZDistribution, 1, dist)) {
359  Msg::print(Msg::SevWarning, "Couldn't add attribute " +
360  k_frustumMappingNumSamples);
361  return false;
362  }
363 
364  return true;
365 }
FIELD3D_API bool writeAttribute(hid_t location, const std::string &attrName, const std::string &value)
Writes a string attribute.
FIELD3D_API void print(Severity severity, const std::string &message)
Sends the string to the assigned output, prefixing the message with the severity. ...
Definition: Log.cpp:66
std::vector< Sample > SampleVec
Definition: Curve.h:85
boost::intrusive_ptr< FrustumFieldMapping > Ptr
Convenience typedef.
Definition: FieldMapping.h:554
std::string FrustumFieldMappingIO::className ( ) const
virtual

Returns the class name.

Implements FieldMappingIO.

Definition at line 369 of file FieldMappingIO.cpp.

References FIELD3D_NAMESPACE_SOURCE_CLOSE, and FIELD3D_NAMESPACE_OPEN::k_frustumMappingName().

370 {
371  return k_frustumMappingName;
372 }
const string k_frustumMappingName("FrustumFieldMapping")

Member Data Documentation

FrustumFieldMappingIO::DEFINE_FIELD_RTTI_CONCRETE_CLASS

Definition at line 266 of file FieldMappingIO.h.


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