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 }
00087
00088 #endif // __FISHEYE_SortedFragmentIterator_HPP
00089
00090
00091