feat(props): make dim-line colour editable for leaders and dimensions
The "Dim line color" row on Leader and Dimension entities was read-only: an earlier attempt wired it to Leader.override_color, which acadrust never serialises, so the pick was lost on save. Store it instead as a standard ACAD_DSTYLE per-object dimension-style override (DXF code 176, an ACI index) through the existing dim_override codec, so it round-trips through both DWG and DXF like the other dim overrides. RGB picks collapse to the nearest ACI, matching the rest of the dim-colour stack (dimension styles are index-only through the file layer). The renderer prefers the override over the style's DIMCLRD. The write branch is guarded to leaders and dimensions so a mixed selection cannot stamp the override onto other entity types. Bumps acadrust to c9fe982, which carries parsed XDATA onto dimensions on DXF read (it was dropping common.extended_data), so the dimension override persists on DXF save as well as DWG. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
04bd49c715
commit
d005cc4ab1
8 changed files with 241 additions and 29 deletions
|
|
@ -547,10 +547,29 @@ impl LeaderTess for Leader {
|
|||
use crate::entities::dim_override as dov;
|
||||
use crate::scene::model::wire_model::WireModel;
|
||||
let xd = &self.common.extended_data;
|
||||
// Dim-line colour: a per-object ACAD_DSTYLE override (code 176, an ACI
|
||||
// index) wins over the assigned dim style's DIMCLRD; ByLayer / ByBlock
|
||||
// (0 / 256) and no setting fall through to the entity colour.
|
||||
let color = if selected {
|
||||
WireModel::SELECTED
|
||||
} else {
|
||||
entity_color
|
||||
let dim_clr = dov::int(xd, dov::DIMCLRD).or_else(|| {
|
||||
document
|
||||
.dim_styles
|
||||
.iter()
|
||||
.find(|s| {
|
||||
s.name.eq_ignore_ascii_case(&self.dimension_style)
|
||||
|| (self.dimension_style.trim().is_empty()
|
||||
&& s.name.eq_ignore_ascii_case("Standard"))
|
||||
})
|
||||
.map(|s| s.dimclrd)
|
||||
});
|
||||
match dim_clr {
|
||||
Some(idx) if idx != 0 && idx != 256 => crate::scene::convert::tess_util::aci_to_rgba(
|
||||
&acadrust::types::Color::from_index(idx),
|
||||
),
|
||||
_ => entity_color,
|
||||
}
|
||||
};
|
||||
// A concrete DIMLWD override sets the leader line's weight; ByLayer /
|
||||
// ByBlock / Default and no override keep the resolved weight passed in.
|
||||
|
|
|
|||
Loading…
Reference in a new issue