forked from 1b-agent/opencadstudio-upstream
DCRADIUS: reference radial dimensional constraint with a dynamic radial dimension
Select arc or circle / Dimension text / dimension line location / value or name prompts with a radN parameter, invalid-selection, miss, duplicate and invalid-expression messages, negative values as magnitudes, a dynamic radial dimension on the constraints layer drawn as the reference does (mid-radius text on the center-to-rim line, no hook, no center mark, one text grip), the stored text position following the radius, center-anchored resizing, the Properties title and Constraint section, DIMCONSTRAINT's Radius default, the small-button Dimensional ribbon grid and tooltip descriptions. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
64c020293a
commit
aab42e2aa9
11 files changed
+516
-87
No files matched your search
@@ -62,32 +62,40 @@ impl RadiusDimensionCommand {
|
||||
source: crate::scene::dimension_assoc::RadialSourceGeometry,
|
||||
world: DVec3,
|
||||
) -> EntityType {
|
||||
let plane = WorkingPlane::new(
|
||||
DVec3::from_array(source.plane.origin),
|
||||
DVec3::from_array(source.plane.x_axis),
|
||||
DVec3::from_array(source.plane.y_axis),
|
||||
);
|
||||
let center = plane.to_local(dvec(source.center_world()));
|
||||
let chord = plane.to_local(dvec(source.chord_at(world.to_array())));
|
||||
let point = plane.to_local(world);
|
||||
let mut dim = DimensionRadius::new(v3(center), v3(chord));
|
||||
dim.base.definition_point = v3(chord);
|
||||
dim.base.text_middle_point = v3(point);
|
||||
dim.base.insertion_point = v3(point);
|
||||
dim.base.text_user_positioned = true;
|
||||
dim.leader_length = chord.distance(point);
|
||||
dim.base.actual_measurement = dim.measurement();
|
||||
crate::entities::dimension::set_dimension_text_override(
|
||||
&mut dim.base,
|
||||
self.text_override.clone(),
|
||||
);
|
||||
if let Some(angle) = self.text_angle {
|
||||
dim.base.text_rotation = angle;
|
||||
}
|
||||
plane.place_entity(EntityType::Dimension(Dimension::Radius(dim)))
|
||||
radial_dimension_entity(source, world, self.text_override.clone(), self.text_angle)
|
||||
}
|
||||
}
|
||||
|
||||
/// A radius dimension of `source` with its text at `world`: the dimension
|
||||
/// line runs from the center through the text (DIMUPT).
|
||||
pub(crate) fn radial_dimension_entity(
|
||||
source: crate::scene::dimension_assoc::RadialSourceGeometry,
|
||||
world: DVec3,
|
||||
text_override: Option<String>,
|
||||
text_angle: Option<f64>,
|
||||
) -> EntityType {
|
||||
let plane = WorkingPlane::new(
|
||||
DVec3::from_array(source.plane.origin),
|
||||
DVec3::from_array(source.plane.x_axis),
|
||||
DVec3::from_array(source.plane.y_axis),
|
||||
);
|
||||
let center = plane.to_local(dvec(source.center_world()));
|
||||
let chord = plane.to_local(dvec(source.chord_at(world.to_array())));
|
||||
let point = plane.to_local(world);
|
||||
let mut dim = DimensionRadius::new(v3(center), v3(chord));
|
||||
dim.base.definition_point = v3(chord);
|
||||
dim.base.text_middle_point = v3(point);
|
||||
dim.base.insertion_point = v3(point);
|
||||
dim.base.text_user_positioned = true;
|
||||
dim.leader_length = chord.distance(point);
|
||||
dim.base.actual_measurement = dim.measurement();
|
||||
crate::entities::dimension::set_dimension_text_override(&mut dim.base, text_override);
|
||||
if let Some(angle) = text_angle {
|
||||
dim.base.text_rotation = angle;
|
||||
}
|
||||
plane.place_entity(EntityType::Dimension(Dimension::Radius(dim)))
|
||||
}
|
||||
|
||||
impl CadCommand for RadiusDimensionCommand {
|
||||
fn set_working_plane(&mut self, _plane: WorkingPlane) {
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user