Commit Graph
842 Commits
Author SHA1 Message Date
ramox81andClaude Opus 5.5 cfe64ae6a4 feat(view): -VIEW orthographic UCS, sEttings and Window like the reference
An orthographic preset sets its orthographic UCS while UCSORTHO is on
(*FRONT*, *RIGHT*, …; TOP returns to the world UCS); presets no longer
flip to the opposite view when repeated. -VIEW runs as its own command:
Window asks for the name and corners, sEttings loops over Background,
Categorize, Layer snapshot, live Section, Ucs and Visual style with the
reference prompts and messages, Save keeps the UCS with the view while
UCSVIEW is on and Restore brings it back. UCSORTHO and UCSVIEW are
profile variables.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 09:07:05 +03:00
Hakan SevenandClaude Opus 5.5 da2704bb45 fix(mleader): text left of its landing attaches by its right edge
The text was placed by its alignment rather than its attachment point,
so text on the left of the landing ran over the leader. It now attaches
by the attachment point, and putting the text on a side (on creation or
by a grip) turns left- or right-justified text to read away from the
leader.

Fixes #1646

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:34:49 +03:00
Hakan SevenandClaude Opus 5.5 e2f558ae4f fix(paste): pasted entities land in the current space
The paste kernel added every entity to model space. It now takes the
space a new entity goes to: the block being edited, a layout's paper
space when no viewport is active, or model space.

Fixes #1652

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 08:34:49 +03:00
gianlucafiore 6df70538ea fix: paste entities into active block editor 2026-10-07 19:50:47 -03:00
ramox81andClaude Opus 5.5 07499968d8 Sweep spatial profiles as surfaces, keep swept surfaces linked to expressions
A closed 3D polyline profile that does not lie in one plane sweeps a
surface with the reference's refusals. Swept surfaces made with an
Expression scale or twist follow the named parameters, and reference
surfaces linked through their associative action are picked up on open.
Saving keeps the associative actions the constraint graph does not
rebuild and stores each scope network through its own dictionary.
Kernel 23138fc, codec 64fe2a6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:47:30 +03:00
ramox81andClaude Opus 5.5 0c3ca96822 SWEEP: sweep from the picked path end; kernel run faces and placed ends
- An open path is swept from its end nearest the pick point (in plan), as
  the reference does; the record keeps the original path and the placed
  frame marks the start.
- Kernel from ramox81/cadkernel 1df75f5: one face per path run for
  twisted, scaled and spline sweeps, placed records swept from the placed
  end, end caps without pcurves.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 16:34:34 +03:00
Hakan SevenandClaude Opus 5.5 41d93b6f54 review(#1642, #1643, #1647): one escaped newline, no dead SWEEP prompts, wrapped long lines
The refused-path message split its format string across a raw line
break; it uses \n. The reference-length and new-length prompts SWEEP no
longer shows leave the catalog and all 21 locales. Lines past the width
limit in the UPDATEFIELD and automation select changes are wrapped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 12:58:21 +03:00
Hakan Seven 737981791b Merge pull request #1642 from ramox81/codex/sweep-corner-followups 2026-10-07 12:55:08 +03:00
ramox81andClaude Opus 5.5 ac186d3967 UPDATEFIELD: an undo step on every run
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 11:03:57 +03:00
ramox81andClaude Opus 5.5 56f3f68de9 SWEEP: Expression option, reference prompts and localized messages
- Scale and Twist take an Expression evaluated with the drawing's
  parameters; invalid input prints the reference message and asks again.
- The scale and twist prompts use the reference wording and defaults.
- The SWEEP prompts and refusal messages are in the locale catalog with
  translations in every locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 10:15:32 +03:00
ramox81andClaude Opus 5.5 1a18fdd0cf SWEEP: reference messages, 3D polyline profiles and Scale Reference
- 3D polyline profiles are recorded as wire bodies, like 3D polyline paths.
- Refused sweeps print the modeling error code and "Unable to sweep N
  selected objects."; a scaled sweep rejects closed and cornered spatial
  paths with the reference messages and asks for the path again.
- Scale > Reference asks for start and end reference lengths (start / end).
- Bank stays on for later sweeps until a twist angle is entered.
- Refused twist/scale edits in Properties print the modeling error code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 09:26:29 +03:00
Hakan SevenandClaude Opus 5.5 f485df7636 feat(3drotate): rotate about an axis picked in space
3DROTATE (ROTATE3D) took the drawing's rotation path, so a polyline only
turned in its own plane. It now asks for a base point, an axis — X, Y, Z
or a second point — and an angle, and rotates the selection about that
axis in space.

Fixes #1641

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-07 08:50:06 +03:00
Hakan SevenandClaude Opus 5.5 1eae36e726 Cargo: codec 76d2a1c, kernel e652b4d, graph 0545fa9; text styles, templates, solid edges
- Text styles keep their TrueType typeface through save and reopen (codec
  reads and writes the STYLE record's ACAD extended data) (#1633)
- Unnamed shape-file entries no longer show in text style lists (#1634)
- Save As offers DWT 2018; NEW asks for the template to start from, while
  Ctrl+N and the quick-access New run QNEW with the default template (#1635)
- An edge next to an earlier fillet of the same radius rounds together with
  it (kernel); the solid stays drawn and pickable while edges are chosen
  (#1625, #1107)
- A full cache rebuild drops the B-rep cache too, so an undone fillet does
  not come back with the next edge operation (#1107)
- Selected solids in shaded styles highlight only their visible edges (#1031)
- VIEW ISO / SWISO / SEISO / NEISO / NWISO snap to the isometric corners

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 18:32:43 +03:00
Hakan SevenandClaude Opus 5.5 1cbcc8f4c5 fix: feet-inch dynamic input, STRETCH preselection, ribbon title wrap
- Dynamic-input fields take ' and " and read 2'9" / 3' as lengths (#937)
- STRETCH on a selection made by a crossing window stretches through that
  window and goes straight to the base point (#1068)
- STRETCH's crossing-window steps show no coordinate boxes (#657)
- Collapsed ribbon panel titles wrap at words, never mid-word (#920)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 16:15:35 +03:00
Hakan SevenandClaude Opus 5.5 178c7dff41 fix: open-issue sweep — drawing, plot, snap, layout and UI fixes
Fixes:
- Font prompt no longer lists bundled ltypeshp/qcadshp shape files (#1626)
- Wide polylines step at a discontinuous segment width; PEDIT marks the
  current vertex; keyword steps refresh the command preview (#1628)
- Radius-0 fillet drops the zero-length segment it left, so the corner
  fillets again (#1422)
- FILLET Trim / No trim option (#1558)
- True-colour wires plot in their own colour; colour picker stores the
  value it shows (#1621)
- Model tab keeps its page setup; "Save changes to layout" in Model (#1620)
- QNEW default template in Options > Files; .dwt in the open dialog
  (#1134, #1113)
- GRIDUNIT / GRIDMODE / PERSPECTIVE variables (#1618, #1524)
- PTYPE (#1433)
- ZOOM nX / nXP (#1465)
- CHSPACE between model and paper space through a viewport (#1428)
- Moving a dimension keeps its automatic text placement
- Shell icon; "&&" button labels (#1554)
- LINETYPE Load from a .lin file (#1588)
- XLINE / RAY hide the crosshair arms (#1437)
- Dynamic-input boxes keep clear of the crosshair and each other (#1546)
- Snap marker colour setting, dark default on light canvases
  (#1497, #1229, #1128)
- Dimension style precision as a 0.00 pattern dropdown (#1426)
- Node graph nodes left of the origin no longer clip away (#1592)
- Collapse button in the command history header (#1094)
- Freeze-in-current-viewport toggle in the ribbon layer list (#1466)
- Geometric Center object snap for closed polylines (#1369)

New strings translated in all 21 locales.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 15:59:30 +03:00
Hakan SevenandClaude Opus 5.5 81bb8d48cf Cargo: codec aad7053, kernel 1a52eaf, graph 263de59; honour viewport clipping
Brings codec PRs #84 (cross-version visual styles, table styles,
subentity managers), #88 (viewport clipping flag, DXF boundary handle),
#89 (DXF viewport snap/twist in degrees) and #92 (field format codes,
event updates).

With #88 a viewport keeps a stored boundary whether or not clipping is
on, so a linked boundary alone no longer means "clipped": rendering,
paper picking, VPCLIP and the Clipped property check the clipping flag
too, and VPCLIP / MVIEW Object and Polygon set it. Before, OCS never set
the flag, so its clipped viewports opened rectangular elsewhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 13:57:55 +03:00
Hakan Seven fbe55bab37 Merge pull request #1613 from ramox81/codex/sheet-set-manager
Sheet Set Manager, NEWSHEETSET / OPENSHEETSET and sheet set fields, with review fixes.

# Conflicts:
#	Cargo.lock
#	src/app/control/actions.rs
#	src/app/mod.rs
#	src/app/settings.rs
#	src/app/update/dialog.rs
#	src/app/update/file.rs
#	src/app/update/mod.rs
#	src/app/view/mod.rs
#	src/ui/dock.rs
#	src/ui/ribbon/mod.rs
#	src/ui/window/field_dialog.rs
#	src/ui/window/mod.rs
2026-10-06 09:49:38 +03:00
Hakan SevenandClaude Opus 5.5 1d78ab2574 fix(count): invalid-area restore, honest UPDATEFIELD, i18n and SVG icons
- Invalid Area "Undo" reverts the step that lost the boundary (redo after
  an undo, undo otherwise), checks the boundary is back and otherwise puts
  the step back and continues without the area; no auto-undo loop.
- COUNTCLOSE / area replacement remove the count polyline outside the
  history instead of as an undo step of their own.
- UPDATEFIELD re-evaluates the field texts of a table's *T block and
  reports the number actually updated.
- Zoom to a counted object goes through the f64 handle_zoom_to_window.
- Palette: SVG icons instead of glyph text, list cache keyed by tab id,
  cached result borrowed instead of cloned, "Count" as the source text.
- Command-line messages go through t!/tf! with entries in all locales.
- Cleanups: \n escapes, area comment, unused parameter, comment order.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 09:33:08 +03:00
Hakan Seven 078306d8fc Merge pull request #1613 from ramox81/codex/sheet-set-manager
Sheet Set Manager, NEWSHEETSET / OPENSHEETSET and sheet set fields
2026-10-06 09:17:20 +03:00
Hakan Seven 6da9675c55 Merge pull request #1614 from ramox81/codex/count-feature
Count: COUNT / COUNTAREA count mode, Count palette, count fields and tables
2026-10-06 09:16:57 +03:00
Karim Jerbi c35b902f3a fix(model): respect typed height on cylinder and primitive creation 2026-10-05 13:23:25 +01:00
ramox81andClaude Opus 5.5 4dba66bbac Count: table drawn into its block with fields in the cell texts, polygon prompt, exact areas
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 14:06:58 +03:00
ramox81andClaude Opus 5.5 0a26709d13 Count: measured messages and listing, groups, Current area, boundary checks, fills and solids recoloured
- COUNTCOLOR / COUNTERRORCOLOR / COUNTSERVICE reject any other value with
  the range message; COUNTTABLE ? lists in the reference order, padded,
  22 lines a page with Press ENTER to continue:, then the totals.
- Target picks report N found / N found, M total; several objects (or one
  that is not a block reference) count their copies, shown as Geometries
  in the palette.
- Current area is the area in use (kept aside by Entire model space),
  otherwise all of model space; an invalid Object boundary ends with the
  reference message.
- Count colours reach solids and fills; the palette list and the count
  are recomputed only when the drawing changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 11:36:24 +03:00
ramox81 88d8a33572 Merge remote-tracking branch 'origin/main' into codex/count-feature
# Conflicts:
#	Cargo.lock
#	src/app/commands/field.rs
#	src/app/control/actions.rs
#	src/ui/window/field_dialog.rs
2026-10-05 09:21:43 +03:00
ramox81 1696316e1f Merge remote-tracking branch 'origin/main' into codex/sheet-set-manager
# Conflicts:
#	Cargo.lock
#	src/app/control/actions.rs
#	src/ui/window/field_dialog.rs
2026-10-05 09:20:40 +03:00
ramox81andClaude Opus 5.5 0e1e13e524 WIP: Sheet Set Manager palette, wizard, properties and sheet set fields
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-05 09:10:17 +03:00
Karim Jerbi 7d1fca000b fix(io): materialize missing BLOCK/ENDBLK sentinels on load
The DXF reader keeps marker identities on the block record but never materializes the entities, so block_entity_handle/block_end_handle dangle after every DXF load (reopened baked *D dimension blocks hit this every time). Re-create missing sentinels at load finalize, reusing the file handle when free and minting otherwise. Idempotent and DWG-safe: loads whose markers already resolve are untouched. Pinned by dimlinear_survives_save_reload_with_baked_geometry.
2026-10-05 00:07:21 +01:00
Christopher OverbeckandClaude Opus 5.5 51abbd897c feat(offset): open on the live preview for pre-selected objects; signed typed distance
With objects already selected, OFFSET opens at the side step with the
preview following the cursor instead of asking for a distance first
(#422). At the side step a typed distance places the offset at once on
the cursor's side, and a negative one on the other side; Enter at the
start repeats the last distance (#418). Erase and Layer, which lived on
the skipped distance step, are offered there too. With nothing selected
the distance-first flow is unchanged.

The opposite side is found by mirroring the cursor through its nearest
point on the outline, capped at half the offset distance so it cannot
cross a narrow gap back to the cursor's own side. Two new prompts are
added to the catalog and every locale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:35:54 -05:00
Hakan Seven 29ed1cae9b Merge PR #1590 from ramox81/codex/field-table-placeholders: table formula buttons, block placeholders, attribute fields on insert, plot-time fields
The PR pinned the codec to its fork through [patch]; codec #81 is merged
upstream and main already points at it, so the patch section is dropped.
2026-10-02 20:09:27 +03:00
ramox81 f76b6cb3bb WIP count: automation, locales 2026-10-02 17:53:28 +03:00
ramox81 e29b408bda WIP count feature 2026-10-02 17:52:13 +03:00
ramox81andClaude Opus 5.5 785db5683b feat(field): table formula buttons, block placeholders, attribute fields on insert, plot-time field stamping
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 17:22:08 +03:00
ramox81andClaude Opus 5.5 07facf465c fix(solids): box and wedge histories framed at the bounding-box centre; no second transform after ACIS lift
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 15:10:37 +03:00
ramox81andClaude Opus 5.5 0c81580862 fix(field): FIELD text has no defined width, so it does not wrap
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 12:47:31 +03:00
ramox81 762cf1e7e4 Merge remote-tracking branch 'origin/main' into codex/field-command
# Conflicts:
#	src/ui/window/attdef_dialog.rs
2026-10-02 10:46:53 +03:00
Hakan Seven a1d0cf3873 Merge PR #1574 from ramox81/codex/attdef-parity: ATTDEF dialog, -ATTDEF, tag display, Properties and Block Definition ribbon
Conflicts with #1573: the locale files and the catalog take both PRs'
entries (one "Insertion Point" mapping kept); the Home and Insert Block
panels take #1574's layout with #1573's Insert Block gallery.
2026-10-02 10:17:54 +03:00
Hakan Seven 7a6908c7ca Merge PR #1573 from ramox81/codex/blocks-palette-parity: Blocks palette tabs, insertion options, drag insertion and -INSERT 2026-10-02 10:10:51 +03:00
Hakan SevenandClaude Opus 5.5 09cd50ea62 fix(trim): polyline vertices are not cutting edges; self-cuts only as an edge
#1567 made every vertex a trim limit, so a polyline no edge crosses lost
the clicked segment and a trimmed piece stopped at the next corner instead
of running on to the next cutting edge. Vertices are no cuts again, a
polyline with no cut is left alone, and its own crossings cut it only when
it is among the cutting edges. The crossing window's unused pick corner is
dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 10:06:10 +03:00
Hakan Seven 3bf8906ed3 Merge PR #1567 from gianlucafiore/fix/polyline-self-intersections: polyline self-intersection snapping and trimming 2026-10-02 10:04:11 +03:00
ramox81andClaude Opus 5.5 87211f4654 FIELD: Field dialog, FIELD command and the ATTDEF field buttons
A Field dialog with the fields the application evaluates and the
reference format choices, FIELD placing a field as multi-line text, the
attribute definition dialogs' field buttons, field attachment on commit,
system variable / file size / regional date providers for field
evaluation, and the codec patch with the field authoring API.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 09:56:54 +03:00
ramox81 53f2983e9c Merge remote-tracking branch 'origin/main' into codex/attdef-parity
# Conflicts:
#	Cargo.lock
#	src/modules/draw/draw/attdef.rs
2026-10-02 09:09:21 +03:00
Karim Jerbi 02c470aac7 feat(pdf): searchable text layer with per-style subset font embedding
Real BT/Tj text objects ride alongside the vector outlines (Tr 3,
zero visual change): runs preserved at layout time, TTF styles embedded
as allsorts subsets with ToUnicode, width-matched Tm, clip-culled.
WireModel literals moved to ..Default::default() tails.
2026-10-01 23:30:35 +01:00
Hakan SevenandClaude Opus 5.5 443b935a3f chore: bump codec d28fd71, kernel a03e4f0, graph 79bdc4b
Codec: PRs #71-#74 merged (MPOLYGON layout, multiline ATTDEF/ATTRIB DXF,
DXF MATERIAL/ACSH matrix, restorable SAT/SAB + history roots) and issues
#55 #64-#69 fixed. EntityType now boxes Surface, Extended, Table,
MultiLeader and Helix (2344 B -> 848 B per entity): construction sites
wrap in Box, the entity traits forward through Box, and the python
plugin generator converts with into(). Kernel: PR #70 (cuboid ring
winding).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-02 00:08:55 +03:00
ramox81andClaude Opus 5.5 7f55043210 ATTDEF dialog error band and multi-line editor; ATTDISP sets ATTMODE
Validation messages show in the dialogs, the Default value of a multi-line
definition can be edited in the multi-line text editor, "Specify on-screen"
is kept for the session, ATTDISP sets ATTMODE with the reference prompt
instead of changing the definitions, and Insert > Block gets the Edit
Attribute (Single / Multiple) and attribute display lists.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 17:11:45 +03:00
ramox81andClaude Opus 5.5 c992b73cdf ATTDEF: Fit/Align attribute text, TEXTSIZE, single-line restart
Align and Fit attributes run their text between the two baseline points,
an ATTDEF height becomes the next text height, and Multiple lines is not
carried to the next definition (measured).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 14:16:06 +03:00
ramox81andClaude Opus 5.5 c5790c74a9 ATTDEF: dialog, -ATTDEF prompts, tag display, Properties and ribbon
Attribute Definition dialog and Edit Attribute Definition dialog, -ATTDEF
with the reference prompts and modes (AFLAGS), tag shown in the drawing,
justification-aware grips, reworked Properties with validation, Home Block
slide-out and Insert Block Definition panel, and the codec patch for
ATTDEF DXF output and the R2013+ solid wire cache.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 13:55:32 +03:00
ramox81andClaude Opus 5.5 0826101c5e Blocks palette: tabs, options, drag insertion and -INSERT
Rebuild the Blocks palette with Current Drawing / Recent / Favorites /
Libraries tabs, wildcard filter, six views, insertion options, click and
drop insertion and a block context menu. INSERT opens the palette, the
new -INSERT runs on the command line, the ribbon Insert button becomes a
block gallery, and BLOCKMRULIST, BLOCKREDEFINEMODE, BLOCKNAVIGATE,
BLOCKSTATE, EXPLMODE and INSNAME are added.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 11:17:38 +03:00
Hakan SevenandClaude Opus 5.5 3dcebf0dc6 Merge pull request #1553 from ramox81/codex/pointcloud-attach
Point clouds: drawn from their scans, attached, cropped and stylized.

The fork's codec patch is resolved to the upstream pins: the point cloud
records landed in opencadcodec 5ef9376, carried through opencadkernel
68eeda1 and opencadgraph e204966.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 01:49:25 +03:00
Hakan SevenandClaude Opus 5.5 1f5a7e97a1 fix(dimension): a dimension drawn live matches its baked block
Once edited, a dimension is drawn live instead of from its *D block;
on the #898 drawing that differed in three places:

- Oblique / architectural-tick strokes were DIMASZ/2 to each side, the
  block's are DIMASZ/sqrt(2) (its unit stroke runs corner to corner).
- Arrowheads and ticks shared the dimension line's wire, so a dashed
  dim line broke its ticks into stubs. They get their own solid wire
  (and explode as lines as before).
- A diameter's user-positioned text was lifted by the DIMTAD offset even
  when the stored point already was the text's middle, as a file saved
  elsewhere writes it; it is lifted only when it lies on the leader
  (#1323's case).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-01 00:27:42 +03:00
gianlucafiore 2131f4390f fix(trim): support polyline self-intersections and box trimming 2026-09-30 15:35:51 -03:00