Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash in Project() #813

Closed
kintel opened this issue May 19, 2024 · 4 comments · Fixed by #818 or #817
Closed

Crash in Project() #813

kintel opened this issue May 19, 2024 · 4 comments · Fixed by #818 or #817

Comments

@kintel
Copy link
Contributor

kintel commented May 19, 2024

Manifold::Project() sometimes causes a crash inside Clipper2.
The crash is deterministic and reproducible by passing specific data to Manifold.

I couldn't find any existing test cases for Project(), but the mesh in question can be reconstructed from this example:
openscad/openscad#5139

Stack trace (from openscad/openscad#5137):

EXC_BAD_ACCESS (code=1, address=0x84)

OpenSCAD!Clipper2Lib::ClipperBase::Split(Clipper2Lib::Active&, Clipper2Lib::Point<long long> const&) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/src/clipper.engine.cpp:2746)
OpenSCAD!Clipper2Lib::ClipperBase::UpdateEdgeIntoAEL(Clipper2Lib::Active*) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/src/clipper.engine.cpp:1742)
OpenSCAD!Clipper2Lib::ClipperBase::DoHorizontal(Clipper2Lib::Active&) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/src/clipper.engine.cpp:2650)
OpenSCAD!Clipper2Lib::ClipperBase::ExecuteInternal(Clipper2Lib::ClipType, Clipper2Lib::FillRule, bool) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/src/clipper.engine.cpp:2098)
OpenSCAD!Clipper2Lib::ClipperD::Execute(Clipper2Lib::ClipType, Clipper2Lib::FillRule, std::__1::vector<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > >, std::__1::allocator<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > > > >&, std::__1::vector<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > >, std::__1::allocator<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > > > >&) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/include/clipper2/clipper.engine.h:602)
OpenSCAD!Clipper2Lib::ClipperD::Execute(Clipper2Lib::ClipType, Clipper2Lib::FillRule, std::__1::vector<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > >, std::__1::allocator<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > > > >&) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/include/clipper2/clipper.engine.h:593)
OpenSCAD!Clipper2Lib::Union(std::__1::vector<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > >, std::__1::allocator<std::__1::vector<Clipper2Lib::Point<double>, std::__1::allocator<Clipper2Lib::Point<double> > > > > const&, Clipper2Lib::FillRule, int) (/Users/kintel/code/OpenSCAD/openscad/build/_deps/clipper2-src/CPP/Clipper2Lib/include/clipper2/clipper.h:111)
OpenSCAD!manifold::CrossSection::CrossSection(std::__1::vector<std::__1::vector<glm::vec<2, float, (glm::qualifier)0>, std::__1::allocator<glm::vec<2, float, (glm::qualifier)0> > >, std::__1::allocator<std::__1::vector<glm::vec<2, float, (glm::qualifier)0>, std::__1::allocator<glm::vec<2, float, (glm::qualifier)0> > > > > const&, manifold::CrossSection::FillRule) (/Users/kintel/code/OpenSCAD/openscad/submodules/manifold/src/cross_section/src/cross_section.cpp:278)
OpenSCAD!manifold::Manifold::Impl::Project() const (/Users/kintel/code/OpenSCAD/openscad/submodules/manifold/src/manifold/src/face_op.cpp:319)
OpenSCAD!manifold::Manifold::Project() const (/Users/kintel/code/OpenSCAD/openscad/submodules/manifold/src/manifold/src/manifold.cpp:814)
OpenSCAD!ManifoldGeometry::project() const (/Users/kintel/code/OpenSCAD/openscad/src/geometry/manifold/ManifoldGeometry.cc:209)
OpenSCAD!GeometryEvaluator::projectionNoCut(ProjectionNode const&) (/Users/kintel/code/OpenSCAD/openscad/src/geometry/GeometryEvaluator.cc:974)
@pca006132
Copy link
Collaborator

if you update to the latest version of clipper2, does it work?

@kintel
Copy link
Contributor Author

kintel commented May 20, 2024

I haven't tried, but it's worth a try. Nevertheless, it wouldn't hurt adding a test for Project(), to make it easier to test things like this without doing it via OpenSCAD.

@elalish
Copy link
Owner

elalish commented May 20, 2024

I did add Project() to a couple of samples tests: Bracelet and Sponge4. But yes, a dedicated test is also a good idea. Any chance you can dump out a GLB or OBJ we can test with?

@kintel
Copy link
Contributor Author

kintel commented May 21, 2024

OpenSCAD crashes on projection() import("file.obj") with this OBJ file.
projection() in OpenSCAD currently just calls Manifold::Project()

Note: This is slimmed down from the GEB example in OpenSCAD: https://github.com/openscad/openscad/blob/master/examples/Advanced/GEB.scad

# OpenSCAD obj exporter
v -2 -0.7 -0.1
v -2 -0.7 0
v -1.9 -0.7 -0.1
v -1.9 -0.6901 -0.1
v -1.9 -0.7 0
v -1.9 -0.6901 0
v -2 -1 3
v -1.9 -1 3
v -2 -1 4
v -1.9 -1 4
v -1.9 -0.6901 3
v -1.9 -0.6901 4
v -1.7 -0.6901 3
v -1.7 -0.6901 3.2
v -2 0 -0.1
v -2 0 0
v -2 0 3
v -2 0 4
v -1.7 0 3
v -1.7 0 3.2
v -1 -0.6901 -0.1
v -1 -0.6901 0
v -1 -0.6901 3.2
v -1 -0.6901 4
v -1 0 -0.1
v -1 0 0
v -1 0 3.2
v -1 0 4
f  1 3 2
f  1 4 3
f  2 3 5
f  5 6 2
f  3 4 6
f  5 3 6
f  6 4 21
f  26 22 25
f  21 25 22
f  25 15 26
f  26 6 22
f  21 4 25
f  21 22 6
f  16 26 15
f  16 6 26
f  4 15 25
f  15 1 16
f  16 2 6
f  4 1 15
f  1 2 16
f  12 14 23
f  12 13 14
f  12 11 13
f  18 9 12
f  11 7 17
f  7 9 18
f  17 7 18
f  13 11 19
f  17 18 20
f  19 11 17
f  19 17 20
f  14 13 20
f  18 12 24
f  20 13 19
f  20 18 27
f  12 10 11
f  24 12 23
f  9 10 12
f  9 8 10
f  8 11 10
f  8 7 11
f  8 9 7
f  14 20 27
f  24 28 18
f  27 18 28
f  23 14 27
f  24 23 28
f  28 23 27

This was referenced May 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants