00001
00002
00003
00004
00005 #ifndef IBIS_MESHQUERY_H
00006 #define IBIS_MESHQUERY_H
00010 #include "query.h"
00011
00012 namespace ibis {
00013 class meshQuery;
00014 }
00015
00019 class FASTBIT_CXX_DLLSPEC ibis::meshQuery : public ibis::query {
00020 public:
00021 virtual ~meshQuery();
00023 meshQuery(const char* uid, const part* et, const char* pref=0);
00025 meshQuery(const char* dir, const ibis::partList& tl) : query(dir, tl) {};
00026
00028 int getHitsAsBlocks(std::vector< std::vector<uint32_t> >& reg,
00029 const std::vector<uint32_t>& dim,
00030 const bool merge=false) const;
00031 int getHitsAsBlocks(std::vector< std::vector<uint32_t> >& reg,
00032 const bool merge=false) const;
00033
00035 int getPointsOnBoundary(std::vector< std::vector<uint32_t> >& bdy,
00036 const std::vector<uint32_t>& dim) const;
00037 int getPointsOnBoundary(std::vector< std::vector<uint32_t> >& bdy) const;
00038
00043 static int bitvectorToCoordinates(const ibis::bitvector& bv,
00044 const std::vector<uint32_t>& dim,
00045 std::vector<uint32_t>& coords);
00046
00047 private:
00048
00049
00050 int toBlocks(const ibis::bitvector& bv,
00051 const std::vector<uint32_t>& dim,
00052 std::vector< std::vector<uint32_t> >& reg) const;
00053 void block2d(uint32_t last, const std::vector<uint32_t>& dim,
00054 std::vector<uint32_t>& block,
00055 std::vector< std::vector<uint32_t> >& reg) const;
00056 void block3d(uint32_t last, const uint32_t n2, const uint32_t n3,
00057 const std::vector<uint32_t>& dim,
00058 std::vector<uint32_t>& block,
00059 std::vector< std::vector<uint32_t> >& reg) const;
00060 void blocknd(uint32_t last,
00061 const std::vector<uint32_t>& scl,
00062 const std::vector<uint32_t>& dim,
00063 std::vector<uint32_t>& block,
00064 std::vector< std::vector<uint32_t> >& reg) const;
00065 void merge2DBlocks(std::vector< std::vector<uint32_t> >& reg) const;
00066 void merge3DBlocks(std::vector< std::vector<uint32_t> >& reg) const;
00067 void mergeNDBlocks(std::vector< std::vector<uint32_t> >& reg) const;
00068
00069
00070
00071 int findPointsOnBoundary(const ibis::bitvector& bv,
00072 const std::vector<uint32_t>& dim,
00073 std::vector< std::vector<uint32_t> >& bdy) const;
00074 void boundary2d(const std::vector<uint32_t>& dim,
00075 const std::vector< std::vector<uint32_t> >& rang,
00076 std::vector< std::vector<uint32_t> >& bdy) const;
00077 void boundary2d1(const std::vector<uint32_t>& dim,
00078 const std::vector< std::vector<uint32_t> >& rang,
00079 std::vector< std::vector<uint32_t> >& bdy) const;
00080 void boundary3d(const std::vector<uint32_t>& dim,
00081 const std::vector< std::vector<uint32_t> >& rang,
00082 std::vector< std::vector<uint32_t> >& bdy) const;
00083 void boundarynd(const std::vector<uint32_t>& dim,
00084 const std::vector< std::vector<uint32_t> >& rang,
00085 std::vector< std::vector<uint32_t> >& bdy) const;
00086
00087 meshQuery();
00088 meshQuery(const meshQuery&);
00089 meshQuery& operator=(const meshQuery&);
00090 };
00091 #endif // IBIS_MESHQUERY_H