mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-09 13:52:23 +00:00
Updates alignment api
Fixes mapping of vertical alignment parabola business logic to geometry. Adds creation function of h and v alignment. Adds stationing referent at start of alignment. Fixes utility functions
This commit is contained in:
@@ -1,8 +1,16 @@
|
||||
#include "function_item_evaluator.h"
|
||||
#include "profile_helper.h"
|
||||
|
||||
#include <boost/math/quadrature/trapezoidal.hpp>
|
||||
|
||||
using namespace ifcopenshell::geometry;
|
||||
|
||||
double ifcopenshell::geometry::polynomial_length(double A, double B, double C, double horizontal_length) {
|
||||
auto fn = [A, B, C](double x) -> double { return sqrt(pow(B + 2 * C * x, 2.0) + 1.0); };
|
||||
auto l = boost::math::quadrature::trapezoidal(fn, 0.0, horizontal_length);
|
||||
return l;
|
||||
}
|
||||
|
||||
|
||||
struct functor_fn_evaluator : public fn_evaluator {
|
||||
functor_fn_evaluator(taxonomy::functor_item::const_ptr fn, const ifcopenshell::geometry::Settings& settings) : fn_evaluator(settings),
|
||||
|
||||
@@ -7,6 +7,17 @@
|
||||
|
||||
namespace ifcopenshell { namespace geometry {
|
||||
|
||||
/// @brief Computes the curve length of a polynomial of the form y = A + Bx + Cx^2
|
||||
/// This function is needed on the python side. To do this computation, a large library like scipy
|
||||
/// is needed. That is too much overhead. For this reason, a simple function is here on the C++ side
|
||||
/// that the python side can call
|
||||
/// @param A constant term
|
||||
/// @param B linear term
|
||||
/// @param C quadradic term
|
||||
/// @param horizontal_length length of the polynomal projected onto the horizontal axis
|
||||
/// @return curve length
|
||||
double polynomial_length(double A, double B, double C,double horizontal_length);
|
||||
|
||||
/// @brief Abstract class for evaluating a function_item. This class is specialized for each of the function_item types.
|
||||
struct fn_evaluator {
|
||||
fn_evaluator(const ifcopenshell::geometry::Settings& settings) : settings_(settings) {
|
||||
|
||||
Reference in New Issue
Block a user