From 3f6b07eb372917eb8bead148df413ba2cf2ef32b Mon Sep 17 00:00:00 2001 From: Zhaowenlong Date: Wed, 27 May 2026 17:45:30 +0800 Subject: [PATCH] feat: add panel assembly model asset --- data/examples/qet_panel_assembly/README.md | 43 + .../create_qet_panel_assembly.py | 246 + .../qet_panel_assembly.FCStd | Bin 0 -> 84277 bytes .../qet_panel_assembly.step | 12280 ++++++++++++++++ .../qet_panel_assembly_report.json | 128 + ...-27-panel-assembly-model-implementation.md | 97 + 6 files changed, 12794 insertions(+) create mode 100644 data/examples/qet_panel_assembly/README.md create mode 100644 data/examples/qet_panel_assembly/create_qet_panel_assembly.py create mode 100644 data/examples/qet_panel_assembly/qet_panel_assembly.FCStd create mode 100644 data/examples/qet_panel_assembly/qet_panel_assembly.step create mode 100644 data/examples/qet_panel_assembly/qet_panel_assembly_report.json create mode 100644 docs/superpowers/plans/2026-05-27-panel-assembly-model-implementation.md diff --git a/data/examples/qet_panel_assembly/README.md b/data/examples/qet_panel_assembly/README.md new file mode 100644 index 0000000..c80692b --- /dev/null +++ b/data/examples/qet_panel_assembly/README.md @@ -0,0 +1,43 @@ +# QET Panel Assembly Model + +This directory contains a reusable electrical panel assembly model based on the referenced video. + +## Files + +- `qet_panel_assembly.FCStd`: FreeCAD native panel assembly asset. +- `qet_panel_assembly.step`: geometry-only exchange export. +- `qet_panel_assembly_report.json`: generated metadata for verification. +- `create_qet_panel_assembly.py`: FreeCAD Python generator used to recreate the asset. + +## Geometry + +The model is a medium-detail approximation of the full assembly: + +- Pale gray cabinet / door body. +- Thick side edge and recessed door panel. +- Two circular hinge / screw markers. +- Dark right-side mounting plate. +- Two vertical white perforated connector banks. +- Small lower accessory connector modules. +- Yellow wire-frame style guide geometry matching the highlighted wiring envelope in the reference. + +Approximate dimensions: + +- Overall height: `180 mm` +- Cabinet width: `110 mm` +- Cabinet depth: `55 mm` +- Right connector area height: about `120 mm` + +## Semantics + +This is a visual and placement asset. It intentionally does not contain terminal LCS objects or engineering binding fields such as `QetProjectUuid`, `QetElementUuid`, `QetTerminalUuid`, or `QetInstanceId`. + +## Regenerate + +On this Windows workstation, use the registered FreeCAD runtime: + +```powershell +$runtime = Get-Content -LiteralPath 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' -Raw | ConvertFrom-Json +$env:QET_FREECAD_RUNTIME_JSON = 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' +& $runtime.freecad_python 'D:\LightWork3D\data\examples\qet_panel_assembly\create_qet_panel_assembly.py' +``` diff --git a/data/examples/qet_panel_assembly/create_qet_panel_assembly.py b/data/examples/qet_panel_assembly/create_qet_panel_assembly.py new file mode 100644 index 0000000..9c9e118 --- /dev/null +++ b/data/examples/qet_panel_assembly/create_qet_panel_assembly.py @@ -0,0 +1,246 @@ +# Generate a reusable QET electrical panel assembly asset. + +from __future__ import annotations + +import json +import os +import sys +from pathlib import Path + + +def _bootstrap_windows_freecad_runtime(): + if os.name != "nt": + return + + runtime_json = os.environ.get("QET_FREECAD_RUNTIME_JSON") + if not runtime_json: + runtime_json = os.path.join(os.environ.get("LOCALAPPDATA", ""), "QETDeps", "runtime.json") + if not runtime_json or not os.path.exists(runtime_json): + return + + with open(runtime_json, "r", encoding="utf-8-sig") as handle: + runtime = json.load(handle) + + roots = [str(item) for item in runtime.get("path_prefix", []) if item] + freecad_root = runtime.get("freecad_root", "") + if freecad_root: + roots.extend( + [ + os.path.join(freecad_root, "build", "Mod", "Material"), + os.path.join(freecad_root, "build", "Mod", "Part"), + os.path.join(freecad_root, "build", "Mod", "Import"), + os.path.join(freecad_root, "build", "Mod"), + ] + ) + roots.append(os.path.join(os.environ.get("SystemRoot", r"C:\Windows"), "System32", "downlevel")) + + for root in roots: + if root and os.path.isdir(root): + try: + os.add_dll_directory(root) + except (AttributeError, OSError): + pass + if root not in sys.path: + sys.path.append(root) + + +_bootstrap_windows_freecad_runtime() + +import FreeCAD as App +import Part + + +OUT_DIR = Path(__file__).resolve().parent +FCSTD_PATH = OUT_DIR / "qet_panel_assembly.FCStd" +STEP_PATH = OUT_DIR / "qet_panel_assembly.step" +REPORT_PATH = OUT_DIR / "qet_panel_assembly_report.json" + +ENGINEERING_BINDING_PROPERTIES = { + "QetProjectUuid", + "QetElementUuid", + "QetTerminalUuid", + "QetInstanceId", +} + + +def _style(obj, color, transparency=0): + if not hasattr(obj, "ViewObject") or obj.ViewObject is None: + return + obj.ViewObject.ShapeColor = color + obj.ViewObject.Transparency = transparency + + +def _box(doc, name, dx, dy, dz, x, y, z, color, transparency=0): + obj = doc.addObject("Part::Feature", name) + obj.Shape = Part.makeBox(dx, dy, dz, App.Vector(x, y, z)) + _style(obj, color, transparency) + return obj + + +def _cylinder_y(doc, name, radius, length, x, y, z, color): + obj = doc.addObject("Part::Feature", name) + obj.Shape = Part.makeCylinder(radius, length, App.Vector(x, y, z), App.Vector(0, -1, 0)) + _style(obj, color, 0) + return obj + + +def _wire_segment(doc, name, start, end, thickness, color): + sx, sy, sz = start + ex, ey, ez = end + dx = abs(ex - sx) or thickness + dy = abs(ey - sy) or thickness + dz = abs(ez - sz) or thickness + x = min(sx, ex) - (thickness / 2.0 if ex == sx else 0.0) + y = min(sy, ey) - (thickness / 2.0 if ey == sy else 0.0) + z = min(sz, ez) - (thickness / 2.0 if ez == sz else 0.0) + return _box(doc, name, dx, dy, dz, x, y, z, color, 0) + + +def _wire_rect(doc, prefix, x0, y0, z0, width, height, depth_offset=0.0): + color = (1.0, 0.86, 0.05) + y = y0 + depth_offset + thickness = 0.55 + return [ + _wire_segment(doc, prefix + "_Left", (x0, y, z0), (x0, y, z0 + height), thickness, color), + _wire_segment(doc, prefix + "_Right", (x0 + width, y, z0), (x0 + width, y, z0 + height), thickness, color), + _wire_segment(doc, prefix + "_Top", (x0, y, z0 + height), (x0 + width, y, z0 + height), thickness, color), + _wire_segment(doc, prefix + "_Bottom", (x0, y, z0), (x0 + width, y, z0), thickness, color), + ] + + +def _export_step(objects): + try: + import Import + + Import.export(objects, str(STEP_PATH)) + except Exception: + import ImportGui + + ImportGui.export(objects, str(STEP_PATH)) + + +def _create_connector_bank(doc, prefix, x, y, z, rows, cols, plate_height, plate_width): + white = (0.93, 0.9, 0.95) + dark = (0.04, 0.04, 0.05) + metal = (0.58, 0.58, 0.56) + objects = [ + _box(doc, prefix + "_Body", plate_width, 4.0, plate_height, x, y, z, white, 0), + _box(doc, prefix + "_SideRailLeft", 1.2, 4.4, plate_height, x - 1.2, y - 0.2, z, metal, 0), + _box(doc, prefix + "_SideRailRight", 1.2, 4.4, plate_height, x + plate_width, y - 0.2, z, metal, 0), + ] + x_pitch = plate_width / (cols + 1) + z_pitch = plate_height / (rows + 1) + for row in range(rows): + for col in range(cols): + px = x + x_pitch * (col + 1) + pz = z + z_pitch * (row + 1) + objects.append( + _cylinder_y( + doc, + "{0}_Hole_R{1:02d}_C{2:02d}".format(prefix, row + 1, col + 1), + 1.0, + 0.7, + px, + y - 0.15, + pz, + dark, + ) + ) + if col == 0: + objects.append( + _cylinder_y( + doc, + "{0}_Screw_R{1:02d}".format(prefix, row + 1), + 0.55, + 0.8, + x + plate_width + 2.6, + y - 0.15, + pz, + metal, + ) + ) + return objects + + +def main(): + OUT_DIR.mkdir(parents=True, exist_ok=True) + doc = App.newDocument("QETPanelAssembly") + objects = [] + + light = (0.82, 0.84, 0.88) + edge = (0.46, 0.43, 0.5) + dark_panel = (0.22, 0.2, 0.26) + white = (0.95, 0.94, 0.96) + black = (0.02, 0.02, 0.02) + + # Cabinet / door, roughly matching the large pale box in the reference video. + objects.extend( + [ + _box(doc, "Panel_BackBox", 110.0, 55.0, 180.0, -80.0, -25.0, 0.0, light, 0), + _box(doc, "Panel_LeftDoorFace", 6.0, 60.0, 178.0, -88.0, -28.0, 1.0, edge, 0), + _box(doc, "Panel_InnerRecess", 72.0, 1.4, 132.0, -68.0, -29.0, 24.0, (0.9, 0.92, 0.96), 18), + _box(doc, "Panel_RecessLeftLine", 1.2, 1.8, 132.0, -68.0, -30.0, 24.0, edge, 0), + _box(doc, "Panel_RecessRightLine", 1.2, 1.8, 132.0, 2.8, -30.0, 24.0, edge, 0), + _box(doc, "Panel_RecessTopLine", 72.0, 1.8, 1.2, -68.0, -30.0, 155.0, edge, 0), + _box(doc, "Panel_RecessBottomLine", 72.0, 1.8, 1.2, -68.0, -30.0, 24.0, edge, 0), + _cylinder_y(doc, "Panel_HingeTop", 2.3, 1.0, -85.0, -31.0, 134.0, (0.18, 0.18, 0.2)), + _cylinder_y(doc, "Panel_HingeBottom", 2.3, 1.0, -85.0, -31.0, 44.0, (0.18, 0.18, 0.2)), + _box(doc, "Panel_RightMountPlate", 45.0, 6.0, 168.0, 30.0, -31.0, 6.0, dark_panel, 0), + ] + ) + + # Connector banks and small accessory blocks on the right side. + objects.extend(_create_connector_bank(doc, "ConnectorBank_Left", 35.0, -36.0, 44.0, 10, 2, 110.0, 18.0)) + objects.extend(_create_connector_bank(doc, "ConnectorBank_Right", 60.0, -37.0, 50.0, 12, 3, 102.0, 20.0)) + objects.extend( + [ + _box(doc, "ConnectorBank_LeftTopCap", 18.0, 4.2, 12.0, 35.0, -36.2, 154.0, white, 0), + _box(doc, "ConnectorBank_RightTopCap", 20.0, 4.2, 11.0, 60.0, -37.2, 152.0, white, 0), + _box(doc, "AccessoryConnector_LowerLeft", 16.0, 4.0, 34.0, 26.0, -37.0, 18.0, white, 0), + _box(doc, "AccessoryConnector_LowerRight", 14.0, 4.0, 28.0, 70.0, -38.0, 22.0, white, 0), + _cylinder_y(doc, "AccessoryConnector_LowerLeftScrew1", 0.8, 0.7, 34.0, -38.1, 28.0, black), + _cylinder_y(doc, "AccessoryConnector_LowerLeftScrew2", 0.8, 0.7, 34.0, -38.1, 42.0, black), + _cylinder_y(doc, "AccessoryConnector_LowerRightScrew1", 0.8, 0.7, 77.0, -39.1, 30.0, black), + _cylinder_y(doc, "AccessoryConnector_LowerRightScrew2", 0.8, 0.7, 77.0, -39.1, 44.0, black), + ] + ) + + # Yellow annotation-like wire frames from the source video. + objects.extend(_wire_rect(doc, "WireFrame_LeftBank", 32.0, -41.0, 34.0, 27.0, 130.0)) + objects.extend(_wire_rect(doc, "WireFrame_RightBank", 56.0, -42.0, 38.0, 33.0, 126.0, -1.2)) + objects.extend( + [ + _wire_segment(doc, "WireFrame_TopBridge", (45.0, -42.0, 158.0), (88.0, -42.0, 158.0), 0.55, (1.0, 0.86, 0.05)), + _wire_segment(doc, "WireFrame_BottomBridge", (42.0, -42.0, 34.0), (88.0, -42.0, 34.0), 0.55, (1.0, 0.86, 0.05)), + ] + ) + + doc.recompute() + doc.saveAs(str(FCSTD_PATH)) + _export_step(objects) + + report = { + "dimensions_mm": { + "overall_height": 180.0, + "cabinet_width": 110.0, + "cabinet_depth": 55.0, + "connector_area_height": 120.0, + }, + "outputs": {"fcstd": str(FCSTD_PATH), "step": str(STEP_PATH)}, + "objects": [obj.Name for obj in objects], + "engineering_binding_properties_present": { + obj.Name: [prop for prop in sorted(ENGINEERING_BINDING_PROPERTIES) if prop in obj.PropertiesList] + for obj in objects + if any(prop in obj.PropertiesList for prop in ENGINEERING_BINDING_PROPERTIES) + }, + "terminal_role_objects": [obj.Name for obj in objects if getattr(obj, "Role", "") == "Terminal"], + } + REPORT_PATH.write_text(json.dumps(report, indent=2), encoding="utf-8") + + print("Generated FCStd: {0}".format(FCSTD_PATH)) + print("Generated STEP: {0}".format(STEP_PATH)) + print("Generated report: {0}".format(REPORT_PATH)) + + +if __name__ == "__main__": + main() diff --git a/data/examples/qet_panel_assembly/qet_panel_assembly.FCStd b/data/examples/qet_panel_assembly/qet_panel_assembly.FCStd new file mode 100644 index 0000000000000000000000000000000000000000..81d705b9aed14d70161dbfe8f9e21e0dcee9ddbd GIT binary patch literal 84277 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 **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Generate a reusable electrical panel assembly asset as `.FCStd` and `.step`. + +**Architecture:** Add one FreeCAD Python generator in `data/examples/qet_panel_assembly/`. The script bootstraps the registered Windows FreeCAD runtime, creates the panel assembly geometry, saves the FCStd, exports STEP, and writes a report used by verification. + +**Tech Stack:** FreeCAD Python API, Part workbench primitives, registered QETDeps FreeCAD Python runtime, Markdown documentation. + +--- + +### Task 1: Generator and README + +**Files:** +- Create: `data/examples/qet_panel_assembly/create_qet_panel_assembly.py` +- Create: `data/examples/qet_panel_assembly/README.md` + +- [ ] **Step 1: Create generator** + +Create `create_qet_panel_assembly.py`. It must: + +- Bootstrap Windows FreeCAD DLL paths from `QET_FREECAD_RUNTIME_JSON` or `%LOCALAPPDATA%\QETDeps\runtime.json`. +- Generate cabinet/door geometry, dark mounting plate, two white perforated connector banks, small white connector modules, and yellow wire frame geometry. +- Save `qet_panel_assembly.FCStd`. +- Export `qet_panel_assembly.step`. +- Write `qet_panel_assembly_report.json`. +- Avoid terminal LCS objects and engineering binding properties. + +- [ ] **Step 2: Create README** + +Create `README.md` describing dimensions, visual parts, output file roles, regeneration command, and the absence of terminal semantics. + +### Task 2: Generate and Verify + +**Files:** +- Generate: `data/examples/qet_panel_assembly/qet_panel_assembly.FCStd` +- Generate: `data/examples/qet_panel_assembly/qet_panel_assembly.step` +- Generate: `data/examples/qet_panel_assembly/qet_panel_assembly_report.json` + +- [ ] **Step 1: Run generator** + +Run: + +```powershell +$runtime = Get-Content -LiteralPath 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' -Raw | ConvertFrom-Json +$env:QET_FREECAD_RUNTIME_JSON = 'C:\Users\ng123\AppData\Local\QETDeps\runtime.json' +& $runtime.freecad_python 'D:\LightWork3D\data\examples\qet_panel_assembly\create_qet_panel_assembly.py' +``` + +Expected: command exits `0` and prints generated output paths. + +- [ ] **Step 2: Verify FCStd and STEP** + +Open the FCStd with the registered FreeCAD Python runtime and assert: + +- The document has objects. +- At least one object name starts with `Panel_`. +- At least one object name starts with `ConnectorBank_`. +- At least one object name starts with `WireFrame_`. +- No object has `Role="Terminal"`. +- No object has `QetProjectUuid`, `QetElementUuid`, `QetTerminalUuid`, or `QetInstanceId`. + +Read the first line of the STEP file and assert it is `ISO-10303-21;`. + +### Task 3: Commit + +**Files:** +- Add: `docs/superpowers/plans/2026-05-27-panel-assembly-model-implementation.md` +- Add: `data/examples/qet_panel_assembly/` + +- [ ] **Step 1: Stage intended files only** + +Run: + +```powershell +git add -- docs/superpowers/plans/2026-05-27-panel-assembly-model-implementation.md data/examples/qet_panel_assembly +git diff --cached --name-only +``` + +Expected: only the plan and `qet_panel_assembly` files are staged. + +- [ ] **Step 2: Commit** + +Run: + +```powershell +git commit -m "feat: add panel assembly model asset" +``` + +Expected: a commit containing only the generated panel assembly asset files and plan. + +## Self-Review + +- Spec coverage: implements FCStd, STEP, generator, README, report, and semantic verification. +- Placeholder scan: no TBD/TODO/fill-later language is present. +- Type consistency: output file names match the approved spec.