Dimensions: place the picture block where the dimension says

A dimension carries its graphics in a block of its own, drawn in that
block's frame, and the entity records where the frame sits. The renderer
inserted it at the origin instead, so every dimension whose file carries a
non-zero insertion point drew far from the geometry it measures — the whole
picture offset by that point. Dimensions inside block definitions are where
this shows: a drawing of plan blocks scattered their dimension graphics
thousands of units away, over empty sheet.

The picture now follows the dimension's insertion point, rotation, scale and
extrusion, the way any block reference is placed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
ramox81andClaude Opus 5 committed 2026-10-09 13:32:04 +03:00
1 parent aa0b87108c
commit eefbcc4860
1 file changed
+19 -2
+19 -2
View File
@@ -814,8 +814,25 @@ fn entity_owned_block_uses(
if let Some(record) = block_record_by_name(document, name)
.filter(|record| !record.entity_handles.is_empty())
{
let mut insert = Insert::new(record.name.clone(), Vector3::ZERO);
insert.common = dimension.base().common.clone();
let base = dimension.base();
// The picture block draws the dimension in its own frame, and
// the dimension says where that frame sits. Placing it at the
// origin instead draws the whole dimension offset by the
// insertion point — far off the geometry it measures whenever
// the file carries a non-zero one, which is what a dimension
// saved inside a block definition usually has.
let mut insert = Insert::new(record.name.clone(), base.insertion_point)
.with_scale(
base.insertion_scale.x,
base.insertion_scale.y,
base.insertion_scale.z,
)
.with_rotation(base.insertion_rotation);
// The insertion point is in the dimension's own object
// coordinates, so the picture follows its extrusion the way
// any block reference does.
insert.normal = base.normal;
insert.common = base.common.clone();
let picture = !crate::scene::annotative::is_annotative(document, entity);
vec![block_use(
document,