openscad-cpp-evaluator 1.49.9__tar.gz → 1.50.1__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.49.9 → openscad_cpp_evaluator-1.50.1}/CLAUDE.md +37 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/CMakeLists.txt +2 -1
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/PKG-INFO +1 -1
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/lexer.l +11 -1
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_lexical.cpp +16 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/pyproject.toml +1 -1
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/CMakeLists.txt +7 -0
- openscad_cpp_evaluator-1.50.1/src/builtins/alpha_wrap.cpp +593 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/builtins.hpp +5 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/function_builtins.cpp +1 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/registry.cpp +3 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/CMakeLists.txt +1 -0
- openscad_cpp_evaluator-1.50.1/tests/test_alpha_wrap.cpp +120 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_feature_detection.cpp +1 -1
- openscad_cpp_evaluator-1.50.1/third_party/predicates/predicates.c +4130 -0
- openscad_cpp_evaluator-1.50.1/third_party/predicates/predicates.h +22 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.github/workflows/wheels.yml +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.gitignore +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/.gitmodules +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/LICENSE +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/README.md +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/bindings/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/bindings/ast_to_py.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/bindings/module.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/cmake/embed_font.cmake +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/cmake/patch_manifold.cmake +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/eval_perf_benchmark.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/manifold_cache_reuse.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/examples/minimal_debugger.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/.github/workflows/ci.yml +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/.gitignore +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/CLAUDE.md +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/LICENSE +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/README.md +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/api.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/ast_node.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/declarations.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/expression.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/module_instantiation.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/scope_builder.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast/vector_element.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/ast.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/comments.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/position.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/pretty_print.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/scope_table.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/serialization.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/include/openscad_cpp_parser/source_map.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/.DS_Store +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/api.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/ast_node.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/declarations.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/expression.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/format_utils.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/module_instantiation.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/scope_builder.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/ast/vector_element.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/comment_attach_internal.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/comments.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/driver.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/driver.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/lexer_api.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/oscad_location.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/grammar/parser.y +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/inline_comment_attach.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/position.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/scope.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/serialization/json_io.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/serialization/yaml_io.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/src/source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_assignments.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_ast_generation.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_comments_and_files.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_concurrent_parse.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_const_borrow.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_control.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_expressions.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_functions.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_inline_comments.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_modules.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_node_str.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_pretty_print.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_profile_time.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_render_expression.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_scope.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_serialization.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_smoke.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_source_map.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_strict_commas.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_use_include.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tests/test_vectors.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/external/openscad_cpp_parser/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bound_args.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bytecode.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bytecode_compiler.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/bytecode_vm.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/call_args.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/colored_body.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/coverage.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/csg_node.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/css_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/debug_hooks.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/debug_repl.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/dispatch.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/dxf_svg_import.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/eval_context.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/eval_error.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/eval_use.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/evaluator.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/export.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/font_match.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/format_closure.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/freetype_font_provider.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/function_builtins.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/import_builtin.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/manifold_cache.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/mesh_check.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/mesh_import.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/osc_range.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/profile.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/reassign.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/scope_trail.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/segments.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/surface_load.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/text_metrics.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/utf8.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/value.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/include/openscad_cpp_evaluator/zip_stored.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/python/openscad_cpp_evaluator/__init__.py +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LICENSE +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-Bold.ttf +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-BoldItalic.ttf +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-Italic.ttf +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/resources/fonts/LiberationSans-Regular.ttf +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/call_args.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/color.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/control.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/dxf_dim.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/extrude.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/import.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/modifiers.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/primitives_2d.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/primitives_3d.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/profile_time.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/roof.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/segments.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/surface.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/text.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/topology.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/builtins/transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/bytecode_vm.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/colored_body.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/coverage.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/csg_generate.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/csg_resolve.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/css_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/debug/debug_repl.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/debug_profile.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/eval_error.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/eval_use.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/export.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/format_closure.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/dxf_import.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/mesh_import.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/scene_import.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/surface_load.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/import/svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/measure_geometry.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/stmt_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/text/font_match.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/text/freetype_font_provider.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/text/text_metrics.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/user_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/utf8.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/value.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/xkcd_colors.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/xkcd_colors.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/src/zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_booleans.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_bytecode_compiler.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_children_separate.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_cli.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_control_flow.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_coverage.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_csg_tree.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_debug_hooks.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_discretizer.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_dxf_svg_import.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_eval_context.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_export.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_expr_eval.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_extrude_roof.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_function_builtins.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_helpers.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_import_export.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_include_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_manifold_cache.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_mesh_check.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_multi_color_merge.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_openscad_parity.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_primitives.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_profile_time.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_profiling.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_python_bindings.py +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_render_expr.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_scope_trail.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_scoping.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_surface.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_tail_calls.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_text.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_transforms.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_undef_args.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_unexpected_args.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_use.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_value.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_viewport_params.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tests/test_zip_stored.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/CMakeLists.txt +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/cli_lib.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/cli_lib.hpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/tools/cli/main.cpp +0 -0
- {openscad_cpp_evaluator-1.49.9 → openscad_cpp_evaluator-1.50.1}/uv.lock +0 -0
|
@@ -1970,3 +1970,40 @@ is evaluated before the clock starts. Times under 1 ms print in microseconds (`f
|
|
|
1970
1970
|
after the body, which a tail step would not wait for.
|
|
1971
1971
|
- `PROFILE:` lines go straight to `echoFn_`, not through `emitWarning`, so the ManifoldCache never
|
|
1972
1972
|
stores or replays them (a replay would print a stale time as if it were current).
|
|
1973
|
+
|
|
1974
|
+
## `alpha_wrap()`
|
|
1975
|
+
|
|
1976
|
+
`alpha_wrap(alpha, offset) { ... }` shrink-wraps its children in a closed, manifold skin
|
|
1977
|
+
(BelfrySCAD #941; `supported_feature("alpha-wrap")` is 1). The skin follows any concavity a ball
|
|
1978
|
+
of radius `alpha` can enter and bridges any gap or hole narrower than that; every point of it lies
|
|
1979
|
+
`offset` outside the input. Defaults are CGAL's: alpha 1/20 of the bounding-box diagonal, offset
|
|
1980
|
+
alpha/30. All Normal 3D children are wrapped together into one body taking the first one's colour,
|
|
1981
|
+
**including an open `polyhedron()`'s raw triangles** (`ColoredBody::rawMesh`) -- wrapping geometry
|
|
1982
|
+
too broken for Manifold is half the point. 2D children and `%`/`#` bodies pass through (2D with a
|
|
1983
|
+
warning). A non-positive or non-numeric `alpha`/`offset` warns and leaves the children as they were.
|
|
1984
|
+
|
|
1985
|
+
### Implementation notes
|
|
1986
|
+
|
|
1987
|
+
- `src/builtins/alpha_wrap.cpp`, written **from the paper** (Portaneri et al., "Alpha Wrapping with
|
|
1988
|
+
an Offset", SIGGRAPH 2022) and CGAL's user manual -- **not** from CGAL's `Alpha_wrap_3` source,
|
|
1989
|
+
which is GPL and cannot be carried into this MIT project. Keep it that way: do not paste from CGAL.
|
|
1990
|
+
- Delaunay is our own Bowyer-Watson insertion over **Shewchuk's exact predicates**
|
|
1991
|
+
(`third_party/predicates/`, public domain, the original file minus its `random()` test helpers,
|
|
1992
|
+
which MSVC lacks). They are K&R C, so the project enables `C`; `predicates.c` is compiled with
|
|
1993
|
+
warnings off and must never see fast-math. `exactinit()` runs once (`std::call_once`).
|
|
1994
|
+
- Four far "super" vertices stand in for the infinite vertex; a cell using one is outside and never
|
|
1995
|
+
entered. The loose box's 8 corners are jittered by 1e-9 of the diagonal so no four are
|
|
1996
|
+
cospherical; Steiner points are not jittered, and a tie (`insphere == 0`) counts as no conflict.
|
|
1997
|
+
- Gates are ordered by the smallest empty sphere through the face (its centre on the dual Voronoi
|
|
1998
|
+
edge, nearest the face's circumcentre). Rule 1 finds where the Voronoi edge first meets the offset
|
|
1999
|
+
surface by **sphere tracing** -- the distance to the input is 1-Lipschitz, so stepping by
|
|
2000
|
+
`distance - offset` cannot overshoot. Rule 2 projects the circumcentre of a cell that overlaps the
|
|
2001
|
+
input (separating-axis tet/triangle test over a BVH) onto the offset surface.
|
|
2002
|
+
- The skin is built as `MeshGL64`: rounding Steiner points to float can fold the thin triangles a
|
|
2003
|
+
small offset produces. Input is read from each body's float `MeshGL`.
|
|
2004
|
+
- `checkCancel()` every 256 gates; a 5M-Steiner-point runaway guard warns and returns the children.
|
|
2005
|
+
- Measured: a 242-triangle bracket wraps in 5 ms at alpha 3 (362 faces) and 137 ms at alpha 0.5
|
|
2006
|
+
(11.9k faces); extruded text, 2,468 triangles, 0.7 s at alpha 0.5 and 4 s at alpha 0.2 (102k
|
|
2007
|
+
faces). Time follows OUTPUT size. Not done: CGAL's manifold post-pass for very thin features
|
|
2008
|
+
(no failure seen yet), and the same input scaled can differ by a near-tie or two (same shape,
|
|
2009
|
+
volume within 0.2%), which is why `DefaultsScaleWithTheModel` compares within tolerances.
|
|
@@ -11,7 +11,8 @@ if(NOT _oscad_pyproject MATCHES "\nversion = \"([0-9]+)\.([0-9]+)\.([0-9]+)\"")
|
|
|
11
11
|
endif()
|
|
12
12
|
set(OSCAD_EVAL_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}")
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
# C for third_party/predicates (Shewchuk's robust predicates, used by alpha_wrap).
|
|
15
|
+
project(openscad_cpp_evaluator VERSION ${OSCAD_EVAL_VERSION} LANGUAGES C CXX)
|
|
15
16
|
|
|
16
17
|
# On Apple Silicon, warn (don't fail -- a universal or intentionally-x86_64
|
|
17
18
|
# build is legitimate) if the effective target architecture is x86_64 while
|
|
@@ -88,7 +88,17 @@ NUMLIT 0[xX][0-9A-Fa-f]+|[0-9]+([.][0-9]*)?([eE][+-]?[0-9]+)?|[.][0-9]+([eE][+-
|
|
|
88
88
|
// U+FEFF (EF BB BF, a byte-order mark, anywhere in the file) and a bare
|
|
89
89
|
// A0, Latin-1's no-break space.
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
\xe2\x80\xa8|\xe2\x80\xa9|\xc2\x85 {
|
|
92
|
+
// U+2028 LINE SEPARATOR, U+2029 PARAGRAPH SEPARATOR and U+0085 NEXT
|
|
93
|
+
// LINE: line breaks to look at, so whitespace that also ends a `//`
|
|
94
|
+
// comment (below). Qt's editor types U+2028 for Shift+Enter, and it
|
|
95
|
+
// shows as a new line (BelfrySCAD #949). It does NOT count as a line:
|
|
96
|
+
// the editor numbers its lines by block and a U+2028 sits inside one,
|
|
97
|
+
// so every line and column after it still matches the editor's.
|
|
98
|
+
// OpenSCAD's lexer rejects all three.
|
|
99
|
+
}
|
|
100
|
+
/* A line comment ends at a newline or at any separator above. */
|
|
101
|
+
"//"([^\n\xe2\xc2]|\xe2[^\x80\n]|\xe2\x80[^\xa8\xa9\n]|\xc2[^\x85\n])* { /* skip line comment */ }
|
|
92
102
|
"/*"([^*]|\*+[^*/])*\*+"/" { /* skip block comment */ }
|
|
93
103
|
|
|
94
104
|
{IDENT} {
|
|
@@ -483,6 +483,22 @@ TEST(LexicalWhitespace, NoBreakSpaceByteOrderMarkAndLatin1A0) {
|
|
|
483
483
|
}
|
|
484
484
|
}
|
|
485
485
|
|
|
486
|
+
// U+2028/U+2029/U+0085 are whitespace that ends a line comment, without
|
|
487
|
+
// counting as a line (BelfrySCAD's editor numbers lines by block, and a
|
|
488
|
+
// U+2028 sits inside one).
|
|
489
|
+
TEST(LexicalWhitespace, UnicodeLineSeparatorsEndACommentButNotALine) {
|
|
490
|
+
for (const char* sep : {"\xe2\x80\xa8", "\xe2\x80\xa9", "\xc2\x85"}) {
|
|
491
|
+
const std::string src = std::string("a = 1;") + sep + "b = 2; // note" + sep + "c = 3;\nd = 4;";
|
|
492
|
+
auto ast = parseSrc(src);
|
|
493
|
+
ASSERT_EQ(ast.size(), 4u) << "the comment swallowed c = 3";
|
|
494
|
+
EXPECT_EQ(ast[2]->position().line, 1);
|
|
495
|
+
EXPECT_EQ(size_t(ast[2]->position().start_offset), src.find("c = 3"));
|
|
496
|
+
EXPECT_EQ(ast[3]->position().line, 2);
|
|
497
|
+
}
|
|
498
|
+
// Other multi-byte characters stay inside the comment.
|
|
499
|
+
EXPECT_EQ(parseSrc("a = 1; // \xe2\x80\x94 \xc2\xa0 \xe2\x82\xac c = 3;\nb = 2;").size(), 2u);
|
|
500
|
+
}
|
|
501
|
+
|
|
486
502
|
// The message quotes a whole character, and names a byte that starts none,
|
|
487
503
|
// so it is always valid UTF-8.
|
|
488
504
|
TEST(LexicalWhitespace, UnexpectedCharacterMessageIsValidUtf8) {
|
|
@@ -47,6 +47,8 @@ add_library(openscad_cpp_evaluator STATIC
|
|
|
47
47
|
builtins/function_builtins.cpp
|
|
48
48
|
builtins/import.cpp
|
|
49
49
|
builtins/topology.cpp
|
|
50
|
+
builtins/alpha_wrap.cpp
|
|
51
|
+
../third_party/predicates/predicates.c
|
|
50
52
|
builtins/extrude.cpp
|
|
51
53
|
builtins/roof.cpp
|
|
52
54
|
builtins/surface.cpp
|
|
@@ -73,6 +75,11 @@ target_compile_options(openscad_cpp_evaluator PRIVATE
|
|
|
73
75
|
$<$<NOT:$<CXX_COMPILER_ID:MSVC>>:-Wall;-Wextra>
|
|
74
76
|
)
|
|
75
77
|
|
|
78
|
+
# Shewchuk's predicates are 1996 K&R C, kept as published: quiet, and never
|
|
79
|
+
# with fast-math, which would break their exact arithmetic.
|
|
80
|
+
set_source_files_properties(../third_party/predicates/predicates.c PROPERTIES
|
|
81
|
+
COMPILE_OPTIONS "$<IF:$<C_COMPILER_ID:MSVC>,/w,-w>")
|
|
82
|
+
|
|
76
83
|
# -Wall -Wextra above is about OUR code, but two TUs pull a vendored header
|
|
77
84
|
# in wholesale and inherit its warnings: 27 from Boost.Polygon's voronoi
|
|
78
85
|
# headers and 9 from stb_image_write's implementation, against 5 that were
|