Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
50 most recent check-ins
|
2026-07-22
| ||
| 10:43 | More work on packaging for windows and linux. leaf check-in: 51ac8bec1b user: johnfound tags: openscad_lang | |
| 05:37 | Unsuccessful attempts to make windows distribution. check-in: 713f134670 user: johnfound tags: openscad_lang | |
|
2026-07-21
| ||
| 18:29 |
Fix OCCT library loading: use venv-local OCCT instead of system
- Install OCCT into venv ($VIRTUAL_ENV/lib/occt) instead of build-install - Set CMAKE_INSTALL_RPATH on pythonocc, text_shaper, hull .so files - Create symlinks in site-packages/*/lib/ → occt/lib/ for dlopen - Remove dead cmake flags (BUILD_MODULE_TK, CMAKE_INSTALL_LIBDIR) - Each setup script now independently runnable (source activate + CMAKE_PREFIX_PATH) - venv is created once if missing, no backup rotation check-in: b8b9bf875f user: johnfound tags: openscad_lang | |
| 14:33 | Removed stupid check. check-in: b697f3c200 user: johnfound tags: openscad_lang | |
| 14:27 | Attempts to make working distributions. check-in: 2ee5433633 user: johnfound tags: openscad_lang | |
| 13:05 | Windows distribution compiles, but not working. check-in: d5ffb9d35e user: johnfound tags: openscad_lang | |
| 05:28 | Almost working scripts for Windows packaging. Now with native compilation in Wine, so these scripts can be used in Windows as well. I hope... check-in: 4aa7a23583 user: johnfound tags: openscad_lang | |
|
2026-07-20
| ||
| 14:38 | Work on the new packaging scripts. check-in: 71d417e47c user: johnfound tags: openscad_lang | |
| 12:33 | Work on the new packaging scripts. check-in: 019fcb91ec user: johnfound tags: openscad_lang | |
| 08:34 | Fixed minor bug. check-in: 31e86ff422 user: johnfound tags: openscad_lang | |
| 08:27 | More structure changes. check-in: 71fb131d4f user: johnfound tags: openscad_lang | |
| 07:35 | Project structure changes. check-in: 374f03a13e user: johnfound tags: openscad_lang | |
|
2026-07-19
| ||
| 23:11 | Remove Draw module from OCCT. check-in: 97be7098e0 user: johnfound tags: openscad_lang | |
| 21:02 | Renamed script and minor changes. check-in: 034fde9c78 user: johnfound tags: openscad_lang | |
| 20:13 | Work on the clean packaging with PyInstaller only and with clean-room жÐvenv f. check-in: f75ce94d20 user: johnfound tags: openscad_lang | |
| 10:22 | Color picker: add sort modes (lightness, warmth, hue) with secondary criteria, hex code in tooltip, compact layout check-in: 146bc24566 user: johnfound tags: openscad_lang | |
| 08:58 | Update AGENTS.md with color data files and color picker docs check-in: 244344e756 user: johnfound tags: openscad_lang | |
| 08:57 |
Add Color Picker dialog for named color search
- New ColorPickerDialog class in color_picker.py - ImGui window with live text filter (substring match) - Grid of color swatches using imgui.color_button() - Click to insert color name as SCL string into active editor - Tooltip shows color name on hover - Opened via View menu > Color Picker... - 1049 colors (CSS + XKCD), sorted alphabetically check-in: 5ed1b9fad4 user: johnfound tags: openscad_lang | |
| 08:23 |
Replace hardcoded colorname_map with data-driven color loader
- Move named colors from Python dict (OCCT enum ints) to .txt data files - Add css_colors.txt (CSS Color Module Level 4, 149 colors) - Add xkcd_colors.txt (XKCD color survey, 954 colors) - colorname_map.py now loads all .txt from assets/colors/ at startup - CSS colors override XKCD when names conflict - Values are now [R,G,B,A] floats (0-1) instead of OCCT Quantity_NOC enums - Remove Quantity_Color dependency from scl.py color lookup - Remove dead get_color_from_name() from boccviewer.py - Remove string/int color support from DisplayShape() - Users can add custom .txt files to assets/colors/ check-in: dae2fe6a16 user: johnfound tags: openscad_lang | |
| 07:39 |
Add OpenSCAD objects support and fix has_key() type checking.
- Add object() builtin with raw_args flag (named args as keys, dict merge, list set/delete) - Add is_object() builtin - has_key() now warns and returns undef for non-string keys (matching OpenSCAD behavior) - Dict support in expr_array_access (bracket notation obj["k"]) - Dict iteration in stat_for, expr_array_for, expr_array_multi_for (dict->keys) - Dict support in len() - scl_str() formats dicts as { key = val; ... } - Add comprehensive test_objects.scad test suite check-in: 1340c94b46 user: johnfound tags: openscad_lang | |
| 06:56 | Add named_args flag for textmetrics/fontmetrics to use parse_kwargs (full named-argument matching) instead of parse_kwargs_flat (positional-only). Matches OpenSCAD behavior where these functions support keyword arguments like textmetrics(text="x", font="f"). check-in: 80bbe98989 user: johnfound tags: openscad_lang | |
| 06:47 |
parse_kwargs_flat: OpenSCAD-compatible positional-only arg resolution for builtin functions
Add parse_kwargs_flat method that ignores argument names for builtin function calls, matching OpenSCAD semantics where names like abs(n=-5) silently work by positional assignment. Only parse_kwargs (modules and user functions) does full named-argument matching. Also includes test_text.scad font name update. check-in: 9ce4757d0c user: johnfound tags: openscad_lang | |
|
2026-07-18
| ||
| 09:22 | Commented out redundant argument checks. check-in: f9288d2c96 user: johnfound tags: openscad_lang | |
| 09:08 | Fixed arguments handling for functions. check-in: 34219982ac user: johnfound tags: openscad_lang | |
| 07:43 |
Migrate 6 remaining module handlers to _leaf_scope and fix parse_kwargs mixed named+positional args.
Module handlers (_handle_text, _handle_line, _handle_polygon, _handle_square, _handle_circle, _handle_test_internal_occt) now use _leaf_scope instead of manual push_stack/parse_kwargs/pop_stack, matching move/arc/spline pattern. Fix parse_kwargs: named args no longer advance the positional counter. Positional args now skip parameter slots already claimed by named args, matching OpenSCAD semantics for mixed calls like fn(c=1, 7, 8) -> a=7,b=8,c=1. check-in: 86ae6723a0 user: johnfound tags: openscad_lang | |
| 07:41 | Remove --nosync from Fossil docs — not recommended, let Fossil handle sync. check-in: 250e1adad3 user: johnfound tags: openscad_lang | |
| 07:38 |
Update Fossil reference in AGENTS.md with comprehensive command docs.
Replaced minimal Git-like reference with detailed Fossil command tables covering status, file ops, committing, history, and remote operations. Added key Fossil concepts vs Git section and explicit warnings about non-existent Git commands (no fossil log, no staging area, etc). check-in: cc3ecb0bca user: johnfound tags: openscad_lang | |
| 07:34 |
Migrate 6 remaining module handlers to _leaf_scope and fix parse_kwargs mixed named+positional args.
Module handlers (_handle_text, _handle_line, _handle_polygon, _handle_square, _handle_circle, _handle_test_internal_occt) now use _leaf_scope instead of manual push_stack/parse_kwargs/pop_stack, matching move/arc/spline pattern. Fix parse_kwargs: named args no longer advance the positional counter. Positional args now skip parameter slots already claimed by named args, matching OpenSCAD semantics for mixed calls like fn(c=1, 7, 8) -> a=7,b=8,c=1. Also make pythonocc TKCAF sed patch idempotent in cross-build-wine.sh. check-in: fb80c0dbc4 user: johnfound tags: openscad_lang | |
| 06:10 | Add cross-platform font resolver, bundled LiberationSans font, and bcad_hull build script. text() now works on Windows via FontResolver (Linux: fc-list, Windows: winreg, macOS: directory scan). Removes scipy/numpy font lookup and platform-specific manual search. check-in: d50dd4c9fe user: johnfound tags: openscad_lang | |
|
2026-07-17
| ||
| 20:05 | Working hull() in windows. Some problems with the functions arguments order. check-in: 38af001599 user: johnfound tags: openscad_lang | |
| 19:14 |
Add bcad_hull C++ library, remove old packaging dirs, update cross-build
- cpp/bcad_hull/: C++ convex hull library (QuickHull, SWIG bindings) replaces scipy dependency for hull() operation - Remove packaging/{freetype,harfbuzz,imgui-bundle,occt,pythonocc-core} (old vendored build scripts, no longer needed) - cross-build-wine.sh: add bcad_hull cross-compilation, add --add-data for Python files (__init__.py, _swig.py), fix imgui nanobind hack - imgui_color_text_edit.patch: regenerated - scl_context.py: hull() uses bcad_hull instead of scipy - main_window.py: remove Development submenu, unused render code check-in: df0b00253d user: johnfound tags: openscad_lang | |
| 14:33 |
WIP: cross-build fixes (untested)
- toolchain-mingw64.cmake: INCLUDE/PACKAGE changed from BOTH to ONLY - cross-build-wine.sh: Visualization=ON, WRAP_VISU=ON, various fixes - text_shaper CMakeLists.txt: WIN32 Python library linking check-in: 729cd8bcf4 user: johnfound tags: openscad_lang | |
| 14:32 | Add distribution size analysis (604 MB breakdown, optimization opportunities) check-in: 1827e9bd5b user: johnfound tags: openscad_lang | |
| 05:52 | Fixes to the cross-build-wine.sh, but still not working. check-in: 1e864b4ec7 user: johnfound tags: openscad_lang | |
|
2026-07-16
| ||
| 14:45 | Minor change in cross-build-wine.sh check-in: 105a35d5b7 user: johnfound tags: openscad_lang | |
| 14:22 | Fixes to the script. Added symlinks to the source directories for cross compilation. check-in: fa74e282b2 user: johnfound tags: openscad_lang | |
| 14:11 |
Windows cross-build: from-source pipeline for OCCT/HarfBuzz/FreeType/pythonocc
- Rewrite cross-build-wine.sh: replace conda installs with MinGW cross-compilation from source (FreeType, HarfBuzz, OCCT, pythonocc-core) - Add bcad_text_shaper cross-compilation step using MinGW-built deps - Update CMakeLists.txt: manual HARFBUZZ/FREETYPE path specification - Not fully tested yet check-in: 60514ae414 user: johnfound tags: openscad_lang | |
| 10:54 |
Refactor progress system: replace string labels with integer function IDs
- Replace progress_label (char * 256) with progress_func_id (int32) in shared memory - Rewrite progress_helper.py: FUNC_* constants, func_name() mapping, cancel-only logic - Remove all label stack operations (push_label/pop_label/set_progress_label) - Remove init_progress/advance_progress/adjust_progress_total functions - Use direct state.s writes + old_id save/restore pattern in scl.py and scl_context.py - Remove _update_progress_state() with string encode/padding overhead - Update bcode_tools.py GUI to read func_id and convert via func_name() - Benchmark2 (1M empty loop iterations): 8506ms → 5818ms (-32%) check-in: 0d6f131167 user: johnfound tags: openscad_lang | |
| 09:07 |
Add builtin function argument validation and handler hardening
- Add _validate_func_args() to check arg count + type before calling handler - Add _type_name() and _TYPE_CHECKERS for validation - Dispatch returns undef + WARNING on count/type mismatch (OpenSCAD-compatible) - Fix len: return undef for non-list/string instead of 1 - Fix is_num: bool subclass is not a number - Fix chr: range check 0..0x10FFFF - Fix cross: support 2D vectors (scalar result), validate 3-element for 3D - Fix ln/log: domain check (positive numbers only) - Fix norm: validate all elements are numeric - Fix min/max: validate all elements are numeric, handle empty lists - Add min_count for rands (3) and assert (1) - Add 22 test files in tests/builtin_args/ (one per builtin function) - Add testing rules to AGENTS.md check-in: 2cf6a65426 user: johnfound tags: openscad_lang | |
| 07:57 |
Add capture() module, geometry inspection functions, and testing library
- Add SCLCapture class for collecting child shapes into compound - Add capture('name') { ... } module to store geometry in parent scope - Add 8 inspection functions: bbox_min, bbox_max, volume, surface_area, centroid, num_faces, num_vertices, num_edges - Add tests/lib/testing.scad with check_approx() function using norm() - Refactor 7 test files to use capture+assert(check_approx(...)) with analytical expected values instead of echo-only verification - Fix rotate() with no args: call ctx.rotate() to produce identity transform so capture() can store the resulting shape - test_capture.scad, test_rotate_openscad.scad, test_multmatrix.scad, test_linear_extrude_center.scad, test_resize.scad, test_fn_threshold.scad, test_import_center.scad check-in: b2b2730f61 user: johnfound tags: openscad_lang | |
| 06:35 |
Fix rotate() argument handling for OpenSCAD compatibility
- When a is a vector (Euler angles), v is now properly ignored with warning - When v is passed without a, emit warning (rotation on undef is meaningless) - Rewrite _handle_rotate: three clear branches (vector a, scalar a, no a) - Add tests/test_rotate_openscad.scad: 13 test cases verified against OpenSCAD check-in: 8a1ea30ab8 user: johnfound tags: openscad_lang | |
| 05:43 |
Fix rotate() scope; centralize scope isolation via _module_scope/_leaf_scope
- Fix rotate_module_definition: add 'a' parameter alongside 'v' (was only 'v'), remove dual-path arg handling in _handle_rotate. rotate(45) = Z-rotation, rotate(90,[1,0,0]) = axis rotation, rotate([0,0,45]) = Euler angles. - Add _module_scope context manager: block parsed in clean sandbox frame, sandbox popped BEFORE kwargs parsed. Prevents module args leaking to children. - Add _leaf_scope context manager for leaf modules (no block, no context). - Refactor 21 block+kwargs handlers to _module_scope: translate, rotate, mirror, scale, multmatrix, resize, color, loft, union, intersection, difference, hull, minkowski, offset, group, render, projection, linear_extrude, rotate_extrude. - Fix loft scope leak: sandbox frame was staying on stack during kwargs eval. - Refactor 10 leaf handlers to _leaf_scope: move, arc, spline, close, fillet, polyhedron, cube, cylinder, sphere, import. - Add scl_examples/test_args_edge.scad: 11 rotate() edge-case tests. check-in: 937777c08a user: johnfound tags: openscad_lang | |
| 04:33 |
Remove debug_parser/debug_expr dead code; fix color() scope isolation (v->c)
- Remove debug_parser=False, debug_expr_en=False, debug_expr() and all 38 if-debug_parser guards (block handlers, profile primitives, simple shapes, import, eval_scope). Net -121 lines in scl.py. - Rename color_module_definition param v -> c (OpenSCAD API). - Restructure _handle_color: parse_block before parse_kwargs in separate stack frames to prevent module args leaking into children. - Update AGENTS.md and docs/scl.md accordingly. check-in: edaf51fe12 user: johnfound tags: openscad_lang | |
|
2026-07-15
| ||
| 14:47 | Partially working text() and textmetrics(); Strange problem with the created object alignment. check-in: 09a36a69c4 user: johnfound tags: openscad_lang | |
| 12:13 |
Fix textmetrics: use pen advance for advance, add bbox to TextShapeResult
- Add xmin/ymin/xmax/ymax (ink bbox coordinates) to TextShapeResult so Python can use them directly without recomputing via brepbndlib - _get_text_metrics(): call shape_text() directly instead of going through _make_text_shape(), use pen advance for advance (was incorrectly using bbox width, which is always <= pen advance) - _make_text_shape(): fix valign formulas — use ymax/ymin from bbox instead of h (bbox height). valign=bottom was identical to valign=top (copy-paste bug: both used dy=-h) - Update AGENTS.md: document new bbox methods on TextShapeResult check-in: dedfb4e315 user: johnfound tags: openscad_lang | |
| 11:50 |
Convert bcad_text_shaper from nanobind to SWIG and clean up API
- Replace nanobind with SWIG 4.4.1 (same version as pythonocc) for Python bindings - TextShapeResult: convert from plain struct to proper C++ class with private data (m_shape, m_width, m_height) and public const methods (shape(), width(), height(), is_null()). shape_text() is a friend function. - Remove BRep serialization hack (C++ no longer writes BRepTools::Write string) - TopoDS_Shape typemap: use SWIG_TypeQuery() for runtime type lookup instead of compile-time SWIGTYPE_p_TopoDS_Shape — avoids overwriting pythonocc's clientdata in shared SWIG runtime (fixes ShapeType AttributeError) - __init__.py: thin re-export (import OCC.Core.TopoDS + re-export from _swig), no manual wrapper classes - Remove nanobind dependency from pyproject.toml - Simplify build.sh: use pip install instead of cmake+manual copy - Delete rebuild.sh, _bcad_text_shaper.map (no longer needed) - Fix OutlineContext memory leak: destructor closes current wire, cb_move_to allocates new wire (was previously leaking on every move_to) - Update scl.py consumer: result.shape -> result.shape(), result.width -> result.width() - Update AGENTS.md: document SWIG binding pattern, TextShapeResult class API check-in: b55c3b529a user: johnfound tags: openscad_lang | |
| 05:52 |
Add bcad_text_shaper: C++ HarfBuzz+FreeType+OCCT text shaping for OpenSCAD-compatible text()
- New C++ extension (cpp/bcad_text_shaper/) using HarfBuzz for shaping, FreeType for outlines, OCCT BRepBuilderAPI_MakeFace for faces - Proper RTL (Arabic, Hebrew), CJK, ligatures, kerning, vertical text - Auto-detect direction/script from text content via HarfBuzz APIs - Face orientation fix: ShapeFix_Face + BRepAdaptor_Surface normal check - Space handling: pen advance before glyph skip so spaces count in width - BRep serialization: C++ writes BRepTools::Write, Python deserializes - em parameter: matches OpenSCAD effective_size = em * 72.0 / 100.0 - direction/language/script/em params added to text() module definition - direction default changed from 'ltr' to '' for auto-detect (OpenSCAD compat) - spacing parameter now actually passed through (was silently ignored before) - 37 tests passing (12 basic + 25 exotic scripts) - AGENTS.md documented with full API and implementation details check-in: f414607b31 user: johnfound tags: openscad_lang | |
|
2026-07-14
| ||
| 14:44 | docs: mark text() as implemented in compatibility todo check-in: 89404ee09b user: johnfound tags: openscad_lang | |
| 14:42 |
text, textmetrics, fontmetrics: add OpenSCAD text functions
- text() module: renders text as 2D geometry via OCCT StdPrs_BRepFont font resolution via fc-match, default Liberation Sans supports size, font, halign, valign, spacing parameters creates proper child SCLPart3 context (fixes linear_extrude integration) - textmetrics() builtin: returns position, size, ascent, descent, offset, advance - fontmetrics() builtin: returns nominal/max ascent/descent, interline, font info - expr_dot extended for dict access (tm.size[0], fm.nominal.ascent) - 12 test cases all PASS check-in: d48ee6fbf1 user: johnfound tags: openscad_lang | |
| 13:54 |
intersection_for: add OpenSCAD doc examples to tests
Test cases from OpenSCAD documentation: - Rotating spheres with scalar range - Rotating cubes with vector-of-vectors list - Empty range (no-op) Total: 7 tests, all PASS check-in: 954de721df user: johnfound tags: openscad_lang | |