fix(xref): blocks respect their internal draw order

Xref merge now inserts entities in the source block's chain order and
carries SortEntitiesTable objects across (remapped to merged handles).
draw_depth_map values become [depth, half] so exploded block/xref fills
and wide-polyline band wires both compose child depth as
insert_depth + in-block rank x half, recursing into nested inserts with
the same divisor - bands and fills from one block interleave by the
block's internal order instead of stacking at the insert's single depth.
Band batches split per rank via WireModel.depth_override; thin wires
stay merged. The wire arena falls back to a full rebuild when a slab
carries mixed depths so refreshes don't flatten band overrides.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Hakan SevenandClaude Fable 5 committed 2026-07-21 15:53:28 +03:00
1 parent 1546c1dc30
commit e177f92ff5
48 files changed
+337 -50

No files matched your search

+4
View File
@@ -656,6 +656,7 @@ pub(crate) fn tessellate_entity(
return vec![WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris,
pick_tris_low,
@@ -995,6 +996,7 @@ pub(crate) fn tessellate_entity(
let marker = WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -1376,6 +1378,7 @@ fn lod_stub_wire(
WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -1464,6 +1467,7 @@ fn lod_stub_wire_3d(
WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
+18
View File
@@ -372,6 +372,7 @@ pub fn tessellate(
elem_wires.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -664,6 +665,7 @@ pub fn tessellate(
wires.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -703,6 +705,7 @@ pub fn tessellate(
wires.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -749,6 +752,7 @@ pub fn tessellate(
wires.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -776,6 +780,7 @@ pub fn tessellate(
wires.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -833,6 +838,7 @@ pub fn tessellate(
out.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -872,6 +878,7 @@ pub fn tessellate(
out.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -908,6 +915,7 @@ pub fn tessellate(
out.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -937,6 +945,7 @@ pub fn tessellate(
out.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -988,6 +997,7 @@ pub fn tessellate(
return vec![WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -1038,6 +1048,7 @@ pub fn tessellate(
return vec![WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -1081,6 +1092,7 @@ pub fn tessellate(
return vec![WireModel {
taper_widths: Vec::new(),
world_width: polyline_band_width(entity),
depth_override: None,
fill_is_3d: false,
pick_tris,
pick_tris_low,
@@ -1173,6 +1185,7 @@ pub fn tessellate(
out.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris,
pick_tris_low,
@@ -1233,6 +1246,7 @@ pub fn tessellate(
fill_tris,
fill_tris_low,
fill_is_3d,
depth_override: None,
});
}
@@ -1240,6 +1254,7 @@ pub fn tessellate(
out.push(WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris: Vec::new(),
pick_tris_low: Vec::new(),
@@ -1282,6 +1297,7 @@ pub fn tessellate(
return vec![WireModel {
taper_widths: Vec::new(),
world_width: polyline_band_width(entity),
depth_override: None,
fill_is_3d: false,
pick_tris,
pick_tris_low,
@@ -1325,6 +1341,7 @@ pub fn tessellate(
return vec![WireModel {
taper_widths: widths,
world_width,
depth_override: None,
fill_is_3d: false,
pick_tris,
pick_tris_low,
@@ -1424,6 +1441,7 @@ pub fn tessellate(
vec![WireModel {
taper_widths: Vec::new(),
world_width: 0.0,
depth_override: None,
fill_is_3d: false,
pick_tris,
pick_tris_low,