Skip to content

OM9 add-on: Vietnamese interface and the full Curve menu (58 commands) as in Matrix 9 - #3

Merged
MYuitsu merged 41 commits into
MYuitsu:mainfrom
vn-Jay3Designer:codex/release-addons
Nov 5, 2026
Merged

MYuitsu merged 41 commits into
MYuitsu:mainfrom
vn-Jay3Designer:codex/release-addons

Conversation

@vn-Jay3Designer

@vn-Jay3Designer vn-Jay3Designer commented Nov 2, 2026 •

Copy link
Copy Markdown
Collaborator

Cập nhật sau (đối chiếu Rhino 5)

  • Đối chiếu tuỳ chọn của các lệnh Curve với help Rhino 5 (Matrix 9 chạy trên Rhino 5):
    CurveThroughPt CurveType/Knots, Extend Arc Center/ToPoint, Rebuild SelectMasterCurve,
    Blend Continuity1/2, Match AverageCurves/Merge, Sketch Closed/Planar.
  • Intersect / IntersectTwoSets: đường cắt đường hoặc đường xuyên mặt cho điểm.
  • Project: chỉ giữ phần đường nằm trên mặt, cắt đúng mép, góc nhọn giữ nguyên.
  • Grip: chọn bằng khung, Shift/Ctrl; gumball trên các điểm đã chọn; kéo cả nhóm; snap khi kéo.
  • Spiral/Helix nằm trong dung sai 0.0005 mm; polygon và đường nhiều nhịp hiển thị đúng góc.
  • Line: bấm điểm, gõ chiều dài, Enter là tạo đường.
  • Có test cho từng kiểu tạo đường, đo bằng số so với hình học chính xác.

zonezone1996vn-cpu and others added 30 commits October 23, 2026 14:58
- om9-addons: package install/enable/settings/keymap host (Blender-style
  extensions) with a native runtime that loads add-on libraries through a
  small C ABI (om9-addon-abi) and validates every returned mesh.
- addons/gem_on_curve: round stones spaced along selected curves
  (BuilderGemOnCrv, BuilderGemCountOnCrv); addons/ring_sizes data library.
- om9-app: Tools > Add-ons window, Install Add-on from Disk and drag-drop;
  add-on commands light up the existing menu, icon, F6 and CMD names, and
  unsupported commands stay visible and disabled. Gems are inserted in one
  transaction with the om9.gem slot, so one Undo removes them.
- om9-core: an Insert now charges and validates the inserted entity's
  extensions, so an entity can be created together with its semantic slot.
- CI: build-addons-windows.ps1 builds, packages, validates and
  smoke-installs the Windows packages and uploads the om9-addons artifact.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Opening a document builds a replacement controller; the add-on host and
its command-name table were left behind, so after File > Open the Gem
commands reported "unknown command". Found while testing the CI build on
Windows. adopt_contract_state now carries the host, names and pending
messages; the add-on test opens a saved ring through File > Open and runs
Gem Count On Crv again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
… preview

A command declared `builder = true` no longer runs on click. It opens a
builder that shares one state between three places:

- command line: prompt plus option tokens (Size=1.5 Spacing=0.2 ...);
  typing Size=2 or clicking a token changes a value, Enter accepts, Esc
  cancels, another command closes the builder;
- BUILDERS panel below Projects: command thumbnail with a live sketch
  of diameter/gap and count, Accept/Cancel/Defaults, every parameter as
  a drag/type field and one slider for the selected parameter;
- viewports: cyan outline preview of the result for the selected curves
  (never a document object; the curve can be picked while open).

Accepting creates the result in one transaction and stores the values
as the add-on's defaults, so the Add-ons window no longer edits
settings; it lists commands (clickable), enable state and uninstall.

Host: [[commands]] builder, [[settings]] option / choice_labels,
command_info, invoke_with (per-call overrides, validated) and
store_settings (all-or-nothing). The host now reports "đã đặt N viên"
after commit, so a preview never claims placement. gem_on_curve 0.4.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
… Gem Cutter add-ons

- ABI: optional om9_addon_session symbol with a stateless JSON step protocol (prompt,
  command-line options, wanted input, preview, rubber band, created geometry or transforms).
- Host/app: interactive commands run step by step from CMD, F6 and their OM9 icons; clicks,
  typed points and sub-options; one transaction on finish; builder panels combine with
  sessions (Gem Cutter).
- Icons whose catalog code an enabled add-on provides become active in menus and toolbars.
- New add-ons: curves (13 commands), transform (11), gem_cutter; shared geom maths.
- gem_on_curve 0.4.1 records the gem frame so transforms and cutters follow placed stones.
- CI packages all native add-ons and fails when one cannot be enabled.
- docs/matrix9-commands.md: generated catalog of the Matrix-style menus with status.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
…ixes

Upstream now implements most Curve, Surface and Solid commands and the Top 11 buttons in
OM9 itself. Built-in commands keep their typed names and icons; add-on commands fill the
remaining icons (Controller::icon_target decides for menus, toolbars and the catalog).

- Snaps also serve points an interactive add-on asks for; hover events are sent only when
  the pointer moves.
- Interactive add-on panels close when their session finishes, keeping the accepted values.
- Builds without OCCT (--no-default-features) compile again: kernel-only solid helpers
  report the missing kernel.
- The command catalog is generated and checked by crates/om9-app/tests/command_catalog.rs
  with the real icon resolution.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
One add-on (om9_matrix) links every menu crate into one library and carries a generated
manifest, a help page per command and an index. Enabled add-on commands take over the icon and
typed name from OM9's own command. The session protocol gains mesh data for selected objects,
per-object transforms, deletions, geometry replacement and gem record updates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Orient, Shear, Symmetry, Remap, Move UVN, Make Down Facing, deformations (Bend, Taper, Twist,
Stretch, Maelstrom, Soft Move, Set Points, Project, Flow Along Curve/Surface, Smart Flow,
Splop, Cage Edit) and placements along curves and surfaces. The session protocol gains NURBS
surfaces and the exact definition of selected curves and surfaces.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Primitives, mesh booleans (BSP), extrusions with holes, boss/rib/slab, holes, move face, cap
holes, extract surface, shell and fillet edge (signed distance grid, marching tetrahedra).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Rebuild, refit, blends, curves from two views, project, pullback,
intersections, offsets, isocurves, fillets and chamfers, UV curves,
extend, seam, continue, divide, curve boolean, tween, duplicate
edge/border, cross sections, sketches, curves on surfaces, section,
match, silhouette, wireframe and soft edit. A command's own code now
always resolves to it even when another command shares its feature.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Gem on Curve Advanced, Gem List and Multi on curves, Gem Profile, Orient
to Gem, Gem on Surface, Pave Builder, Auto Pave, Pave Sphere, Pave
prongs and azure cutters, tapered baguettes, clusters, Gem Springs,
Follow, Control, Positioner, Gem Flow and Splop, Match Attributes and
Save / Load Style. Stones now remember the settings and cutters built on
them. Settings: SubD bezel, Pull to Rail, Prong Editor, Prong and Bead
on Surface, Metal from Gems. A command receives only its own settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Eternity band, signet and SubD signet, SubD ring, text on curve, raised
band, award ring top, rope, jump ring, freeform and grid knots, pattern
and nautilus builders, and mill work along curves and over areas.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Ring rail, profile placer, outside rail, custom rails, four-rail
profile, profile, merge and end cap, smart targets and blends, join,
metal weights, ring resizer, surface pullback, our own parametric
settings and findings libraries, image trace (PNG, BMP, PGM), object
checker, mesh repair, reducer and conversion, 3D printing sprues,
object on curve, surface inset, curve transform and center line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Sweeps (1 rail, 2 rails, profile, four profiles, multi rail), loft,
curve network, patch, edge curves, planar curves, plane, exact revolve,
rail revolve, extrude, blends, fillets and chamfers (variable too),
offsets, tween, merge, match, drape, heightfield, split, extend,
extrude normal to surface, unroll and smash, soft edit, cutting plane,
seam, tangent, rebuild, refit, shrink and untrim. Geometry: surfaces
fitted through point grids; ear clipping no longer stalls on the
doubled corners of hole bridges (planar faces with holes were wrong).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Polygon cages with Catmull-Clark smoothing (boundaries and creases
stay sharp). Primitives, pipe, sweeps, loft, revolve, from curves,
surfaces and meshes, to NURBS, a library of shapes. Edits: item move /
scale / rotate, divide, split sides, inset, knife, offset, extrude,
bridge, append face, crease, flip, project, collapse, match, weld,
symmetry, wrap, fill, shell, extract, subdivision level, isocurves.
OM9 selects whole objects, so the add-on keeps a face selection per
object (loop, ring, UV, paint, grow, shrink, invert, all, none, naked,
creased, coplanar, sets) that the edits use.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Edit points and control points (pick a point, place it, repeat),
explode, join, split (curves at a point, meshes along a line), trim
(click the parts between crossings) and ring rail.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
The Windows add-on build makes om9_matrix-<ver>-windows-x64.zip (one
DLL, help pages, icons, README) instead of separate packages and
smoke-lists the Gems, Clayoo, Surface and Tools menus. The command
catalog now reports both OM9's own commands and the package's: every
slot of the 11 Matrix menus is covered by the package. Version 0.9.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Each of the package's commands runs on a small scene (curve, circle,
box, stone, NURBS plane) with and without a selection: start, hover,
clicks, a number, Enter, cancel, undo. None panics and the scene always
comes back. Cage Edit, Intersect Two Sets and Smart Flow Pull Down keep
their guidance in the prompt after a refused Enter.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
…t editor

Solid > Solid Points On and Transform > Solid Points ON now open the Top 11
point editor on the selected solids (mesh vertices / NURBS control points)
instead of only explaining it. When points are stacked along the view, the
one nearest the viewer is picked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
Found on the Windows PC: a builder command started with the stone already
selected (icon click) previewed the head but kept ✔ disabled and Enter
went nowhere, because the panel read the session's preview only when the
values or the selection changed. The panel now follows the session every
frame, and the command line takes the keyboard when a builder opens so
Enter ends it as in Matrix.

Orient on Surface / Orient Perpendicular to Curve behave like Rhino:
Copy=Yes (default) places a copy at every click until Enter, Undo takes
the last back, Copy=No moves once, Flip turns the objects over; only the
objects are previewed, not the target.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
The panel showed 'Ring size 7.0 mm' and a length setting would be unit-scaled
in inch documents. Found while testing Ring Rail on the Windows PC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
A window selection around a ring also catches the gem layout circle, which
was swept as a fifth profile and twisted the shank. Found testing Profile
Placer + Profile Sweep on the Windows PC.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
OM9 closed without a message on the Windows PC during Boolean Builder on a
ring of 18 stones with its metal and cutters. The BSP boolean recurses as
deep as the meshes have faces, and the host ran the add-on on the UI thread
(1 MiB stack on Windows). The native runtime now runs each session step on
a 256 MiB thread, and csg::boolean itself works on a 512 MiB thread, so
other hosts are covered too.

Boolean Builder also recomputed the whole boolean on every cursor move; it
keeps the last result by objects x cutters x mode, and sorts the cutters so
the same selection always gives the same solid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
On the PC, Uninstall of OM9 Matrix failed with "Access is denied": Windows
keeps a library that was loaded mapped until OM9 exits, so its folder can be
neither deleted nor renamed, and an update of the same add-on fails the
same way. Locked files are now renamed into extensions/user/.trash (Windows
allows renaming a mapped file), the folder is removed, the trash is emptied
at the next start, and an update says to restart OM9 to use the new
library. The Add-ons window shows Uninstall above the command list (the
package lists 337 commands) and opens the list only for small add-ons.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DqTCtKBxsZaijGAGathCSb
- om9-addons: i18n module (lang/<code>.toml tables: menus, commands, options,
  values, phrases with {} holes), Host::translator(), add-on-wide settings
  (scope = "addon") that never appear in command panels or the command line.
- OM9 Matrix package: lang/vi.toml with Vietnamese names for every menu cell
  (428 codes + Top 11), Curve sub-options and prompts; language setting
  (Tiếng Việt / English) chosen in Preferences > Add-ons.
- om9-app: prompts, sub-option tokens, history lines, menu and category
  names and icon tooltips follow the language; English and Vietnamese
  option names (with or without accents) are both accepted when typed.
- Tests: i18n unit tests, package coverage, native install, controller test
  for Vietnamese display with English typing; CI packs the lang folder.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…ngle, Circle, Ellipse

Checked against the Matrix 9 command-line prompts (user's recording) and the
Rhino 5 help of each command; every variant creates real geometry and is tested.

- Polyline: Mode=Line/Arc (tangent arcs, Direction, Center), Helpers guide
  lines, Length from the 2nd point, Close from the 3rd, prompts as in Matrix.
- Line (typed name "Line" now works): BothSides, Normal (surface, polysurface
  or mesh normal, IgnoreTrims), Angled, Vertical, FourPoint, Bisector,
  Perpendicular (from curve / Point / PointOnCurve / 2Curves), Tangent (on
  curve / Point / 2Curves), Extension. BothSides doubles the typed length.
- InterpCrv: Knots submenu (Uniform, Chord, SqrtChord), StartTangent,
  EndTangent, Close = smooth periodic seam, Sharp = kinked seam, AutoClose
  and PersistentClose smooth.
- Rectangle: 3Point, Vertical, Center, Rounded with Corner=Arc/Conic and Rho,
  radius typed or a point the corner passes through, Enter = square.
- Circle: Deformable (Degree, PointCount=10), Vertical, 2Point, 3Point,
  Tangent (2 curves + radius, or 3 curves), AroundCurve, FitPoints,
  Radius/Diameter/Circumference/Area, Orientation.
- Ellipse: Deformable, Vertical, Corner (box or from the center), Diameter,
  FromFoci with MarkFoci, AroundCurve.
- geom: interpolation with knot styles, end tangents and periodic closing
  (clamped by knot insertion), deformable circle/ellipse, conic corners.
- Vietnamese prompts for all of the above; a test checks every prompt of
  these commands has a translation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…d, Match as in Matrix 9

Curves are now picked by clicking them, as in Matrix: the host sends the
click point with the selection (Event.pick) and the commands keep the
picked side (Fillet, Chamfer) or use the picked end (Extend, Blend, Match).

- Fillet/Chamfer: Radius=1 / Distances=1,1, Join, Trim, ExtendArcsBy;
  short curves are extended, Radius=0 makes a sharp corner.
- Offset: Distance, Corner=Sharp|Round|Smooth|Chamfer, ThroughPoint,
  Tolerance, BothSides, InCPlane, Cap; lines/arcs stay exact.
- Extend: boundaries, typed length or dynamic; Type=Natural|Line|Arc|Smooth.
- Blend (quick), BlendCrv (Continuity1/2 up to G4, Flip, Bulge, Join),
  ArcBlend (exact biarcs, RadiusDifference, AlternateSolution), Match.
- geom: exact join, sub-curves, natural extension, Bézier blends, biarcs;
  Flow gains curve picks, Enter-to-confirm and Rhino-style number options.
- Vietnamese prompts and option names for all of them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…an, CSec, Section as in Matrix 9

- Rebuild: PointCount, Degree, DeleteInput, PreserveTangents with a live
  preview and the maximum deviation; uniform knots, least squares, ends kept
  (closed curves stay smooth across the seam).
- FitCrv: fewest control points within FittingTolerance.
- Divide: Number of segments or Length, Split, MarkEnds.
- Convert (Curve to Lines): Output=Lines|Arcs, Angle, Tolerance,
  MinimumLength, MaximumLength, DeleteInput.
- TweenCurves: pick start and end curves; Number, MatchMethod, SampleNumber,
  Flip.
- CurveBoolean: click the regions to keep (planar map of the curves, holes
  included); CombineRegions, AllRegions, DeleteInput=None|All|Used; the
  result follows the exact input curves.
- CSec and Section: repeated section lines until Enter.
- geom: least-squares B-spline fitting (open and periodic).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
claude and others added 11 commits October 31, 2026 05:42
…trol Point Curve as in Matrix 9

- Arc: Center/Start/Angle with Length and Direction; StartPoint (start,
  end, point; Direction before or after the end; ThroughPoint; Radius and
  side); Tangent (two picked curves and a radius); Extension (tangent to a
  picked end); Deformable (Degree, PointCount). "Arc Start End Direction"
  opens at StartPoint with the direction after the end.
- Polygon: Mode=Inscribed|Circumscribed, Edge (Flip), Star (second radius,
  Automatic), Vertical, AroundCurve.
- Helix and Spiral: Diameter/Radius, Mode=Turns|Pitch, Turns, Pitch,
  ReverseTwist, Flat, Vertical, AroundCurve (rotation-minimising frames).
- Control Point Curve: Close is smooth (periodic) unless Sharp=Yes.
- geom: the tangent-circle solver is shared by Fillet and Arc Tangent;
  periodic control-point curves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…rve, SoftEditCrv and the rest as in Matrix 9

- Project / Pull: curves and points first, then the targets (two
  selections, as in Rhino); Loose keeps the control structure, DeleteInput;
  projections refine onto exact surfaces and split where the curve leaves.
- OffsetCrvOnSrf (pick curve, surface, side; Distance, ThroughPoint) walks
  along the surface; OffsetNormal offsets along the surface normal.
- ExtractIsocurve: pick the surface, then click locations until Enter;
  Direction=U|V|Both, Toggle, ExtractAll.
- SoftEditCrv: pick the curve, the point and the target; Distance, Copy,
  FixEnds; control points move with a falloff and the picked point lands
  on the target.
- Crv2View picks two curves; CurveThroughPt uses the points as control
  points (Degree); CrvStart/CrvEnd make points only; Continue curves from
  the picked end; Sketch has OnSurface/OnMesh; Rhino prompts for Intersect,
  IntersectTwoSets, CrvSeam, DupEdge, DupBorder, Silhouette,
  ExtractWireframe, CreateUVCrv, ApplyCrv, PolylineOnSrf, InterpCrvOnSrf.
- Rhino typed names added as aliases (CurveThroughPt, CrvStart, CrvEnd,
  TweenCurves, CurveBoolean, OffsetNormal, gvCrv2ViewHistory,
  gvPolylineOnSurface); Vietnamese for every new prompt and option.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…cks pick curves in Line/Circle/Ellipse

- Project lands on every crossing along the active view's CPlane normal
  (both ways, as in Rhino): a curve over a ring gives its top and bottom;
  points too. Loose projects layer by layer.
- Reply.track (ABI): the host keeps the state of hover replies, so Sketch
  draws while the pointer moves: click to start, move, click to end.
- Line Perpendicular/Tangent: the click on the curve is the start; 2Curves
  makes the line on the second pick. Circle and Ellipse AroundCurve: the
  click on the curve is the center.
- Controller test: Fillet by two clicks and a sketched stroke.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
Upstream split session.rs into modules and rewrote the command-option bar;
the add-on hooks move with it:
- dispatch_geometry.rs: an enabled add-on runs instead of the built-in.
- submit_effect: an open add-on session/builder reads the line first; a
  typed add-on command name runs the add-on.
- prompt_with_options shows the add-on prompt (prompt_text is an alias).
- feature_icon resolves icons through icon_target (add-on first), keeping
  upstream's Solid special cases; builder_slot_ui shows an open add-on
  builder; the add-on option tokens sit next to upstream's option bar.
- The add-on builder prompt is renamed addon_builder_prompt (upstream has
  its own builder_prompt); upstream's no-kernel solid stubs replace ours.
- docs/matrix9-commands.md regenerated.

Tests: addon_session 11, addon_smoke 2, command_catalog, addon_command.
om9-app unit tests: 212 pass; the same 4 fail on upstream main as well
(menu catalog icon list, sphere options, icon size audits).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…art on the surface

- Grips (F10 control points / edit points): click, Shift/Ctrl+click and window-drag pick
  grips; picked grips are drawn yellow and carry the gumball (move/rotate/scale), dragging a
  picked grip moves the whole group, with a live preview of the edited curve. Esc drops the
  picked grips first. Grip drags follow object snaps.
- A joined curve (polyline) shows one grip per joint, and moving it moves both segments, so
  the join no longer opens.
- Several grip moves commit as one transaction (one Undo).
- Snaps work while an add-on command asks for a point.
- Curve display samples every NURBS knot, so polygon corners are drawn sharp instead of cut.
- Project/Pull: the curve is split exactly where it leaves the surface (the piece through a
  closed curve's seam stays one piece), corners stay sharp, straight spans stay lines, so a
  polygon projects to a polyline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…ct for curves, shape audit

Compared every Curve command's options with the Rhino 5 command help (Matrix 9 runs on
Rhino 5) and the Matrix toolbar variants:

- CurveThroughPt: CurveType=ControlPoint/Interpolated and Knots=Uniform/Chord/SqrtChrd.
- Extend Type=Arc: Center and ToPoint at the end of a dynamic extension.
- Rebuild: SelectMasterCurve (point count and degree from a master curve); the
  PreserveTangents option, which Rhino 5 does not have, is removed.
- Blend: Continuity1 / Continuity2 per end, as Rhino 5.
- Match: AverageCurves and Merge.
- Sketch: Closed and Planar.
- Intersect / IntersectTwoSets: points where curves cross curves or surfaces (they only
  handled surfaces before).
- Curve display: NURBS with many spans (spirals, helixes) get 24 samples per span.
- Shape audit: with OM9_AUDIT_DIR set, the add-on tests record every finished command's
  input and output curves so the shapes can be drawn and inspected; a scenario test
  covers the commands the other tests did not finish.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
…nd helixes within tolerance

- Shape audit of the creation commands: every Line variant (BothSides, Vertical, Angled,
  FourPoint, Bisector, Tangent, Tangent Point, Perpendicular Point, Perpendicular 2Curves,
  Extension, typed lengths), Point, Polyline, Rectangle (corner, Center, 3Point, Vertical),
  Circle (radius, Diameter, 2Point, 3Point, Vertical), Ellipse, Polygon 3 to 8 sides,
  Spiral along an axis and Helix, each compared with its exact geometry.
- Spiral and Helix were interpolated through 16 points per turn, up to 0.003 mm off the
  exact shape at larger radii; points per turn are now added until the curve is within
  0.0005 mm (Rhino's default absolute tolerance is 0.001), around a curve too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
Click the start, type the length, Enter: the line goes along its fixed direction
(Vertical, Bisector, Angled …) or the CPlane x axis. Enter used to end the command
without a line. A test runs the click-then-type flow of Circle, Polygon, Arc, Ellipse,
Rectangle and Line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
Review of PR MYuitsu#3:
- Turns = axis length / Pitch; Pitch, Turns and radii must be finite and
  positive, and at most 1000 turns are allowed (tiny pitch is refused).
- The fit never uses more than 20000 points; the limit is checked before
  the preview and before the final shape.
- If 20000 points still cannot keep the shape within 0.0005 mm, the
  command says so instead of creating a looser curve.
- The preview is fitted to 0.01 mm and shows nothing for refused input,
  so moving the pointer never hangs.
- Curve interpolation uses a banded solver (linear in the point count)
  instead of a dense one.
- Tests: tiny pitch (preview and finish, time bound), non-finite and
  out-of-range values, a normal 20-turn helix, and the 1000-turn limit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
Keeps the banded interpolation (linear in the point count), so the limits
are 1000 turns and 20000 points instead of 512 points; keeps MYuitsu's
"Too many turns ... increase Pitch or reduce its length" message and his
budget tests (non-finite/excessive turns refused before sampling, refusal
when the sample budget cannot meet the tolerance, tiny pitch without
preview or commit).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
@MYuitsu
MYuitsu merged commit dc2d4df into MYuitsu:main Nov 5, 2026
2 checks passed
vn-Jay3Designer pushed a commit to vn-Jay3Designer/OpenMatrix9 that referenced this pull request Nov 5, 2026
package_files_match_the_menu_crates failed on main after the PR MYuitsu#3
integration; regenerated with OM9_UPDATE_PACKAGE=1 (menu slot numbers only).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017AChfY1X8M1iXCrsZMoDud
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants