// ====================================================================== // // Copyright (c) 2001 The CGAL Consortium // // This software and related documentation is part of an INTERNAL release // of the Computational Geometry Algorithms Library (CGAL). It is not // intended for general use. // // ---------------------------------------------------------------------- // // release : // release_date : // // file : include/CGAL/Kd_tree_traits_point.h // package : APSPAS // revision : 1.0 // revision_date : 2001/06/12 // maintainer : Hans Tangelder () // // ====================================================================== #ifndef CGAL_KD_TREE_TRAITS_POINT_H #define CGAL_KD_TREE_TRAITS_POINT_H #include #include namespace CGAL { template class Kd_tree_traits_point { public: typedef Separator Separator; typedef Item Item; typedef Item::FT NT; typedef Item** Item_iterator; typedef std::list::iterator InputIterator; typedef std::pair Item_with_distance; private: int Bucket_size; Split_rule Selected_split_rule; NT Aspect_ratio; bool Use_extended_nodes; public: Kd_tree_traits_point() { Bucket_size = 1; Selected_split_rule = SLIDING_MIDPOINT; Aspect_Ratio = 3.0; Use_extended_nodes = true; } Kd_tree_traits_point(int bucket_size=1, Split_rule My_split_rule=SLIDING_MIDPOINT, NT aspect_ratio=3.0, bool use_extended_nodes=true) { Bucket_size = bucket_size; Selected_split_rule = My_split_rule; Aspect_ratio = aspect_ratio; Use_extended_nodes = use_extended_nodes; } NT aspect_ratio() {return Aspect_ratio;} Split_rule selected_split_rule() {return Selected_split_rule;} Shrink_rule selected_shrink_rule() {return NONE;} unsigned int bucket_size() {return Bucket_size;} bool use_extended_nodes() {return Use_extended_nodes;} // split c0 in c0 and c1 Separator* split(Points_container& c0, Points_container& c1) { Separator* sep; switch (Selected_split_rule) { case SLIDING_MIDPOINT: {Sliding_MidPoint M; sep=M.rule(c0); c0.split_container(c1,sep,true);} break; case SLIDING_FAIR: {Sliding_Fair M; sep=M.rule(c0,aspect_ratio()); c0.split_container(c1,sep,true);} break; case FAIR: {Fair M; sep=M.rule(c0,aspect_ratio()); c0.split_container(c1,sep);} break; case MEDIAN_OF_MAX_SPREAD: {Median_Of_Max_Spread M; sep=M.rule(c0); c0.split_container(c1,sep);} break; case MEDIAN_OF_BOX: {Median_Of_Box M; sep=M.rule(c0); c0.split_container(c1,sep);} break; case MIDPOINT_OF_MAX_SPREAD: {MidPoint_Of_Max_Spread M; sep=M.rule(c0); c0.split_container(c1,sep);} break; case MIDPOINT_OF_BOX: {MidPoint_Of_Box M; sep=M.rule(c0); c0.split_container(c1,sep);} break; default: std::cerr << "Split rule corrupted\n"; break; } return sep; } }; } // namespace CGAL #endif // KD_TREE_TRAITS_POINT_H