20 #ifndef WORLD_BUILDER_FEATURES_INTERFACE_H 21 #define WORLD_BUILDER_FEATURES_INTERFACE_H 69 const std::string &parent_name,
70 const std::vector<std::string> &required_entries);
86 const std::vector<std::array<unsigned int,3>> &
properties,
88 const std::vector<size_t> &entry_in_output,
89 std::vector<double> &output)
const = 0;
96 void ( * )(
Parameters &,
const std::string &,
const std::vector<std::string> &required_entries),
120 const double depth)
const;
176 static std::map<std::string, ObjectFactory *> factories;
180 static std::map<std::string, void ( *)(
Parameters &,
184 static std::map<std::string, void ( *)(Parameters &,
186 const std::vector<std::string>& required_entries)> declares;
192 static std::map<std::string, void ( *)(Parameters &)> declares;
204 virtual std::unique_ptr<Interface>
create(
World *world) = 0;
212 #define WB_REGISTER_FEATURE(classname,name) \ 213 class classname##Factory : public ObjectFactory { \ 215 classname##Factory() \ 217 Interface::registerType(#name, classname::declare_entries, classname::make_snippet, this); \ 219 std::unique_ptr<Interface> create(World *world) override final { \ 220 return std::unique_ptr<Interface>(new classname(world)); \ 223 static classname##Factory global_##classname##Factory;
static std::map< std::string, void(*)(Parameters &, const std::string &, const std::vector< std::string > &required_entries)> & get_declare_map()
static std::map< std::string, void(*)(Parameters &)> & get_snippet_map()
Class for circle line/spline, including interpolation on it.
std::string temperature_submodule_name
std::string get_name() const
WorldBuilder::Objects::BezierCurve bezier_curve
virtual Objects::PlaneDistances distance_to_feature_plane(const Point< 3 > &position_in_cartesian_coordinates, const Objects::NaturalCoordinate &position_in_natural_coordinates, const double depth) const
static std::map< std::string, ObjectFactory * > & get_factory_map()
void get_coordinates(const std::string &name, Parameters &prm, const CoordinateSystem coordinate_system)
static void registerType(const std::string &name, void(*)(Parameters &, const std::string &, const std::vector< std::string > &required_entries), void(*make_snippet)(Parameters &), ObjectFactory *factory)
static void declare_entries(Parameters &prm, const std::string &parent_name, const std::vector< std::string > &required_entries)
virtual void properties(const Point< 3 > &position_in_cartesian_coordinates, const Objects::NaturalCoordinate &position_in_natural_coordinates, const double depth, const std::vector< std::array< unsigned int, 3 >> &properties, const double gravity, const std::vector< size_t > &entry_in_output, std::vector< double > &output) const =0
static std::unique_ptr< Interface > create(const std::string &name, WorldBuilder::World *world)
WorldBuilder::World * world
WorldBuilder::Utilities::InterpolationType interpolation_type
std::size_t original_number_of_coordinates
std::string composition_submodule_name
std::vector< Point< 2 > > coordinates
virtual void parse_entries(Parameters &prm)=0