|
Field3D
|
#include <FieldMappingIO.h>
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. | |
Handles IO for a FrustumFieldMapping object
Definition at line 254 of file FieldMappingIO.h.
| 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.
typedef FieldMappingIO FrustumFieldMappingIO::base [private] |
Convenience typedef for referring to base class.
Reimplemented from FieldMappingIO.
Definition at line 302 of file FieldMappingIO.h.
| FrustumFieldMappingIO::FrustumFieldMappingIO | ( | ) | [inline] |
| 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.
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.
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().
{
return k_frustumMappingName;
}
Definition at line 266 of file FieldMappingIO.h.