25#ifndef OCCTL_HPP_CURVES_HPP
26#define OCCTL_HPP_CURVES_HPP
39#if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L
41 #define OCCTL_HPP_HAS_SPAN 1
43 #define OCCTL_HPP_HAS_SPAN 0
64 explicit operator bool() const noexcept {
return myGraph !=
nullptr && myId.
bits != 0; }
78 return Curve(myGraph, aId);
87 return Curve(myGraph, aId);
96 return Curve(myGraph, aId);
105 return Curve(myGraph, aId);
114 return Curve(myGraph, aId);
134 return {aParam, aDist};
324 std::vector<occtl_point3_t> aVec(aNb);
335 std::vector<double> aVec(aNb);
346 std::vector<int32_t> aVec(aNb);
357 std::vector<double> aVec(aNb);
368 std::vector<double> aVec(aNb);
495 struct IntersectionPoint;
496 std::vector<IntersectionPoint> intersect_with(
const Curve& theOther)
const;
509 std::pair<occtl_point3_t, occtl_vector3_t>
eval_d1(
const double theU)
const
519 std::tuple<occtl_point3_t, occtl_vector3_t, occtl_vector3_t>
eval_d2(
const double theU)
const
524 return {aP, aD1, aD2};
529 std::tuple<occtl_point3_t, occtl_vector3_t, occtl_vector3_t, occtl_vector3_t>
eval_d3(
530 const double theU)
const
535 return {aP, aD1, aD2, aD3};
598 int32_t degree()
const noexcept {
return raw.
degree; }
600 bool is_rational()
const noexcept {
return raw.
is_rational != 0; }
602 bool is_periodic()
const noexcept {
return raw.
is_periodic != 0; }
604 bool is_closed()
const noexcept {
return raw.
is_closed != 0; }
611 size_t pole_count()
const noexcept {
return raw.
pole_count; }
613 size_t knot_count()
const noexcept {
return raw.
knot_count; }
615 size_t flat_knot_count()
const noexcept {
return raw.
flat_knot_count; }
617#if OCCTL_HPP_HAS_SPAN
618 std::span<const occtl_point3_t> poles()
const noexcept {
return {raw.
poles, raw.
pole_count}; }
620 std::span<const double> weights()
const noexcept
623 : std::span<const double>{};
626 std::span<const double> knots()
const noexcept {
return {raw.
knots, raw.
knot_count}; }
628 std::span<const int32_t> multiplicities()
const noexcept
633 std::span<const double> flat_knots()
const noexcept
640 const double* weights()
const noexcept {
return raw.
weights; }
642 const double* knots()
const noexcept {
return raw.
knots; }
644 const int32_t* multiplicities()
const noexcept {
return raw.
multiplicities; }
646 const double* flat_knots()
const noexcept {
return raw.
flat_knots; }
653 aView.raw = OCCTL_CURVE_BSPLINE_INIT;
658inline std::vector<Curve::IntersectionPoint> Curve::intersect_with(
const Curve& theOther)
const
663 std::vector<IntersectionPoint> aResult(aNb);
664 for (
size_t anI = 0; anI < aNb; ++anI)
Non-owning reference to a 3D geometric curve stored in a graph.
Definition curves.hpp:54
static Curve from_circle(occtl_graph_t *graph, const occtl_geom_circle_t &theCircle)
Constructs a curve from a circle.
Definition curves.hpp:395
std::tuple< occtl_point3_t, occtl_vector3_t, occtl_vector3_t > eval_d2(const double theU) const
Evaluates point, first, and second derivatives at theU.
Definition curves.hpp:519
std::pair< occtl_point3_t, occtl_vector3_t > eval_d1(const double theU) const
Evaluates point and first derivative at theU.
Definition curves.hpp:509
int32_t bspline_is_rational() const
Returns 1 when the B-spline is rational (NURBS), 0 otherwise.
Definition curves.hpp:284
int32_t bezier_is_rational() const
Returns 1 when the Bezier curve is rational, 0 otherwise.
Definition curves.hpp:311
std::vector< double > bspline_flat_knots() const
Copies the expanded (flat) knot sequence into a vector.
Definition curves.hpp:364
occtl_rep_id_t id() const noexcept
Returns the representation id.
Definition curves.hpp:70
Curve transformed(const Transform &theTrsf) const
Returns a transformed copy of this curve stored in the same graph.
Definition curves.hpp:83
occtl_geom_continuity_t continuity() const
Returns the geometric continuity class.
Definition curves.hpp:175
static Curve from_offset(occtl_graph_t *graph, const occtl_curve_offset_create_info_t &theInfo)
Constructs an offset curve.
Definition curves.hpp:458
std::vector< int32_t > bspline_multiplicities() const
Copies all knot multiplicities into a std::vector<int32_t>.
Definition curves.hpp:342
int32_t is_periodic() const
Returns 1 when the curve is periodic, 0 otherwise.
Definition curves.hpp:157
static Curve from_approximation(occtl_graph_t *graph, const occtl_curve_approximated_info_t &theInfo)
Constructs a curve by approximating the given points.
Definition curves.hpp:477
std::pair< double, double > project_point(const Point3 &thePoint) const
Projects a point onto the curve.
Definition curves.hpp:129
const occtl_point3_t * bspline_poles_view(size_t &theCount) const
Returns a zero-copy view of the poles array.
Definition curves.hpp:377
static Curve from_line(occtl_graph_t *graph, const occtl_geom_line_t &theLine)
Constructs a curve from a line.
Definition curves.hpp:386
static Curve from_hyperbola(occtl_graph_t *graph, const occtl_geom_hyperbola_t &theHyperbola)
Constructs a curve from a hyperbola.
Definition curves.hpp:413
size_t bspline_knot_count() const
Returns the number of distinct knot values.
Definition curves.hpp:275
int32_t is_closed() const
Returns 1 when the curve is closed, 0 otherwise.
Definition curves.hpp:166
occtl_geom_circle_t as_circle() const
Extracts the underlying circle.
Definition curves.hpp:200
size_t bezier_pole_count() const
Returns the number of Bezier poles.
Definition curves.hpp:302
std::tuple< occtl_point3_t, occtl_vector3_t, occtl_vector3_t, occtl_vector3_t > eval_d3(const double theU) const
Evaluates point, first, second, and third derivatives at theU.
Definition curves.hpp:529
static Curve from_bezier(occtl_graph_t *graph, const occtl_curve_bezier_create_info_t &theInfo)
Constructs a Bezier curve from the given create info.
Definition curves.hpp:440
static Curve from_interpolation(occtl_graph_t *graph, const occtl_curve_interpolated_info_t &theInfo)
Constructs a curve by interpolating through the given points.
Definition curves.hpp:467
occtl_geom_parabola_t as_parabola() const
Extracts the underlying parabola.
Definition curves.hpp:227
Curve reversed() const
Returns a reversed copy of this curve stored in the same graph.
Definition curves.hpp:74
static Curve from_bspline(occtl_graph_t *graph, const occtl_curve_bspline_create_info_t &theInfo)
Constructs a B-spline curve from the given create info.
Definition curves.hpp:431
TrimmedView as_trimmed() const
Extracts the parameter bounds from a trimmed curve.
Definition curves.hpp:572
double length() const
Returns the curve length over its full parameter range.
Definition curves.hpp:119
std::vector< occtl_point3_t > bspline_poles() const
Copies all poles into a std::vector<occtl_point3_t>.
Definition curves.hpp:320
Curve scaled(const Point3 &theOrigin, double theFactor) const
Returns a scaled copy of this curve stored in the same graph.
Definition curves.hpp:110
void parameter_range(double &theUMin, double &theUMax) const
Returns the parameter range [u_min, u_max] via out-parameters.
Definition curves.hpp:184
occtl_geom_line_t as_line() const
Extracts the underlying line.
Definition curves.hpp:191
occtl_vector3_t eval_dn(const double theU, const int32_t theN) const
Returns the N-th derivative vector at theU.
Definition curves.hpp:540
static Curve from_trimmed(occtl_graph_t *graph, const occtl_curve_trimmed_create_info_t &theInfo)
Constructs a trimmed curve.
Definition curves.hpp:449
BSplineView as_bspline() const
Returns a §10.5 aggregate inspection view of a B-spline curve.
Definition curves.hpp:650
occtl_geom_ellipse_t as_ellipse() const
Extracts the underlying ellipse.
Definition curves.hpp:209
occtl_graph_t * graph() const noexcept
Borrows it — returns the graph pointer.
Definition curves.hpp:67
Curve translated(const Vector3 &theDelta) const
Returns a translated copy of this curve stored in the same graph.
Definition curves.hpp:92
OffsetView as_offset() const
Extracts the scalar offset and reference direction of an offset curve.
Definition curves.hpp:580
int32_t bezier_degree() const
Returns the Bezier polynomial degree.
Definition curves.hpp:293
size_t bspline_pole_count() const
Returns the number of poles.
Definition curves.hpp:266
static Curve from_parabola(occtl_graph_t *graph, const occtl_geom_parabola_t &theParabola)
Constructs a curve from a parabola.
Definition curves.hpp:422
static Curve from_ellipse(occtl_graph_t *graph, const occtl_geom_ellipse_t &theEllipse)
Constructs a curve from an ellipse.
Definition curves.hpp:404
occtl_curve_kind_t kind() const
Returns the kind of geometry.
Definition curves.hpp:148
static Curve from_airfoil_naca4(occtl_graph_t *graph, const occtl_curve_airfoil_naca4_info_t &theInfo)
Constructs a NACA 4-digit airfoil profile as a B-spline curve.
Definition curves.hpp:487
Curve(occtl_graph_t *theGraph=nullptr, occtl_rep_id_t theId=occtl_rep_id_t{0}) noexcept
Constructs a null reference (no graph, invalid id).
Definition curves.hpp:57
Curve rotated(const Axis1Placement &theAxis, double theAngle) const
Returns a rotated copy of this curve stored in the same graph.
Definition curves.hpp:101
occtl_point3_t eval_d0(const double theU) const
Evaluates the curve point at parameter theU.
Definition curves.hpp:500
int32_t bspline_degree() const
Returns the polynomial degree.
Definition curves.hpp:257
occtl_geom_hyperbola_t as_hyperbola() const
Extracts the underlying hyperbola.
Definition curves.hpp:218
std::vector< double > bspline_knots() const
Copies all distinct knot values into a std::vector<double>.
Definition curves.hpp:331
double parameter_of_point(const Point3 &thePoint) const
Returns the parameter on the curve nearest to a given point.
Definition curves.hpp:139
std::vector< double > bspline_weights() const
Copies all weights into a std::vector<double>.
Definition curves.hpp:353
C++ veneer for the core module.
void check(const ::occtl_status_t theStatus)
Throw on non-OK; otherwise a no-op.
Definition core.hpp:85
C++ veneer for the geom module.
OCCT-Light: 3D curve representation in the topology graph.
occtl_status_t occtl_curve_reverse(occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_bspline_pole_count(const occtl_graph_t *graph, occtl_rep_id_t curve_id, size_t *out_count)
occtl_status_t occtl_curve_create_ellipse(occtl_graph_t *graph, occtl_geom_ellipse_t ellipse, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_length(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_length)
occtl_status_t occtl_curve_create_trimmed(occtl_graph_t *graph, const occtl_curve_trimmed_create_info_t *info, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_rotated(occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_axis1_placement_t axis, double angle, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_as_offset(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_offset, occtl_vector3_t *out_offset_dir)
occtl_status_t occtl_curve_as_trimmed(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_u_first, double *out_u_last)
occtl_status_t occtl_curve_translated(occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_vector3_t delta, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_bspline_poles(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_point3_t *out_buf, size_t capacity, size_t *out_count)
occtl_status_t occtl_curve_project_point(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_point3_t point, double *out_param, double *out_distance)
occtl_status_t occtl_curve_bspline_degree(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_degree)
occtl_status_t occtl_curve_bspline_is_rational(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_is_rational)
occtl_status_t occtl_curve_is_periodic(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_is_periodic)
occtl_status_t occtl_curve_as_parabola(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_geom_parabola_t *out_parabola)
occtl_status_t occtl_curve_eval_d0(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double u, occtl_point3_t *out_point)
occtl_status_t occtl_curve_continuity(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_geom_continuity_t *out_continuity)
occtl_status_t occtl_curve_bspline_knots(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_buf, size_t capacity, size_t *out_count)
occtl_status_t occtl_curve_parameter_of_point(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_point3_t point, double *out_param)
occtl_status_t occtl_curve_create_hyperbola(occtl_graph_t *graph, occtl_geom_hyperbola_t hyperbola, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_create_approximated(occtl_graph_t *graph, const occtl_curve_approximated_info_t *info, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_bezier_degree(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_degree)
occtl_status_t occtl_curve_as_line(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_geom_line_t *out_line)
occtl_status_t occtl_curve_eval_d2(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double u, occtl_point3_t *out_point, occtl_vector3_t *out_d1, occtl_vector3_t *out_d2)
occtl_status_t occtl_curve_create_bezier(occtl_graph_t *graph, const occtl_curve_bezier_create_info_t *info, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_eval_d1(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double u, occtl_point3_t *out_point, occtl_vector3_t *out_d1)
occtl_status_t occtl_curve_create_airfoil_naca4(occtl_graph_t *graph, const occtl_curve_airfoil_naca4_info_t *info, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_as_circle(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_geom_circle_t *out_circle)
occtl_status_t occtl_curve_eval_dn(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double u, int32_t n, occtl_vector3_t *out_derivative)
occtl_status_t occtl_curve_parameter_range(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_u_min, double *out_u_max)
occtl_status_t occtl_curve_bspline_multiplicities(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_buf, size_t capacity, size_t *out_count)
occtl_status_t occtl_curve_eval_d3(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double u, occtl_point3_t *out_point, occtl_vector3_t *out_d1, occtl_vector3_t *out_d2, occtl_vector3_t *out_d3)
occtl_status_t occtl_curve_create_interpolated(occtl_graph_t *graph, const occtl_curve_interpolated_info_t *info, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_as_hyperbola(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_geom_hyperbola_t *out_hyperbola)
occtl_status_t occtl_curve_bspline_flat_knots(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_buf, size_t capacity, size_t *out_count)
occtl_status_t occtl_curve_transformed(occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_transform_t transform, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_scaled(occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_point3_t origin, double factor, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_is_closed(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_is_closed)
occtl_status_t occtl_curve_bspline_weights(const occtl_graph_t *graph, occtl_rep_id_t curve_id, double *out_buf, size_t capacity, size_t *out_count)
occtl_status_t occtl_curve_bezier_pole_count(const occtl_graph_t *graph, occtl_rep_id_t curve_id, size_t *out_count)
occtl_status_t occtl_curve_intersect(occtl_graph_t *graph, occtl_rep_id_t curve_id_a, occtl_rep_id_t curve_id_b, const occtl_curve_intersection_point_t **out_results, size_t *out_count)
occtl_status_t occtl_curve_bezier_is_rational(const occtl_graph_t *graph, occtl_rep_id_t curve_id, int32_t *out_is_rational)
occtl_status_t occtl_curve_create_bspline(occtl_graph_t *graph, const occtl_curve_bspline_create_info_t *info, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_bspline_knot_count(const occtl_graph_t *graph, occtl_rep_id_t curve_id, size_t *out_count)
occtl_status_t occtl_curve_as_bspline(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_curve_bspline_t *out)
occtl_status_t occtl_curve_bspline_poles_view(const occtl_graph_t *graph, occtl_rep_id_t curve_id, const occtl_point3_t **out_data, size_t *out_count)
occtl_status_t occtl_curve_as_ellipse(const occtl_graph_t *graph, occtl_rep_id_t curve_id, occtl_geom_ellipse_t *out_ellipse)
occtl_status_t occtl_curve_create_circle(occtl_graph_t *graph, occtl_geom_circle_t circle, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_create_parabola(occtl_graph_t *graph, occtl_geom_parabola_t parabola, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_create_line(occtl_graph_t *graph, occtl_geom_line_t line, occtl_rep_id_t *out_id)
occtl_status_t occtl_curve_create_offset(occtl_graph_t *graph, const occtl_curve_offset_create_info_t *info, occtl_rep_id_t *out_id)
occtl_curve_kind
Definition occtl_curves_common.h:45
enum occtl_curve_kind occtl_curve_kind_t
enum occtl_geom_continuity occtl_geom_continuity_t
struct occtl_graph occtl_graph_t
Definition occtl_topo_types.h:152
Directed line in 3D (origin + unit direction). Mirrors occtl_axis1_placement_t.
Definition geom.hpp:365
const occtl_axis1_placement_t & c_type() const noexcept
Borrows-it view of the underlying C value type.
Definition geom.hpp:379
Aggregate inspection view of a B-spline curve (§10.5).
Definition curves.hpp:595
A single intersection point between two curves.
Definition curves.hpp:566
double param_b
Parameter on the second curve.
Definition curves.hpp:569
double param_a
Parameter on the first curve.
Definition curves.hpp:568
occtl_point3_t point
Intersection point in 3D.
Definition curves.hpp:567
Definition curves.hpp:559
Definition curves.hpp:553
3D point value type. Mirrors occtl_point3_t with STL-flavoured access.
Definition geom.hpp:82
const occtl_point3_t & c_type() const noexcept
Borrows-it view of the underlying C value type, for direct ABI calls.
Definition geom.hpp:102
3D free-vector value type. Mirrors occtl_vector3_t.
Definition geom.hpp:184
const occtl_vector3_t & c_type() const noexcept
Borrows-it view of the underlying C value type.
Definition geom.hpp:204
Definition occtl_geom.h:111
Definition occtl_curves.h:1289
Definition occtl_curves.h:1444
Definition occtl_curves.h:221
Definition occtl_curves.h:159
Definition occtl_curves.h:1088
int32_t is_rational
Definition occtl_curves.h:1093
const int32_t * multiplicities
Definition occtl_curves.h:1109
size_t pole_count
Definition occtl_curves.h:1097
size_t knot_count
Definition occtl_curves.h:1098
const double * weights
Definition occtl_curves.h:1106
const double * knots
Definition occtl_curves.h:1108
int32_t is_periodic
Definition occtl_curves.h:1094
const double * flat_knots
Definition occtl_curves.h:1110
size_t flat_knot_count
Definition occtl_curves.h:1099
int32_t degree
Definition occtl_curves.h:1092
int32_t continuity
Definition occtl_curves.h:1096
int32_t is_closed
Definition occtl_curves.h:1095
const occtl_point3_t * poles
Definition occtl_curves.h:1105
Definition occtl_curves.h:1385
Definition occtl_curves.h:1548
double param_a
Definition occtl_curves.h:1550
occtl_point3_t point
Definition occtl_curves.h:1549
double param_b
Definition occtl_curves.h:1551
Definition occtl_curves.h:294
Definition occtl_curves_common.h:86
Definition occtl_geom.h:820
Definition occtl_geom.h:832
Definition occtl_geom.h:845
Definition occtl_geom.h:857
Definition occtl_geom.h:76
Definition occtl_core.h:251
uint64_t bits
Definition occtl_core.h:252
Definition occtl_geom.h:84