明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 807|回复: 6

[图形系统] cad.net 约束求解器第二篇-雅可比矩阵GPU加速

[复制链接]
发表于 2025-6-13 03:44:53 | 显示全部楼层 |阅读模式
本帖最后由 你有种再说一遍 于 2025-6-14 19:41 编辑

根据前两篇的组合,大意就是动态块+渲染重定义,
"要是可以用户决定自定义图元,而不是二开控制该多好"
然后我猛然发现,这样不就是基于约束实现基础图元功能封装?
这不就是revit?

"要是族功能是可以插入代码片段,实现单元级别的优化"
这不就是UE5/blender?

让我们研究研究revit功能先
https://www.cnblogs.com/JJBox/p/18921494

利用GPU并行求解约束,机器人行业领先建筑好多QAQ
约束求解器两大核心:有向无环图+雅可比矩阵
然后发现revit没有用...
雅可比矩阵怎么看怎么和反向传播那么像,然后原来是同一套数学方法的不同应用.
那么Revit为什么约束求解器没有用GPU并行呢?
答案是显卡的双精度被砍了,GPU数学库虽然支持双精度,但是性能只有单精度的1/32~1/2...所以它们直接用CPU算了.
https://www.cnblogs.com/JJBox/p/18927604


我似乎小看约束求解器了,Z3求解器直接60w行代码,其他也有过百万行的,再见

约束求解器: 数独,代码条件检查.
蒙特卡洛树: 围棋
反向传播交叉熵: LLM
回复

使用道具 举报

发表于 2025-6-13 10:17:17 | 显示全部楼层
动态块在族面前,就是不入流的。桌子收购Revit还是晚了,早点的话,可以直接给CAD设计族而不是动态块。
回复 支持 2 反对 0

使用道具 举报

发表于 2025-6-13 16:12:46 | 显示全部楼层
那就是: AutoCAD 是不是能否加入Revit族这样的 “全参数化的对象”?

目前的动态块也仅限于2D,且与后面引入的参数,约束等实际上是脱节的,并不能与之共同工作。

对于 revit ,现在国内这个行业现状,也是一言难尽...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-13 16:46:57 | 显示全部楼层
e2002 发表于 2025-6-13 16:12
那就是: AutoCAD 是不是能否加入Revit族这样的 “全参数化的对象”?

目前的动态块也仅限于2D,且与后 ...

虽然可以,不过二开实现有点辛苦,
引入大型约束求解器,无法优化底层,渲染层要重写,
这样不如重新做一个软件,我觉得国产可以发力...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-15 02:36:01 | 显示全部楼层
AutoCAD 的动态块(Dynamic Blocks)和自定义图元(Custom Entities)确实反映了 CAD 软件中两种不同的参数化设计思路,
而你的观察直指核心矛盾:如何在灵活性和易用性之间找到平衡。

以下是几个关键点的展开分析:

1. 动态块的本质:简易约束求解器
优点:动态块通过预定义的参数(拉伸、旋转、可见性等)和动作(Action)让用户无需编程即可创建可调整的几何体,本质上是一个轻量级的、领域特定的约束求解器。

局限:其约束能力是预设的(如线性对齐、角度限制),无法处理复杂逻辑(如条件判断、非线性关系),且依赖块编辑器中的固定规则,扩展性差。

2. 自定义图元的困境:灵活性 vs 复杂度
程序员依赖:自定义图元(通过 ObjectARX/.NET API)允许完全控制几何和行为,但需要手动实现所有交互逻辑(绘图、夹点编辑、Undo/Redo等),开发成本高且易出错。

用户门槛:普通用户无法直接创建或修改自定义图元,必须依赖二次开发,这与 CAD 的“设计民主化”理念背道而驰。

3. 理想方案:用户可编程的约束系统
你的洞察完全正确——基础图元 + 通用约束求解器是更优解。
这类似于以下技术方向:

参数化建模内核:如 Siemens Parasolid、D-Cubed 的约束求解器,允许定义几何间的数学/逻辑关系(如距离、平行、相切)。

可视化编程工具:类似 Grasshopper(Rhino)或 Dynamo(Revit),用户通过节点图定义约束逻辑,无需写代码。

开源约束库:例如 SolveSpace 的轻量级求解器,可集成到自定义应用中。

4. 为什么 AutoCAD 尚未实现?
历史包袱:
动态块是早期针对建筑/机械需求的妥协方案,而自定义图元面向专业开发者。

性能考量:
通用约束求解需要实时计算,可能影响大规模图纸的交互体验。

商业策略:
Autodesk 更倾向于将高级功能放在 Fusion 360 或 Inventor 中。

5. 可能的实践方向
如果希望实现“用户可自定义的智能图元”,可以考虑:
开发中间层工具:
例如一个可视化编辑器,将用户定义的约束转换为自定义图元代码(类似 Blockly 生成 C++)。

转向其他平台:
如 FreeCAD(支持 Python 脚本化约束)、Blender(几何节点+属性驱动)。

你提出的“基础图元+约束求解器”正是现代参数化 CAD 的核心思想。AutoCAD 的动态块和自定义图元分别代表了这一思想的两种不完美实现。未来若 Autodesk 开放更友好的约束 API 或推出可视化编程工具,可能会填补这一空白。在此之前,混合使用现有工具或探索其他平台可能是更高效的解决方案。



将参数化族(节点)与代码片段嵌入结合的设计思路,
确实与 Unreal Engine 5(UE5)的蓝图系统
或 Blender 的几何节点(Geometry Nodes)有高度相似性。
这种融合本质上是一种可视化编程+参数化设计的混合模式,
能够兼顾灵活性和用户友好性。以下是具体分析:

1. 与 UE5 蓝图系统的类比

节点化逻辑:UE5 的蓝图系统允许用户通过连接节点(如变量、函数、事件)来定义游戏逻辑,无需编写完整代码。类似地,若 AutoCAD 的族(节点)支持嵌入代码片段(如 Python 或 LISP),用户可以通过组合预定义的参数化节点和自定义脚本实现复杂行为。

动态响应:蓝图中的变量和事件驱动机制与参数化设计的“约束-参数”联动机制高度一致。例如,修改一个尺寸参数可自动触发关联几何体的更新,类似于蓝图中的属性绑定。

2. 与 Blender 几何节点的对比

程序化建模:Blender 的几何节点通过节点图定义几何体的生成规则(如分布、变形),用户可通过调整参数实时修改模型。若 AutoCAD 的族节点支持类似功能,用户能通过可视化界面定义参数化构件(如门窗、钢结构节点),而无需手动编程。

代码扩展性:Blender 允许在节点中嵌入 Python 脚本以扩展功能。若 AutoCAD 的族系统开放类似接口,用户可结合标准节点和脚本实现非标设计(如复杂曲线或条件逻辑)。

3. AutoCAD 的潜在改进方向

现有基础:AutoCAD 已具备参数化约束(几何/尺寸约束)和动态块功能,但缺乏节点化编辑和脚本嵌入的整合。例如,动态块仅支持有限的动作(拉伸、旋转),无法实现条件判断或循环。

可能的实现路径:

可视化节点编辑器:类似先闻工具箱的脚本系统(通过 XML 定义输入输出参数),可升级为交互式节点图界面,支持拖拽逻辑块(如循环、条件分支)并关联参数。

脚本片段嵌入:在族(节点)属性中开放代码输入框,
允许用户编写 LISP 或 Python 脚本处理复杂逻辑(如动态生成螺栓孔阵列)。

实时反馈机制:像 UE5 一样,节点修改后自动触发视图更新,确保设计意图即时可视化。

4. 行业应用场景

建筑节点库:建筑师可通过节点化族快速生成参数化幕墙单元,嵌入脚本控制玻璃分格或日照响应逻辑。

机械装配体:工程师定义带代码逻辑的族(如齿轮传动关系),修改模数后自动调整啮合部件的尺寸和位置。

5. 挑战与限制

性能问题:实时约束求解和脚本执行可能对大规模装配体造成计算负担(如钢结构节点库的联动更新)。

学习成本:平衡可视化节点与代码的复杂度,避免普通用户被吓退(参考 Blender 几何节点的学习曲线)。

总结
将 族(节点)+代码片段 引入 AutoCAD,本质上是在其参数化设计框架上叠加一层可视化程序化建模能力。这种设计既保留了参数化的易用性,又通过代码嵌入弥补了动态块的局限性,与 UE5 和 Blender 的核心思想不谋而合。未来若 Autodesk 开放此类功能,或将显著提升 AutoCAD 在复杂设计场景中的竞争力。


在参数化设计系统中加入代码片段的核心目的是为了填补可视化工具的局限性,
同时平衡灵活性与用户友好性.

具体来说,它的作用可以从以下几个维度展开:
1. 解决动态块/节点系统的“表达力不足”
动态块的短板:
AutoCAD 的动态块或类似参数化工具(如 Revit 的族)依赖预设规则(如拉伸、阵列),但无法处理:
条件逻辑(例如:“如果窗宽>1.5m,则自动增加横梃”)。
非线性关系(例如:根据曲线参数驱动复杂曲面)。
外部数据交互(例如:从 Excel 读取尺寸标准并自动更新模型)。

代码的补充:
嵌入脚本(如 LISP/Python)可直接实现这些逻辑,无需等待官方更新功能。

2. 实现“用户可编程”的自动化
自定义行为:
普通用户通过代码片段扩展标准节点的能力,例如:
在机械设计中,用脚本计算齿轮的啮合参数并自动调整装配位置。
在建筑中,根据日照角度动态生成遮阳板的旋转角度。

减少重复劳动:
代码可封装常用操作(如批量修改属性),避免手动重复调整。

3. 连接其他工具与数据流
跨软件协作:
代码可以调用外部 API 或读取数据库,例如:
从 ERP 系统获取物料清单(BOM)并同步到图纸。
将模型数据导出到分析软件(如 ANSYS)进行仿真。

实时数据驱动:
通过脚本实现参数与实时数据(如传感器输入)的联动,适用于数字孪生场景。

4. 保留可视化工具的易用性

80/20 法则:
80% 的常见需求用可视化节点(如拖拽参数、约束)解决,剩余 20% 复杂逻辑用代码补充,避免完全依赖编程的高门槛。

渐进式学习:用户可以先使用预设节点,再逐步学习嵌入简单脚本,最终掌握高级定制(类似 UE5 蓝图中混合使用节点和代码)。

5. 对比同类软件的实现
Blender(几何节点+Python):
用户可通过节点控制基础建模流程,但需要 Python 脚本处理复杂算法(如分形生成)。

UE5(蓝图+C++):
游戏逻辑用蓝图节点搭建,性能关键部分用 C++ 代码实现。

Grasshopper(C#/Python 组件):
默认组件解决常规问题,自定义脚本组件实现特殊需求(如机器学习预测)。

6. AutoCAD 的潜在用例
智能符号库:
电气工程师用代码片段自动根据电流值调整断路器符号的显示状态。

自适应地形:
景观设计师通过脚本将 GIS 高程数据转换为动态更新的等高线族。

合规性检查:
嵌入代码自动检测设计是否符合规范(如防火间距),并高亮违规处。

为什么不全用代码?
效率问题:
纯代码需要用户从头编写所有逻辑(如绘图、交互、Undo/Redo),而混合模式复用现有节点的可视化交互框架。

错误风险:
代码自由度越高,越容易引入错误(如死循环、数值溢出),约束节点可提供安全边界。

总结
代码片段的加入,本质上是为参数化设计系统提供一个“逃生舱”——当可视化工具无法满足需求时,用户仍能通过编程实现目标,而无需彻底放弃原有工作流。这种设计哲学正在成为行业标准(从 CAD 到游戏引擎),也是 AutoCAD 未来可能进化的方向。
回复 支持 反对

使用道具 举报

发表于 2025-6-15 11:26:29 | 显示全部楼层
不太看好桌子改造CAD的内在动力。CAD毕竟是个基础的二维工具,而现代以及未来,都是主要面向3D的,花这么大力气弄2D,可能远不如直接上3D可视来得更加容易。毕竟新生代的学生,让他们回归到上个世代的工具方式,明显是倒退。如同用CAD后,不可能还要回到弯腰在绘图板上画图的方式,无论这个趴着画图技术再怎么提高,也是不可能回去的。
回复 支持 反对

使用道具 举报

发表于 2025-6-16 14:30:47 | 显示全部楼层
看不懂,但是觉得有道理系列。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-7-14 17:32 , Processed in 0.185206 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表