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>
This commit is contained in:
ramox81andClaude Opus 5.5 committed 2026-10-01 13:55:32 +03:00
1 parent 3dcebf0dc6
commit c5790c74a9
48 files changed
+2501 -435

No files matched your search

File diff suppressed because it is too large. Load diff
+6 -2
View File
@@ -31,7 +31,7 @@ impl CadModule for DrawModule {
use crate::modules::annotate::{
angular_dim, leader_cmd, linear_dim, mleader_cmd, mtext, radius_dim, text,
};
use crate::modules::insert::{create_block, insert_block};
use crate::modules::insert::{attedit, create_block, edit_block, insert_block};
use clipboard::{copy_clip, cut, paste};
use draw::{arc, circle, ellipse, hatch, line, polyline, shapes};
use groups::{group, ungroup};
@@ -200,9 +200,13 @@ impl CadModule for DrawModule {
},
RibbonGroup {
title: "Block",
// Slide-out: Define / Manage / Synchronize Attributes and
// Set Base Point.
tools: vec![
RibbonItem::LargeTool(create_block::tool()),
RibbonItem::LargeTool(insert_block::tool()),
RibbonItem::Tool(create_block::tool()),
RibbonItem::Tool(edit_block::tool()),
RibbonItem::Tool(attedit::tool()),
],
},
RibbonGroup {
-10
View File
@@ -1,10 +0,0 @@
use crate::modules::{IconKind, ModuleEvent, ToolDef};
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/attsync.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "ATTSYNC",
label: "Synchronize",
icon: ICON,
event: ModuleEvent::Command("ATTSYNC".to_string()),
}
}
-11
View File
@@ -1,19 +1,8 @@
use crate::t;
use crate::command::{CadCommand, CmdResult};
use crate::modules::{IconKind, ModuleEvent, ToolDef};
use glam::DVec3;
pub const ICON: IconKind = IconKind::Svg(include_bytes!("../../../assets/icons/base_point.svg"));
pub fn tool() -> ToolDef {
ToolDef {
id: "BASE",
label: "Set Base\nPoint",
icon: ICON,
event: ModuleEvent::Command("BASE".to_string()),
}
}
// ── Command implementation ────────────────────────────────────────────────
/// Picks one point and delegates to the inline `BASE <x> <y> <z>` handler,
+8 -11
View File
@@ -1,14 +1,13 @@
// Insert module — references, point clouds, blocks, attributes, import, content.
mod attdef;
mod attedit;
pub(crate) mod attedit;
mod attman;
mod attsync;
pub mod base_point;
mod content_browser;
pub(crate) mod create_block;
mod design_center;
mod edit_block;
pub(crate) mod edit_block;
pub(crate) mod image_transparency;
pub(crate) mod insert_block;
mod landxml;
@@ -106,19 +105,17 @@ impl CadModule for InsertModule {
tools: vec![
RibbonItem::LargeTool(mview_block::tool()),
RibbonItem::LargeTool(insert_block::tool()),
RibbonItem::Tool(create_block::tool()),
RibbonItem::Tool(edit_block::tool()),
RibbonItem::Tool(base_point::tool()),
RibbonItem::LargeTool(attedit::tool()),
],
},
// ── Attributes ────────────────────────────────────────────────────
// ── Block Definition (slide-out: Set Base Point, Synchronize) ─────
RibbonGroup {
title: "Attributes",
title: "Block Definition",
tools: vec![
RibbonItem::LargeTool(create_block::tool()),
RibbonItem::LargeTool(attdef::tool()),
RibbonItem::LargeTool(attedit::tool()),
RibbonItem::Tool(attman::tool()),
RibbonItem::Tool(attsync::tool()),
RibbonItem::LargeTool(attman::tool()),
RibbonItem::LargeTool(edit_block::tool()),
],
},
// ── Import ────────────────────────────────────────────────────────