Commit Graph
4000 Commits
Author SHA1 Message Date
github-actions[bot] c623a01695 Release v2026.39 v2026.39 2026-09-27 16:42:38 +00:00
Hakan Seven 78c9128a69 Merge pull request #1505 from ThaiLe-gt/bugfix/fix-dimension-arrow-export
fix(io): normalize missing dimension arrow block references on save
2026-09-27 13:07:47 +03:00
Hakan SevenandClaude Opus 5.5 b7498b176c chore: pin opencadcodec 42b44d2 (DXF saves polar stretch actions)
Pins opencadcodec 42b44d2, opencadkernel 4e67cd7, opencadgraph d89a9c5.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 13:04:21 +03:00
thaile-gt a5468bb8f7 fix(io): normalize missing dimension arrow block references on save 2026-09-27 11:14:36 +07:00
Hakan SevenandClaude Opus 5.5 315df5cd47 chore: pin opencadcodec 4f7bd51 (merlinnot codec fixes #56-#61)
Brings in: unchanged ACSH extrusion history and DIMASSOC records kept
byte for byte; native dynamic-action field layouts corrected; evaluation
graph expressions written as owned; evaluated block metadata copy;
source class numbers kept on same-version legacy saves; explicit block
attribute flags kept.

The dynamic-action model now names its fields after their native
meaning, so the object summaries read parameter ids, the move offsets'
distance multiplier and the lookup table's columns. The empty
PropertiesTable variant is gone; such tables stay opaque objects.

Pins opencadcodec 4f7bd51, opencadkernel 8186605, opencadgraph 048c9c5.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 07:11:40 +03:00
Hakan SevenandClaude Opus 5.5 1f1fba31b2 refactor(commands): plugin dispatch ends through finish_dispatch
The branch added by #1498 repeated finish_dispatch's focus and dynamic-input sync; call it instead.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 06:47:21 +03:00
Hakan Seven 15ab97c9e2 Merge pull request #1498 from yztink/fix/repeat-plugin-commands
fix(commands): record last_cmd on plugin dispatch to repeat on Enter
2026-09-27 06:46:14 +03:00
Hakan SevenandClaude Opus 5.5 25229f70d7 docs(readme): install on Linux as a Flatpak from FlatPark (#1487)
FlatPark installs the official AppImage through Flatpak extra-data and
follows new releases. The Flatpak works through the file chooser, so
external references and underlays need the home filesystem override.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-27 06:43:43 +03:00
yztink 43a16af060 test(commands): remove test relying on external opencad-py-runner plugin 2026-09-26 10:09:04 -07:00
yztink 7c0af700e8 fix(commands): record last_cmd on plugin dispatch to repeat on Enter
When a plugin command was dispatched, record_recent was called but
tabs[i].last_cmd was never set. Consequently, pressing Enter or Space on
an empty command line after running a plugin command failed to repeat it.

This records tabs[i].last_cmd on plugin dispatch and requests command-line
focus and dynamic input syncing when an interactive plugin command starts.
2026-09-25 23:51:19 -07:00
Hakan Seven 460a4c9cc5 Merge pull request #1491 from ramox81/codex/insert-attach-buttons
Insert Reference panel: separate Attach XREF and Attach PDF buttons
2026-09-25 22:27:32 +03:00
Hakan SevenandClaude Opus 5.5 83e1ebd44a fix(dimension): lay automatic text out from the style again (#1412)
Since the stored text point became authoritative (85619f49), new linear
and aligned dimensions drew their text at the placeholder the commands
stored (the middle of the dimension line), so DIMTAD Above/Below and the
text offset had no effect; a style or override edit left the stale point
in place too.

reset_automatic_text_position clears the point of text the user did not
place, so it is laid out from the current settings. DIMLINEAR, DIMALIGNED,
DIMBASELINE, DIMCONTINUE and QDIM call it on creation; a DIMSTYLE edit, a
dimension override row and a style change call it for the dimensions they
touch. Loaded, untouched dimensions keep their pictured position.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 22:20:16 +03:00
Hakan SevenandClaude Opus 5.5 eb84bae779 fix(3d): seat axis steps on 3D snaps; raised bases follow the cursor (#1030)
Height and distance steps (PUSHPULL, CYLINDER, CONE, PYRAMID, BOX,
EXTRUDE) replaced the point with the cursor's screen mapping onto the
command axis, discarding an acquired 3D object snap. A genuine snap now
supplies its own coordinate along the axis, as axis grips already do.

Base steps after the first base point (BOX/WEDGE opposite corner and cube
size, CYLINDER/CONE/PYRAMID radius) read the cursor on the base plane
through that point. A base started on a raised face intersected the ray
with world XY instead, so in oblique views the footprint ran far past the
mouse.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 21:46:47 +03:00
Hakan SevenandClaude Opus 5.5 89512c2f20 fix(text): no stroke-font tracking after big-font and fallback glyphs (#1470)
Every glyph advanced by the face's letter spacing, including CJK glyphs a
style's big font or the TrueType fallback supplies. Their advances already
carry the gap (big font) or side bearings (TrueType), so with an LFF primary
such as iso each ideograph took 1.33 heights instead of one.
Face::spacing_after(ch) gives the tracking only to glyphs the stroke font
draws itself; every layout path uses it.

The 1.8-height widths in the report were the TEXT bounds estimate counting
UTF-8 bytes; opencadcodec 1109d52 counts characters.

Pins opencadcodec 1109d52, opencadkernel 8a246b0, opencadgraph 3c4af1c.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 21:27:17 +03:00
Hakan SevenandClaude Opus 5.5 fdc01e13c8 fix(render): show Inventor drawing views, each in its own viewport (#1285)
Inventor DWG exports place every sheet block with AcIdBlockReference,
which the codec skipped, so these drawings opened blank. opencadcodec
7c20aa7 decodes it as an INSERT and keeps the viewport each model-space
view reference is bound to.

Those view blocks overlap in model space, so a content viewport now also
hides model-space references bound to a different viewport. The handles
join the viewport's frozen-layer set (entity and layer handles never
collide), which the wire and render-graph visibility checks and every
per-viewport cache key already use.

Pins opencadcodec 7c20aa7, opencadkernel d71a828, opencadgraph 1543a5a.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 19:48:36 +03:00
Hakan SevenandClaude Opus 5.5 5fcf741c51 fix(pdf-dialogs): SVG ticks and page arrows instead of glyphs
Review of #1489: the chips and the chosen page tiles drew a check mark and
the import preview's previous / next buttons single guillemets as text.
The web build's bundled font has no check-mark glyph, so it showed as an
empty box; UI icons are SVG. The ticks use the CHECK icon in the chip's or
tile's accent colour and the page buttons the shared arrow icons.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 15:20:03 +03:00
Hakan Seven 2801ac2007 Merge pull request #1489 from ramox81/codex/pdf-dialog-redesign
PDF dialogs: own look with cards, segmented choices and chips
2026-09-25 15:19:07 +03:00
Hakan Seven 82fe204a70 Merge pull request #1486 from ramox81/codex/xref-context-tab
Selection tools on the right-edge toolbar for PDF underlays and xrefs
2026-09-25 15:18:33 +03:00
Hakan SevenandClaude Opus 5.5 bb390cad58 fix(vpclip): drop the new boundary when the clip is refused; translate prompts
Review of #1485: VPCLIP added the polygon it drew to the drawing before
checking its area, so a boundary with no usable area was refused but left
behind as a stray object. It is erased again. The VPCLIP prompts and
messages go through t! like the rest of mview.rs.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 15:18:33 +03:00
Hakan Seven 22a5a8d16c Merge pull request #1485 from ramox81/codex/clip-followups
CLIP on images and viewports, IMAGECLIP, VPCLIP, linked clip boundaries and clip depth
2026-09-25 15:17:53 +03:00
Hakan SevenandClaude Opus 5.5 7e90d4d1a1 fix(pdf): per-piece snap bounds, linear image layering, snap op checks
Review of #1484:
- The underlay's snap geometry became one hidden wire per segment, but
  every piece took the whole page's bounding box, so each cursor move
  visited every piece. Each piece now gets its own box.
- Assigning unlayered images to the last layer compared Debug strings of
  every layered path and text per drawn item (quadratic, formatted anew
  each time); the owners are keyed once in a map.
- The `snap` automation op used (0, 0, 0) for a missing point; it now
  answers invalid_point. It also left the live snapper's base point set
  to the query's; the base point is restored.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 15:17:53 +03:00
Hakan SevenandClaude Opus 5.5 fc48087e50 fix(test): give the synthetic plot image the new pixelated field
#1488 added ImageModel::pixelated; the PDF export image check builds one
by hand and no longer compiled.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 15:17:45 +03:00
Hakan Seven e2e2c36b6a Merge pull request #1484 from ramox81/codex/pdf-import-followups
PDF import and underlay follow-ups
2026-09-25 15:15:49 +03:00
Hakan Seven 8d190a20d8 Merge pull request #1488 from ramox81/codex/raster-image-pixels
Raster images show square pixels when magnified
2026-09-25 15:15:49 +03:00
Hakan SevenandClaude Opus 5.5 e7e759268a fix(paste): Ctrl+V over the command line still pastes copied objects
#1481 skipped the shortcut whenever any text input had focus. The command
line is focused almost always, so copied drawing objects no longer pasted
with Ctrl+V. The probe now tells the command line apart from other fields:
another field keeps Ctrl+V to itself; over the command line copied objects
start PASTECLIP and plain text is left to the input's native paste; with
nothing focused text goes to the command line as before. PASTECLIP goes
through Message::Command again, which also closes the context menus. The
tests use the codec crate name and cover the command-line case.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 15:15:44 +03:00
Hakan Seven 9c04fb8bd1 Merge pull request #1481 from yztink/fix/command-line-duplicate-paste
fix(command-line): prevent duplicate paste in command line and text fields
2026-09-25 15:12:12 +03:00
ramox81andClaude Opus 5.5 b060d46894 Insert Reference panel: separate Attach XREF and Attach PDF buttons
The single Attach button gives way to Attach XREF (XATTACH, the external
reference picker and dialog) and Attach PDF (PDFATTACH, the PDF picker and
Attach PDF Underlay dialog) with their own icons. ATTACH stays available
as a command. The Turkish label reads "PDF Bağla".

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 15:08:20 +03:00
ramox81andClaude Opus 5.5 3bc3a0adfe Remove Clipping tools use the crossed clip icon
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 14:54:16 +03:00
ramox81andClaude Opus 5.5 cc7cae7d8e Remove Clipping tools show a small red cross on the clip icon
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 14:47:44 +03:00
ramox81andClaude Opus 5.5 4d9379ad6e Right-edge toolbar centres below the view cube and UCS list
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 14:32:29 +03:00
ramox81andClaude Opus 5.5 5a31d2089a Selection tools on the right-edge toolbar instead of contextual tabs
The PDF Underlay and External Reference ribbon tabs are gone. While only
PDF underlays are selected their tools (Display in Monochrome, Create
Clipping Boundary, Remove Clipping, Show Underlay, Enable Snap, External
References, Edit Layers, Import As Objects) sit on the right-edge toolbar,
the switches drawn as on while on; while only xrefs are selected the xref
tools do. Contrast and fade stay in Properties. Toolbar tooltips are
translated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 14:25:22 +03:00
ramox81andClaude Opus 5.5 5d3987791e Contextual ribbon tab follows the active document
Every message that makes another document active (switching, opening,
creating or closing a tab) resyncs the contextual tab with that document's
selection, so a tab offered for one drawing no longer stays on another.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 13:56:13 +03:00
ramox81andClaude Opus 5.5 647a05e37a PDF dialogs: one-line file details, only existing layers toggle
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 13:21:54 +03:00
ramox81andClaude Opus 5.5 913c845f5b PDF dialogs: own look with cards, segmented choices and chips
Attach PDF Underlay, Underlay Layers, PDF Import Settings and Import PDF
are laid out with rounded cards and accent titles, segmented controls for
path type, import layers and rotation, toggle chips for the on-screen
choices and import options, a page preview with previous/next for Import
PDF, always-visible file details, and a footer with help on the left and
the named action (Attach, Apply, Save, Import) on the right.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 13:13:32 +03:00
ramox81andClaude Opus 5.5 3f1b236c0a VPCLIP: chord direction and nested arc option prompts
The chord direction step takes a typed angle and defaults to the last
segment's direction on Enter; CEnter's Angle and Length prompts carry the
direction switch hint as the reference words them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 12:51:11 +03:00
ramox81andClaude Opus 5.5 005594fc58 PDFIMPORT: stored image paths use one separator style
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 12:32:50 +03:00
ramox81andClaude Opus 5.5 46fa08a041 Raster images show square pixels when magnified
Raster image textures use nearest magnification; PDF pages and OLE
pictures keep bilinear filtering.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 12:22:45 +03:00
ramox81andClaude Opus 5.5 2e397aec99 VPCLIP arc options, visible linked clip boundaries, XCLIP depth rejection
- VPCLIP arc mode takes Angle, CEnter, Direction, Radius and Second pt with
  the reference prompts, and CLose closes with a tangent arc; the arc math
  is shared with PLINE.
- Viewport clip boundaries from MVIEW and VPCLIP stay visible; picking or
  erasing a boundary takes its viewport along.
- XCLIP Clipdepth: a rejected front plane keeps the old front plane and
  clears the back plane.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 12:22:44 +03:00
ramox81andClaude Opus 5.5 72f7ff5cc5 PDFIMPORTIMAGEPATH and per-import layer prefixes
- PDFIMPORTIMAGEPATH names the image extraction folder: relative to the
  PDF's folder (default "PDF Images"), absolute as given, "." for none.
- Every import of the session gets the next prefix (PDF_, PDF2_, PDF3_ ...),
  also when the same file is imported again.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 12:22:43 +03:00
ramox81andClaude Opus 5.5 68721813f4 Contextual External Reference ribbon tab
Shown and brought forward while only xrefs are selected: Edit Reference
In-Place, Open Reference, Create Clipping Boundary, Remove Clipping and
External References.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 10:33:50 +03:00
ramox81andClaude Opus 5.5 bd17e7e0d4 CLIP on raster images and viewports, IMAGECLIP, VPCLIP, clip depth rules
- CLIP continues as IMAGECLIP on a raster image and as VPCLIP on a layout
  viewport, with the reference prompts and stored data.
- Image clip boundaries sit on pixel centres, OFF only clears the display
  flag, and an inverted boundary cuts the image.
- VPCLIP polygon (Arc/Length/Close/Undo), clipping object and Delete; the
  viewport shrinks to the boundary's exact extents, view kept.
- XCLIP Clipdepth: Remove clears only the plane asked, a front plane behind
  the back one is rejected with the reference message.
- Attached and imported images carry the reference display flags.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 10:33:49 +03:00
ramox81andClaude Opus 5.5 edbbc9d135 PDF follow-ups: import layers, arcs and joins, names, background, page placement, snaps
- Unlayered raster images go with the PDF layer drawn last before them.
- Circular Bezier arcs import as arcs: bulged polyline segments with Join,
  ARC entities without it; straight chains still join.
- Imported PNGs go to "PDF Images" next to the PDF; import blocks are
  numbered imp31, imp32, ...
- Background darkness is its HSL lightness below one half.
- All chosen pages attach at the same insertion point.
- PDF geometry snaps as separate pieces: centre from the rim, intersections
  and perpendiculars.
- Automation: snap query with an optional base point.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 10:33:48 +03:00
Hakan SevenandClaude Opus 5.5 3013c1b570 feat(graph): node library as a docked panel; shared dock chrome
The node library leaves the overlay and becomes a dock panel (PanelId::
NodeGraph), docked on the right the first time the graph opens and movable
like any other panel; closing it closes the graph. It follows the block
palette's layout: title bar, then a search box with New / Open / Save
beside it, then the categories, of which only Objects starts open. Entries
are clicked (placed at the canvas top-left) or dragged onto the canvas.

The title bar (title, auto-collapse pin, close, drag to re-dock), the
toolbar icon button and the panel frame were copied across Properties,
Block Palette, External References and Browser; they are now
dock::title_bar, dock::tool_button and dock::frame, used by all of them.
Block Palette's two tool buttons gain tooltips, and External References'
Auto / Close tooltips are now translated.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 10:17:44 +03:00
yztink fa1b4db490 fix(command-line): prevent duplicate paste in command line and text fields 2026-09-24 23:37:32 -07:00
Hakan SevenandClaude Opus 5.5 857f2f2e58 feat(graph): save and open node graphs as .ocg files
The graph panel gets New, Open and Save. A .ocg file is JSON holding the
graph (nodes, parameters, links), the canvas (positions, open sections,
pan, zoom) and each object node's entity handles, plus the fingerprint
GUID of the drawing those entities live in. On open, handles are reused
only in that same drawing and only while the entity is still the node's
kind; otherwise evaluation creates new entities, so a graph opened in
another drawing never takes over unrelated objects. A drawing without a
fingerprint gets one when its graph is first saved.

Pins opencadcodec d6d534f (DXF now writes $FINGERPRINTGUID and
$VERSIONGUID), opencadkernel 5d9e921 and opencadgraph 5c9b004 (graph
JSON round trip).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 08:14:56 +03:00
Hakan Seven 5639b29209 Merge remote-tracking branch 'origin/main'
# Conflicts:
#	src/app/command_driver/clipboard.rs
#	src/app/command_driver/mod.rs
#	src/app/update/command.rs
2026-09-25 07:35:36 +03:00
Hakan SevenandClaude Opus 5.5 f537aff75c feat: node graph overlay; move to opencadcodec/opencadkernel/opencadgraph
The codec and kernel repositories and crates are renamed opencadcodec and
opencadkernel. Inside OCS they are depended on under short keys, so code
reads `codec::`, `kernel::` and the new `graph::` (opencadgraph, the node
graph engine). File-format and protocol spellings stay as they were: the
ACIS product id `acadrust`, the ACADRUST_* switches and the plugin
version keys `acadrust_version` / `acadrust_source`.

A button left of MCP on the command line opens a translucent node graph
over the viewport, with a palette of object, input, math, logic, list,
text and geometry nodes added by click or drag. An object node owns
drawing entities and its rows are the Properties panel's own rows for
them: the single-object page is extracted from refresh_properties as
entity_property_sections, values use the control protocol's
property_json, and writes go through set_property_value with a property
target override, so the panel, MCP and the graph share one read/write
path. A list reaching an object row makes one entity per element. Each
graph action is one undo step; the canvas pans and zooms.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-25 07:34:23 +03:00
Karim Jerbi 631c0c97aa fix(command-line): Enter runs the highlighted autocomplete pre-selection 2026-09-24 23:38:01 +01:00
Karim Jerbi bd1fdcc1c5 refactor(chprop): convert choice arms to apply_property_op, fix CTB snapshot leak
Converts 12 selection arms of on_prop_geom_choice_changed to the shared helper: transparency, material, tol text and dim styles, dim overrides, viewport scale, UCS, named views, loft, history, surface and table style. Miss paths no longer push no-op undo entries.

Fixes a leaked undo snapshot: changing plot style in CTB mode is a no-op but pushed an entry. Guard hoisted before the shared snapshot, with a regression test.

Left manual by design: mleader, leader, block and fallback arms, all no-selection arms, and on_prop_geom_commit, whose constraint-aware invalidation the helper cannot express.
2026-09-24 23:16:29 +01:00
Karim Jerbi acc3e05001 refactor(clipboard): share table and block merge copies
merge_dependencies and merge_clipboard_blocks duplicated the table-record and block-definition merge logic already ported into paste_entities_kernel. Extract merge_table_records and merge_block_defs as the single shared copies; both the methods and the kernel delegate to them. The method keeps one batched geometry rebuild instead of one per definition.
2026-09-24 23:16:29 +01:00