Commit Graph
4620 Commits
Author SHA1 Message Date
ramox81andClaude Opus 5.5 8055fa710d Restore a view's visual style; no background in 2D wireframe
Restoring a named view gives the model viewport the view's visual style
(the closest render mode), and a 2D wireframe viewport shows no
background, as in the reference.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 11:24:07 +03:00
ramox81andClaude Opus 5.5 c8167c54ee -VIEW sEttings Background dialog and view backgrounds
Color, Gradient and Image at the background prompt open a Background
dialog (None / Solid / Gradient / Image, preview, solid colour, two- or
three-colour gradient with rotation, image file with position and
scale). Apply links the view to a new background object in
ACAD_BACKGROUND; restoring a view gives the model viewport a copy of
it (or none), and saving a view copies the viewport's background.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 10:50:00 +03:00
Hakan SevenandClaude Opus 5.5 cd07141cde fix(fonts): keep missing font names clear of the list's scrollbar
The missing-fonts list is as wide as its longest name, so its scrollbar
was drawn over the end of every name ("ROMANT.sh").

Fixes #1715

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:17:20 +03:00
Hakan SevenandClaude Opus 5.5 551d4c1c60 fix(grips): arcs, circles and solids with a flipped normal show grips in place
Their grip code already works in world space, and the dispatch layer
converted the grips through the OCS a second time, so for a normal of
(0,0,-1) the grips (and grip edits) were mirrored across the Y axis.

Fixes #1683

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:13:12 +03:00
Hakan SevenandClaude Opus 5.5 15c566c286 fix(render): thickened polylines without width keep their colour
A polyline with a thickness but no width is drawn as its extrusion edges
alone, and those edges were forced black (the outline colour meant for the
filled tube of a wide polyline). On a dark background the polyline looked
black and changing its colour did nothing. Only a wide polyline's tube
edges are black now.

Fixes #1682

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 01:13:12 +03:00
Hakan SevenandClaude Opus 5.5 1973605cb0 test(dock): drive the real view on a large stack, one at a time
The two dock tests that build and drive the real view overflowed a
default test thread's stack, and made in parallel their headless
renderers crashed the test process about one run in three.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:49:27 +03:00
Hakan Seven 1333efcad2 Merge pull request #1549 from MarcelP102/codex/graphic-attributes-cleanup
[UX] Introducing graphic attributes panel

# Conflicts:
#	locales/ar-SA/opencadstudio.ftl
#	locales/bg-BG/opencadstudio.ftl
#	locales/cs-CZ/opencadstudio.ftl
#	locales/de-DE/opencadstudio.ftl
#	locales/el-GR/opencadstudio.ftl
#	locales/en-US/opencadstudio.ftl
#	locales/es-ES/opencadstudio.ftl
#	locales/fi-FI/opencadstudio.ftl
#	locales/fr-FR/opencadstudio.ftl
#	locales/hi-IN/opencadstudio.ftl
#	locales/hu-HU/opencadstudio.ftl
#	locales/it-IT/opencadstudio.ftl
#	locales/ja-JP/opencadstudio.ftl
#	locales/ko-KR/opencadstudio.ftl
#	locales/lo-LA/opencadstudio.ftl
#	locales/nl-NL/opencadstudio.ftl
#	locales/pl-PL/opencadstudio.ftl
#	locales/pt-BR/opencadstudio.ftl
#	locales/ru-RU/opencadstudio.ftl
#	locales/tr-TR/opencadstudio.ftl
#	locales/zh-CN/opencadstudio.ftl
#	locales/zh-TW/opencadstudio.ftl
#	src/app/mod.rs
#	src/app/update/dialog.rs
#	src/app/view/mod.rs
#	src/locale_catalog.rs
#	src/ui/dock.rs
2026-10-12 00:49:27 +03:00
Hakan Seven 7ca457a6cc Merge pull request #1702 from MarcelP102/Pallet-placement
[UX] Pallets you can dock, group and float (including LAYERS panel)
2026-10-12 00:27:53 +03:00
Hakan SevenandClaude Opus 5.5 7a942222c9 docs(plugin): describe XRecord storage without a vendor name
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:23:46 +03:00
Hakan Seven e917c23b46 Merge pull request #1716 from schoeller/xrecord_crud
Xrecord crud
2026-10-12 00:21:14 +03:00
Hakan Seven f618d695e2 Merge pull request #1684 from turbuczn/hungarian-translation-only
Improve existing Hungarian CAD translations

# Conflicts:
#	locales/hu-HU/opencadstudio.ftl
2026-10-12 00:21:07 +03:00
Hakan SevenandClaude Opus 5.5 64e9b612cb fix(plot): EXPORTPDF proposes PDF after EXPORTSVG; SVG strings in every locale
EXPORTSVG left the plot dialog's SVG device on, so a later EXPORTPDF still
offered a .svg file. The SVG save dialog and plot button texts had no
catalog entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:20:20 +03:00
Hakan Seven fb474eb77c Merge pull request #1701 from hvfrancesco/main
added SVG export feature

# Conflicts:
#	src/io/mod.rs
#	src/io/pdf_export.rs
2026-10-12 00:17:35 +03:00
Hakan Seven 5bb0efd93e Merge pull request #1679 from ramox81/codex/surface-associativity-sources
Associative extruded, revolved and lofted surfaces; spline and ellipse sources

# Conflicts:
#	src/app/command_driver/solid3d.rs
#	src/scene/dwg_native_constraints.rs
#	src/scene/model/mod.rs
#	src/scene/model/sweep_command_model.rs
#	src/scene/model/sweep_model.rs
#	src/scene/modify.rs
2026-10-12 00:14:34 +03:00
Hakan SevenandClaude Opus 5.5 a542a401d9 fix(view): -VIEW settings open no undo step for a view that is gone
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 00:12:51 +03:00
Hakan Seven e5df2fd113 Merge pull request #1667 from ramox81/codex/view-presets
-VIEW command-line form: presets with orthographic UCS, sEttings and Window

# Conflicts:
#	src/app/commands/mod.rs
#	src/io/mod.rs
2026-10-12 00:10:22 +03:00
Hakan Seven df1f9bd0e7 Merge pull request #1680 from ramox81/codex/block-wire-buffer-packing
Block wires: pack definitions into shared buffers

# Conflicts:
#	src/scene/pipeline/mod.rs
#	src/scene/pipeline/wire_gpu.rs
2026-10-11 23:50:38 +03:00
Hakan SevenandClaude Opus 5.5 f4001b88e2 fix(automation): selection events are native-only like their caller
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:48:40 +03:00
Hakan Seven 3cc3ead3a6 Merge pull request #1714 from yztink/fix/arc-tangent-line
fix(draw): support line tangency in arc construction and resolve trim contact precision
2026-10-11 23:42:48 +03:00
Hakan SevenandClaude Opus 5.5 23b21b5d77 fix(snap): typed overrides yield to the prompt's options; one point-step gate
#1707 took any snap name typed at a point prompt as an override, so a
prompt offering Center, Tangent, Parallel or None (ARC, ELLIPSE, CIRCLE
TTR, ...) could no longer be answered with that option's name. An option
the prompt offers now wins. The point-step test it copied from MTP is one
helper shared by MTP and the override on both input paths.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:41:55 +03:00
Hakan Seven 45bc31f730 Merge pull request #1707 from yztink/feat/snap-overrides
feat(snap): add transparent object snap overrides in active commands typed on command-line

# Conflicts:
#	src/app/update/command.rs
2026-10-11 23:39:07 +03:00
Hakan SevenandClaude Opus 5.5 7e0866e647 fix(input): fire a rebound SPACE only from the command line
#1713 dispatched a captured SPACE as a shortcut whenever it was rebound,
so with SPACE on FINALIZE a space typed into any other text field (layer
names, Properties, find) also ran FINALIZE, and the space it typed stayed
in the command line. Ask whether the command input has focus before
running the binding, and drop the space the field already inserted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:38:06 +03:00
Hakan Seven c56cdd6a26 Merge pull request #1713 from theluckystrike/fix/1710-space-finalize-focus
fix(input): let a rebound SPACE fire while the command line has focus
2026-10-11 23:35:37 +03:00
Hakan SevenandClaude Opus 5.5 b9ef8c50ed fix(fillet): keep no-trim for every pair and the Trim prompt; share TRIMMODE with CHAMFER
#1692 limited no-trim FILLET to two lines and refused arcs and polyline
segments, which #1558 already filleted without trimming (only the arc is
added). It also turned T/N at the object prompts into silent toggles, so
the Trim option no longer reached its Trim/No trim prompt and the choice
was not saved. Keep the arc bookkeeping it added (the new arc can be
picked next, and stays on the picked layer), restore every pair and the
Trim prompt.

CHAMFER's new no-trim mode starts from and saves the same TRIMMODE value
as FILLET instead of always starting trimmed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:34:09 +03:00
Hakan Seven 6f2d43820f Merge pull request #1693 from YsDirector/pr/chamfer-no-trim
Add no-trim CHAMFER mode

# Conflicts:
#	src/modules/draw/modify/fillet.rs
2026-10-11 23:31:34 +03:00
Hakan Seven 3f871361f3 Merge pull request #1692 from YsDirector/pr/d7-fillet
Add no-trim FILLET mode

# Conflicts:
#	src/modules/draw/modify/fillet.rs
2026-10-11 23:31:23 +03:00
Hakan Seven 7b8397fe6b Merge pull request #1696 from YsDirector/pr/c11-next-frame
Capture after the next rendered frame

# Conflicts:
#	src/app/control/mod.rs
2026-10-11 23:30:20 +03:00
Hakan Seven 2e79430930 Merge pull request #1691 from YsDirector/pr/d6-save-verified-fingerprint
Refresh fingerprints after verified saves

# Conflicts:
#	src/app/automation.rs
2026-10-11 23:29:27 +03:00
Hakan SevenandClaude Opus 5.5 9039dadfd9 docs(automation): Spline and MText style in entities_create; drop stale comment
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:28:39 +03:00
Hakan Seven 207684efb0 Merge pull request #1694 from YsDirector/pr/d8-entities-validation
Validate entities_create fields and geometry strictly

# Conflicts:
#	src/app/control/entities.rs
2026-10-11 23:28:35 +03:00
Hakan SevenandClaude Opus 5.5 731286c8cc fix(automation): validate spline degree, knots and weights on entities_create
#1688 accepted any degree (falling back to 3 on a malformed value) and
overwrote the degree the codec had clamped to the control-point count, so
a two-point default spline stored degree 3 against a degree-1 knot vector.
Reject a non-integer or out-of-range degree, too few control points for
the degree, a knot vector that is not control_points + degree + 1
non-decreasing values, and weights that are not one positive value per
control point.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:27:35 +03:00
Hakan Seven cdf8e60fbf Merge pull request #1688 from YsDirector/pr/d3-spline-api
Create and serialize splines through automation

# Conflicts:
#	src/app/control/entities.rs
2026-10-11 23:26:06 +03:00
Hakan Seven b71d8fa5f5 Merge pull request #1686 from YsDirector/pr/d1-sysvar
Apply sysvar batches atomically

# Conflicts:
#	src/app/control/sheets.rs
2026-10-11 23:25:39 +03:00
Hakan Seven 4a47777571 Merge pull request #1687 from YsDirector/pr/d2-selection-events
Publish selection changes to automation clients
2026-10-11 23:25:24 +03:00
Hakan Seven 70418796ac Merge pull request #1689 from YsDirector/pr/d5-request-id
Reject changed payloads for reused request IDs

# Conflicts:
#	src/app/control/mod.rs
2026-10-11 23:25:23 +03:00
Hakan Seven 8d98608d1a Merge pull request #1690 from YsDirector/pr/d6-external-change-actions
Expose external-change modal actions to automation
2026-10-11 23:24:50 +03:00
Hakan Seven cd494de5fb Merge pull request #1695 from YsDirector/pr/d9-task-completion
Track zero-unit task completion
2026-10-11 23:24:49 +03:00
Hakan Seven 60f511ba10 Merge pull request #1685 from YsDirector/pr/p6-dimtmove
Respect DIMTMOVE=2 for linear dimension text

# Conflicts:
#	src/entities/dimension.rs
2026-10-11 23:23:26 +03:00
Hakan Seven 9fe290e875 Merge pull request #1672 from MarcelP102/fixes-for-right-click-menu
[UX] Context menu: trailing check mark, faded icons on disabled rows
2026-10-11 23:23:11 +03:00
Hakan SevenandClaude Opus 5.5 656f0cead6 fix(extrude): store the fallback profile in place under group 295; kernel f051138, graph fbee68b
#1666 sets group 295 on extrusion history records, which makes the kernel
read the embedded profile and path where they stand and ignore the
matrices. The planar fallback profile (a region-derived LWPOLYLINE) was
stored in its plane's local frame with the frame as matrix, so with the
flag it rebuilt at the origin. Re-express it in its own OCS (normal and
elevation) when the record is built.

Pins the kernel and graph at upstream (opencadkernel#84 merged as f051138)
instead of the ramox81/cadkernel [patch].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:22:55 +03:00
Hakan Seven eb2b2b5f3d Merge pull request #1666 from ramox81/codex/extrude-taper-history
Extrusion history records give the profile frame (tapered extrusions open in the reference)

# Conflicts:
#	Cargo.lock
#	src/scene/model/sweep_model.rs
2026-10-11 23:19:37 +03:00
Hakan SevenandClaude Opus 5.5 c5b1269cae fix(dimension): keep picture placement consistent with world-space edits
#1681 places a dimension's picture block by its insertion point, rotation
and scale. Edits (move/rotate/scale/mirror, copy, paste) transform the
picture's sub-entities in world space, and the codec's dimension transform
moves the insertion point too, so a rotated or copied dimension would get
the placement applied twice. Fold the placement into the subs before the
edit and leave the dimension at the identity placement afterwards.

The picture insert no longer takes the dimension's extrusion: OCS bakes
picture sub-entities in world coordinates, so only the stored insertion
point goes through the OCS. A zero insertion-scale component counts as 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 23:15:18 +03:00
Hakan Seven 7567724e14 Merge pull request #1681 from ramox81/codex/dimension-picture-insertion
Dimensions: place the picture block where the dimension says
2026-10-11 23:09:25 +03:00
Sebastian ec96612388 fix: resolve the two clippy approx_constant denies
The informational clippy job fails on two pre-existing literals
(also failing on main, surfaced on this PR's merge): the trim
tangency test's angle list used 3.14 where pi was meant — use the
constant; the point-cloud light-direction fixture in render.rs uses
a hand-tuned 0.318 component that only looks like 1/pi — keep the
tuned value and allow the lint on that statement.
2026-10-11 21:30:54 +02:00
Claude 44f8f76ab3 Merge main into codex/graphic-attributes-cleanup
Resolve conflicts from main's rustfmt pass by taking main's versions of
command.rs, style.rs, view/mod.rs, scene/mod.rs, ui/window/mod.rs and
ui/properties.rs and re-applying this branch's Graphic Attributes changes.
Add the Graphic Attributes strings to the new lo-LA catalog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E1QnME6WJbD5iGFae1eeCb
2026-10-11 19:09:37 +00:00
Sebastian 297a4d3074 fix(plugin): join plugin-opened undo scopes in XRecord writes
The internal per-call push_undo fractured plugin-composed operations:
history has no nested scopes, so each push finished the plugin's
still-pending scope and opened its own — an operation of several
writes became several undo steps and the plugin's label was lost
(measured: 3 creates + update + delete in one scope = 5 steps).

Follow the entity-write contract instead: a mutation inside a
plugin-opened push_undo scope joins it, so the whole operation is a
single undo step under the plugin's label; a scope-less mutation opens
and finishes its own scope, keeping one undo step per call; refusals
record no undo step in either regime. Document the contract on the
trait methods and the host docs; the composition experiment becomes
the permanent xrecord_writes_join_a_plugin_initiated_undo_scope test.
2026-10-11 20:58:41 +02:00
Claude 2fca3fd18d Merge main into Pallet-placement
Resolved conflicts:
- app/update/mod.rs: keep the dock's dock_open_at_default for the XREF
  manager; take main's stable xref row identity (row_index(&id)).
- app/view/mod.rs: keep the edge layout from app::dock; drop main's copy
  of the old edge-stack code (main only reformatted it there).
- ui/window/layers.rs: keep main's new visible_indices next to the
  branch's view_panel.
Files the branch only reformatted take main's version. Adds the Lao
(lo-LA) translations for the new dock texts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-11 18:44:00 +00:00
Claude bf1c4ddc74 style: apply cargo fmt across workspace (as on main)
Formats the branch the way main's 9cf9ff2 did, so merging main only
conflicts where the code itself differs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
2026-10-11 18:29:37 +00:00
Sebastian ca2f0c9857 feat(plugin): name-addressed XRecord CRUD on the HostApi (API v8)
Add create/read/update/delete/list for XRecord objects under
named-object-dictionary paths to the plugin HostApi, with five additive
PluginRequest/PluginResponse variants, dispatch through the shared
handler, in-process HostSession methods and both out-of-process proxies.

- dictionary paths walk from the NOD root; create seeds missing
  dictionaries (ensure_image_dictionary bootstrap) and refuses existing
  names; update refuses missing ones; refusals precede the undo step
- entry group codes validated (1..=369, never 5/105); payload content is
  the plugin's own
- each mutating call is one undo step: the pending history snapshot
  restores the objects map byte-exactly, auto-created dictionaries
  included (tested)
- typed entries survive DWG and DXF write/reload round-trips (tested);
  update drops verbatim raw bytes so saves emit the new content
- bump API_VERSION 7 -> 8 with the build.rs version_info in lockstep,
  mirroring the v7 addition; MIN_SUPPORTED stays 3
2026-10-11 19:57:20 +02:00
github-actions[bot] cff240ef71 Release v2026.41 v2026.41 2026-10-11 17:33:07 +00:00