Commit Graph
3043 Commits
Author SHA1 Message Date
Hakan Seven dbd3bf15a9 Merge pull request #1143 from ramox81 2026-09-10 17:15:44 +03:00
Hakan Seven 8b17ddaa22 Merge pull request #1142 from ramox81 2026-09-10 17:15:42 +03:00
Hakan Seven 8ef6150790 Merge pull request #1141 from ramox81 2026-09-10 17:15:40 +03:00
Hakan Seven 09cd547d19 Merge pull request #1140 from ramox81 2026-09-10 17:15:38 +03:00
Hakan Seven 3c72b2a815 Merge pull request #1139 from ramox81/codex/draw-panel 2026-09-10 17:15:25 +03:00
Hakan Seven 2f2d894eee fix(surface): refresh construction display 2026-09-10 17:14:44 +03:00
Hakan Seven 4201b0a031 Merge pull request #1131 from ramox81/codex/thicken-surface-grips 2026-09-10 17:05:43 +03:00
Hakan Seven 035d31e201 fix(section): preserve selected slice depth 2026-09-10 17:00:16 +03:00
ramox81 74d2f428ac chore: remove unused popup length import 2026-09-10 16:14:51 +03:00
ramox81 d4b23112b1 fix: constrain Draw popup with supported scroll sizing 2026-09-10 16:14:20 +03:00
ramox81 11057cc5e9 Fix extrusion surface properties and snapping 2026-09-10 16:07:05 +03:00
ramox81 6b58717ce2 fix: release collapsed flyout before opening Draw tools 2026-09-10 15:58:19 +03:00
ramox81 cc503f1847 feat: expose Ray in the Draw expansion 2026-09-10 15:57:19 +03:00
ramox81 dc83a3e5fa feat: expose Construction Line in the Draw expansion 2026-09-10 15:57:18 +03:00
ramox81 306d998ebf feat: expose Spline CV in the Draw expansion 2026-09-10 15:57:17 +03:00
ramox81 f7a240acd9 feat: expose Spline Fit in the Draw expansion 2026-09-10 15:57:16 +03:00
ramox81 2b4d8fe046 feat: add theme-aware expandable Draw panel 2026-09-10 15:57:15 +03:00
ramox81 a24d1e6108 Fix live extrusion surface grip editing 2026-09-10 14:53:48 +03:00
Karim Jerbi 0ad31ece6f fix(render): correct polyline segment widths, flat arc end caps, and zero-width endpoints 2026-09-10 12:43:25 +01:00
Karim Jerbi 6ca16738f0 fix(properties): sync polyline segment widths with global width and display varies when differing 2026-09-10 12:30:33 +01:00
ramox81 c0b254950f Restore editable extrusion surface grips 2026-09-10 13:44:10 +03:00
Jonathan 4d3b8d8b79 Merge pull request #1125 from ramox81/codex/sectionplane-wireframe-clipping
Align live section wireframes and SECTIONPLANE grips
2026-09-10 12:34:26 +02:00
Jonathan 26faa56b6c Merge pull request #1127 from schoeller/ocs_doc_api_260910
ocs_doc_api: layer CRUD, per-curve layer assignment, XDATA/XRECORD su…
2026-09-10 11:34:52 +02:00
Sebastian 8bf5eac3fc ocs_doc_api: layer CRUD, per-curve layer assignment, XDATA/XRECORD support, and bulk SetXDataMany 2026-09-10 10:43:15 +02:00
ramox81 056a0c527d fix(section): place normal grip above plane 2026-09-10 11:38:28 +03:00
ramox81 0426df79ca fix(section): add state grip menu 2026-09-10 11:25:33 +03:00
ramox81 78bbd1065a fix(section): align live section wireframe and grips 2026-09-10 10:42:19 +03:00
Jonathan 14fd65cdd1 Merge pull request #1123 from mechpanos/pr/options-full-coverage
Give every application preference a home in the Options dialog
2026-09-10 09:07:00 +02:00
PanosandClaude Opus 5 3093b63113 Stop the test suite reading and writing the developer's own settings
`new_for_test` was `Self::new()`, and `new` loads the real settings file. So
every test ran against whatever the person running it had last set in the
application. It surfaced as `a_selection_past_the_limit_gets_no_grips`
failing on a machine where GRIPOBJLIMIT had been changed by hand: the test
expected the default limit and got 32767. On a clean checkout, and in CI, it
passes — which is the worst shape for this kind of bug.

Tests now start from `AppConfig::default()`.

That alone made things worse rather than better. The suite builds whole
applications and changes preferences on them, and `AppConfig::save` writes to
the real path, so a test run would have written *defaults* over the user's
file where before it wrote back roughly what it had read. `save` is now inert
under `cfg(test)`.

Both halves matter: the first makes the suite deterministic, the second makes
it harmless. This series adds around fifteen persisted settings, so every one
of them was another way for a developer's own configuration to turn the suite
red — or to be quietly overwritten by it.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 09:14:00 +03:00
PanosandClaude Opus 5 4cc8e7db62 Fix four things the Options survey turned up
**TEXTFILL marked the drawing modified.** It is an application preference —
it lives in a process global and is snapshotted into settings.json — but it
was missing from the list of names that persist, so setting it dirtied the
open drawing instead and never reached the settings file through that path.

**LTSCALE and CELTSCALE validated differently depending on the door.** The
standalone commands reject a value of zero or less, because a non-positive
linetype scale degenerates every dash pattern in the drawing. `SETVAR LTSCALE
-5` accepted it. A test drives both entry points for both variables and fails
on the SETVAR path without the fix.

**ISAVEBAK, SAVETIME and FILEASSOC were missing from the autocomplete
registry** although all three dispatch, so the command line never offered
them.

**`bg_color` and `paper_bg_color` were dead fields**, always written as `None`
and ignored on load since the model-space configuration superseded them.
Removing them is safe: the config is `#[serde(default)]` and ignores unknown
keys, so existing settings files simply stop carrying them.

One thing the survey flagged that turned out not to be a bug: on the Display
page the model background row hides itself outside Custom mode while the
paper and desk rows do not. That asymmetry is correct — the canvas mode
governs only the model background, and the other two apply in every mode.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 09:03:02 +03:00
PanosandClaude Opus 5 55b2dc1796 Translate the Options dialog into all 21 languages
Sixty-five new strings, each one added to the source catalogue and given a
value in every locale — not English placeholders. Terminology follows what
each locale already uses for the surrounding labels rather than being coined
fresh: grips, selection, preview, viewport, annotation scale and the UCS all
have established words in these files, and the new strings use them.

System-variable names stay in Latin uppercase inside the parentheses, as they
already do in every locale's SETVAR listing — they are identifiers, not prose.

One trap worth recording: Fluent attribute names must begin with a letter, so
the obvious slug for "3D Modeling" is not a legal key. It parses as far as
the message body and then fails the whole file, which surfaces as
`Invalid Fluent syntax in EnUs` with a byte offset rather than as anything
naming the attribute.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:55:34 +03:00
PanosandClaude Opus 5 7ea1aef95e Add a Files page, and links out to the editors that own their own dialogs
The application has no support-file search path — the four folders it uses
are functions returning fixed paths, not settings. Rather than build a Files
page that pretends otherwise, this one answers the question people actually
open it to ask: where does this thing keep my plot styles. Each row shows the
location and opens it in the file manager, and a row whose path the platform
could not give says so with its button disabled.

General gains buttons through to the plugin manager, the keyboard shortcut
editor and the alias editor. Those three have good dialogs of their own and
are not absorbed; Options simply stops being a place you cannot reach them
from.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:45:20 +03:00
PanosandClaude Opus 5 5a638f243a Make the view toggles survive a restart, and give them a page
The ViewCube, the UCS icon, its at-origin placement and selection cycling all
have commands and status-bar pills, and all four kept their value only on the
app struct. Turn the ViewCube off with NAVVCUBE, restart, and it is back.
Nothing failed — the setting evaporated — so a checkbox for any of them would
have been a checkbox that forgets. They are persisted first, with a
round-trip test, and only then given controls.

The new 3D Modeling page carries the three view tools plus the drawing
variables that decide how solids are tessellated: ISOLINES, DISPSILH, SURFU,
SURFV, SURFTYPE, SOLIDHIST and SHOWHIST. Those are saved in the DWG rather
than in preferences, so the page says so beside each group and hides them
entirely when no drawing is open.

Changing them also rebuilds the geometry. The SETVAR path never did, which is
why the comment beside LTSCALE's invalidation exists — the same reasoning
applies here, and without it a new isoline count does not appear until some
unrelated edit rebuilds the solid.

Selection cycling joins the Selection page next to the other two selection
modes, since that is what it is.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:41:26 +03:00
PanosandClaude Opus 5 b5f4b4d1cc Add a Drafting page for the rotation angle and the polar increment
Two drafting preferences had no proper home. The Drafting Settings dialog
displays the drafting rotation and offers only a Reset button — there was no
way to type an angle short of `SETVAR SNAPANG`. The polar tracking increment
existed in exactly one place: a pop-up hanging off the status-bar pill.

The rotation is a text field over an edit buffer rather than the value
itself, so clearing it to retype does not snap the crosshair to zero on the
way through; the buffer is reseeded whenever the value is restored from
behind it. Angles render without a trailing `.0`, matching how the polar
pop-up has always shown them — same kind of number, same reader.

Snap modes, grid spacing and object snap stay in Drafting Settings, where
they belong; the page links to it.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:33:19 +03:00
PanosandClaude Opus 5 9c3f3625da Add a User Preferences page for six command-only settings
Zoom direction and factor, whether TEXTEDIT ends after one object, whether
continued dimensions inherit the base dimension's style, which points QDIM
measures from, and which annotative objects pick up a newly set scale. All
six work today; none had a control.

Two of them needed their meaning worked out rather than copied.

ANNOAUTOSCALE stores the mode in the magnitude and on/off in the sign, and
the four modes are not documented anywhere in the app — the command prompt
just says `[-4..4]`. Reading `add_annotation_scale_to_objects` gives them:
1 skips layers that are off, frozen, locked or frozen in the viewport, 2
keeps the locked ones, 3 skips only locked, 4 takes everything. The dropdown
names them instead of showing bare numbers, and choosing Off negates rather
than zeroing, so the mode survives being switched off and back on — which is
the convention the status-bar pill already follows.

The QDIM origin priority had no system variable at all; it could only be
reached through a keyword inside the running command.

Drawing units stay in their own dialog; this page links to it.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:29:48 +03:00
PanosandClaude Opus 5 a0027a8977 Put text fill and the command-line preferences on the Display page
Three settings that work, persist, and could only be reached by typing their
name: TEXTFILL, CLIPROMPTLINES and COMMANDLINEFADETIME. The last two govern
how much of the command window is prompt and how long its history lingers —
the kind of thing people fiddle with once and then leave, which is exactly
what a settings dialog is for.

One fix rides along. TEXTFILL is a process-global, so changing it invalidates
the text in every open drawing; the SETVAR path rebuilt only the active tab,
leaving the others rendering the previous setting until an unrelated edit
happened to rebuild them. Both paths now go through
`invalidate_text_everywhere`, so the checkbox and the command cannot disagree.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:26:20 +03:00
PanosandClaude Opus 5 ec8d733857 Give saving its own page, with the two settings that had no control
General had become three unrelated controls: a language picker, a save format
and a file association. The last two move to an Open and Save page, where
they join the two saving preferences that have never had a widget.

Automatic save has worked since the SAVETIME command was added and is
persisted; the only way to change the interval was to type it. Same for the
`.bak` copy from #205 and its ISAVEBAK command. Both are settings people
expect to find in a dialog, and neither was in one.

The page also carries a button through to the Plot dialog. Options holds the
preferences; the plot device, paper and plot styles stay where they already
work well. Note that the modal stack shows one dialog at a time, so the
button replaces Options rather than stacking on it.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:22:36 +03:00
PanosandClaude Opus 5 b1d2ac2744 Give the Options dialog a tab rail that can hold more pages
The dialog laid its pages out as a row of buttons across the top, which is
what AutoCAD does and what fits while there are four of them. The pages this
series adds take it to nine, and the names are translated into 21 languages —
a row of nine German or Russian page names does not fit at any dialog width
worth having.

The rail is now a vertical list down the left, the dialog is 880×620 rather
than 540×560, and the content pane scrolls on its own.

Which page was open is now remembered. With four pages, reopening on General
was a shrug; with nine it means hunting for the one you were last in.

The ribbon's Options tool has existed all along — `ToolDef`, icon and all —
but was marked `#[allow(dead_code)]` and never added to a group, so the
dialog could only be reached by typing OPTIONS or from the start page. It
now sits in Manage ▸ Application, beside About.

No settings change in this commit; it is only the shell the rest needs.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-09-10 08:18:23 +03:00
Hakan Seven b19992cbcb Merge pull request #1118 from MarcelP102/codex/fix-DELOBJ
Implement persistent DELOBJ source deletion policies and cover all four modes through the kernel-backed SWEEP flow.
2026-09-09 23:06:08 +03:00
Hakan Seven 6280ae6316 fix(ci): keep Pages validation site-scoped 2026-09-09 22:05:56 +03:00
Hakan Seven cf70d60944 fix(site): consolidate homepage search signals 2026-09-09 21:58:38 +03:00
Marcel 10d1d9b7d9 Implement DELOBJ source deletion policies 2026-09-09 20:49:29 +02:00
Hakan Seven f69f0b32be fix(sectionplane): persist and clip section modes correctly 2026-09-09 20:53:05 +03:00
Hakan Seven 57b9cf979e Merge PR #1116: add SECTIONPLANE workflow 2026-09-09 19:42:21 +03:00
ramox81 c9c768cd9f feat(model): add section plane workflow 2026-09-09 18:29:35 +03:00
Karim Jerbi ed177cbf25 Host wide polyline quads on their 3D plane instead of billboarding in screen space 2026-09-09 14:23:10 +01:00
Karim Jerbi 76e1610dcc fix(render): render wide polyline segments as flat 2D rectangles instead of rounded pill shapes 2026-09-09 13:44:57 +01:00
Karim Jerbi 2875d4ae61 fix(render): eliminate depth-write edge conflict at polyline arc joints 2026-09-09 13:02:03 +01:00
Karim Jerbi f0cc4ffba8 fix(camera): prevent near-plane clipping during 3D orbit on wide strokes and flat drawings 2026-09-09 13:02:02 +01:00
Karim Jerbi 9bbc5c3182 feat(render): render thick and tapered analytical arcs directly on GPU
- Repurpose CircleInstance center_high.w and params.w for start_width and end_width (preserving exact 128-byte stride)
- Route wide polylines, tapered polylines with bulges, and donuts through split_mixed_polyline into GPU analytical arc instances
- Compute physical annular bands, width tapers, and round end caps in circle.wgsl using world-space distances to prevent 3D perspective foreshortening distortion
- Expand bounding quad margins dynamically with grazing-angle compensation to eliminate clipping
- Relax pick_tris check in wire classification and partition routines so wide entities retain CPU picking while drawing analytically
- Add unit and hardware GPU integration tests, including tilted 3D perspective rendering verification
2026-09-09 13:02:02 +01:00