forked from 1b-agent/opencadstudio-upstream
Preserve polylines when fitting attributes are invalid
This commit is contained in:
1 parent
ad9bf07cf7
commit
499beb718f
1 file changed
+3
-1
@@ -680,7 +680,7 @@ impl CadCommand for PeditCommand {
|
|||||||
};
|
};
|
||||||
let Some(local) = crate::entities::curve::ocs_plane(normal, elevation).project([point.x, point.y, point.z]) else { return CmdResult::NeedPoint; };
|
let Some(local) = crate::entities::curve::ocs_plane(normal, elevation).project([point.x, point.y, point.z]) else { return CmdResult::NeedPoint; };
|
||||||
let delta = cadkernel::geom2d::Vec2::new(local[0] - location[0], local[1] - location[1]);
|
let delta = cadkernel::geom2d::Vec2::new(local[0] - location[0], local[1] - location[1]);
|
||||||
if delta.length_squared() <= 1e-24 { return CmdResult::NeedPoint; }
|
if !delta.length_squared().is_finite() || delta.length_squared() <= 1e-24 { return CmdResult::NeedPoint; }
|
||||||
self.vertex_tangents.insert(index, delta.angle().rem_euclid(TAU));
|
self.vertex_tangents.insert(index, delta.angle().rem_euclid(TAU));
|
||||||
self.mode = Mode::PolyVertex(index);
|
self.mode = Mode::PolyVertex(index);
|
||||||
return CmdResult::NeedPoint;
|
return CmdResult::NeedPoint;
|
||||||
@@ -1144,6 +1144,8 @@ fn fit_entity(entity: &EntityType, overrides: &[(usize, f64)]) -> Option<EntityT
|
|||||||
if vertex.start_width == 0.0 { vertex.start_width = polyline.start_width; }
|
if vertex.start_width == 0.0 { vertex.start_width = polyline.start_width; }
|
||||||
if vertex.end_width == 0.0 { vertex.end_width = polyline.end_width; }
|
if vertex.end_width == 0.0 { vertex.end_width = polyline.end_width; }
|
||||||
}
|
}
|
||||||
|
if originals.iter().any(|vertex| !vertex.start_width.is_finite() || !vertex.end_width.is_finite()
|
||||||
|
|| vertex.start_width < 0.0 || vertex.end_width < 0.0) { return None; }
|
||||||
for &(index, angle) in overrides {
|
for &(index, angle) in overrides {
|
||||||
let vertex = originals.get_mut(index)?;
|
let vertex = originals.get_mut(index)?;
|
||||||
if !angle.is_finite() { return None; }
|
if !angle.is_finite() { return None; }
|
||||||
|
|||||||
Reference in new issue
Block a user