Blender V5.0
obj_export_nurbs.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
12
13struct Curve;
14struct Nurb;
15struct OBJExportParams;
16
17namespace blender::bke {
18class CurvesGeometry;
19}
20
21namespace blender::io::obj {
22
33Span<float> valid_nurb_control_point_range(int8_t order,
34 Span<float> knots,
35 IndexRange &point_range);
36
41class IOBJCurve {
42 public:
43 virtual ~IOBJCurve() = default;
44
45 virtual const float4x4 &object_transform() const = 0;
46
47 virtual const char *get_curve_name() const = 0;
48
52 virtual int total_splines() const = 0;
57 virtual int total_spline_vertices(int spline_index) const = 0;
61 virtual int num_control_points_u(int spline_index) const = 0;
65 virtual int num_control_points_v(int spline_index) const = 0;
69 virtual int get_nurbs_degree_u(int spline_index) const = 0;
73 virtual int get_nurbs_degree_v(int spline_index) const = 0;
77 virtual bool get_cyclic_u(int spline_index) const = 0;
81 virtual Span<float> get_knots_u(int spline_index, Vector<float> &buffer) const = 0;
85 virtual Span<float3> vertex_coordinates(int spline_index,
86 Vector<float3> &dynamic_point_buffer) const = 0;
87};
88
90 private:
91 const bke::CurvesGeometry &curve_;
92 const float4x4 transform_;
93 const std::string name_;
94
95 public:
96 OBJCurves(const bke::CurvesGeometry &curve, const float4x4 &transform, const std::string &name);
97 virtual ~OBJCurves() override = default;
98
99 const float4x4 &object_transform() const override;
100
101 const char *get_curve_name() const override;
102
103 int total_splines() const override;
104 int total_spline_vertices(int spline_index) const override;
105 int num_control_points_u(int spline_index) const override;
106 int num_control_points_v(int spline_index) const override;
107 int get_nurbs_degree_u(int spline_index) const override;
108 int get_nurbs_degree_v(int spline_index) const override;
109 bool get_cyclic_u(int spline_index) const override;
110 Span<float> get_knots_u(int spline_index, Vector<float> &buffer) const override;
111 Span<float3> vertex_coordinates(int spline_index,
112 Vector<float3> &dynamic_point_buffer) const override;
113};
114
116 private:
117 const Object *export_object_eval_;
118 const Curve *export_curve_;
119
120 const Nurb *get_spline(int spline_index) const;
121
122 public:
123 OBJLegacyCurve(const Depsgraph *depsgraph, Object *curve_object);
124 virtual ~OBJLegacyCurve() override = default;
125
126 const float4x4 &object_transform() const override;
127
128 const char *get_curve_name() const override;
129
130 int total_splines() const override;
131 int total_spline_vertices(int spline_index) const override;
132 int num_control_points_u(int spline_index) const override;
133 int num_control_points_v(int spline_index) const override;
134 int get_nurbs_degree_u(int spline_index) const override;
135 int get_nurbs_degree_v(int spline_index) const override;
136 bool get_cyclic_u(int spline_index) const override;
137 Span<float> get_knots_u(int spline_index, Vector<float> &buffer) const override;
138 Span<float3> vertex_coordinates(int spline_index,
139 Vector<float3> &dynamic_point_buffer) const override;
140};
141
142} // namespace blender::io::obj
BPy_StructRNA * depsgraph
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
NonCopyable(const NonCopyable &other)=delete
virtual int total_splines() const =0
virtual int num_control_points_v(int spline_index) const =0
virtual const char * get_curve_name() const =0
virtual Span< float3 > vertex_coordinates(int spline_index, Vector< float3 > &dynamic_point_buffer) const =0
virtual int get_nurbs_degree_v(int spline_index) const =0
virtual Span< float > get_knots_u(int spline_index, Vector< float > &buffer) const =0
virtual int total_spline_vertices(int spline_index) const =0
virtual bool get_cyclic_u(int spline_index) const =0
virtual int num_control_points_u(int spline_index) const =0
virtual int get_nurbs_degree_u(int spline_index) const =0
virtual const float4x4 & object_transform() const =0
virtual ~IOBJCurve()=default
int num_control_points_v(int spline_index) const override
const char * get_curve_name() const override
int get_nurbs_degree_u(int spline_index) const override
int total_splines() const override
bool get_cyclic_u(int spline_index) const override
Span< float3 > vertex_coordinates(int spline_index, Vector< float3 > &dynamic_point_buffer) const override
OBJCurves(const bke::CurvesGeometry &curve, const float4x4 &transform, const std::string &name)
const float4x4 & object_transform() const override
virtual ~OBJCurves() override=default
int total_spline_vertices(int spline_index) const override
Span< float > get_knots_u(int spline_index, Vector< float > &buffer) const override
int num_control_points_u(int spline_index) const override
int get_nurbs_degree_v(int spline_index) const override
bool get_cyclic_u(int spline_index) const override
const float4x4 & object_transform() const override
int get_nurbs_degree_u(int spline_index) const override
int get_nurbs_degree_v(int spline_index) const override
int num_control_points_u(int spline_index) const override
OBJLegacyCurve(const Depsgraph *depsgraph, Object *curve_object)
const char * get_curve_name() const override
Span< float > get_knots_u(int spline_index, Vector< float > &buffer) const override
int total_spline_vertices(int spline_index) const override
int num_control_points_v(int spline_index) const override
Span< float3 > vertex_coordinates(int spline_index, Vector< float3 > &dynamic_point_buffer) const override
virtual ~OBJLegacyCurve() override=default
Span< float > valid_nurb_control_point_range(const int8_t order, const Span< float > knots, IndexRange &point_range)
MatBase< float, 4, 4 > float4x4
const char * name