Skip to Content.
Sympa Menu

cgal-discuss - Re: [cgal-discuss] Valid and closed polyhedron cannot be converted into nef polyhedron

Subject: CGAL users discussion list

List archive

Re: [cgal-discuss] Valid and closed polyhedron cannot be converted into nef polyhedron


Chronological Thread 
  • From: Matthew Lai <>
  • To:
  • Subject: Re: [cgal-discuss] Valid and closed polyhedron cannot be converted into nef polyhedron
  • Date: Wed, 5 May 2021 09:36:14 +0100
  • Authentication-results: mail3-smtp-sop.national.inria.fr; spf=None ; spf=Pass ; spf=None
  • Ironport-hdrordr: A9a23:4BLmzauC/F97BVQn2tdP41207skC9YYji2hD6mlwRA09T+WxrOrrtOgH1BPylTYaUGwhn9fFA6WbXXbA7/dOjLU5FYyJGC3ronGhIo0n14vtxDX8Bzbzn9Q26Y5JSII7MtH5CDFB5vrSyAOzH888hPyO9661jenTpk0dND1CQadm8gt/F0K/Gkp5WAFJCfMCZeKhz+BAoCetfmlSU9SjChA+LqL+jvDCiZ6OW29iOzcJ8w+L5AnH1JfbFFyi0g4aQ3dzx94ZgA74uijYwonmjP2h0B/b0Abontlrsf/s0MFKCsDJquV9EESJti+SaI5sW6KPsVkOyYnCh2oCq9XCrwwtOM5+8RrqDwaIiCHw0Art2itG0R/f4GKYmnfqrIjYQz83GqN69OBkWybZ8EYpsZVA1rtK1QuixvlqJC7H9R6d2/H4EzVR0makq3srluAey1ZFV5EFVbNXpYsDuGtIDZYpBkvBmc8aOdgrKPuZyOddcFucYXyclHJo2saQUnM6GQrDalQeu/aSzyNdkBlCvgUl7f1auk1F2IM2SpFC6eiBGL9vjqtyQsgfar84I+sdX82tCCjoTQjXOGyfZXTrfZt3ek7lmtrS2vEY9euqcJsHwN8Zg5LaSm5VsmY0ZgbgEsuL0JpX8g3cQWm0UDj3o/supKRRi/nZfv7GICeDQFchn4+LuPMEGPDWXP61JdZXDpbYXCnTMLcM+ze7d4hZKHEYXsFQkM08QUiyrsXCLZCvsuTadf3UNaf8CDpMYBK7PlIzGBzIYOlQ5EGiXXH1xDLLXWn2R0D59ZVsVK7A/+YSz4AJPpZWshccjEm44s3jE0wDjoUGOG9FZJ/3mKKyome7uUzS6X9yBxZbBkFJpKn7X2hSvg8MOUPsebMFs9GSEFoimEevF1tadYf7AQRfr1N49eaLNJSW3zklEM/iGHmdlWEvqHWDSIo8lqWP6dz+QI4xCo8rVcVKZEL2Pi0wvTwviW9YLCcYW0fUF1rV+N6Ypa1RINuaSv5Rr0OAJ9VOpXfWqEOGzPtfPEczbnqJSs6YgQEnWjxOoEZ+mpVvzIaokSqzKGc5neQzOEBNbmPSG75dEAGZfuxv683WURA1QmGQiTOAjRYvPmLs6kUJn2TkaTaZYPfRHzNmyzll+7ev9V4xb36adU5rcHx22LcNZVjuqzJ20eWRYLC03HbUYlwewvsFODWtW0pkHip+g9S23gWSgjCMCDEvwYgvJPXUCPAmf6vI0n2gbI2OmqduJY4jwL91cNTvuPQMS+SRZkucKy75Efog30iNvWk+URME20UMgLftwlno/WK41HkwDb7bJ0lnXagSJ5WZ43L/T/iF3Z1lhbsOzKONG3S0bsTDxbDcbjZFJB+Wu2KwQu0yoZ1fvK45ttJIbu3meCqN0GsC0AQ1Lc/ymk9bXb9y56rZPJRzO8MVYCBU8zMS5Z+yBVputhazBOAwfVsg1SCGe9yI5qfFsropDAmKohDqNVyW7i1a+LPEUkK4pMAnIrN1JX4Tbk42rGlm9qeFcYbbDQ2xbeFN/FagKBaGAcpgYbnAHa9Vtwpw5tGDgvSeeCX50h3BpDcTGNMwz0+3BcepRB+WEeFG89amKU2Bj6uj7sm0lir2Q1KAGjUlrJwAc1cRYMRFgiQji4Ny0jHacN2Knms110BZ/Sxq0kXw34TO2haoIX17
  • Ironport-phdr: A9a23:4zEcaxS/hA3Qd5M0orsZ4H0UbNpsoluYAWYlgqEPu/d1aq2muq7aFwnh351FslbFUM3h5u5ejKKO6ua8AD1Gu83e+yFbOLV3FDY9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQka3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjVu8UMn4dvJKQ8xhTNr3dVZu9b2X5mKVWPkhjm+8y+5oRj8yNeu/Ig885PT6D3dLkmQLJbETorLXk76NXkuhffQwSP4GAcUngNnRpTHwfF9hD6UYzvvSb8q+FwxTOVPczyTbAzRDSi86JmQwLmhSsbKzI09nzch8pth6xZvR2hvQRyzIHaYI6XNPRwcKDTc84ES2VdRcteTTBND5mmYocTE+YMP+BVpJT9qVsUqhu+ABGhCuT1xT9Umn/23bM10uo8Gg/AxgMgHs8FvXPRrNrvKKcSTeC1w7fGzDXHdfxW2Czw6IfPchAmrvGMWax/fdDNxkkoEgPIl1OdopHqMD2JzOoCqXSb7/Z+WuK1jW4qsw5/rDizy8ksloXEhYIbx1HF+ClkwYs7KtK2RU9lbNO5HpVdsy6XOpdoT88/QGxmtyc3xLMGt5C0fSUHzIgqyh7ZZveafYaI5RfjW/yQITd+nH9qZL2/iAy28US6ze38TMa03E5LripDiNnMt2oC2wbd6sidTPZ240Sv2S6X2gzN9u1JJVo4mKnbJpI73LI8i5kevV7MEyL0nkj9kbWYeV8++uey7uTqerXmqYGYN49zkgz+N74hms27AeghLAcOXXWX9f2y1LDs/0D1WrpKjvoxkqnWtJDVO94XqbK+Aw9Qyooj6hC/ACm60NkAg3ULMFZIdAiEgoXpIV3CPu30APSlj1mjkjpn3/XGMafgApXJIHjDirDhfbNl5k5Z0gUz0cxf55JKBbAPJPL8QE7xucfXDh8+NAy0zOLnB8tn2owCXmKPB7eVMLnOvl+Q+uIvP+6MaZcJtzbyMfcl4+figmI4mV8GYaapwIAXaGujE/R9I0SZZGLsjc0bHWcLuAo+Vu3qh0eYXT5dfXbhF586/SwxXYK6EZ/YFMfqm62ExC79H5tMZ2kABErLCmbtb4zDWvECb2WZLcZl1zAFTrO8UJRy6Be1qQXa179je+rI5jUD59Wkz8lw/+SVlBco9DUyAd7ayHCIV2gzn2UGQHg906l75EB80VyeyrMrvvpDCNZv6uNVBwcmKYbHnas9EMH3QguHf9GTSV/gTM/hGiA0Vtt2wtkAZAF2FNymyxzCxCG3GKRGq7veD5M99ufQ3mP6Ot1m43fAzqgoyVc8EeVVMmjzo6dj6wjeGMbtmkTRw6Ojabgc0THJ/Warwm2Js0VVFgV3VPOWDjgkekLKoIGhtQv5RLi0BOF/WiNxjPWaI64PUeXHyFBPRfPtItPbC0q+nGC/ARvOzbSJPtOCU1VY5z3UDQ0/qy5W/XuCMmAWAy6gpyfTDmUrGw6wJUzr9uZ6pTWwSUpml2miXwhaz7OwvyUtq7mEUfp79r0DvyglpnN/G1Pvh7rr

Thanks Maxime.

I had missed that part of the documentation, and indeed switching to EPECK fixed it.

Thanks for your help!

On Wed, May 5, 2021 at 8:03 AM Maxime Gimeno <> wrote:
Hi,

I think the problem is your kernel. If you look at the documentation, you can see that the kernel used for a Nef_polyhedron_3 must be exact, and the one you are using has inexact constructions. You can try to replace Epick by Epeck, I have tried on my machine and it works.

Le mar. 4 mai 2021 à 23:46, Matthew Lai <> a écrit :
Hello!

I am running into an assertion fail trying to convert a polyhedron into a Nef polyhedron, despite the polyhedron being apparently closed and valid. Can someone help?

I have simplified it down to this minimal test case including the model file:
=============================================
#include <iostream>
#include <sstream>

#include "CGAL/Exact_predicates_inexact_constructions_kernel.h"
#include "CGAL/Nef_polyhedron_3.h"
#include "CGAL/Polyhedron_3.h"

namespace {

constexpr char kModel[] = R"""(
OFF
24 52 0
296.9305 -36.80449 0
296.9305 -280 0
296.9305 -36.80449 50
296.9305 -280 50
30.94792 -36.80449 0
30.94792 -36.80449 50
30.94792 -280 0
30.94792 -280 50
296.9305 -322.1497 0
296.9305 -529.0251 0
296.9305 -322.1497 50
296.9305 -529.0251 50
30.94792 -322.1497 0
30.94792 -322.1497 50
30.94792 -529.0251 0
30.94792 -529.0251 50
0 0 0
0 -560 0
0 0 50
0 -560 50
330 -3.944305e-30 0
330 0 50
330 -560 0
330 -560 50
3 0 1 2
3 2 1 3
3 4 0 5
3 5 0 2
3 6 4 7
3 7 4 5
3 1 6 3
3 3 6 7
3 8 9 10
3 10 9 11
3 12 8 13
3 13 8 10
3 14 12 15
3 15 12 13
3 9 14 11
3 11 14 15
3 16 17 18
3 18 17 19
3 20 16 21
3 21 16 18
3 22 20 23
3 23 20 21
3 17 22 19
3 19 22 23
3 15 19 11
3 11 19 23
3 11 23 10
3 10 23 3
3 10 3 7
3 15 13 19
3 19 13 7
3 19 7 18
3 18 7 5
3 18 5 2
3 13 10 7
3 18 2 21
3 21 2 3
3 21 3 23
3 12 14 17
3 17 14 9
3 17 9 22
3 22 9 8
3 22 8 1
3 1 8 12
3 1 12 6
3 6 12 17
3 6 17 16
3 22 1 20
3 20 1 0
3 20 0 16
3 16 0 4
3 16 4 6
)""";

using Kernel = CGAL::Exact_predicates_inexact_constructions_kernel;
using Polyhedron_3 = CGAL::Polyhedron_3<Kernel>;
using Nef_polyhedron_3 = CGAL::Nef_polyhedron_3<Kernel>;

}  // namespace

int main(int argc, char** argv) {
  Polyhedron_3 poly;
  std::stringstream ss(kModel);
  ss >> poly;
  poly.normalize_border();
  std::cout << "is_closed(): " << poly.is_closed() << std::endl;
  std::cout << "is_valid(): " << poly.is_valid(false, 1) << std::endl;
  std::cout << "is_pure_triangle(): " << poly.is_pure_triangle() << std::endl;
  std::cout << "# faces: " << poly.size_of_facets() << std::endl;
  std::cout << "# vertices: " << poly.size_of_vertices() << std::endl;
  std::cout << "# border halfedges: " << poly.size_of_border_halfedges() << std::endl;

  Nef_polyhedron_3 nef_poly(poly);
  std::cout << "volumes: " << nef_poly.number_of_volumes() << std::endl;
  std::cout << "nef(poly) is_valid: " << nef_poly.is_valid(false, 3) << std::endl;
  std::cout << "is_simple: " << nef_poly.is_simple() << std::endl;
}
=============================================

And this is the output:
=============================================
is_closed(): 1
is_valid(): 1
is_pure_triangle(): 1
# faces: 52
# vertices: 24
# border halfedges: 0
CGAL error: assertion violation!
_expression_ : ss_circle.has_on(sv_prev->point())
File       : CGAL/Nef_3/polygon_mesh_to_nef_3.h
Line       : 256
Explanation:
Refer to the bug-reporting instructions at https://www.cgal.org/bug_report.html
Unhandled exception:
    @     0x55c31fb34732  GoogleTerminateHandler()
    @     0x55c31fc5a768  std::__terminate()
    @     0x55c31fc59dfb  __cxxabiv1::failed_throw()
    @     0x55c31fc59d75  __cxa_throw
    @     0x55c31fab767c  CGAL::assertion_fail()
    @     0x55c31faecdcd  CGAL::polygon_mesh_to_nef_3<>()
    @     0x55c31fac2ec2  CGAL::polyhedron_3_to_nef_3<>()
    @     0x55c31fab6ea6  CGAL::Nef_polyhedron_3<>::Nef_polyhedron_3<>()
    @     0x55c31fab5bbb  main
    @     0x7f1dff68abbd  __libc_start_main
    @     0x55c31fab5569  _start
libc++abi: terminating with uncaught exception of type CGAL::Assertion_exception: CGAL ERROR: assertion violation!
Expr: ss_circle.has_on(sv_prev->point())
File: CGAL/Nef_3/polygon_mesh_to_nef_3.h
Line: 256
*** SIGABRT received by PID 3953462 (TID 3953462) on cpu 10 from PID 3953462; ***
E0504 22:31:27.565500 3953462 process_state.cc:770] RAW: Raising signal 6 with default behavior
Aborted
=============================================

Thanks for your help!
Matthew


--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss


--
You are currently subscribed to cgal-discuss.
To unsubscribe or access the archives, go to
https://sympa.inria.fr/sympa/info/cgal-discuss




Archive powered by MHonArc 2.6.19+.

Top of Page