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.
 FrustumFieldMappingIO ()
 Ctor.
virtual FieldMapping::Ptr read (const OgIGroup &mappingGroup)
 Reads the field mapping and tries to create a FrustumFieldMapping object from it.
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.
virtual bool write (OgOGroup &mappingGroup, FieldMapping::Ptr mapping)
 Writes the given field mapping to disk.
Public Member Functions inherited from FieldMappingIO
 FieldMappingIO ()
 Ctor.
virtual ~FieldMappingIO ()
 Dtor.
Public Member Functions inherited from RefBase
void ref () const
 Used by boost::intrusive_pointer.
size_t refcnt ()
 Used by boost::intrusive_pointer.
void unref () const
 Used by boost::intrusive_pointer.
WeakPtr weakPtr () const
 RefBase ()
 RefBase (const RefBase &)
 Copy constructor.
RefBaseoperator= (const RefBase &)
 Assignment operator.
virtual ~RefBase ()
 Destructor.
virtual bool checkRTTI (const char *typenameStr)=0
 This function is only implemented by concrete classes and triggers the actual RTTI check through matchRTTI();.
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.

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.
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.

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.

306 { }

References FieldMappingIO::FieldMappingIO().

Referenced by create().

Member Function Documentation

◆ staticClassType()

const char * FrustumFieldMappingIO::staticClassType ( )
inlinestatic

Definition at line 296 of file FieldMappingIO.h.

297 {
298 return "FrustumFieldMappingIO";
299 }

◆ create()

FieldMappingIO::Ptr FrustumFieldMappingIO::create ( )
inlinestatic

Definition at line 308 of file FieldMappingIO.h.

309 { return Ptr(new FrustumFieldMappingIO); }
boost::intrusive_ptr< FrustumFieldMappingIO > Ptr

References 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
350 FrustumFieldMapping::Ptr fm(new FrustumFieldMapping);
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}
Imath::M44d M44d
Definition SpiMathLib.h:82
boost::intrusive_ptr< FieldMapping > Ptr
ZDistribution
Enumerates the Z slice distribution. .f3d files will store values as an int, so be very careful not t...