Skip to content

Commit 6a2b8cd

Browse files
PointSet.Merge: print detailed warning instead of throwing Exception when points are slightly outside bounds
1 parent eeab58d commit 6a2b8cd

File tree

1 file changed

+61
-6
lines changed
  • src/Aardvark.Geometry.PointSet/Octrees

1 file changed

+61
-6
lines changed

src/Aardvark.Geometry.PointSet/Octrees/Merge.cs

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,67 @@ internal static (IPointCloudNode, bool) CollapseLeafNodes(this IPointCloudNode s
180180
for (var i = 0; i < psla.Count; i++)
181181
{
182182
var p = psla[i];
183-
if (p.X <= bb.Min.X) { if (!p.X.ApproximateEquals(bb.Min.X, eps.X)) throw new Exception($"Invariant 4840fe92-02df-4b9a-8233-18edb12656f9."); p.X = bb.Min.X + eps.X; }
184-
if (p.Y <= bb.Min.Y) { if (!p.Y.ApproximateEquals(bb.Min.Y, eps.Y)) throw new Exception($"Invariant 942019a9-cb0d-476c-bfb8-69a2bde8debf."); p.Y = bb.Min.Y + eps.Y; }
185-
if (p.Z <= bb.Min.Z) { if (!p.Z.ApproximateEquals(bb.Min.Z, eps.Z)) throw new Exception($"Invariant 68fd4c9e-6de1-4a43-91ae-fec4a9fb28df."); p.Z = bb.Min.Z + eps.Z; }
186-
if (p.X >= bb.Max.X) { if (!p.X.ApproximateEquals(bb.Max.X, eps.X)) throw new Exception($"Invariant a24f717c-19d9-46eb-9cf5-b1f6d928963a."); p.X = bb.Max.X - eps.X; }
187-
if (p.Y >= bb.Max.Y) { if (!p.Y.ApproximateEquals(bb.Max.Y, eps.Y)) throw new Exception($"Invariant fd8aaa89-43d3-428c-9d95-a62bf5a41b07."); p.Y = bb.Max.Y - eps.Y; }
188-
if (p.Z >= bb.Max.Z) { if (!p.Z.ApproximateEquals(bb.Max.Z, eps.Z)) throw new Exception($"Invariant 9905f569-16d0-4e46-8ae2-147aeb6e7acc."); p.Z = bb.Max.Z - eps.Z; }
183+
if (p.X <= bb.Min.X)
184+
{
185+
if (!p.X.ApproximateEquals(bb.Min.X, eps.X)) Report.Warn(
186+
$"[WARNING] Invariant p.X <= bb.Min.X ({p.X} <= {bb.Min.X}, eps.X = {bb.Min.X + eps.X}). " +
187+
$"Bounding box is {bb}. " +
188+
$"Shifting p={p} to p.X={bb.Min.X}. " +
189+
$"Warning 4840fe92-02df-4b9a-8233-18edb12656f9."
190+
);
191+
p.X = bb.Min.X + eps.X;
192+
}
193+
if (p.Y <= bb.Min.Y)
194+
{
195+
if (!p.Y.ApproximateEquals(bb.Min.Y, eps.Y)) Report.Warn(
196+
$"[WARNING] Invariant p.Y <= bb.Min.Y ({p.Y} <= {bb.Min.Y}, eps.Y = {bb.Min.Y + eps.Y}). " +
197+
$"Bounding box is {bb} ." +
198+
$"Shifting p={p} to p.Y={bb.Min.Y}. " +
199+
$"Warning 942019a9-cb0d-476c-bfb8-69a2bde8debf."
200+
);
201+
p.Y = bb.Min.Y + eps.Y;
202+
}
203+
if (p.Z <= bb.Min.Z)
204+
{
205+
if (!p.Z.ApproximateEquals(bb.Min.Z, eps.Z)) Report.Warn(
206+
$"[WARNING] Invariant p.Z <= bb.Min.Z ({p.Z} <= {bb.Min.Z}, eps.Z = {bb.Min.Z + eps.Z}). " +
207+
$"Bounding box is {bb}. " +
208+
$"Shifting p={p} to p.Z={bb.Min.Z}. " +
209+
$"Warning 68fd4c9e-6de1-4a43-91ae-fec4a9fb28df."
210+
);
211+
p.Z = bb.Min.Z + eps.Z;
212+
}
213+
if (p.X >= bb.Max.X)
214+
{
215+
if (!p.X.ApproximateEquals(bb.Max.X, eps.X)) Report.Warn(
216+
$"[WARNING] Invariant p.X >= bb.Max.X ({p.X} >= {bb.Max.X}, eps.X = {bb.Max.X - eps.X}). " +
217+
$"Bounding box is {bb}. " +
218+
$"Shifting p={p} to p.X={bb.Max.X}. " +
219+
$"Warning a24f717c-19d9-46eb-9cf5-b1f6d928963a."
220+
);
221+
p.X = bb.Max.X - eps.X;
222+
}
223+
if (p.Y >= bb.Max.Y)
224+
{
225+
if (!p.Y.ApproximateEquals(bb.Max.Y, eps.Y)) Report.Warn(
226+
$"[WARNING] Invariant p.Y >= bb.Max.Y ({p.Y} >= {bb.Max.Y}, eps.Y = {bb.Max.Y - eps.Y}). " +
227+
$"Bounding box is {bb}. " +
228+
$"Shifting p={p} to p.Y={bb.Max.Y}. " +
229+
$"Warning fd8aaa89-43d3-428c-9d95-a62bf5a41b07."
230+
);
231+
p.Y = bb.Max.Y - eps.Y;
232+
}
233+
if (p.Z >= bb.Max.Z)
234+
{
235+
if (!p.Z.ApproximateEquals(bb.Max.Z, eps.Z)) Report.Warn(
236+
$"[WARNING] Invariant p.Z >= bb.Max.Z ({p.Z} >= {bb.Max.Z}, eps.Z = {bb.Max.Z - eps.Z}). " +
237+
$"Bounding box is {bb}. " +
238+
$"Shifting p={p} to p.Z={bb.Max.Z}. " +
239+
$"Warning 9905f569-16d0-4e46-8ae2-147aeb6e7acc."
240+
);
241+
p.Z = bb.Max.Z - eps.Z;
242+
}
243+
189244
psla[i] = p;
190245
}
191246
var bbNew = new Box3d(psla);

0 commit comments

Comments
 (0)