forked from 1b-agent/opencadstudio-upstream
Aligned constraint: axis lines, zero collapse, Properties form/reference/description, screen-sized text
Point & line and 2Lines take a text baseline or an ellipse axis as the line; a zero value folds the points onto the first one; 2Lines turns the second line about its start. The Properties Constraint section edits Constraint Form (Dynamic on the *ADSK_CONSTRAINTS layer, Annotational on the current layer), Reference (driven constraint in parentheses whose parameter follows the measurement) and Description (stored with the parameter and the native variable). Dynamic dimensions keep a 12 px text and 8 px arrows at any zoom, drop trailing zeros and show formulas as `fx: len=d1*2`; the hidden constraints layer stays out of the layer lists. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
6969c19746
commit
5fab97a7d0
12 files changed
+476
-45
No files matched your search
@@ -1217,6 +1217,7 @@ impl Allocator<'_> {
|
||||
name: &str,
|
||||
formula: &str,
|
||||
resolved: f64,
|
||||
description: &str,
|
||||
) -> Handle {
|
||||
if let Some(&handle) = self.variables.get(name) {
|
||||
if let Some(ObjectType::Associative(object)) = self.document.objects.get_mut(&handle) {
|
||||
@@ -1244,7 +1245,7 @@ impl Allocator<'_> {
|
||||
name: name.to_string(),
|
||||
expression: formula.to_string(),
|
||||
evaluator: "AcDbCalc:1.0".to_string(),
|
||||
description: String::new(),
|
||||
description: description.to_string(),
|
||||
value: Self::numeric_eval(resolved),
|
||||
has_cached_value: false,
|
||||
cached_value: String::new(),
|
||||
@@ -1883,6 +1884,7 @@ fn driving_value(
|
||||
variable.expression.clone()
|
||||
};
|
||||
if parameters.set(&variable.name, &source).is_ok() {
|
||||
parameters.set_description(&variable.name, &variable.description);
|
||||
Some(DrivingValue::Named(variable.name.clone()))
|
||||
} else {
|
||||
literal
|
||||
@@ -2610,6 +2612,7 @@ fn materialize_scope(
|
||||
variable.action.action_index = index as i32 + 1;
|
||||
if let Some(parameter) = parameters.get(&variable.name) {
|
||||
variable.expression = parameter.source.clone();
|
||||
variable.description = parameters.description(¶meter.name).to_string();
|
||||
if let Ok(resolved) = parameters.resolve(¶meter.name) {
|
||||
variable.value = Allocator::numeric_eval(resolved);
|
||||
}
|
||||
@@ -2621,7 +2624,13 @@ fn materialize_scope(
|
||||
if materialize_all_parameters {
|
||||
for parameter in parameters.iter() {
|
||||
let resolved = parameters.resolve(¶meter.name).unwrap_or(0.0);
|
||||
allocator.variable(network_handle, ¶meter.name, ¶meter.source, resolved);
|
||||
allocator.variable(
|
||||
network_handle,
|
||||
¶meter.name,
|
||||
¶meter.source,
|
||||
resolved,
|
||||
parameters.description(¶meter.name),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2666,7 +2675,13 @@ fn materialize_scope(
|
||||
DrivingValue::Literal(_) => (format!("d{node_id}"), resolved.to_string()),
|
||||
};
|
||||
node_names.insert(node_id, name.clone());
|
||||
let variable_handle = allocator.variable(network_handle, &name, &formula, resolved);
|
||||
let variable_handle = allocator.variable(
|
||||
network_handle,
|
||||
&name,
|
||||
&formula,
|
||||
resolved,
|
||||
parameters.description(&name),
|
||||
);
|
||||
let dependency_id = group_dependencies.len() as i32 + 1;
|
||||
let dep_handle =
|
||||
allocator.value_dependency(group_handle?, variable_handle, resolved, dependency_id);
|
||||
|
||||
Reference in new issue
Block a user