You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AutoCAD LISP开发求助:注释比例变更时自动调整注释性标记位置避免重叠及反应器代码异常排查

AutoCAD LISP开发求助:注释比例变更时自动调整注释性标记位置避免重叠及反应器代码异常排查

各位AutoCAD LISP大佬好,我最近在给团队绘图员做一个绘图模板,遇到两个棘手的问题,想请大家帮忙看看!

一、核心需求:解决注释性标记比例变更后重叠的问题

先给大家说下背景:
我把团队常用的注释性标记(比如剖切符号、引线、尺寸、标题栏这些)整齐地摆成了类似表格的布局,这些标记都是注释性的,本来不用给每个比例单独做一套,但现在遇到了麻烦:

这些标记虽然会跟着注释比例自动缩放,但都是绕自身基点缩放的。比例调大之后,标记就会互相重叠到完全没法用。

我想实现的效果是:让整个标记布局像一个注释性块那样整体缩放,保持标记之间的相对距离不变,但又不想把整个表格做成块——那样绘图员每次拿标记都得炸块或者进块里复制,太影响效率了。

我自己琢磨了一套逻辑,希望LISP能在每次模型空间的注释比例变更时自动执行这些步骤:

  • 获取表格边框的中心点:我打算把边框做成注释性块,这样它能在每个比例下都刚好框住缩放后的标记,就用边框块的基点作为中心(就像截图里选中边框后显示的那个点)
  • 筛选出边框内部的所有标记(也就是需要移动的对象)
  • 计算每个标记的基点到边框中心点的距离和方向
  • 根据比例变化的倍数,把每个标记沿着原来的方向移动,让新的距离等于原距离乘以比例因子(比如从1:10改成1:1000,距离就乘以100)
  • 全程不需要用户手动操作,自动识别比例变化并执行移动

二、当前遇到的代码问题:反应器触发异常

我刚接触AutoLISP的反应器,先写了一段测试代码,想验证能不能在注释比例变化时触发操作,结果出问题了:

(vlr-sysvar-reactor
 "CANNOSCALEVALUE"
 '((:vlr-sysvarchanged . MoveMarkersOnScaleChange))
)

(defun MoveMarkersOnScaleChange (calling-reactor :vlr-sysVarChanged)
(princ "Hello")
)

我本来想让它每次注释比例(CANNOSCALEVALUE变量)变化时在命令行打印“Hello”,结果加载后不管我做什么(画多段线、移动对象啥的)它都打印“Hello”,有时候还连着刷好几遍。

我查了文档,说非对象反应器的回调函数要接受两个参数:第一个是调用的反应器对象,第二个是AutoCAD传的参数列表,但我实在搞不懂这俩参数具体怎么用,也不知道是不是参数写错导致的触发异常,有没有大佬能帮我排查下?

另外,我完全是编程新手,要是能把讲得尽量直白详细,真的感激不尽!

(附问题示意图:橙色边框内是各种注释性标记,选中边框后可见其基点,计划以此作为整体缩放的中心)

备注:内容来源于stack exchange,提问作者Błażej Kolbuszewski

火山引擎 最新活动