openscad-cpp-evaluator 0.36.0__tar.gz → 0.37.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/CLAUDE.md +18 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/builtins.hpp +5 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/registry.cpp +3 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/topology.cpp +76 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_booleans.cpp +94 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/uv.lock +1 -1
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/.gitignore +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/.gitmodules +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/LICENSE +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/README.md +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/bindings/ast_to_py.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/bindings/module.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/export.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/python/openscad_cpp_evaluator/__init__.py +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/call_args.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/dxf_dim.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/extrude.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/bytecode_vm.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/export.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/import/mesh_import.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/text/font_match.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/text/freetype_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/user_calls.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_export.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_import_export.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_python_bindings.py +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_unexpected_args.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tools/cli/main.cpp +0 -0
|
@@ -584,6 +584,24 @@ grep for `ponytail:`.
|
|
|
584
584
|
a file that includes BOSL2 to "compare against the reference" is comparing BOSL2 with itself. Call
|
|
585
585
|
`spheroid()` from a BOSL2-including file and `sphere()` from one without.
|
|
586
586
|
|
|
587
|
+
- `simplify()` (also `topology.cpp`) — mesh decimation within a tolerance, wrapping
|
|
588
|
+
`Manifold::Simplify` and `CrossSection::Simplify`, so it works on sections as well as solids.
|
|
589
|
+
Another BelfrySCAD extension: nothing in the OpenSCAD language can reduce a triangle count, and
|
|
590
|
+
library-generated or imported geometry is routinely far denser than the model needs.
|
|
591
|
+
|
|
592
|
+
**The default tolerance is 0.1% of the body's own bounding-box diagonal**, not zero.
|
|
593
|
+
`Manifold::Simplify(0)` falls back to the mesh epsilon and changes nothing, so defaulting to zero
|
|
594
|
+
would make a bare `simplify()` silently do nothing — the worst possible outcome. It has to be
|
|
595
|
+
scale-relative, too: an absolute default sensible in millimetres is catastrophic in metres.
|
|
596
|
+
Measured on a drilled sphere (4764 triangles): the default takes it to 3732 for well under 0.1%
|
|
597
|
+
volume error, an explicit 0.25 halves it for 0.8%.
|
|
598
|
+
|
|
599
|
+
Two properties worth keeping, both covered by tests. Provenance survives — the original-ID runs
|
|
600
|
+
come through simplification intact, so selection and drag-to-edit still work through a
|
|
601
|
+
`simplify()`. So does topology: a drilled part keeps its genus rather than having holes welded
|
|
602
|
+
shut. Note the reduction is NOT monotonic in the tolerance (1.0 gave *more* triangles than 0.5 on
|
|
603
|
+
the test model, since simplification can force re-triangulation), so don't read a jump as a bug.
|
|
604
|
+
|
|
587
605
|
- `src/builtins/dxf_dim.cpp` — `dxf_dim()`/`dxf_cross()`, which read a measurement out of a DXF file
|
|
588
606
|
rather than out of the model. Ported from the reference's `io/dxfdim.cc` plus the DIMENSION/LINE
|
|
589
607
|
half of `io/DxfData.cc`: `dxf_dim()` returns the first matching DIMENSION's value by its type
|
|
@@ -165,6 +165,11 @@ std::vector<ColoredBody> generateHull(Evaluator& ev, const CSGParams& params,
|
|
|
165
165
|
Value builtinDxfDim(Evaluator& ev, const CallArgs& args, const oscad::ASTNode& node);
|
|
166
166
|
Value builtinDxfCross(Evaluator& ev, const CallArgs& args, const oscad::ASTNode& node);
|
|
167
167
|
|
|
168
|
+
CSGParams resolveSimplify(Evaluator& ev, const oscad::ModularCall& node, EvalContext& ctx);
|
|
169
|
+
std::vector<ColoredBody> generateSimplify(Evaluator& ev, const CSGParams& params,
|
|
170
|
+
const std::vector<std::unique_ptr<CSGNode>>& children,
|
|
171
|
+
const oscad::ASTNode& node);
|
|
172
|
+
|
|
168
173
|
CSGParams resolveMinkowskiDifference(Evaluator& ev, const oscad::ModularCall& node, EvalContext& ctx);
|
|
169
174
|
std::vector<ColoredBody> generateMinkowskiDifference(Evaluator& ev, const CSGParams& params,
|
|
170
175
|
const std::vector<std::unique_ptr<CSGNode>>& children,
|
|
@@ -36,6 +36,7 @@ const std::unordered_map<std::string_view, ResolveFn>& resolveDispatch() {
|
|
|
36
36
|
{"roof", &resolveRoof},
|
|
37
37
|
{"fill", &resolveFill},
|
|
38
38
|
{"minkowski_difference", &resolveMinkowskiDifference},
|
|
39
|
+
{"simplify", &resolveSimplify},
|
|
39
40
|
{"offset", &resolveOffset},
|
|
40
41
|
{"surface", &resolveSurface},
|
|
41
42
|
{"text", &resolveText},
|
|
@@ -76,6 +77,7 @@ const std::unordered_map<std::string_view, GenerateFn>& generateDispatch() {
|
|
|
76
77
|
{"roof", &generateRoof},
|
|
77
78
|
{"fill", &generateFill},
|
|
78
79
|
{"minkowski_difference", &generateMinkowskiDifference},
|
|
80
|
+
{"simplify", &generateSimplify},
|
|
79
81
|
{"offset", &generateOffset},
|
|
80
82
|
{"surface", &generateSurface},
|
|
81
83
|
{"text", &generateText},
|
|
@@ -122,6 +124,7 @@ const std::vector<std::string>* builtinParamNames(const std::string& name) {
|
|
|
122
124
|
{"roof", {"method", "convexity"}},
|
|
123
125
|
{"fill", {}},
|
|
124
126
|
{"minkowski_difference", {}},
|
|
127
|
+
{"simplify", {"tolerance"}},
|
|
125
128
|
{"offset", {"r", "delta", "chamfer"}},
|
|
126
129
|
{"surface", {"file", "center", "convexity", "invert"}},
|
|
127
130
|
{"text", {"text", "size", "font", "direction", "language", "script", "halign", "valign", "spacing"}},
|
|
@@ -7,6 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
namespace oscadeval {
|
|
9
9
|
|
|
10
|
+
// simplify()'s default tolerance, as a fraction of the body's bounding-box
|
|
11
|
+
// diagonal. 0.1% measured out at roughly a quarter of the triangles gone for
|
|
12
|
+
// under 0.1% volume error on a representative model -- a good trade, and
|
|
13
|
+
// scale-independent in a way no absolute default can be.
|
|
14
|
+
static constexpr double kDefaultSimplifyFraction = 0.001;
|
|
15
|
+
|
|
10
16
|
// hull()/minkowski() -- like union/difference/intersection, these splice
|
|
11
17
|
// their children transparently in the CSG tree (resolve just evaluates
|
|
12
18
|
// them for the side effect); the actual hull/minkowski-sum only happens
|
|
@@ -375,4 +381,74 @@ std::vector<ColoredBody> generateMinkowskiDifference(Evaluator& ev, const CSGPar
|
|
|
375
381
|
return out;
|
|
376
382
|
}
|
|
377
383
|
|
|
384
|
+
// simplify() -- decimate a mesh within a tolerance. A BelfrySCAD extension:
|
|
385
|
+
// nothing in the OpenSCAD language can reduce a mesh's triangle count, and
|
|
386
|
+
// library-generated or imported geometry is routinely far denser than the
|
|
387
|
+
// model needs, which every later boolean and the exported file both pay for.
|
|
388
|
+
//
|
|
389
|
+
// Wraps Manifold::Simplify (and CrossSection::Simplify for 2D), so it works
|
|
390
|
+
// on sections as well as solids.
|
|
391
|
+
|
|
392
|
+
CSGParams resolveSimplify(Evaluator& ev, const oscad::ModularCall& node, EvalContext& ctx) {
|
|
393
|
+
auto [args, effCtx] = resolveCallArgs(ev, node.arguments, ctx);
|
|
394
|
+
CSGParams params;
|
|
395
|
+
// Position 0 so simplify(0.1) reads naturally.
|
|
396
|
+
params["tolerance"] = getArg(args, 0, "tolerance", Value{});
|
|
397
|
+
ev.evalChildren(node.children, effCtx);
|
|
398
|
+
return params;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
std::vector<ColoredBody> generateSimplify(Evaluator& ev, const CSGParams& params,
|
|
402
|
+
const std::vector<std::unique_ptr<CSGNode>>& children,
|
|
403
|
+
const oscad::ASTNode& node) {
|
|
404
|
+
const std::vector<ColoredBody> bodies = flattenCsgTree(children);
|
|
405
|
+
if (bodies.empty()) return {};
|
|
406
|
+
|
|
407
|
+
const Value tolArg = params.at("tolerance");
|
|
408
|
+
const bool explicitTol = std::holds_alternative<double>(tolArg);
|
|
409
|
+
const double explicitValue = explicitTol ? std::get<double>(tolArg) : 0.0;
|
|
410
|
+
if (!explicitTol && !std::holds_alternative<std::monostate>(tolArg)) {
|
|
411
|
+
ev.warn("simplify: tolerance must be a number", &node.position());
|
|
412
|
+
}
|
|
413
|
+
if (explicitTol && explicitValue < 0.0) {
|
|
414
|
+
ev.warn("simplify: tolerance must not be negative", &node.position());
|
|
415
|
+
return bodies;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
std::vector<ColoredBody> out;
|
|
419
|
+
out.reserve(bodies.size());
|
|
420
|
+
for (const ColoredBody& b : bodies) {
|
|
421
|
+
if (b.role != BodyRole::Normal) {
|
|
422
|
+
out.push_back(b); // background/highlight untouched
|
|
423
|
+
continue;
|
|
424
|
+
}
|
|
425
|
+
ColoredBody cb = b;
|
|
426
|
+
if (b.body) {
|
|
427
|
+
// Manifold::Simplify(0) falls back to the mesh epsilon and
|
|
428
|
+
// changes nothing, so a bare simplify() cannot default to zero
|
|
429
|
+
// -- it would silently do nothing, which is the worst outcome.
|
|
430
|
+
// Default instead to a fraction of the body's own size, which is
|
|
431
|
+
// the only scale-independent choice available: an absolute
|
|
432
|
+
// default sensible in millimetres is catastrophic in metres.
|
|
433
|
+
double tol = explicitValue;
|
|
434
|
+
if (!explicitTol) {
|
|
435
|
+
const manifold::Box bb = b.body->BoundingBox();
|
|
436
|
+
const manifold::vec3 d = bb.Size();
|
|
437
|
+
tol = kDefaultSimplifyFraction * std::sqrt(d.x * d.x + d.y * d.y + d.z * d.z);
|
|
438
|
+
}
|
|
439
|
+
if (tol > 0.0) cb.body = b.body->Simplify(tol);
|
|
440
|
+
} else if (b.section) {
|
|
441
|
+
double tol = explicitValue;
|
|
442
|
+
if (!explicitTol) {
|
|
443
|
+
const manifold::Rect r = b.section->Bounds();
|
|
444
|
+
const manifold::vec2 d = r.Size();
|
|
445
|
+
tol = kDefaultSimplifyFraction * std::sqrt(d.x * d.x + d.y * d.y);
|
|
446
|
+
}
|
|
447
|
+
if (tol > 0.0) cb.section = b.section->Simplify(tol);
|
|
448
|
+
}
|
|
449
|
+
out.push_back(std::move(cb));
|
|
450
|
+
}
|
|
451
|
+
return out;
|
|
452
|
+
}
|
|
453
|
+
|
|
378
454
|
} // namespace oscadeval
|
|
@@ -699,3 +699,97 @@ TEST(MinkowskiDifference, TwoDeeChildrenAreIgnoredLikeMinkowskis) {
|
|
|
699
699
|
Evaluated e = evalSrc("minkowski_difference() { square(10); square(2); }");
|
|
700
700
|
EXPECT_TRUE(e.bodies.empty());
|
|
701
701
|
}
|
|
702
|
+
|
|
703
|
+
// -- simplify() -----------------------------------------------------------
|
|
704
|
+
//
|
|
705
|
+
// Mesh decimation within a tolerance. A BelfrySCAD extension: nothing in the
|
|
706
|
+
// OpenSCAD language can reduce a triangle count.
|
|
707
|
+
|
|
708
|
+
namespace {
|
|
709
|
+
const char* kSimplifyModel =
|
|
710
|
+
"difference() { sphere(r=20, $fn=64); "
|
|
711
|
+
" for (a=[0:60:359]) rotate([0,0,a]) translate([12,0,0]) cylinder(h=60,r=4,center=true,$fn=32); }";
|
|
712
|
+
|
|
713
|
+
const manifold::Manifold& soleBody(const Evaluated& e) { return *e.bodies[0].body; }
|
|
714
|
+
} // namespace
|
|
715
|
+
|
|
716
|
+
TEST(Simplify, ReducesTriangleCountWithinTolerance) {
|
|
717
|
+
Evaluated plain = evalSrc(std::string(kSimplifyModel) + ";");
|
|
718
|
+
Evaluated cut = evalSrc(std::string("simplify(0.1) ") + kSimplifyModel + ";");
|
|
719
|
+
ASSERT_EQ(cut.bodies.size(), 1u);
|
|
720
|
+
EXPECT_LT(soleBody(cut).NumTri(), soleBody(plain).NumTri());
|
|
721
|
+
// ...without moving the surface much: 0.1 costs well under 1% of volume.
|
|
722
|
+
EXPECT_NEAR(soleBody(cut).Volume(), soleBody(plain).Volume(),
|
|
723
|
+
0.01 * soleBody(plain).Volume());
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
TEST(Simplify, DefaultTolerandeScalesWithTheModel) {
|
|
727
|
+
// No argument means 0.1% of the bounding-box diagonal. Manifold's own
|
|
728
|
+
// default of 0 falls back to the mesh epsilon and does nothing at all,
|
|
729
|
+
// so a bare simplify() must NOT pass zero through -- silently doing
|
|
730
|
+
// nothing is the worst outcome.
|
|
731
|
+
Evaluated plain = evalSrc(std::string(kSimplifyModel) + ";");
|
|
732
|
+
Evaluated def = evalSrc(std::string("simplify() ") + kSimplifyModel + ";");
|
|
733
|
+
EXPECT_LT(soleBody(def).NumTri(), soleBody(plain).NumTri());
|
|
734
|
+
|
|
735
|
+
// Scale-independence is the point: the same model 1000x larger must lose
|
|
736
|
+
// the same proportion of its triangles, which an absolute default could
|
|
737
|
+
// never manage.
|
|
738
|
+
Evaluated big = evalSrc(std::string("scale(1000) simplify() ") + kSimplifyModel + ";");
|
|
739
|
+
Evaluated bigPlain = evalSrc(std::string("scale(1000) ") + kSimplifyModel + ";");
|
|
740
|
+
const double ratioSmall = double(soleBody(def).NumTri()) / soleBody(plain).NumTri();
|
|
741
|
+
const double ratioBig = double(soleBody(big).NumTri()) / soleBody(bigPlain).NumTri();
|
|
742
|
+
EXPECT_NEAR(ratioSmall, ratioBig, 0.02);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
TEST(Simplify, KeepsOriginalIdProvenance) {
|
|
746
|
+
// Selection and drag-to-edit map an AST node to geometry through the
|
|
747
|
+
// original-ID runs, so a simplify() in the chain must not drop them.
|
|
748
|
+
Evaluated plain = evalSrc(std::string(kSimplifyModel) + ";");
|
|
749
|
+
Evaluated cut = evalSrc(std::string("simplify(0.1) ") + kSimplifyModel + ";");
|
|
750
|
+
const manifold::MeshGL a = soleBody(plain).GetMeshGL();
|
|
751
|
+
const manifold::MeshGL b = soleBody(cut).GetMeshGL();
|
|
752
|
+
// Compare the SHAPE of the provenance, not the ID values: tagGenerated
|
|
753
|
+
// stamps fresh ids on every evaluation, so the two runs here carry
|
|
754
|
+
// different numbers for the same parts (1 vs 27 in practice). What must
|
|
755
|
+
// survive simplification is that the runs are still there and still
|
|
756
|
+
// distinguish the same number of contributing parts.
|
|
757
|
+
EXPECT_EQ(a.runOriginalID.size(), b.runOriginalID.size());
|
|
758
|
+
ASSERT_FALSE(b.runOriginalID.empty());
|
|
759
|
+
const std::set<uint32_t> idsA(a.runOriginalID.begin(), a.runOriginalID.end());
|
|
760
|
+
const std::set<uint32_t> idsB(b.runOriginalID.begin(), b.runOriginalID.end());
|
|
761
|
+
EXPECT_EQ(idsA.size(), idsB.size());
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
TEST(Simplify, KeepsTopology) {
|
|
765
|
+
// Six drilled holes must still be six holes -- a decimation that welds
|
|
766
|
+
// one shut has changed the part, not just its mesh.
|
|
767
|
+
Evaluated plain = evalSrc(std::string(kSimplifyModel) + ";");
|
|
768
|
+
Evaluated cut = evalSrc(std::string("simplify(0.1) ") + kSimplifyModel + ";");
|
|
769
|
+
EXPECT_EQ(soleBody(cut).Genus(), soleBody(plain).Genus());
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
TEST(Simplify, WorksOnTwoDeeSections) {
|
|
773
|
+
// The tolerance is in model units here too: on an r=20 circle, 0.1
|
|
774
|
+
// costs 0.5% of the area and 0.5 costs 2.5%.
|
|
775
|
+
Evaluated plain = evalSrc("circle(r=20, $fn=256);");
|
|
776
|
+
Evaluated cut = evalSrc("simplify(0.1) circle(r=20, $fn=256);");
|
|
777
|
+
ASSERT_TRUE(cut.bodies[0].section.has_value());
|
|
778
|
+
EXPECT_NEAR(cut.bodies[0].section->Area(), plain.bodies[0].section->Area(),
|
|
779
|
+
0.01 * plain.bodies[0].section->Area());
|
|
780
|
+
EXPECT_LT(cut.bodies[0].section->Area(), plain.bodies[0].section->Area());
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
TEST(Simplify, NegativeToleranceWarnsAndPassesThrough) {
|
|
784
|
+
std::string last;
|
|
785
|
+
Evaluated e = evalSrc(std::string("simplify(-1) ") + kSimplifyModel + ";",
|
|
786
|
+
[&](const std::string& m) { last = m; });
|
|
787
|
+
EXPECT_NE(last.find("must not be negative"), std::string::npos) << last;
|
|
788
|
+
Evaluated plain = evalSrc(std::string(kSimplifyModel) + ";");
|
|
789
|
+
EXPECT_EQ(soleBody(e).NumTri(), soleBody(plain).NumTri());
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
TEST(Simplify, NoChildrenIsEmpty) {
|
|
793
|
+
Evaluated e = evalSrc("simplify();");
|
|
794
|
+
EXPECT_TRUE(e.bodies.empty());
|
|
795
|
+
}
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/.github/workflows/wheels.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/eval_perf_benchmark.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/manifold_cache_reuse.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/examples/minimal_debugger.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/primitives_2d.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/builtins/primitives_3d.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/src/text/freetype_font_provider.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_bytecode_compiler.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_dxf_svg_import.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_import_export.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_manifold_cache.cpp
RENAMED
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_multi_color_merge.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_python_bindings.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_unexpected_args.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-0.36.0 → openscad_cpp_evaluator-0.37.0}/tests/test_viewport_params.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|