openscad-cpp-evaluator 1.45.1__tar.gz → 1.45.2__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.45.1 → openscad_cpp_evaluator-1.45.2}/CLAUDE.md +4 -1
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/mesh_import.hpp +3 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/import/scene_import.cpp +14 -5
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_import_export.cpp +93 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/uv.lock +1 -1
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/.gitignore +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/.gitmodules +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/LICENSE +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/README.md +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/bindings/ast_to_py.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/bindings/module.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/cmake/patch_manifold.cmake +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/LICENSE +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/.DS_Store +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/grammar/lexer.l +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_concurrent_parse.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_lexical.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_profile_time.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_strict_commas.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/coverage.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/export.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/python/openscad_cpp_evaluator/__init__.py +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/resources/fonts/LiberationSans-Bold.ttf +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/resources/fonts/LiberationSans-BoldItalic.ttf +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/resources/fonts/LiberationSans-Italic.ttf +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/call_args.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/dxf_dim.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/extrude.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/profile_time.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/registry.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/topology.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/bytecode_vm.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/coverage.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/export.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/format_closure.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/import/mesh_import.cpp +12 -12
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/measure_geometry.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/text/font_match.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/text/freetype_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/user_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/utf8.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/xkcd_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/xkcd_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_children_separate.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_coverage.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_discretizer.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_export.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_feature_detection.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_include_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_openscad_parity.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_profile_time.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_python_bindings.py +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_render_expr.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_undef_args.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_unexpected_args.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tools/cli/main.cpp +0 -0
|
@@ -1247,7 +1247,10 @@ grep for `ponytail:`.
|
|
|
1247
1247
|
without `-1` counts), and X3D's `IndexedTriangleSet`/`TriangleSet` are read. X3D goes through a
|
|
1248
1248
|
small real XML parser (comments, CDATA, DOCTYPE, entities); VRML through a tokenizer + generic
|
|
1249
1249
|
node parser that steps over `PROTO`/`EXTERNPROTO`/`ROUTE` (VRML 1.0 is refused by name). AMF's
|
|
1250
|
-
`unit`
|
|
1250
|
+
`unit` is ignored (OpenSCAD reads millimetres whatever it says), a zipped AMF (`PK` header) is read
|
|
1251
|
+
through `readStoredZipEntryBySuffix`, and each AMF object's vertices are welded by exact position
|
|
1252
|
+
(`weldVertices`, STL's), so a closed object written as a triangle soup imports closed, as in
|
|
1253
|
+
OpenSCAD -- per object, never across objects, and never near-coincident vertices.
|
|
1251
1254
|
What is not a mesh — primitives (Box, Sphere, ...), `Inline`, AMF constellations — lands in
|
|
1252
1255
|
`LoadedMesh::warnings`, which both `import()` faces emit as `import: '<file>': ...`.
|
|
1253
1256
|
- `include/openscad_cpp_evaluator/import_builtin.hpp`, `include/openscad_cpp_evaluator/
|
|
@@ -22,6 +22,9 @@ struct LoadedMesh {
|
|
|
22
22
|
// "import: {what}" on parse/IO failure. Mirrors _load_stl/_load_obj/
|
|
23
23
|
// _load_off/_load_3mf exactly (including STL's exact-match vertex welding
|
|
24
24
|
// and OBJ/OFF's fan triangulation of >3-gon faces).
|
|
25
|
+
// Merges vertices at exactly equal positions (STL's corners, an AMF
|
|
26
|
+
// object's duplicated vertices); every position keeps its first index.
|
|
27
|
+
LoadedMesh weldVertices(const std::vector<std::array<double, 3>>& verts, const std::vector<std::array<int, 3>>& tris);
|
|
25
28
|
LoadedMesh loadStl(const std::string& path);
|
|
26
29
|
LoadedMesh loadObj(const std::string& path);
|
|
27
30
|
LoadedMesh loadOff(const std::string& path);
|
|
@@ -653,13 +653,13 @@ LoadedMesh loadAmf(const std::string& path) {
|
|
|
653
653
|
LoadedMesh out;
|
|
654
654
|
for (std::string_view object : segments(xml, "object")) {
|
|
655
655
|
const std::string_view verticesBlock = elementText(object, "vertices");
|
|
656
|
-
|
|
656
|
+
LoadedMesh obj;
|
|
657
657
|
for (std::string_view vertex : segments(verticesBlock, "vertex")) {
|
|
658
658
|
const std::string_view c = elementText(vertex, "coordinates");
|
|
659
|
-
|
|
659
|
+
obj.verts.push_back({amfNumber(elementText(c, "x"), "x") * unit, amfNumber(elementText(c, "y"), "y") * unit,
|
|
660
660
|
amfNumber(elementText(c, "z"), "z") * unit});
|
|
661
661
|
}
|
|
662
|
-
const int count = static_cast<int>(
|
|
662
|
+
const int count = static_cast<int>(obj.verts.size());
|
|
663
663
|
for (std::string_view volume : segments(object, "volume")) {
|
|
664
664
|
for (std::string_view tri : segments(volume, "triangle")) {
|
|
665
665
|
std::array<int, 3> t{};
|
|
@@ -669,11 +669,20 @@ LoadedMesh loadAmf(const std::string& path) {
|
|
|
669
669
|
if (i < 0 || i >= count)
|
|
670
670
|
throw std::runtime_error("AMF: triangle vertex " + std::to_string(i) + " is past its object's " +
|
|
671
671
|
std::to_string(count) + " vertices");
|
|
672
|
-
t[k] =
|
|
672
|
+
t[k] = i;
|
|
673
673
|
}
|
|
674
|
-
|
|
674
|
+
obj.tris.push_back(t);
|
|
675
675
|
}
|
|
676
676
|
}
|
|
677
|
+
// OpenSCAD treats vertices at exactly the same position as one
|
|
678
|
+
// (checked, 2026.02.01): a closed object written as a triangle soup,
|
|
679
|
+
// or with its vertices listed twice, imports as a closed solid.
|
|
680
|
+
// Within each object only -- two open halves in separate objects
|
|
681
|
+
// stay open there too. Near-coincident vertices are not merged.
|
|
682
|
+
obj = weldVertices(obj.verts, obj.tris);
|
|
683
|
+
const int base = static_cast<int>(out.verts.size());
|
|
684
|
+
out.verts.insert(out.verts.end(), obj.verts.begin(), obj.verts.end());
|
|
685
|
+
for (const auto& t : obj.tris) out.tris.push_back({base + t[0], base + t[1], base + t[2]});
|
|
677
686
|
}
|
|
678
687
|
if (xml.find("<constellation") != std::string::npos) {
|
|
679
688
|
out.warnings.push_back("AMF constellations are not applied: each object is imported where it was modeled");
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/tests/test_import_export.cpp
RENAMED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
#include "test_helpers.hpp"
|
|
6
6
|
|
|
7
|
+
#include <algorithm>
|
|
7
8
|
#include <filesystem>
|
|
9
|
+
#include <map>
|
|
8
10
|
#include <fstream>
|
|
9
11
|
#include <gtest/gtest.h>
|
|
10
12
|
#include <manifold/manifold.h>
|
|
@@ -267,6 +269,97 @@ TEST(ImportModuleContext, ZippedAmfImports) {
|
|
|
267
269
|
EXPECT_NEAR(e.bodies[0].body->Volume(), 1.0, 1e-9);
|
|
268
270
|
}
|
|
269
271
|
|
|
272
|
+
namespace {
|
|
273
|
+
|
|
274
|
+
using Tri = std::array<std::array<double, 3>, 3>;
|
|
275
|
+
|
|
276
|
+
// The unit cube at (x, y, z) as 12 outward triangles, two per face, the
|
|
277
|
+
// faces in -z, +z, -y, +x, +y, -x order.
|
|
278
|
+
std::vector<Tri> cubeTris(double x, double y, double z) {
|
|
279
|
+
const int idx[12][3] = {{0, 3, 2}, {0, 2, 1}, {4, 5, 6}, {4, 6, 7}, {0, 1, 5}, {0, 5, 4},
|
|
280
|
+
{1, 2, 6}, {1, 6, 5}, {2, 3, 7}, {2, 7, 6}, {3, 0, 4}, {3, 4, 7}};
|
|
281
|
+
const double c[8][3] = {{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}, {0, 0, 1}, {1, 0, 1}, {1, 1, 1}, {0, 1, 1}};
|
|
282
|
+
std::vector<Tri> out;
|
|
283
|
+
for (const auto& t : idx) {
|
|
284
|
+
Tri tri;
|
|
285
|
+
for (int k = 0; k < 3; ++k) tri[k] = {c[t[k]][0] + x, c[t[k]][1] + y, c[t[k]][2] + z};
|
|
286
|
+
out.push_back(tri);
|
|
287
|
+
}
|
|
288
|
+
return out;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// One <object> per entry, every triangle carrying its own three vertex
|
|
292
|
+
// copies: a triangle soup, as an exporter that never shares vertices writes.
|
|
293
|
+
std::string soupAmf(const std::vector<std::vector<Tri>>& objects) {
|
|
294
|
+
std::string amf = "<?xml version=\"1.0\"?>\n<amf unit=\"millimeter\">";
|
|
295
|
+
for (const auto& tris : objects) {
|
|
296
|
+
amf += "<object id=\"1\"><mesh><vertices>";
|
|
297
|
+
for (const Tri& t : tris)
|
|
298
|
+
for (const auto& p : t)
|
|
299
|
+
amf += "<vertex><coordinates><x>" + std::to_string(p[0]) + "</x><y>" + std::to_string(p[1]) +
|
|
300
|
+
"</y><z>" + std::to_string(p[2]) + "</z></coordinates></vertex>";
|
|
301
|
+
amf += "</vertices><volume>";
|
|
302
|
+
for (size_t i = 0; i < tris.size(); ++i)
|
|
303
|
+
amf += "<triangle><v1>" + std::to_string(3 * i) + "</v1><v2>" + std::to_string(3 * i + 1) + "</v2><v3>" +
|
|
304
|
+
std::to_string(3 * i + 2) + "</v3></triangle>";
|
|
305
|
+
amf += "</volume></mesh></object>";
|
|
306
|
+
}
|
|
307
|
+
return amf + "</amf>";
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
} // namespace
|
|
311
|
+
|
|
312
|
+
// OpenSCAD treats an AMF object's vertices at exactly the same position as
|
|
313
|
+
// one vertex (checked, 2026.02.01), so a closed object written as a soup
|
|
314
|
+
// imports as a closed solid. Without the weld it was an open surface with
|
|
315
|
+
// 36 boundary edges, drawn but unable to take part in CSG.
|
|
316
|
+
TEST(ImportModuleContext, AmfTriangleSoupWeldsIntoAClosedSolid) {
|
|
317
|
+
const Imported r = importText("soup.amf", soupAmf({cubeTris(0, 0, 0)}));
|
|
318
|
+
EXPECT_NEAR(r.volume, 1.0, 1e-9);
|
|
319
|
+
EXPECT_FALSE(anyContains(r.messages, "not a closed solid")) << ::testing::PrintToString(r.messages);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// A 3x3x1 slab with a 1x1 hole through it (eight unit cubes around the
|
|
323
|
+
// middle, the faces between neighbours left out), as a soup: closed, genus 1.
|
|
324
|
+
TEST(ImportModuleContext, AmfSoupWithAThroughHoleWeldsClosed) {
|
|
325
|
+
std::map<std::vector<std::array<double, 3>>, std::vector<Tri>> faces;
|
|
326
|
+
std::map<std::vector<std::array<double, 3>>, int> uses;
|
|
327
|
+
for (int i = 0; i < 3; ++i)
|
|
328
|
+
for (int j = 0; j < 3; ++j) {
|
|
329
|
+
if (i == 1 && j == 1) continue;
|
|
330
|
+
const std::vector<Tri> c = cubeTris(i, j, 0);
|
|
331
|
+
for (size_t f = 0; f < c.size(); f += 2) {
|
|
332
|
+
std::vector<std::array<double, 3>> key{c[f][0], c[f][1], c[f][2], c[f + 1][0], c[f + 1][1], c[f + 1][2]};
|
|
333
|
+
std::sort(key.begin(), key.end());
|
|
334
|
+
key.erase(std::unique(key.begin(), key.end()), key.end());
|
|
335
|
+
faces[key] = {c[f], c[f + 1]};
|
|
336
|
+
++uses[key];
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
std::vector<Tri> ring;
|
|
340
|
+
for (const auto& [key, tris] : faces)
|
|
341
|
+
if (uses[key] == 1) ring.insert(ring.end(), tris.begin(), tris.end());
|
|
342
|
+
const auto path = tempPath("ring.amf");
|
|
343
|
+
std::ofstream(path, std::ios::binary) << soupAmf({ring});
|
|
344
|
+
std::vector<std::string> messages;
|
|
345
|
+
Evaluated e = evalSrc("import(\"" + path.generic_string() + "\");",
|
|
346
|
+
[&](const std::string& m) { messages.push_back(m); });
|
|
347
|
+
std::filesystem::remove(path);
|
|
348
|
+
ASSERT_EQ(e.bodies.size(), 1u);
|
|
349
|
+
ASSERT_TRUE(e.bodies[0].body);
|
|
350
|
+
EXPECT_NEAR(e.bodies[0].body->Volume(), 8.0, 1e-9);
|
|
351
|
+
EXPECT_EQ(e.bodies[0].body->Genus(), 1);
|
|
352
|
+
EXPECT_FALSE(anyContains(messages, "not a closed solid")) << ::testing::PrintToString(messages);
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// The weld is per object, as in OpenSCAD: a cube split into two objects,
|
|
356
|
+
// each half its triangles, is two open surfaces, not one closed cube.
|
|
357
|
+
TEST(ImportModuleContext, AmfWeldsWithinAnObjectOnly) {
|
|
358
|
+
const std::vector<Tri> c = cubeTris(0, 0, 0);
|
|
359
|
+
const Imported r = importText("halves.amf", soupAmf({{c.begin(), c.begin() + 6}, {c.begin() + 6, c.end()}}));
|
|
360
|
+
EXPECT_TRUE(anyContains(r.messages, "not a closed solid")) << ::testing::PrintToString(r.messages);
|
|
361
|
+
}
|
|
362
|
+
|
|
270
363
|
TEST(ImportModuleContext, UnsupportedExtensionErrors) {
|
|
271
364
|
const auto path = tempPath("unsupported.xyz");
|
|
272
365
|
std::ofstream(path) << "x";
|
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/.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
|
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/eval_perf_benchmark.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/manifold_cache_reuse.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/examples/minimal_debugger.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/external/openscad_cpp_parser/LICENSE
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
|
|
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.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/function_builtins.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/primitives_2d.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/primitives_3d.cpp
RENAMED
|
File without changes
|
{openscad_cpp_evaluator-1.45.1 → openscad_cpp_evaluator-1.45.2}/src/builtins/profile_time.cpp
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|