openscad-cpp-evaluator 1.7.2__tar.gz → 1.8.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-1.7.2 → openscad_cpp_evaluator-1.8.0}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/bindings/module.cpp +7 -2
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/export.hpp +16 -2
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/python/openscad_cpp_evaluator/__init__.py +7 -3
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/export.cpp +9 -5
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_export.cpp +51 -1
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_python_bindings.py +26 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/.gitignore +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/.gitmodules +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/LICENSE +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/README.md +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/bindings/ast_to_py.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/call_args.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/dxf_dim.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/extrude.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/registry.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/topology.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/bytecode_vm.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/format_closure.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/import/mesh_import.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/measure_geometry.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/text/font_match.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/text/freetype_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/user_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/utf8.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_children_separate.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_feature_detection.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_import_export.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_include_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_render_expr.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_unexpected_args.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/uv.lock +0 -0
|
@@ -357,7 +357,7 @@ struct Geometry {
|
|
|
357
357
|
// exportModel, with the path/format/warnings marshalling. Releases the GIL:
|
|
358
358
|
// a large export is seconds of Manifold work with no Python involved.
|
|
359
359
|
nb::list exportModelPy(const std::string& path, const Geometry& geom, const std::string& format, bool asciiStl,
|
|
360
|
-
bool stripSlivers) {
|
|
360
|
+
bool stripSlivers, bool splitComponents) {
|
|
361
361
|
std::vector<std::string> warnings;
|
|
362
362
|
{
|
|
363
363
|
nb::gil_scoped_release rel;
|
|
@@ -365,6 +365,7 @@ nb::list exportModelPy(const std::string& path, const Geometry& geom, const std:
|
|
|
365
365
|
opts.format = format;
|
|
366
366
|
opts.asciiStl = asciiStl;
|
|
367
367
|
opts.stripSlivers = stripSlivers;
|
|
368
|
+
opts.splitComponents = splitComponents;
|
|
368
369
|
warnings = oscadeval::exportModel(path, geom.bodies, opts);
|
|
369
370
|
}
|
|
370
371
|
nb::list out;
|
|
@@ -786,10 +787,14 @@ NB_MODULE(_openscad_cpp_evaluator, m) {
|
|
|
786
787
|
|
|
787
788
|
m.def("export_model", &exportModelPy, nb::arg("path"), nb::arg("geometry"), nb::arg("format") = std::string(),
|
|
788
789
|
nb::arg("ascii_stl") = false, nb::arg("strip_slivers") = true,
|
|
790
|
+
nb::arg("split_components") = false,
|
|
789
791
|
"Write `geometry` to `path`, format taken from the extension unless `format` says otherwise. "
|
|
790
792
|
"Returns the warnings to surface (open shells, mesh problems, slivers removed) rather than "
|
|
791
793
|
"logging them. Raises RuntimeError when there is no geometry, the format is unknown, or the "
|
|
792
|
-
"file cannot be opened
|
|
794
|
+
"file cannot be opened.\n\n"
|
|
795
|
+
"`split_components` gives every disconnected piece its own object in the multi-object formats "
|
|
796
|
+
"(3MF, AMF, OBJ, PLY, VRML, X3D). Off by default, matching OpenSCAD, which writes one object "
|
|
797
|
+
"per colour however many pieces it is in.");
|
|
793
798
|
|
|
794
799
|
m.def("export_extensions", []() { return oscadeval::exportExtensions(); },
|
|
795
800
|
"The file extensions export_model understands, dot-prefixed. Read from the C++ writer table "
|
|
@@ -39,13 +39,21 @@ struct ExportObject {
|
|
|
39
39
|
// `color("red") body(); color("blue") detail();` leaves the detail
|
|
40
40
|
// whole. Only the invisible interior is affected: the visible surface
|
|
41
41
|
// is identical either way.
|
|
42
|
-
// 3. One object per connected component.
|
|
42
|
+
// 3. One object per connected component -- OPTIONAL, and off by default.
|
|
43
|
+
// Rules 1 and 2 are about correctness; this one is presentation, and
|
|
44
|
+
// it is the one that diverges from OpenSCAD, which writes a single
|
|
45
|
+
// object however many disjoint pieces the model has. Splitting turned
|
|
46
|
+
// `cube(10); translate([20,0,0]) cube(10);` into two 3MF objects and a
|
|
47
|
+
// multiboard tile into hundreds, which slicers list individually and
|
|
48
|
+
// Prusa Slicer complains about (issue #319). Ask for it when separate
|
|
49
|
+
// pieces are what you want; leave it off to match OpenSCAD.
|
|
43
50
|
//
|
|
44
51
|
// A body Manifold rejected (an open shell is not a solid) can take part in
|
|
45
52
|
// none of that: it keeps its own triangles and its own object, and its
|
|
46
53
|
// 1-based index is appended to `openParts` for the caller to warn about.
|
|
47
54
|
std::vector<ExportObject> splitBodiesForExport(const std::vector<ColoredBody>& bodies,
|
|
48
|
-
std::vector<int>* openParts = nullptr
|
|
55
|
+
std::vector<int>* openParts = nullptr,
|
|
56
|
+
bool splitComponents = false);
|
|
49
57
|
|
|
50
58
|
// Writes a binary STL: composes every body's mesh into one solid (bodies
|
|
51
59
|
// with no `.body` -- 2D-only sections -- or an empty Manifold are
|
|
@@ -130,6 +138,12 @@ struct ExportOptions {
|
|
|
130
138
|
// break no topology, but slicers commonly discard them and are then
|
|
131
139
|
// left with the holes their removal opens.
|
|
132
140
|
bool stripSlivers = true;
|
|
141
|
+
// Rule 3 of splitBodiesForExport: give every disconnected piece its own
|
|
142
|
+
// object in the multi-object formats (3MF, AMF, OBJ, PLY, VRML, X3D).
|
|
143
|
+
// Off matches OpenSCAD, which writes one object per colour however many
|
|
144
|
+
// pieces it is in; see that function's own comment for why the default
|
|
145
|
+
// moved here.
|
|
146
|
+
bool splitComponents = false;
|
|
133
147
|
};
|
|
134
148
|
|
|
135
149
|
// Writes `bodies` to `path`, choosing the writer from the extension (or
|
|
@@ -292,13 +292,13 @@ def strip_slivers(verts, tris):
|
|
|
292
292
|
|
|
293
293
|
|
|
294
294
|
def export_model(path: str, geometry, format: str = "", ascii_stl: bool = False,
|
|
295
|
-
strip_slivers: bool = True) -> list:
|
|
295
|
+
strip_slivers: bool = True, split_components: bool = False) -> list:
|
|
296
296
|
"""Write `geometry` to `path`. Returns the warnings to surface.
|
|
297
297
|
|
|
298
298
|
`geometry` is the handle an Evaluator stashes on itself as
|
|
299
299
|
`.geometry` -- the evaluated bodies, still on the C++ side. Export has
|
|
300
300
|
to do real CSG (the implicit top-level union, the per-colour volume
|
|
301
|
-
claim
|
|
301
|
+
claim), and going through the flattened
|
|
302
302
|
arrays the renderer gets would mean rebuilding every Manifold first:
|
|
303
303
|
~146ms on a 224k-triangle model, and Manifold's own provenance lost
|
|
304
304
|
along the way.
|
|
@@ -309,9 +309,13 @@ def export_model(path: str, geometry, format: str = "", ascii_stl: bool = False,
|
|
|
309
309
|
here refuses to write: a deliberately open surface is a legitimate
|
|
310
310
|
export. Raises EvalError when there is no geometry, the format is
|
|
311
311
|
unknown, or the file cannot be opened.
|
|
312
|
+
|
|
313
|
+
`split_components` gives every disconnected piece its own object in the
|
|
314
|
+
multi-object formats. Off by default, which is what OpenSCAD writes.
|
|
312
315
|
"""
|
|
313
316
|
try:
|
|
314
|
-
return list(_ext.export_model(path, geometry, format, ascii_stl, strip_slivers
|
|
317
|
+
return list(_ext.export_model(path, geometry, format, ascii_stl, strip_slivers,
|
|
318
|
+
split_components))
|
|
315
319
|
except Exception as e:
|
|
316
320
|
raise EvalError(str(e)) from e
|
|
317
321
|
|
|
@@ -418,7 +418,8 @@ std::vector<std::array<float, 4>> carryTriColors(const std::vector<std::array<fl
|
|
|
418
418
|
|
|
419
419
|
} // namespace
|
|
420
420
|
|
|
421
|
-
std::vector<ExportObject> splitBodiesForExport(const std::vector<ColoredBody>& bodies, std::vector<int>* openParts
|
|
421
|
+
std::vector<ExportObject> splitBodiesForExport(const std::vector<ColoredBody>& bodies, std::vector<int>* openParts,
|
|
422
|
+
bool splitComponents) {
|
|
422
423
|
struct Solid {
|
|
423
424
|
manifold::Manifold man;
|
|
424
425
|
std::optional<std::array<float, 4>> color;
|
|
@@ -545,9 +546,12 @@ std::vector<ExportObject> splitBodiesForExport(const std::vector<ColoredBody>& b
|
|
|
545
546
|
|
|
546
547
|
std::vector<ExportObject> out;
|
|
547
548
|
for (const Claimed& g : claimedGroups) {
|
|
548
|
-
// Decompose() is the rule-3 split
|
|
549
|
-
//
|
|
550
|
-
|
|
549
|
+
// Decompose() is the rule-3 split, and it is opt-in: without it this
|
|
550
|
+
// colour group stays one object however many disjoint pieces it is
|
|
551
|
+
// in, which is what OpenSCAD writes. A single-component solid comes
|
|
552
|
+
// back as a one-element list either way, so there is no special case.
|
|
553
|
+
std::vector<manifold::Manifold> parts;
|
|
554
|
+
if (splitComponents) parts = g.man.Decompose();
|
|
551
555
|
if (parts.empty()) parts.push_back(g.man);
|
|
552
556
|
for (const manifold::Manifold& part : parts) {
|
|
553
557
|
if (part.IsEmpty()) continue;
|
|
@@ -1022,7 +1026,7 @@ std::vector<std::string> exportModel(const std::string& path, const std::vector<
|
|
|
1022
1026
|
// its own -- that is what the file contains.
|
|
1023
1027
|
for (std::string& w : checkExportBodies(bodies)) warnings.push_back(std::move(w));
|
|
1024
1028
|
std::vector<int> openParts;
|
|
1025
|
-
const std::vector<ExportObject> objects = splitBodiesForExport(bodies, &openParts);
|
|
1029
|
+
const std::vector<ExportObject> objects = splitBodiesForExport(bodies, &openParts, opts.splitComponents);
|
|
1026
1030
|
reportOpen(openParts);
|
|
1027
1031
|
if (objects.empty()) throw std::runtime_error("No geometry to export");
|
|
1028
1032
|
if (ext == ".3mf") {
|
|
@@ -163,10 +163,16 @@ TEST(ExportAmf, WritesOneObjectAndOneMaterialPerColour) {
|
|
|
163
163
|
}
|
|
164
164
|
|
|
165
165
|
TEST(ExportAmf, TwoObjectsSharingAColourShareOneMaterial) {
|
|
166
|
+
// splitComponents, because two objects is the premise: same-coloured
|
|
167
|
+
// disjoint pieces are ONE object by default (see the DisjointPieces
|
|
168
|
+
// tests below). What is under test here is that the two of them share a
|
|
169
|
+
// single material entry rather than each declaring their own.
|
|
166
170
|
std::vector<ColoredBody> bodies =
|
|
167
171
|
evalToBodies("color(\"red\") cube(2); translate([10,0,0]) color(\"red\") cube(2);");
|
|
168
172
|
const std::string path = tempPath("shared.amf").string();
|
|
169
|
-
|
|
173
|
+
ExportOptions opts;
|
|
174
|
+
opts.splitComponents = true;
|
|
175
|
+
exportModel(path, bodies, opts);
|
|
170
176
|
|
|
171
177
|
const std::string xml = readFile(path);
|
|
172
178
|
EXPECT_EQ(countOf(xml, "<object id="), 2u);
|
|
@@ -174,6 +180,50 @@ TEST(ExportAmf, TwoObjectsSharingAColourShareOneMaterial) {
|
|
|
174
180
|
std::remove(path.c_str());
|
|
175
181
|
}
|
|
176
182
|
|
|
183
|
+
// Issue #319: a model in several disconnected pieces was written as one
|
|
184
|
+
// object PER PIECE, so a slicer listed them individually -- hundreds of
|
|
185
|
+
// entries for a multiboard tile, and Prusa Slicer objecting. OpenSCAD writes
|
|
186
|
+
// one object, and so does this by default now; the split is still available
|
|
187
|
+
// for callers that want the pieces apart.
|
|
188
|
+
TEST(ExportSplit, DisjointPiecesAreOneObjectByDefault) {
|
|
189
|
+
std::vector<ColoredBody> bodies =
|
|
190
|
+
evalToBodies("cube(10); translate([20,0,0]) cube(10); translate([40,0,0]) cube(10);");
|
|
191
|
+
const std::string path = tempPath("joined.amf").string();
|
|
192
|
+
exportModel(path, bodies, ExportOptions{});
|
|
193
|
+
|
|
194
|
+
const std::string xml = readFile(path);
|
|
195
|
+
EXPECT_EQ(countOf(xml, "<object id="), 1u);
|
|
196
|
+
EXPECT_EQ(countOf(xml, "<volume"), 1u);
|
|
197
|
+
std::remove(path.c_str());
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
TEST(ExportSplit, DisjointPiecesSplitWhenAsked) {
|
|
201
|
+
std::vector<ColoredBody> bodies =
|
|
202
|
+
evalToBodies("cube(10); translate([20,0,0]) cube(10); translate([40,0,0]) cube(10);");
|
|
203
|
+
const std::string path = tempPath("split.amf").string();
|
|
204
|
+
ExportOptions opts;
|
|
205
|
+
opts.splitComponents = true;
|
|
206
|
+
exportModel(path, bodies, opts);
|
|
207
|
+
|
|
208
|
+
const std::string xml = readFile(path);
|
|
209
|
+
EXPECT_EQ(countOf(xml, "<object id="), 3u);
|
|
210
|
+
std::remove(path.c_str());
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// Rule 2 is not what became optional: differently-coloured solids must stay
|
|
214
|
+
// separate objects either way, or a multi-material export loses its colours.
|
|
215
|
+
TEST(ExportSplit, ColoursStayApartWithTheSplitOff) {
|
|
216
|
+
std::vector<ColoredBody> bodies =
|
|
217
|
+
evalToBodies("color(\"red\") cube(10); translate([20,0,0]) color(\"blue\") cube(10);");
|
|
218
|
+
const std::string path = tempPath("colours.amf").string();
|
|
219
|
+
exportModel(path, bodies, ExportOptions{});
|
|
220
|
+
|
|
221
|
+
const std::string xml = readFile(path);
|
|
222
|
+
EXPECT_EQ(countOf(xml, "<object id="), 2u);
|
|
223
|
+
EXPECT_EQ(countOf(xml, "<material id="), 2u);
|
|
224
|
+
std::remove(path.c_str());
|
|
225
|
+
}
|
|
226
|
+
|
|
177
227
|
TEST(ExportAmf, MaterialAndObjectIdsStartAtOne) {
|
|
178
228
|
// id 0 is reserved by the spec; a reader may drop anything using it.
|
|
179
229
|
std::vector<ColoredBody> bodies = evalToBodies("cube(2);");
|
|
@@ -633,3 +633,29 @@ def test_degenerate_ranges_do_not_overflow_the_element_count(tmp_path):
|
|
|
633
633
|
# Silent for NaN; the unbounded pair warn, with the reference's number.
|
|
634
634
|
assert len(warnings) == 2, warnings
|
|
635
635
|
assert all("too many elements (4294967295)" in w for w in warnings), warnings
|
|
636
|
+
|
|
637
|
+
|
|
638
|
+
def test_export_model_facade_accepts_split_components(tmp_path):
|
|
639
|
+
"""The Python facade's signature must track the nanobind binding's.
|
|
640
|
+
|
|
641
|
+
They are two hand-written parameter lists for one call, and adding
|
|
642
|
+
`split_components` to the binding alone left the facade dropping it --
|
|
643
|
+
a TypeError the C++ suite cannot see, because it never goes through
|
|
644
|
+
Python. Caught in practice, hence this.
|
|
645
|
+
"""
|
|
646
|
+
from openscad_cpp_evaluator import Evaluator, export_model
|
|
647
|
+
|
|
648
|
+
src = tmp_path / "pieces.scad"
|
|
649
|
+
src.write_text("cube(10); translate([20,0,0]) cube(10); translate([40,0,0]) cube(10);")
|
|
650
|
+
ev = Evaluator()
|
|
651
|
+
ev.evaluate(str(src), {})
|
|
652
|
+
|
|
653
|
+
def objects_in(path, **kwargs):
|
|
654
|
+
export_model(str(path), ev.geometry, **kwargs)
|
|
655
|
+
import zipfile
|
|
656
|
+
with zipfile.ZipFile(path) as z:
|
|
657
|
+
return z.read("3D/3dmodel.model").decode().count("<object ")
|
|
658
|
+
|
|
659
|
+
# Default matches OpenSCAD: one object however many pieces.
|
|
660
|
+
assert objects_in(tmp_path / "joined.3mf") == 1
|
|
661
|
+
assert objects_in(tmp_path / "split.3mf", split_components=True) == 3
|
|
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-1.7.2 → openscad_cpp_evaluator-1.8.0}/examples/eval_perf_benchmark.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/examples/manifold_cache_reuse.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/CLAUDE.md
RENAMED
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/external/openscad_cpp_parser/README.md
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
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/src/builtins/primitives_2d.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.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
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_bytecode_compiler.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_children_separate.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
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_feature_detection.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_multi_color_merge.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
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.0}/tests/test_unexpected_args.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.7.2 → openscad_cpp_evaluator-1.8.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
|
|
File without changes
|