shape_doc 0.1
|
00001 /****************************************************************************** 00002 * MODULE : algebraic_curve.glue.hpp 00003 * DESCRIPTION: Glue for BoundingBox 00004 * COPYRIGHT : (C) 2007 Bernard Mourrain 00005 ******************************************************************************* 00006 * This software falls under the GNU general public license and comes WITHOUT 00007 * ANY WARRANTY WHATSOEVER. See the file $TEXMACS_PATH/LICENSE for more details. 00008 * If you don't have this file, write to the Free Software Foundation, Inc., 00009 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00010 ******************************************************************************/ 00011 #ifndef __mmx_shape_bounding_box_glue_hpp 00012 #define __mmx_shape_bounding_box_glue_hpp 00013 #include <basix/glue.hpp> 00014 #include <basix/tuple.hpp> 00015 #include <shape/MGXK.hpp> 00016 #include <shape/bounding_box.hpp> 00017 00018 #define shape_bounding_box shape::bounding_box<double, shape::MGXK> 00019 #define BoundingBox shape::bounding_box<double,shape::MGXK> 00020 00021 namespace mmx { 00022 namespace shape { 00023 00024 inline bool operator ==(const BoundingBox& v1, const BoundingBox& v2) {return true;} 00025 inline bool operator !=(const BoundingBox& v1, const BoundingBox& v2) {return !(v1==v2);} 00026 inline bool exact_eq (const BoundingBox& v1, const BoundingBox& v2) {return v1==v2;} 00027 inline bool exact_neq(const BoundingBox& v1, const BoundingBox& v2) {return v1!=v2;} 00028 00029 inline unsigned hash (const BoundingBox& v) 00030 { 00031 register unsigned i, h= 214365, n=1; 00032 for (i=0; i<n; i++) h= (h<<1) ^ (h<<5) ^ (h>>27) ;//^ hash(v[i]); 00033 return h; 00034 } 00035 inline unsigned exact_hash(const BoundingBox& m) {return hash(m);} 00036 inline unsigned soft_hash (const BoundingBox& m) {return hash(m);} 00037 00038 inline syntactic flatten (const BoundingBox& s) 00039 { 00040 vector<syntactic> box; 00041 box<<mmx::flatten(s.xmin()); 00042 box<<mmx::flatten(s.xmax()); 00043 box<<mmx::flatten(s.ymin()); 00044 box<<mmx::flatten(s.ymax()); 00045 box<<mmx::flatten(s.zmin()); 00046 box<<mmx::flatten(s.zmax()); 00047 00048 return mmx::flatten(box); 00049 } 00050 } //namespace shape 00051 00052 template<class C> 00053 inline BoundingBox shape_bounding_box_from_vector(const vector<C>& v) 00054 { 00055 unsigned n= N(v); 00056 double a=0,b=1,c=0,d=1,e=0,f=1; 00057 if (n>1) a =as_double(v[0]); b=as_double(v[1]); 00058 if (n>3) c =as_double(v[2]); d=as_double(v[3]); 00059 if (n<5) return BoundingBox(a,b,c,d); 00060 if (n>5) e =as_double(v[4]); f=as_double(v[5]); 00061 return BoundingBox(a,b,c,d,e,f); 00062 } 00063 00064 00065 //==================================================================== 00066 } // namespace mmx 00067 #undef BoundingBox 00068 #endif // __mmx_bounding_box_glue_hpp