SortedFragmentIterator.hpp

00001 #ifndef __FISHEYE_SortedFragmentIterator_HPP
00002 #define __FISHEYE_SortedFragmentIterator_HPP
00003 
00004 #include "fisheyeDllApi.h"
00005 #include <field/Field.hpp>
00006 #include <GL/fiberGL.hpp>
00007 #include <ocean/shrimp/VCamera.hpp>
00008 #include <ocean/aerie/BoundingBox.hpp>
00009 
00010 namespace Wizt
00011 {
00012 
00013 using namespace Fiber;
00014 using namespace Eagle;
00015 
00016 
00021 struct  fisheye_API SortedFragmentIterator : public FieldFragmentIterator
00022 {
00023         const VCamera   &myCamera;
00024         RefPtr<Field>   Coords; 
00025 
00026         SortedFragmentIterator(const VCamera&Cam, const RefPtr<Field>&Crds)
00027         : myCamera(Cam)
00028         , Coords(Crds)
00029         {} 
00030 
00031         ~SortedFragmentIterator();
00032 
00033         struct  SpatialFragment
00034         {
00035                 const RefPtr<FragmentID>  ID;
00036                 RefPtr<BoundingBox>       BBox;
00037                 RefPtr<CreativeArrayBase> DataCreator;
00038 
00039                 SpatialFragment(const RefPtr<FragmentID>&fid,
00040                                 const RefPtr<BoundingBox>&pBBox,
00041                                 const RefPtr<CreativeArrayBase>&pDataCreator)
00042                 : ID(fid)
00043                 , BBox(pBBox)
00044                 , DataCreator(pDataCreator)
00045                 {}
00046         };
00047 
00048 protected:
00049 
00050         typedef multimap<double, SpatialFragment> FragmentMap_t;
00051 
00052         FragmentMap_t FragmentMap; 
00053 
00058         override bool apply(const RefPtr<FragmentID>&fid, const RefPtr<CreativeArrayBase>&DataCreator); 
00059 
00060 public: 
00062         int     emitFragments();
00063 
00068         virtual bool    apply(const SpatialFragment&VF) = 0;
00069 
00075         void emit(const RefPtr<Field>&theField)
00076         {
00077                 if (theField)
00078                 {
00079                         theField->iterate(*this); 
00080                         emitFragments();
00081                 }
00082         }
00083 };
00084 
00085 
00086 } // namespace Wizt
00087 
00088 #endif // __FISHEYE_SortedFragmentIterator_HPP
00089 
00090 
00091