Fix debug assert failure from selecting zero-sized objects

This commit is contained in:
Keavon Chambers 2026-02-14 22:15:31 -08:00
parent 84f91eb795
commit c574f58ecd
3 changed files with 23 additions and 1 deletions

View File

@ -717,7 +717,23 @@ impl TableRowLayout for Affine2 {
} }
fn format_transform_matrix(transform: &DAffine2) -> String { fn format_transform_matrix(transform: &DAffine2) -> String {
let (scale, angle, translation) = transform.to_scale_angle_translation(); let (scale, angle, translation) = if transform.matrix2.determinant().abs() <= f64::EPSILON {
let [col_0, col_1] = transform.matrix2.to_cols_array_2d().map(|[x, y]| DVec2::new(x, y));
let scale = DVec2::new(col_0.length(), col_1.length());
let rotation = if scale.x > f64::EPSILON {
col_0.y.atan2(col_0.x)
} else if scale.y > f64::EPSILON {
col_1.y.atan2(col_1.x) - std::f64::consts::FRAC_PI_2
} else {
0.
};
(scale, rotation, transform.translation)
} else {
transform.to_scale_angle_translation()
};
let rotation = if angle == -0. { 0. } else { angle.to_degrees() }; let rotation = if angle == -0. { 0. } else { angle.to_degrees() };
let round = |x: f64| (x * 1e3).round() / 1e3; let round = |x: f64| (x * 1e3).round() / 1e3;

View File

@ -27,6 +27,9 @@ impl CompassRose {
.selected_nodes() .selected_nodes()
.selected_visible_and_unlocked_layers(&document.network_interface) .selected_visible_and_unlocked_layers(&document.network_interface)
.filter_map(|layer| { .filter_map(|layer| {
if transform.matrix2.determinant().abs() <= f64::EPSILON {
return None;
}
document document
.metadata() .metadata()
.bounding_box_with_transform(layer, transform.inverse() * document.metadata().transform_to_viewport(layer)) .bounding_box_with_transform(layer, transform.inverse() * document.metadata().transform_to_viewport(layer))

View File

@ -241,6 +241,9 @@ impl Pivot {
.selected_nodes() .selected_nodes()
.selected_visible_and_unlocked_layers(&document.network_interface) .selected_visible_and_unlocked_layers(&document.network_interface)
.filter_map(|layer| { .filter_map(|layer| {
if transform.matrix2.determinant().abs() <= f64::EPSILON {
return None;
}
document document
.metadata() .metadata()
.bounding_box_with_transform(layer, transform.inverse() * document.metadata().transform_to_viewport(layer)) .bounding_box_with_transform(layer, transform.inverse() * document.metadata().transform_to_viewport(layer))