Merge pull request #735 from gianlucafiore/feature/plotstyle-color-picker

Fix CTB plotting for inherited block colors
This commit is contained in:
gianlucafiore authored and GitHub committed 2026-08-10 20:02:19 -03:00
commit aedd0b8d2d
2 files changed
+30 -5

No files matched your search

+19 -4
View File
@@ -864,11 +864,13 @@ pub fn expand_insert(
ins: &acadrust::entities::Insert,
ins_handle: Handle,
ins_resolved_color: [f32; 4],
ins_aci: u8,
ins_pat_len: f32,
ins_pat: [f32; 8],
ins_lw_px: f32,
// The INSERT's own layer style — layer-0 inheritance target for children.
ins_layer: crate::scene::view::render::InheritStyle,
ins_layer_aci: u8,
selected: bool,
pslt_factor: f32,
// World-space XY view AABB (with world_offset already subtracted, so the
@@ -1004,10 +1006,12 @@ pub fn expand_insert(
let ctx = ExpandCtx {
cache,
ins_color: ins_resolved_color,
ins_aci,
ins_pat_len,
ins_pat,
ins_lw_px,
l0: ins_layer,
l0_aci: ins_layer_aci,
selected,
pslt_factor,
view_aabb,
@@ -1157,12 +1161,14 @@ fn aabb_pixel_size(local_aabb: [f32; 4], world_per_pixel: f32) -> f32 {
struct ExpandCtx<'a> {
cache: &'a BlockCache,
ins_color: [f32; 4],
ins_aci: u8,
ins_pat_len: f32,
ins_pat: [f32; 8],
ins_lw_px: f32,
/// Layer-0 inheritance target — the current INSERT's *layer* style, used
/// for child wires on layer "0" whose properties are ByLayer.
l0: crate::scene::view::render::InheritStyle,
l0_aci: u8,
selected: bool,
pslt_factor: f32,
// World-space XY view AABB (post world_offset). `None` = no culling.
@@ -1494,19 +1500,21 @@ fn expand_defn(
ctx.ins_pat_len,
ctx.ins_pat,
ctx.ins_lw_px,
0,
ctx.ins_aci,
),
layer0: ctx.l0,
layer0_aci: 0,
layer0_aci: ctx.l0_aci,
};
let nested_style = nref.style.resolve(parent_style);
let inner_ctx = ExpandCtx {
cache: ctx.cache,
ins_color: nested_style.insert.0,
ins_aci: nested_style.insert.4,
ins_pat_len: nested_style.insert.1,
ins_pat: nested_style.insert.2,
ins_lw_px: nested_style.insert.3,
l0: nested_style.layer0,
l0_aci: nested_style.layer0_aci,
selected: ctx.selected,
pslt_factor: ctx.pslt_factor,
view_aabb: ctx.view_aabb,
@@ -1664,6 +1672,13 @@ fn emit_wire(
// Resolve final style for this LocalWire against the outer Insert ctx
// before we hash it into a batch.
let final_color = resolve_wire_color(lw, ctx);
let final_aci = if lw.color_is_byblock {
ctx.ins_aci
} else if lw.color_l0 {
ctx.l0_aci
} else {
lw.aci
};
let (final_pat_len, final_pat) = if lw.lt_is_byblock {
(ctx.ins_pat_len, ctx.ins_pat)
} else if lw.lt_l0 {
@@ -1718,7 +1733,7 @@ fn emit_wire(
final_pat,
final_lw_px,
final_world_width,
lw.aci,
final_aci,
lw.plinegen,
lw.is_fill_only,
lw.fill_is_2d_solid,
@@ -1741,7 +1756,7 @@ fn emit_wire(
final_pat,
final_lw_px,
final_world_width,
lw.aci,
final_aci,
lw.plinegen,
lw.is_fill_only,
lw.fill_is_2d_solid,
+11 -1
View File
@@ -1038,7 +1038,7 @@ pub(crate) fn tessellate_entity(
if let EntityType::Insert(ins) = e {
// Resolve the INSERT's own style so ByBlock sub-entities can inherit it.
let (ins_color, ins_pat_len, ins_pat, ins_lw_px, _) =
let (ins_color, ins_pat_len, ins_pat, ins_lw_px, ins_aci) =
view::render::render_style_for_viewport(document, e, active_viewport);
let ins_color = view::render::adapt_to_bg(ins_color, bg_color);
// Resolve the INSERT's *layer* style — the layer-0 inheritance target
@@ -1052,6 +1052,14 @@ pub(crate) fn tessellate_entity(
s.color = view::render::adapt_to_bg(s.color, bg_color);
s
};
let ins_layer_aci = document
.layers
.get(&ins.common.layer)
.and_then(|layer| match &layer.color {
acadrust::types::Color::Index(index) => Some(*index),
_ => None,
})
.unwrap_or(0);
let ip = glam::Vec3::new(
(ins.insert_point.x) as f32,
(ins.insert_point.y) as f32,
@@ -1114,10 +1122,12 @@ pub(crate) fn tessellate_entity(
ins,
h,
ins_color,
ins_aci,
ins_pat_len,
ins_pat,
ins_lw_px,
ins_layer,
ins_layer_aci,
sel,
pslt_factor,
view_aabb,