20 #ifndef WORLD_BUILDER_COORDINATE_SYSTEMS_INTERFACE_H 21 #define WORLD_BUILDER_COORDINATE_SYSTEMS_INTERFACE_H 34 namespace CoordinateSystems
61 const std::string &parent_name,
62 const std::vector<std::string> &required_entries);
121 void ( * )(
Parameters &,
const std::string &),
141 static std::map<std::string, ObjectFactory *> factories;
145 static std::map<std::string, void ( *)(Parameters &,const std::string &)> &
get_declare_map()
147 static std::map<std::string, void ( *)(Parameters &,const std::string &)> declares;
168 #define WB_REGISTER_COORDINATE_SYSTEM(classname,name) \ 169 class classname##Factory : public ObjectFactory { \ 171 classname##Factory() \ 173 Interface::registerType(#name, classname::declare_entries, this); \ 175 std::unique_ptr<Interface> create(World *world) override final { \ 176 return std::unique_ptr<Interface>(new classname(world)); \ 179 static classname##Factory global_##classname##Factory;
WorldBuilder::World * world
virtual DepthMethod depth_method() const =0
static std::map< std::string, ObjectFactory * > & get_factory_map()
virtual CoordinateSystem natural_coordinate_system() const =0
virtual double max_model_depth() const =0
static std::unique_ptr< Interface > create(const std::string &name, WorldBuilder::World *world)
virtual std::array< double, 3 > cartesian_to_natural_coordinates(const std::array< double, 3 > &position) const =0
virtual double distance_between_points_at_same_depth(const Point< 3 > &point_1, const Point< 3 > &point_2) const =0
virtual void parse_entries(Parameters &prm)=0
static std::map< std::string, void(*)(Parameters &, const std::string &)> & get_declare_map()
static void declare_entries(Parameters &prm, const std::string &parent_name, const std::vector< std::string > &required_entries)
static void registerType(const std::string &name, void(*)(Parameters &, const std::string &), ObjectFactory *factory)
virtual std::array< double, 3 > natural_to_cartesian_coordinates(const std::array< double, 3 > &position) const =0