约束系统详解

第05章 约束系统详解

5.1 约束系统概述

5.1.1 什么是约束

约束(Constraint)是参数化CAD的核心概念。约束定义了几何实体之间的关系或限制,使得修改一处几何时,其他相关几何能够自动调整以保持这些关系。

约束的作用

  • 定义几何关系(如平行、垂直、相切)
  • 定义数值参数(如长度、角度、半径)
  • 固定位置或方向
  • 表达设计意图

5.1.2 自由度 (DOF)

自由度是理解约束系统的关键概念。

基本自由度

  • 2D点: 2个自由度 (u, v坐标)
  • 3D点: 3个自由度 (x, y, z坐标)
  • 2D法线: 0个自由度 (继承自工作平面)
  • 3D法线: 3个自由度 (四元数,但有1个约束)

自由度计算

总自由度 = 所有参数的自由度总和 - 约束数量

例如:
2个2D点 = 2 × 2 = 4 DOF
1个距离约束 = -1 DOF
剩余 = 4 - 1 = 3 DOF

约束状态

  • 完全约束 (DOF = 0): 几何完全确定,显示绿色
  • 欠约束 (DOF > 0): 几何还可以移动,显示白色
  • 过约束: 约束冲突或冗余,显示红色

5.1.3 约束分类

几何约束: 定义几何关系

  • 重合、平行、垂直、相切、对称、水平、垂直

尺寸约束: 定义数值

  • 距离、角度、半径/直径

特殊约束: 特定用途

  • 固定位置、等长、等半径

5.2 点约束

5.2.1 重合约束 (Coincident)

使两个点位于完全相同的位置。

快捷键: 选择两点后自动提示,或使用约束菜单

用法

  1. 选择两个点
  2. 菜单: 约束 → 重合 或点击约束工具

适用对象

  • 两个点
  • 点和线的端点
  • 点和弧的端点

约束效果

  • 移除2个自由度(2D)
  • 移除3个自由度(3D)

5.2.2 点在线上 (Point on Line)

使点位于一条线上。

快捷键: O

用法

  1. 选择一个点和一条线
  2. O 或选择菜单约束

约束效果

  • 2D: 移除1个自由度
  • 3D: 移除2个自由度

注意: 点可以在线的延长线上,不限于线段范围内

5.2.3 点在圆上 (Point on Circle)

使点位于圆或弧的圆周上。

快捷键: 通过约束菜单

用法

  1. 选择一个点和一个圆/弧
  2. 应用约束

3D特性: 实际上约束点在圆的圆柱面上(向圆法线方向延伸)

5.2.4 点在平面上 (Point in Plane)

使点位于指定平面上。

用法

  1. 选择一个3D点
  2. 选择一个工作平面
  3. 应用约束

约束效果: 移除1个自由度

5.2.5 点到面距离 (Point Face Distance)

设置点到平面的距离。

用法

  1. 选择一个点和一个平面
  2. 设置距离值

特性

  • 正值: 点在平面法线方向
  • 负值: 点在反方向
  • 零值: 等同于点在平面上

5.3 线约束

5.3.1 水平约束 (Horizontal)

使线段水平(平行于工作平面的U轴)。

快捷键: H

用法

  1. 选择一条线段或两个点
  2. H

适用对象

  • 单条线段
  • 两个点(使连线水平)
  • 多个点(3.2新增,使所有点水平对齐)
  • 多条线段(3.2新增)

5.3.2 垂直约束 (Vertical)

使线段垂直(平行于工作平面的V轴)。

快捷键: V

用法: 同水平约束

5.3.3 平行约束 (Parallel)

使两条线平行。

快捷键: /

用法

  1. 选择两条线
  2. / 或菜单选择

约束效果

  • 2D: 移除1个自由度
  • 3D: 移除2个自由度

5.3.4 垂直于约束 (Perpendicular)

使两条线垂直(成90°角)。

快捷键: ]

用法: 同平行约束

特性: 等同于角度约束设为90°

5.3.5 中点约束 (Midpoint)

使点位于线段的中点。

快捷键: M

用法

  1. 选择一个点和一条线段
  2. M

约束效果: 移除2个自由度(点的位置完全由线段决定)

5.4 距离和尺寸约束

5.4.1 点到点距离 (Point-Point Distance)

设置两点之间的距离。

快捷键: D

用法

  1. 选择两个点
  2. D
  3. 输入距离值

特性

  • 无符号距离,值必须为正
  • 可以在工作平面内测量(投影距离)

5.4.2 点到线距离 (Point-Line Distance)

设置点到线的垂直距离。

快捷键: D (自动识别)

用法

  1. 选择一个点和一条线
  2. D
  3. 输入距离值

2D特性

  • 有符号距离
  • 正值: 点在线的上方
  • 负值: 点在线的下方

3D特性

  • 无符号距离,值必须为正

5.4.3 投影距离 (Projected Distance)

沿指定方向测量距离。

用法

  1. 选择两个点和一条线(定义方向)
  2. 应用投影距离约束
  3. 设置值

特性: 有符号距离,测量沿线方向的分量

5.4.4 直径/半径约束 (Diameter)

设置圆或弧的直径。

快捷键: D (选择圆/弧时)

用法

  1. 选择一个圆或弧
  2. D
  3. 输入直径值

半径模式

  • 在配置中启用"使用半径代替直径"
  • 或在属性浏览器中切换
  • 弧默认使用半径(3.2新增)

5.5 角度约束

5.5.1 角度约束 (Angle)

设置两条线之间的夹角。

快捷键: N

用法

  1. 选择两条线
  2. N
  3. 输入角度值(度数)

约束方程

(A·B)/(|A||B|) = cos(θ)

other参数

  • false: 使用角度θ
  • true: 使用补角(180°-θ)

注意: 角度有方向性,±θ可能产生相同结果

5.5.2 等角约束 (Equal Angle)

使两对线的夹角相等。

快捷键: N (3.2版本,选择4条线时)

用法

  1. 选择四条线(两对)
  2. N

other参数

  • false: θ1 = θ2
  • true: θ1 = 180° - θ2(补角相等)

5.5.3 方向相同约束 (Same Orientation)

使两个法线具有相同的方向。

用法

  1. 选择两个法线
  2. 应用约束

约束效果: 移除3个自由度

5.6 对称约束

5.6.1 关于平面对称 (Symmetric)

使两点关于一个平面对称。

快捷键: S

用法

  1. 选择两个点
  2. 选择对称平面
  3. S

对称条件

  • 两点在平面两侧
  • 到平面距离相等
  • 连线垂直于平面

5.6.2 水平对称 (Symmetric Horizontal)

使两点关于工作平面的垂直轴对称。

快捷键: S (在2D中,自动识别)

用法

  1. 选择两个点
  2. 应用约束

5.6.3 垂直对称 (Symmetric Vertical)

使两点关于工作平面的水平轴对称。

5.6.4 关于线对称 (Symmetric Line)

使两点关于一条线对称。

用法

  1. 选择两个点和一条线
  2. 应用对称约束

5.7 等式约束

5.7.1 等长约束 (Equal Length)

使多条线段长度相等。

快捷键: Q

用法

  1. 选择两条或更多线段
  2. Q

3.2新功能

  • 支持三条或更多线段
  • 快捷键从 E 改为 Q

5.7.2 等半径约束 (Equal Radius)

使多个圆或弧半径相等。

快捷键: E

用法

  1. 选择两个或更多圆/弧
  2. E

5.7.3 长度比约束 (Length Ratio)

设置两条线长度的比值。

用法

  1. 选择两条线
  2. 应用长度比约束
  3. 设置比值

公式: length(A) / length(B) = 比值

5.7.4 长度差约束 (Length Difference)

设置两条线长度的差。

快捷键: J

用法

  1. 选择两条线
  2. J
  3. 设置差值

公式: length(A) - length(B) = 差值

5.7.5 弧长相关约束 (3.1新增)

弧-弧长度比: 两个弧的弧长比
弧-线长度比: 弧长与线长的比
弧-弧长度差: 两个弧的弧长差
弧-线长度差: 弧长与线长的差

5.8 相切约束

5.8.1 弧-线相切 (Arc-Line Tangent)

使弧与线在端点处相切。

快捷键: [

用法

  1. 选择一个弧和一条线
  2. [

other参数

  • false: 在弧的起点相切
  • true: 在弧的终点相切

注意: 3.2版本允许不在端点的相切

5.8.2 曲线-曲线相切 (Curve-Curve Tangent)

使两条曲线(弧或贝塞尔曲线)相切。

用法

  1. 选择两条曲线
  2. 应用相切约束

参数

  • other: 指定第一条曲线的相切端
  • other2: 指定第二条曲线的相切端

5.8.3 贝塞尔-线相切 (Cubic-Line Tangent)

使贝塞尔曲线与线相切。

5.9 特殊约束

5.9.1 固定约束 (Where Dragged)

将点锁定在当前位置。

用法

  1. 选择一个点
  2. 应用固定约束

约束效果

  • 2D: 移除2个自由度
  • 3D: 移除3个自由度

警告: 可能导致过约束

5.9.2 点到点等距约束 (Equal Point-Line Distance)

使点A到线的距离等于线段B的长度。

用法

  1. 选择一个点、一条参考线、一条线段
  2. 应用约束

5.9.3 平行面约束 (3.2新增)

使两个面平行。

用法

  1. 选择两个面
  2. 应用平行约束

5.9.4 垂直面约束 (3.2新增)

使两个面垂直。

5.10 约束管理

5.10.1 参考约束

参考约束显示测量值但不参与求解。

创建参考约束

  • Shift+D: 创建参考距离
  • Shift+N: 创建参考角度
  • 或: 选择约束后在属性浏览器中设为参考

用途

  • 显示计算结果
  • 检查几何属性
  • 避免过约束

5.10.2 约束显示控制

显示/隐藏约束

  • 工具栏按钮切换
  • 属性浏览器中单独控制

显示模式(3.2新增)

  • 显示所有约束
  • 仅显示尺寸
  • 隐藏所有约束

5.10.3 约束编辑

修改约束值

  1. 双击约束标签
  2. 输入新值
  3. 按回车确认

表达式支持

  • 数学运算: 50*2, 100/3
  • 三角函数: sin(45), cos(60)
  • 常量: pi
  • 数字分组: 1_000 (表示1000)

5.10.4 约束诊断

自由度显示

  • 菜单: 分析 → 显示自由度
  • 高亮显示欠约束的点

约束问题检测

  • 红色标记冲突约束
  • 属性浏览器显示冗余约束

冗余约束设置

  • 可以允许冗余约束(降低求解稳定性)
  • 配置超时以避免UI冻结

5.11 约束求解

5.11.1 求解过程

SolveSpace使用基于牛顿-拉夫森方法的非线性约束求解器:

1. 收集所有参数(点坐标、尺寸值等)
2. 构建约束方程组
3. 计算雅可比矩阵
4. 迭代求解直到收敛或失败

5.11.2 求解结果

OKAY: 所有约束满足
INCONSISTENT: 约束冲突,无解
DIDNT_CONVERGE: 求解器未能收敛
TOO_MANY_UNKNOWNS: 参数过多
REDUNDANT_OKAY: 有冗余约束但求解成功

5.11.3 拖动行为

拖动实体时:

  1. 计算拖动位置
  2. 设置为"dragged"参数
  3. 求解器优先保持dragged参数
  4. 调整其他参数满足约束

标记拖动: 可以手动标记某些参数为"dragged"以影响求解行为

5.12 最佳实践

5.12.1 约束策略

  1. 先固定原点: 约束一个点到原点
  2. 由内向外: 从核心几何开始约束
  3. 先几何后尺寸: 先建立几何关系,再添加尺寸
  4. 避免过约束: 使用参考约束显示不需要参与求解的尺寸

5.12.2 常见问题解决

欠约束

  • 检查自由度显示
  • 添加缺失的约束
  • 考虑固定约束

过约束

  • 识别冲突约束
  • 删除或改为参考
  • 检查隐式约束

求解失败

  • 调整初始几何
  • 简化约束
  • 分步添加约束

5.13 总结

本章详细介绍了SolveSpace的约束系统:

  1. 基础概念: 约束、自由度、约束分类
  2. 点约束: 重合、在线上、在圆上、在平面上
  3. 线约束: 水平、垂直、平行、垂直于、中点
  4. 尺寸约束: 距离、角度、直径
  5. 对称约束: 平面对称、轴对称、线对称
  6. 等式约束: 等长、等半径、比值、差值
  7. 相切约束: 各种曲线相切
  8. 约束管理: 参考约束、显示控制、诊断
  9. 求解原理: 非线性求解过程

掌握约束系统是进行参数化设计的关键。下一章将介绍三维建模基础。


导航


posted @ 2026-01-10 13:15  我才是银古  阅读(24)  评论(0)    收藏  举报