2022-11-14 09:38:51 +01:00
|
|
|
#ifndef PROFILE_HELPER_H
|
|
|
|
|
#define PROFILE_HELPER_H
|
|
|
|
|
|
2023-03-21 20:15:01 +01:00
|
|
|
#include "taxonomy.h"
|
2022-11-14 09:38:51 +01:00
|
|
|
|
2023-03-21 20:15:01 +01:00
|
|
|
namespace ifcopenshell {
|
|
|
|
|
|
|
|
|
|
namespace geometry {
|
|
|
|
|
struct profile_point {
|
|
|
|
|
std::array<double, 2> xy;
|
|
|
|
|
boost::optional<double> radius;
|
2025-08-27 11:03:16 +02:00
|
|
|
|
|
|
|
|
profile_point(const std::array<double, 2>& p, const boost::optional<double>& r = boost::none)
|
|
|
|
|
: xy(p), radius(r) {
|
|
|
|
|
}
|
2023-03-21 20:15:01 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct profile_point_with_edges {
|
|
|
|
|
Eigen::Vector2d xy;
|
|
|
|
|
boost::optional<double> radius;
|
2023-07-27 16:42:06 +08:00
|
|
|
taxonomy::edge::ptr previous, next;
|
2023-03-21 20:15:01 +01:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
struct profile_point_with_edges_3d {
|
|
|
|
|
Eigen::Vector3d xy;
|
|
|
|
|
boost::optional<double> radius;
|
2023-07-27 16:42:06 +08:00
|
|
|
taxonomy::edge::ptr previous, next;
|
2023-03-21 20:15:01 +01:00
|
|
|
};
|
|
|
|
|
|
2023-07-27 16:42:06 +08:00
|
|
|
taxonomy::loop::ptr polygon_from_points(const std::vector<taxonomy::point3::ptr>& ps, bool external = true);
|
2023-03-21 20:15:01 +01:00
|
|
|
|
2023-07-27 16:42:06 +08:00
|
|
|
taxonomy::loop::ptr profile_helper(const taxonomy::matrix4::ptr& m4, const std::vector<profile_point>& points);
|
2023-03-21 20:15:01 +01:00
|
|
|
|
2023-07-27 16:42:06 +08:00
|
|
|
taxonomy::loop::ptr fillet_loop(taxonomy::loop::ptr lp, double radius);
|
2024-12-10 21:30:43 +01:00
|
|
|
|
|
|
|
|
void remove_duplicate_points_from_loop(std::vector<taxonomy::point3::ptr>& polygon, bool closed, double tol);
|
2022-11-14 09:38:51 +01:00
|
|
|
}
|
2023-03-21 20:15:01 +01:00
|
|
|
|
2022-11-14 09:38:51 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif
|