Program Listing for File function_item_evaluator.h¶
↰ Return to documentation for file (src/ifcgeom/function_item_evaluator.h)
#ifndef ITERATOR_PWF_EVALUATOR_H
#define ITERATOR_PWF_EVALUATOR_H
#include "../ifcgeom/taxonomy.h"
namespace ifcopenshell { namespace geom {
IFC_GEOM_API std::vector<double> helmert_curve_point(double A0, double A1, double A2, double s);
inline taxonomy::function_item::ptr convert_loop_to_function_item(taxonomy::loop::ptr loop) {
return ifcopenshell::geom::taxonomy::dcast<taxonomy::function_item>(loop);
}
#ifndef SWIG
struct sampled_section {
Eigen::Vector3d origin;
std::vector<std::vector<Eigen::Vector3d>> loops;
};
using section_function = std::function<sampled_section(double)>;
IFC_GEOM_API std::vector<double> deflection_samples(std::vector<double> boundaries, const section_function& section_at, double linear_deflection, double angular_deflection, double tolerance);
#endif
struct IFC_GEOM_API fn_evaluator {
fn_evaluator(const ifcopenshell::geom::settings& settings, ifcopenshell::logger& logger = ifcopenshell::logger::root()) : settings_(settings), logger_(logger) {
}
fn_evaluator(const fn_evaluator& other) = default;
virtual ~fn_evaluator() = default;
virtual fn_evaluator* clone() const = 0;
virtual Eigen::Matrix4d evaluate(double u) const = 0;
virtual double start() const = 0;
virtual double end() const = 0;
double length() const { return end() - start(); }
#ifndef SWIG
virtual std::vector<double> boundaries() const = 0;
#endif
ifcopenshell::geom::settings settings_;
protected:
ifcopenshell::logger& logger_;
};
class IFC_GEOM_API function_item_evaluator {
public:
function_item_evaluator(const ifcopenshell::geom::settings& settings, taxonomy::function_item::const_ptr fn, ifcopenshell::logger& logger = ifcopenshell::logger::root());
function_item_evaluator(const function_item_evaluator& other);
~function_item_evaluator();
std::vector<double> evaluation_points() const;
#ifndef SWIG
std::vector<double> boundaries() const;
#endif
std::vector<double> evaluation_points(double ustart, double uend, unsigned nsteps) const;
taxonomy::item::ptr evaluate() const;
taxonomy::item::ptr evaluate(double ustart, double uend, unsigned nsteps) const;
Eigen::Matrix4d evaluate(double u) const;
private:
taxonomy::item::ptr evaluate(const std::vector<double>& dist) const;
fn_evaluator* fn_evaluator_ = nullptr;
mutable std::optional<std::vector<double>> eval_points_; // cache evaluation points
ifcopenshell::logger& logger_;
};
}}
#endif