11#include "testing/testing.h"
20 const int curves_num = offsets.
size() - 1;
22 const int points_num = offsets.
last();
25 curves.offsets_for_write().copy_from(offsets);
26 curves.cyclic_for_write().copy_from(cyclic);
30 curves.attributes_for_write().lookup_or_add_for_write_span<
int>(
33 test_indices_writer.
finish();
38TEST(merge_curves, NoConnections)
41 {
false,
true,
true,
false});
47 src_curves, connect_to_curve, flip_direction, {});
53 EXPECT_EQ_ARRAY(
Span({
false,
true,
true,
false}).
data(), cyclic.
data(), 4);
56TEST(merge_curves, ConnectSingleCurve)
59 {
false,
true,
true,
false});
65 src_curves, connect_to_curve, flip_direction, {});
72 EXPECT_EQ_ARRAY(
Span({
false,
true,
false}).
data(), cyclic.
data(), 3);
73 EXPECT_EQ_ARRAY(
Span({0, 1, 2, 6, 7, 8, 9, 10, 11, 3, 4, 5}).
data(), dst_indices.
data(), 12);
76TEST(merge_curves, ReverseCurves)
79 {
false,
true,
true,
false});
81 Array<int> connect_to_curve = {-1, -1, -1, -1};
82 Array<bool> flip_direction = {
false,
true,
false,
true};
85 src_curves, connect_to_curve, flip_direction, {});
92 EXPECT_EQ_ARRAY(
Span({
false,
true,
true,
false}).
data(), cyclic.
data(), 3);
93 EXPECT_EQ_ARRAY(
Span({0, 1, 2, 5, 4, 3, 6, 7, 8, 11, 10, 9}).
data(), dst_indices.
data(), 12);
96TEST(merge_curves, ConnectAndReverseCurves)
99 {
false,
true,
true,
false});
102 Array<bool> flip_direction = {
true,
false,
true,
false};
105 src_curves, connect_to_curve, flip_direction, {});
112 EXPECT_EQ_ARRAY(
Span({
false,
true}).
data(), cyclic.
data(), 2);
113 EXPECT_EQ_ARRAY(
Span({3, 4, 5, 2, 1, 0, 9, 10, 11, 8, 7, 6}).
data(), dst_indices.
data(), 12);
116TEST(merge_curves, CyclicConnection)
119 {
false,
true,
true,
false});
125 src_curves, connect_to_curve, flip_direction, {});
132 EXPECT_EQ_ARRAY(
Span({
false,
true,
true}).
data(), cyclic.
data(), 3);
133 EXPECT_EQ_ARRAY(
Span({0, 1, 2, 3, 4, 5, 9, 10, 11, 6, 7, 8}).
data(), dst_indices.
data(), 12);
136TEST(merge_curves, SelfConnectCurve)
139 {
false,
false,
false,
false});
145 src_curves, connect_to_curve, flip_direction, {});
152 EXPECT_EQ_ARRAY(
Span({
false,
true,
true,
false}).
data(), cyclic.
data(), 4);
153 EXPECT_EQ_ARRAY(
Span({0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}).
data(), dst_indices.
data(), 12);
159 {
false,
true,
true,
false});
165 src_curves, connect_to_curve, flip_direction, {});
173 EXPECT_EQ_ARRAY(
Span({0, 1, 2, 6, 7, 8, 9, 10, 11, 3, 4, 5}).
data(), dst_indices.
data(), 12);
179 {
false,
true,
true,
false});
186 src_curves, connect_to_curve, flip_direction, {});
193 EXPECT_EQ_ARRAY(
Span({
false,
false,
false}).
data(), cyclic.
data(), 3);
194 EXPECT_EQ_ARRAY(
Span({0, 1, 2, 6, 7, 8, 3, 4, 5, 9, 10, 11}).
data(), dst_indices.
data(), 12);
Low-level operations for curves.
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
constexpr const T * data() const
constexpr int64_t size() const
constexpr const T & last(const int64_t n=0) const
constexpr bool is_empty() const
GAttributeReader lookup(const StringRef attribute_id) const
Span< int > offsets() const
AttributeAccessor attributes() const
VArray< bool > cyclic() const
void fill_index_range(MutableSpan< T > span, const T start=0)
TEST(merge_curves, NoConnections)
static bke::CurvesGeometry create_test_curves(Span< int > offsets, Span< bool > cyclic)
bke::CurvesGeometry curves_merge_endpoints(const bke::CurvesGeometry &src_curves, Span< int > connect_to_curve, Span< bool > flip_direction, const bke::AttributeFilter &attribute_filter)
MutableVArraySpan< T > span