@@ -121,6 +121,81 @@ TEST(primal_OBBox, obb_ctor_from_data)
121
121
EXPECT_TRUE (obbox1.getExtents () == e);
122
122
}
123
123
124
+ // ------------------------------------------------------------------------------
125
+ TEST (primal_OBBox, obb_ctor_from_point_array)
126
+ {
127
+ constexpr int DIM = 3 ;
128
+ using CoordType = double ;
129
+ using QPoint = primal::Point <CoordType, DIM>;
130
+ using QOBBox = primal::OrientedBoundingBox<CoordType, DIM>;
131
+
132
+ QPoint pt1; // origin
133
+ QPoint pt2 ({1.0 , 0.0 , 0.0 });
134
+ QPoint pt3 ({0.0 , 1.0 , 0.0 });
135
+ QPoint pt4 ({0.0 , 0.0 , 1.0 });
136
+ QPoint pt5 ({1.0 , 1.0 , 0.0 });
137
+ QPoint pt6 ({1.0 , 0.0 , 1.0 });
138
+ QPoint pt7 ({0.0 , 1.0 , 1.0 });
139
+ QPoint pt8 ({1.0 , 1.0 , 1.0 });
140
+
141
+ /* -1D OBB */
142
+ QPoint* pts_00 = nullptr ;
143
+ QOBBox obbox00 (pts_00, 0 );
144
+
145
+ EXPECT_FALSE (obbox00.isValid ());
146
+
147
+ /* 0D OBB */
148
+ QPoint pts_0d[] = {pt1};
149
+ QOBBox obbox0 (pts_0d, 1 );
150
+
151
+ EXPECT_TRUE (obbox0.isValid ());
152
+ EXPECT_TRUE (obbox0.contains (pt1));
153
+
154
+ EXPECT_NEAR (obbox0.getCentroid ()[0 ], 0.0 , 1e-6 );
155
+ EXPECT_NEAR (obbox0.getCentroid ()[1 ], 0.0 , 1e-6 );
156
+ EXPECT_NEAR (obbox0.getCentroid ()[2 ], 0.0 , 1e-6 );
157
+
158
+ /* 1D OBB */
159
+ QPoint pts_1d[] = {pt1, pt2};
160
+ QOBBox obbox1 (pts_1d, 2 );
161
+
162
+ EXPECT_TRUE (obbox1.isValid ());
163
+ EXPECT_TRUE (obbox1.contains (pt1));
164
+ EXPECT_TRUE (obbox1.contains (pt2));
165
+
166
+ EXPECT_NEAR (obbox1.getCentroid ()[0 ], 0.5 , 1e-6 );
167
+ EXPECT_NEAR (obbox1.getCentroid ()[1 ], 0.0 , 1e-6 );
168
+ EXPECT_NEAR (obbox1.getCentroid ()[2 ], 0.0 , 1e-6 );
169
+
170
+ /* 2D OBB */
171
+ QPoint pts_2d[] = {pt1, pt2, pt3, pt5};
172
+ QOBBox obbox2 (pts_2d, 4 );
173
+
174
+ EXPECT_TRUE (obbox2.isValid ());
175
+ EXPECT_TRUE (obbox2.contains (pt1));
176
+ EXPECT_TRUE (obbox2.contains (pt2));
177
+ EXPECT_TRUE (obbox2.contains (pt3));
178
+ EXPECT_TRUE (obbox2.contains (pt5));
179
+
180
+ EXPECT_NEAR (obbox2.getCentroid ()[0 ], 0.5 , 1e-6 );
181
+ EXPECT_NEAR (obbox2.getCentroid ()[1 ], 0.5 , 1e-6 );
182
+ EXPECT_NEAR (obbox2.getCentroid ()[2 ], 0.0 , 1e-6 );
183
+
184
+ /* 3D OBB */
185
+ QPoint pts_3d[] = {pt1, pt2, pt3, pt4, pt5, pt6, pt7, pt8};
186
+ QOBBox obbox3 (pts_3d, 8 );
187
+
188
+ // check containments
189
+ EXPECT_TRUE (obbox3.isValid ());
190
+ for (int i = 0 ; i < 8 ; i++)
191
+ {
192
+ EXPECT_TRUE (obbox3.contains (pts_3d[i]));
193
+ }
194
+
195
+ // check settings
196
+ EXPECT_TRUE (obbox3.getCentroid () == QPoint (0.5 ));
197
+ }
198
+
124
199
// ------------------------------------------------------------------------------
125
200
TEST (primal_OBBox, obb_test_clear)
126
201
{
0 commit comments