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 (const OgIGroup &mappingGroup)
 Reads the field mapping and tries to create a FrustumFieldMapping object from it. 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...
 
virtual bool write (OgOGroup &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 282 of file FieldMappingIO.h.

Member Typedef Documentation

◆ Ptr

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

Definition at line 289 of file FieldMappingIO.h.

◆ class_type

◆ base

Convenience typedef for referring to base class.

Definition at line 339 of file FieldMappingIO.h.

Constructor & Destructor Documentation

◆ FrustumFieldMappingIO()

FrustumFieldMappingIO::FrustumFieldMappingIO ( )
inline

Ctor.

Definition at line 304 of file FieldMappingIO.h.

305  : FieldMappingIO()
306  { }

Member Function Documentation

◆ staticClassType()

static const char* FrustumFieldMappingIO::staticClassType ( )
inlinestatic

Definition at line 296 of file FieldMappingIO.h.

297  {
298  return "FrustumFieldMappingIO";
299  }

◆ create()

static FieldMappingIO::Ptr FrustumFieldMappingIO::create ( )
inlinestatic

Definition at line 308 of file FieldMappingIO.h.

309  { return Ptr(new FrustumFieldMappingIO); }

Referenced by initIO().

◆ read() [1/2]

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 344 of file FieldMappingIO.cpp.

345 {
346  float time;
347  M44d ssMtx, csMtx;
348  int numSamples=0;
349 
351 
352  // Read number of time samples
353 
354  try {
355  if (!readAttribute(mappingGroup, k_frustumMappingNumSamples, 1, numSamples)) {
356  Msg::print(Msg::SevWarning, "Couldn't read attribute " +
357  k_frustumMappingNumSamples);
358  return FieldMapping::Ptr();
359  }
360  } catch (...) {
361  //do nothing
362  }
363 
364  // Read each time sample
365 
366  for (int i = 0; i < numSamples; ++i) {
367  string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
368  string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
369  string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
370  if (!readAttribute(mappingGroup, timeAttr, 1, time)) {
371  Msg::print(Msg::SevWarning, "Couldn't read attribute " + timeAttr);
372  return FieldMapping::Ptr();
373  }
374  std::vector<unsigned int> attrSize;
375  attrSize.assign(2,4);
376 
377  if (!readAttribute(mappingGroup, ssAttr, attrSize, ssMtx.x[0][0])) {
378  Msg::print(Msg::SevWarning, "Couldn't read attribute " + ssAttr);
379  return FieldMapping::Ptr();
380  }
381  if (!readAttribute(mappingGroup, csAttr, attrSize, csMtx.x[0][0])) {
382  Msg::print(Msg::SevWarning, "Couldn't read attribute " + csAttr);
383  return FieldMapping::Ptr();
384  }
385 
386  fm->setTransforms(time, ssMtx, csMtx);
387  }
388 
389 
390  // Read Z distribution
391 
392  int distInt;
394 
395  try {
396  if (!readAttribute(mappingGroup, k_frustumMappingZDistribution, 1, distInt)) {
397  Msg::print(Msg::SevWarning, "Couldn't read attribute " +
398  k_frustumMappingZDistribution);
399  return FieldMapping::Ptr();
400  }
401  dist = static_cast<FrustumFieldMapping::ZDistribution>(distInt);
402  } catch (...) {
404  }
405 
406  fm->setZDistribution(dist);
407 
408  return fm;
409 }

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

◆ read() [2/2]

FieldMapping::Ptr FrustumFieldMappingIO::read ( const OgIGroup &  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 414 of file FieldMappingIO.cpp.

415 {
416  int numSamples = 0;
417 
419 
420  // Read number of time samples
421 
422  try {
423  OgIAttribute<int> numSamplesAttr =
424  mappingGroup.findAttribute<int>(k_frustumMappingNumSamples);
425  if (!numSamplesAttr.isValid()) {
426  Msg::print(Msg::SevWarning, "Couldn't read attribute " +
427  k_frustumMappingNumSamples);
428  return FieldMapping::Ptr();
429  }
430  } catch (...) {
431  //do nothing
432  }
433 
434  // Read each time sample
435 
436  for (int i = 0; i < numSamples; ++i) {
437  // Attribute names
438  string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
439  string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
440  string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
441  // Read time
442  OgIAttribute<float> time =
443  mappingGroup.findAttribute<float>(timeAttr);
444  if (!time.isValid()) {
445  Msg::print(Msg::SevWarning, "Couldn't read attribute " + timeAttr);
446  return FieldMapping::Ptr();
447  }
448  // Read matrices
449  OgIAttribute<mtx64_t> ssMtx =
450  mappingGroup.findAttribute<mtx64_t>(ssAttr);
451  OgIAttribute<mtx64_t> csMtx =
452  mappingGroup.findAttribute<mtx64_t>(csAttr);
453  if (!ssMtx.isValid()) {
454  Msg::print(Msg::SevWarning, "Couldn't read attribute " + ssAttr);
455  return FieldMapping::Ptr();
456  }
457  if (!csMtx.isValid()) {
458  Msg::print(Msg::SevWarning, "Couldn't read attribute " + csAttr);
459  return FieldMapping::Ptr();
460  }
461 
462  fm->setTransforms(time.value(), ssMtx.value(), csMtx.value());
463  }
464 
465 
466  // Read Z distribution
467 
469 
470  try {
471  OgIAttribute<int> zDist =
472  mappingGroup.findAttribute<int>(k_frustumMappingZDistribution);
473  if (!zDist.isValid()) {
474  Msg::print(Msg::SevWarning, "Couldn't read attribute " +
475  k_frustumMappingZDistribution);
476  return FieldMapping::Ptr();
477  }
478  dist = static_cast<FrustumFieldMapping::ZDistribution>(zDist.value());
479  } catch (...) {
481  }
482 
483  fm->setZDistribution(dist);
484 
485  return fm;
486 }

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

◆ write() [1/2]

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 491 of file FieldMappingIO.cpp.

492 {
494 
496  FIELD_DYNAMIC_CAST<FrustumFieldMapping>(mapping);
497 
498  if (!fm) {
499  Msg::print(Msg::SevWarning, "Couldn't get FrustumFieldMapping from pointer");
500  return false;
501  }
502 
503  // First write number of time samples
504 
505  const SampleVec &ssSamples = fm->screenToWorldSamples();
506  const SampleVec &csSamples = fm->cameraToWorldSamples();
507  int numSamples = static_cast<int>(ssSamples.size());
508 
509  if (!writeAttribute(mappingGroup, k_frustumMappingNumSamples, 1, numSamples)) {
510  Msg::print(Msg::SevWarning, "Couldn't add attribute " +
511  k_frustumMappingNumSamples);
512  return false;
513  }
514 
515  // Then write each sample
516 
517  for (int i = 0; i < numSamples; ++i) {
518  string timeAttr = k_frustumMappingTime + boost::lexical_cast<string>(i);
519  string ssAttr = k_frustumMappingScreenMatrix + boost::lexical_cast<string>(i);
520  string csAttr = k_frustumMappingCameraMatrix + boost::lexical_cast<string>(i);
521  if (!writeAttribute(mappingGroup, timeAttr, 1, ssSamples[i].first)) {
522  Msg::print(Msg::SevWarning, "Couldn't add attribute " + timeAttr);
523  return false;
524  }
525 
526  std::vector<unsigned int> attrSize;
527  attrSize.assign(2,4);
528 
529  if (!writeAttribute(mappingGroup, ssAttr,attrSize,
530  ssSamples[i].second.x[0][0])) {
531  Msg::print(Msg::SevWarning, "Couldn't add attribute " + ssAttr);
532  return false;
533  }
534  if (!writeAttribute(mappingGroup, csAttr, attrSize,
535  csSamples[i].second.x[0][0])) {
536  Msg::print(Msg::SevWarning, "Couldn't add attribute " + csAttr);
537  return false;
538  }
539  }
540 
541  // Write distribution type
542 
543  int dist = static_cast<int>(fm->zDistribution());
544 
545  if (!writeAttribute(mappingGroup, k_frustumMappingZDistribution, 1, dist)) {
546  Msg::print(Msg::SevWarning, "Couldn't add attribute " +
547  k_frustumMappingNumSamples);
548  return false;
549  }
550 
551  return true;
552 }

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

◆ write() [2/2]

bool FrustumFieldMappingIO::write ( OgOGroup &  mappingGroup,
FieldMapping::Ptr  mapping 
)
virtual

Writes the given field mapping to disk.

Returns
true if successful, otherwise false

Implements FieldMappingIO.

Definition at line 557 of file FieldMappingIO.cpp.

558 {
560 
562  FIELD_DYNAMIC_CAST<FrustumFieldMapping>(mapping);
563 
564  if (!fm) {
566  "Couldn't get FrustumFieldMapping from pointer");
567  return false;
568  }
569 
570  // First write number of time samples ---
571 
572  const SampleVec &ssSamples = fm->screenToWorldSamples();
573  const SampleVec &csSamples = fm->cameraToWorldSamples();
574  const int numSamples = static_cast<int>(ssSamples.size());
575 
576  OgOAttribute<int> numSamplesAttr(mappingGroup, k_frustumMappingNumSamples,
577  numSamples);
578 
579  // Then write each sample ---
580 
581  for (int i = 0; i < numSamples; ++i) {
582  const string timeAttr = k_frustumMappingTime +
583  boost::lexical_cast<string>(i);
584  const string ssAttr = k_frustumMappingScreenMatrix +
585  boost::lexical_cast<string>(i);
586  const string csAttr = k_frustumMappingCameraMatrix +
587  boost::lexical_cast<string>(i);
588 
589  OgOAttribute<float> time(mappingGroup, timeAttr, ssSamples[i].first);
590  OgOAttribute<mtx64_t> ss(mappingGroup, ssAttr, ssSamples[i].second);
591  OgOAttribute<mtx64_t> cs(mappingGroup, csAttr, csSamples[i].second);
592  }
593 
594  // Write distribution type ---
595 
596  int dist = static_cast<int>(fm->zDistribution());
597 
598  OgOAttribute<int> zDist(mappingGroup, k_frustumMappingZDistribution, dist);
599 
600  return true;
601 }

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

◆ className()

std::string FrustumFieldMappingIO::className ( ) const
virtual

Returns the class name.

Implements FieldMappingIO.

Definition at line 605 of file FieldMappingIO.cpp.

606 {
607  return k_frustumMappingName;
608 }

References FIELD3D_NAMESPACE_OPEN::k_frustumMappingName().

Member Data Documentation

◆ DEFINE_FIELD_RTTI_CONCRETE_CLASS

FrustumFieldMappingIO::DEFINE_FIELD_RTTI_CONCRETE_CLASS

Definition at line 294 of file FieldMappingIO.h.


The documentation for this class was generated from the following files:
Hdf5Util::writeAttribute
FIELD3D_API bool writeAttribute(hid_t location, const std::string &attrName, const std::string &value)
Writes a string attribute.
Msg::SevWarning
@ SevWarning
Definition: Log.h:68
OgIAttribute
Definition: OgawaFwd.h:62
FieldMapping::Ptr
boost::intrusive_ptr< FieldMapping > Ptr
Definition: FieldMapping.h:92
OgOAttribute
Definition: OgawaFwd.h:64
FrustumFieldMappingIO::Ptr
boost::intrusive_ptr< FrustumFieldMappingIO > Ptr
Definition: FieldMappingIO.h:289
FIELD3D_NAMESPACE_OPEN::k_frustumMappingName
const string k_frustumMappingName("FrustumFieldMapping")
FrustumFieldMappingIO
Definition: FieldMappingIO.h:283
mtx64_t
Field3D::M44d mtx64_t
Definition: Traits.h:95
FrustumFieldMapping::Ptr
boost::intrusive_ptr< FrustumFieldMapping > Ptr
Convenience typedef.
Definition: FieldMapping.h:571
FieldMappingIO::FieldMappingIO
FieldMappingIO()
Ctor.
Definition: FieldMappingIO.h:87
FrustumFieldMapping::ZDistribution
ZDistribution
Enumerates the Z slice distribution. .f3d files will store values as an int, so be very careful not t...
Definition: FieldMapping.h:585
M44d
Imath::M44d M44d
Definition: SpiMathLib.h:82
Hdf5Util::readAttribute
FIELD3D_API bool readAttribute(hid_t location, const std::string &attrName, std::string &value)
Reads a string attribute.
Curve< Imath::M44d >::SampleVec
std::vector< Sample > SampleVec
Definition: Curve.h:85
Msg::print
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:70
FrustumFieldMapping
Represents the mapping of a field by a perspective transform.
Definition: FieldMapping.h:565
FrustumFieldMapping::PerspectiveDistribution
@ PerspectiveDistribution
Definition: FieldMapping.h:586