Move OpenCASCADE out of the merged editor image into occ_service: a separate
emscripten module (-sASYNCIFY=0, MODULARIZE, in-container -Oz finalize, 2N+8
pre-warmed pthread pool) booted lazily in a dedicated Web Worker on the first
STEP export or STEP/IGES model parse. kicad_editor.wasm ~190 MB -> 130 MB;
sessions that never touch OCC never fetch its 57 MB. STEP export works in the
browser for the first time: the unchanged desktop dialog runs EXPORTER_STEP,
whose wasm shadow suspends into globalThis.occService and the export bytes go
straight to a browser download (never entering the editor heap). STEP/IGES 3D
models parse in the worker via the oce shadow (S3D WriteCache/ReadCache wire).
- wasm/occ-service/: service CMake target (hooked from the kicad fork's
top-level CMakeLists, wasm/editor pattern), embind entry
(occExport/occLoadModel), wxConfig pre-js.
- wasm/stubs/{exporter_step,oce_plugin}_stub.cpp: EM_ASYNC_JS worker bridges
(callee-shadowing; no caller #ifdefs).
- web/standalone: provider installed whenever the kicad_editor bundle boots
(cross-face safe); ONE shared worker-boot source occ-worker.js (vite ?raw;
the e2e stub reads the same file) — blob worker with locateFile absolutized
against the glue URL; export download-name guard.
- deps: OCC builds with RapidJSON so its glTF/GLB writer exists — pinned to
the vcpkg master snapshot 2025-02-26 (24b5e7a8b27f), the same code official
KiCad consumes via vcpkg.json's opencascade[rapidjson]; rapidjson's latest
tag (v1.1.0, 2016) is ill-formed under modern clang.
- tests: occ-export dialog e2e (lazy-fetch boundary + STEP download bytes),
occ-probe incl. a 9-format matrix (step/stpz/brep/xao/ply/stl/glb/u3d/pdf),
3d-viewer-models hard-asserts the worker parse; occ provider stub installed
ambiently by the kicad fixtures.
Validated against desktop kicad-cli 10.0.4: geometric exact equality (bbox
delta 0 um, volume delta 0.0000%) for STEP/GLB/STL/BREP/STPZ across three
boards and option sweeps — with desktop OCC 7.9 vs wasm OCC 7.8; PLY/XAO/PDF
structurally equal; U3D same-size (quantizer float LSBs differ). Full kicad
e2e green on Firefox and Chromium; standalone verified end to end (lazy fetch
only on the Export click; export.step 60,628 B ISO-10303-21; loadModel 700 KB
STEP -> 569 KB scenegraph cache).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
105 lines
2.2 KiB
Text
105 lines
2.2 KiB
Text
{
|
|
"board": {
|
|
"active_layer": 0,
|
|
"active_layer_preset": "",
|
|
"auto_track_width": true,
|
|
"hidden_netclasses": [],
|
|
"hidden_nets": [],
|
|
"high_contrast_mode": 0,
|
|
"net_color_mode": 1,
|
|
"opacity": {
|
|
"images": 0.6,
|
|
"pads": 1.0,
|
|
"shapes": 1.0,
|
|
"tracks": 1.0,
|
|
"vias": 1.0,
|
|
"zones": 0.6
|
|
},
|
|
"prototype_zone_fills": false,
|
|
"selection_filter": {
|
|
"dimensions": true,
|
|
"footprints": true,
|
|
"graphics": true,
|
|
"keepouts": true,
|
|
"lockedItems": false,
|
|
"otherItems": true,
|
|
"pads": true,
|
|
"text": true,
|
|
"tracks": true,
|
|
"vias": true,
|
|
"zones": true
|
|
},
|
|
"visible_items": [
|
|
"vias",
|
|
"footprint_text",
|
|
"footprint_anchors",
|
|
"ratsnest",
|
|
"grid",
|
|
"footprints_front",
|
|
"footprints_back",
|
|
"footprint_values",
|
|
"footprint_references",
|
|
"tracks",
|
|
"drc_errors",
|
|
"drawing_sheet",
|
|
"bitmaps",
|
|
"pads",
|
|
"zones",
|
|
"drc_warnings",
|
|
"drc_exclusions",
|
|
"locked_item_shadows",
|
|
"conflict_shadows",
|
|
"shapes",
|
|
"board_outline_area",
|
|
"ly_points"
|
|
],
|
|
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
|
|
"zone_display_mode": 0
|
|
},
|
|
"git": {
|
|
"integration_disabled": false,
|
|
"repo_type": "",
|
|
"repo_username": "",
|
|
"ssh_key": ""
|
|
},
|
|
"meta": {
|
|
"filename": "demo.kicad_prl",
|
|
"version": 5
|
|
},
|
|
"net_inspector_panel": {
|
|
"col_hidden": [],
|
|
"col_order": [],
|
|
"col_widths": [],
|
|
"custom_group_rules": [],
|
|
"expanded_rows": [],
|
|
"filter_by_net_name": true,
|
|
"filter_by_netclass": true,
|
|
"filter_text": "",
|
|
"group_by_constraint": false,
|
|
"group_by_netclass": false,
|
|
"show_time_domain_details": false,
|
|
"show_unconnected_nets": false,
|
|
"show_zero_pad_nets": false,
|
|
"sort_ascending": true,
|
|
"sorting_column": -1
|
|
},
|
|
"open_jobsets": [],
|
|
"project": {
|
|
"files": []
|
|
},
|
|
"schematic": {
|
|
"hierarchy_collapsed": [],
|
|
"selection_filter": {
|
|
"graphics": true,
|
|
"images": true,
|
|
"labels": true,
|
|
"lockedItems": false,
|
|
"otherItems": true,
|
|
"pins": true,
|
|
"ruleAreas": true,
|
|
"symbols": true,
|
|
"text": true,
|
|
"wires": true
|
|
}
|
|
}
|
|
}
|