Loading src/csg/parser.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -412,6 +412,7 @@ template <> struct action<mulmat<Dimension::D2>> { for (const auto &curr_obj : st.current_2d_group) { mulmat.group.objs.push_back(curr_obj); } st.current_2d_group.clear(); st.current_2d_objs.back().push_back(mulmat); st.current_matrices.pop_back(); } Loading @@ -435,6 +436,7 @@ template <> struct action<mulmat<Dimension::D3>> { for (const auto &curr_obj : st.current_3d_group) { mulmat.group.objs.push_back(curr_obj); } st.current_3d_group.clear(); st.current_3d_objs.back().push_back(mulmat); st.current_matrices.pop_back(); } Loading src/csg/tests/parser/boolean.t.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -119,3 +119,15 @@ multmatrix([[1, 0, 0, 0.5], [0, 1, 0, 0.1], [0, 0, 1, 0], [0, 0, 0, 1]]) { CHECK(cone.radius2 == 0.4); CHECK(cone.center == false); } TEST_CASE("mulmat and empty group", "[csg]") { auto st = *csg::parse_csg(R"( multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 7, r2 = 7, center = false); } group(); )"); auto un = std::get<csg::Union3D>(st.top.objs.at(1)); CHECK(un.objs.size() == 0); } Loading
src/csg/parser.cpp +2 −0 Original line number Diff line number Diff line Loading @@ -412,6 +412,7 @@ template <> struct action<mulmat<Dimension::D2>> { for (const auto &curr_obj : st.current_2d_group) { mulmat.group.objs.push_back(curr_obj); } st.current_2d_group.clear(); st.current_2d_objs.back().push_back(mulmat); st.current_matrices.pop_back(); } Loading @@ -435,6 +436,7 @@ template <> struct action<mulmat<Dimension::D3>> { for (const auto &curr_obj : st.current_3d_group) { mulmat.group.objs.push_back(curr_obj); } st.current_3d_group.clear(); st.current_3d_objs.back().push_back(mulmat); st.current_matrices.pop_back(); } Loading
src/csg/tests/parser/boolean.t.cpp +12 −0 Original line number Diff line number Diff line Loading @@ -119,3 +119,15 @@ multmatrix([[1, 0, 0, 0.5], [0, 1, 0, 0.1], [0, 0, 1, 0], [0, 0, 0, 1]]) { CHECK(cone.radius2 == 0.4); CHECK(cone.center == false); } TEST_CASE("mulmat and empty group", "[csg]") { auto st = *csg::parse_csg(R"( multmatrix([[0, 0, 1, 0], [0, 1, 0, 0], [-1, 0, 0, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 200, r1 = 7, r2 = 7, center = false); } group(); )"); auto un = std::get<csg::Union3D>(st.top.objs.at(1)); CHECK(un.objs.size() == 0); }