forked from 1b-agent/opencadstudio-upstream
feat(dimension): styled placement previews for creation commands
Show the styled dimension and its value while placing a dimension, using the same builder the command commits with. Each creation command (DIMLINEAR, DIMALIGNED, DIMANGULAR, DIMRADIUS, DIMDIAMETER, DIMARC, DIMJOGGED, DIMORDINATE, DIMCONTINUE, DIMBASELINE, QDIM) reports the dimensions it would commit at the current stage through `CadCommand::dimension_preview`. The application applies the current creation style, or the base dimension's style for DIMCONTINUEMODE=1, and the same viewport measurement scale as commit, then tessellates the transient entity through the normal dimension renderer. While the second definition point is being acquired, a hovered model snap supplies a provisional viewport scale; once both points are fixed, hovering another viewport does not change the value. Angular dimensions never receive length compensation. Degenerate geometry, an invalid scale, or conflicting viewports fall back to the plain rubber-band preview so no misleading value is shown.
This commit is contained in:
1 parent
ca0ee37d26
commit
acbbb23297
17 files changed
+724
-138
No files matched your search
@@ -7,8 +7,8 @@ use cadkernel::geom2d::{
|
||||
};
|
||||
|
||||
use crate::command::{
|
||||
CadCommand, CmdOption, CmdResult, DimensionAssociationInput,
|
||||
DimensionAssociationSource, InputKind, WorkingPlane,
|
||||
CadCommand, CmdOption, CmdResult, DimensionAssociationInput, DimensionAssociationSource,
|
||||
DimensionPreview, InputKind, WorkingPlane,
|
||||
};
|
||||
use crate::modules::{IconKind, ModuleEvent, ToolDef};
|
||||
use crate::scene::model::wire_model::WireModel;
|
||||
@@ -807,6 +807,32 @@ impl CadCommand for AngularDimensionCommand {
|
||||
};
|
||||
Some(preview_wire(points))
|
||||
}
|
||||
|
||||
fn dimension_preview(&self, cursor: DVec3) -> Option<Vec<DimensionPreview>> {
|
||||
if self.selecting_object {
|
||||
return None;
|
||||
}
|
||||
let result = match self.step {
|
||||
Step::ArcPoint3 {
|
||||
vertex,
|
||||
first,
|
||||
second,
|
||||
} => self.finish_three_point(vertex, first, second, cursor),
|
||||
Step::ArcPoint2 {
|
||||
first_start,
|
||||
first_end,
|
||||
second_start,
|
||||
second_end,
|
||||
} => self.finish_two_line(first_start, first_end, second_start, second_end, cursor),
|
||||
_ => return None,
|
||||
};
|
||||
match result {
|
||||
CmdResult::CommitDimension { entity, .. } => {
|
||||
Some(vec![DimensionPreview::current_style(entity)])
|
||||
}
|
||||
_ => Some(Vec::new()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn picked_curve(entity: &EntityType, click: DVec3) -> Option<PickedCurve> {
|
||||
|
||||
Reference in new issue
Block a user