Commit Graph

34 Commits

Author SHA1 Message Date
1bfc747cf9 Fix importer: always create new sketch + generate sandbox 2 rib profile (11 pockets) 2026-02-16 21:49:07 +00:00
c5226084fe Generate sandbox 2 rib profile (11 pockets, validated) 2026-02-16 21:33:58 +00:00
98e4b2be02 Add sandbox 2 rib profile geometry 2026-02-16 21:27:27 +00:00
379801c8aa demo: cantilever scenario ready for NX test (52 pockets, 343 entities)
rib_profile_sandbox_1.json now contains the cantilever demo profile.
Also includes 4 demo scenarios with density heatmaps + profiles.
2026-02-16 21:15:09 +00:00
1021f57abc fix(pockets): skip pocketing in high-density zones (eta > eta_solid)
High density (η > 0.7) means high stress → leave solid, no pocket.
Only low-density regions get lightweighted.

Scenario comparison with s_min=30, s_max=70:
- Baseline uniform (w=0.5): 78 pockets, 2886g
- Bottom-right heavy: 41 pockets, 3516g (bottom stays solid)
- Left-side mount: 27 pockets, 3799g (left stays solid)
- Center pressure: 15 pockets, 4295g (center stays solid)
2026-02-16 21:05:56 +00:00
4f051aa7e1 refactor(triangulation): hex grid isogrid layout replaces constrained Delaunay
Complete rewrite of triangulation engine:
- Regular hexagonal-packed vertex grid (equilateral triangles)
- Density-adaptive refinement: denser near holes, coarser in open areas
- Boundary-conforming vertices along frame edge and hole keepouts
- Delaunay on point set + clip to valid region (inside frame, outside keepouts)
- Result: proper isogrid layout, 87 pockets from 234 triangles
- 553 NX entities, min fillet 4.89mm, mass 2770g
- No more dependency on Shewchuk Triangle library (scipy.spatial.Delaunay)
2026-02-16 20:58:05 +00:00
239e2f01a9 tune(brain): uniform triangulation + bigger spacing for r_f=6mm fillets
- Switched to uniform triangulation (no density-adaptive refinement for
  initial pass — saves that for stress-informed iterations)
- s_min=45mm, s_max=55mm (was 12/35) — larger triangles fit 6mm fillets
- Boss keepout circles: 12 segments (was 32) — less boundary clutter
- Fillet must be >= 80% of r_f at every corner or pocket is skipped
- Result: 75 pockets, 481 NX entities, min fillet 4.85mm, mass 4066g
- adaptive_density=True param enables density refinement for future stress iterations
2026-02-16 20:51:20 +00:00
30981fa066 fix(brain): enforce r_f=6mm minimum, reject pockets that can't fit fillets
- Default r_f raised from 1.5mm to 6mm (machining constraint)
- Default min_pocket_radius raised to 6mm
- Pockets that can't fit r_f at any corner (within 80% tolerance) are
  skipped entirely — left solid for more stiffness in tight areas
- Result: 26 pockets (was 432), 187 NX entities (was 13,061)
- Min fillet radius: 4.88mm, all >= 4.8mm (80% of 6mm)
- Mass: 4,601g (was 3,480g — more solid = heavier but manufacturable)
2026-02-16 20:42:46 +00:00
da9b579bcf refactor(brain): structured pocket output — 3 lines + 3 arcs per pocket
Replaced Shapely buffer-based fillet (59-pt polylines) with exact geometric
fillet computation. Each pocket now outputs:
- 3 straight edges (line start/end pairs)
- 3 fillet arcs (center, radius, tangent points, angles)

NX import updated to use SketchLineBuilder + SketchArcBuilder (3-point).
Total NX entities: ~2,600 (was ~13,000). Includes arc fallback to 2-line
segments if SketchArcBuilder fails.

Also outputs circular hole definitions for future NX circle creation.
2026-02-16 20:17:49 +00:00
fdcafe96a9 fix(import): use SketchLineBuilder instead of model curves + AddGeometry
Model curves (part.Curves.CreateLine) are SmartObjects that can't be added
to a sketch via AddGeometry. Switch to SketchLineBuilder which creates
native sketch geometry directly (SetStartPoint/SetEndPoint/Commit).
2026-02-16 20:02:11 +00:00
fbdbf6b362 fix(import): use Sketch.InferConstraintsOption enum (nested under NXOpen.Sketch, not NXOpen) 2026-02-16 19:56:31 +00:00
4e0c9cd24d fix: correct enum names from MCP - InferNoConstraints, TreatAsEllipse, UpdateLevel.Model runtime resolve 2026-02-16 19:50:24 +00:00
c93239c9c6 fix: strip closing duplicate points in triangulation (segfault fix), batch line creation for NX speed, 6mm endmill params 2026-02-16 19:29:41 +00:00
61dcefb5ea fix: resolve ViewReorient/UpdateLevel enum at runtime with multiple fallback paths 2026-02-16 19:15:57 +00:00
8143da96e9 fix: correct enum names - ViewReorient.FalseValue, UpdateLevel.Model (verified from MCP) 2026-02-16 19:14:22 +00:00
9534ba9ed9 fix: Builder.Commit() not CommitFeature(), correct AddGeometry signature, verbose commit logging 2026-02-16 19:11:28 +00:00
4fc129e35b fix: try setattr/SetX/method patterns for SketchInPlaceBuilder properties (NXOpen Python getter/setter naming collision) 2026-02-16 19:08:06 +00:00
bf1f461e2b fix: use Plane (SmartObject) not DatumPlane, method calls not property setters (verified from MCP stubs) 2026-02-16 19:05:12 +00:00
7a2c002672 fix: use Matrix3x3 for datum plane, property assignment for SketchInPlaceBuilder2 2026-02-16 18:57:31 +00:00
bf4e84d45a fix: use Planes.CreatePlane + Points.CreatePoint + Directions.CreateDirection for sketch creation 2026-02-16 18:54:21 +00:00
ef8801a5cd test: add sandbox1 rib profile output for import testing 2026-02-16 18:49:21 +00:00
f4cfc9b1b7 feat(adaptive-isogrid): import_profile.py - push rib profile as NX sketch, sandbox1 brain input test file 2026-02-16 18:45:24 +00:00
23b6fe855b fix: handle closed circular edges (holes) - UF.Eval + GetLength circle fallback + debug logging 2026-02-16 17:57:06 +00:00
98d510154d fix: rewrite edge sampling + loop building using verified NXOpen API (GetVertices, GetEdges, GetLength, UF.Eval) 2026-02-16 17:46:52 +00:00
851a8d3df0 fix: replace face.GetLoops() with compatible API (GetEdgeLoops / UF layer / GetEdges fallback) 2026-02-16 17:42:08 +00:00
1166741ffd fix: add try/except + debug logging around sandbox extraction 2026-02-16 17:31:33 +00:00
afaa925da8 fix: search features + feature names for ISOGRID_SANDBOX attribute (Promote Body stores attrs on feature, not body) 2026-02-16 17:26:31 +00:00
6251787ca5 merge: take remote extract_sandbox.py v2 2026-02-16 12:22:56 -05:00
26100a9624 feat(adaptive-isogrid): extract_sandbox.py v2 - NX journal compatible, no argparse, sim→idealized navigation, listing window output 2026-02-16 17:20:28 +00:00
bb83bb9cab feat(adaptive-isogrid): rewrite extract_sandbox.py - start from .sim, navigate to idealized part, find sandbox solid bodies by ISOGRID_SANDBOX attribute, inner loops as boundary constraints 2026-02-16 17:07:26 +00:00
85d40898f0 Revise spec to reserved-region FEM and add Phase 2 NX sandbox scripts 2026-02-16 02:04:19 +00:00
e4651c9a40 Adaptive isogrid: min triangle area filtering and circular hole bosses 2026-02-16 01:11:53 +00:00
9d4c37234a Add standalone brain CLI, test geometries, and robustness sweep outputs 2026-02-16 00:12:12 +00:00
4bec4063a5 feat: add adaptive isogrid tool — project foundations
- Python Brain: density field, constrained Delaunay triangulation,
  pocket profiles, profile assembly, validation modules
- NX Hands: skeleton scripts for geometry extraction, AFEM setup,
  per-iteration solve (require NX environment to develop)
- Atomizer integration: 15-param space definition, objective function
- Technical spec, README, sample test geometry, requirements.txt
- Architecture: Python Brain + NX Hands + Atomizer Manager
2026-02-16 00:01:35 +00:00