00001
00002
00003 #ifndef __POLYGONAL_ENERGY_H
00004 #define __POLYGONAL_ENERGY_H
00005
00006 #include <esg/energy/EnergyCoat.h>
00007 #include <esg/AutoPtr.h>
00008 #include <esg/mesh/Mesh.h>
00009
00010
00011 namespace esg {
00012
00013 class OGSCENE_EXPORT PolygonalEnergy : public EnergyCoat {
00014 protected:
00015 Sgi::hash_map<int, Vector3> _energy;
00016 AutoPtr<Mesh> * _pMesh;
00017
00018 public:
00019 enum Regions { VERTEX_BASED, FACET_BASED, UNKNOWN } _regions;
00020
00021 public:
00022 PolygonalEnergy (AutoPtr<Mesh>* m, Regions r = UNKNOWN)
00023 : _pMesh(m), _regions(r) {
00024 if (_pMesh) _pMesh->registerReferer(this);
00025 }
00026
00027 virtual ~PolygonalEnergy() { AutoPtr<Mesh>::destroy(_pMesh, this); }
00028
00029 virtual Type type (void) const { return POLYGONAL; }
00030
00031 virtual bool getRegionEnergy (int id, Vector3& val) const {
00032 Sgi::hash_map<int, Vector3>::const_iterator iter = _energy.find(id);
00033
00034 if (iter == _energy.end()) return false;
00035 val.set((*iter).second);
00036 return true;
00037 }
00038
00039 virtual bool setRegionEnergy (int id, const Vector3& val) {
00040
00041
00042 return (_energy[id] = val);
00043 }
00044
00045 AutoPtr<Mesh>* getMesh (void) { return _pMesh; }
00046 Regions getRegionsDescr (void) const { return _regions; }
00047 void setRegionsDescr (Regions r) { _regions = r; }
00048 };
00049
00050 };
00051
00052 #endif // __POLYGONAL_ENERGY_H