feat: filter out nodes with zero dimensions in reify implementation to improve rendering efficiency
This commit is contained in:
@@ -70,12 +70,17 @@ impl ClientState for BridgeState {
|
|||||||
impl Reify for BridgeState {
|
impl Reify for BridgeState {
|
||||||
fn reify(&self) -> impl ast::Element<Self> {
|
fn reify(&self) -> impl ast::Element<Self> {
|
||||||
// Root playspace. Create appropriate visuals per entity type
|
// Root playspace. Create appropriate visuals per entity type
|
||||||
let children = self.nodes.iter().map(|(id, node)| {
|
let children = self.nodes.iter().filter_map(|(id, node)| {
|
||||||
|
// Skip nodes with zero dimensions (like the root node)
|
||||||
|
let dims = glam::Vec3::from(node.dimensions);
|
||||||
|
if dims.length() < 0.001 {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
// Decompose transform into TRS
|
// Decompose transform into TRS
|
||||||
let (scale, rot, trans) = node.transform.to_scale_rotation_translation();
|
let (scale, rot, trans) = node.transform.to_scale_rotation_translation();
|
||||||
|
|
||||||
// Use entity dimensions if available, otherwise use transform scale
|
// Use entity dimensions if available, otherwise use transform scale
|
||||||
let dims = glam::Vec3::from(node.dimensions);
|
|
||||||
let vis_scale = if dims.length() > 0.001 {
|
let vis_scale = if dims.length() > 0.001 {
|
||||||
dims
|
dims
|
||||||
} else {
|
} else {
|
||||||
@@ -226,14 +231,14 @@ impl Reify for BridgeState {
|
|||||||
seg(corners[4], corners[5]), seg(corners[5], corners[6]), seg(corners[6], corners[7]), seg(corners[7], corners[4]),
|
seg(corners[4], corners[5]), seg(corners[5], corners[6]), seg(corners[6], corners[7]), seg(corners[7], corners[4]),
|
||||||
seg(corners[0], corners[4]), seg(corners[1], corners[5]), seg(corners[2], corners[6]), seg(corners[3], corners[7]),
|
seg(corners[0], corners[4]), seg(corners[1], corners[5]), seg(corners[2], corners[6]), seg(corners[3], corners[7]),
|
||||||
];
|
];
|
||||||
(
|
Some((
|
||||||
*id,
|
*id,
|
||||||
Lines::new(lines)
|
Lines::new(lines)
|
||||||
.pos([trans.x, trans.y, trans.z])
|
.pos([trans.x, trans.y, trans.z])
|
||||||
.rot([rot.x, rot.y, rot.z, rot.w])
|
.rot([rot.x, rot.y, rot.z, rot.w])
|
||||||
.scl([vis_scale.x, vis_scale.y, vis_scale.z])
|
.scl([vis_scale.x, vis_scale.y, vis_scale.z])
|
||||||
.build()
|
.build()
|
||||||
)
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user