c4d98ee97c
Importer: rename sketch feature + replace/delete old sketch on update
2026-02-16 22:00:18 +00:00
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