我编写一段 AutoLisp 代码,用来自动画若干直线,问题是这段代码随着实时缩放情况不一样,结果完全不一致,只有缩放到一定程度时 AutoLisp 执行结果才是预期设计的。请问这是啥原因
我试了下你的程序,确实会产生你说的问题,确实是对象捕捉惹的,下面是程序,(按照我的习惯我改了下,用阵列的试试~~)(defun C:ca() (setq cho (getvar "cmdecho") mode (getvar "osmode")) (setvar "cmdecho" 0) (setvar "osmode" 0) (ca_draw_lines 60 4 0.5) (setvar "cmdecho" cho) (setvar "osmode" mode) (princ))(defun ca_draw_lines(len sep m / ca_i ca_lim) (setq ca_i -1) (setq ca_lim (/ len sep)) (command ".mline" "S" m\t (list (* sep (- ca_i 1)) 0 0)\t (list (* sep (- ca_i 1)) len 0) "") (command ".array" "S" (list (* sep (- ca_i 1)) 0 0) "" "R" 1 (+ 1 (/ len sep)) sep))不过用array有一个很奇怪的报错:着实时缩放放大到一定程度会报错,我也不知道原因~~~~为什么为什么!!!但对缩放到最小也可以正常完成。要么报错,要么正常至于为什么会发生这种情况,坐等大神~~~~~
■网友
这个问题是由于 AutoCAD 默认的对象捕捉策略导致的。
解决方法 1:在 AutoCAD 中打开选项,切换到 “用户系统配置” 选项卡,可以看到有个“坐标数据输入的优先级”,三个选项分别为:
执行对象捕捉键盘输入键盘输入,脚本例外AutoCAD 默认的设置就是最后一个!
把这个设置改为“键盘输入”,再执行脚本,就不会有你说的问题了。
但是挨个去告诉脚本的使用者,你要去修改这个选项,是件很累的事情。
我建议的解决办法是,在执行绘图命令之前,调用(setvar "OsnapCoord" 1) 【我编写一段 AutoLisp 代码,用来自动画若干直线,问题是这段代码随着实时缩放情况不一样,结果完全不一致,只有缩放到一定程度时 AutoLisp 执行结果才是预期设计的。请问这是啥原因】 把该选项直接修改为“键盘输入”。
如果需要在脚本执行完之后恢复之前的设置,在修改前使用(setq old_oc (getvar "OsnapCoord"))把之前的设置记录在变量 old_oc 中,执行完再(setvar "OsnapCoord" old_oc)就可以了。
但实际上没这个必要,我到现在没有遇到过需要“脚本例外”的使用场景。
解决方法 2:使用 EntMake 的方式插入图形对象,不要用 Command 调用绘图命令。
更推荐这种方式,直接将图元信息插入图形,不存在捕捉的问题,执行速度也更快。;; (command "line" (list ca_x len) (list ca_x 0) "") 替换为以下(EntMake (list \u0026#39;(0\t. "LINE") (cons 8 "图层名") ;;如果图层不存在,会自动创建 (list 10 ca_x len) (list 11 ca_x 0)))
■网友
画线的涵数没怎么看懂你那个循环,在自动画线前,设置系统变量对象捕捉为空。
推荐阅读
- 不懂技术,不会编写程序的人当项目经理,管项目,管人,行吗
- 李嫣|李嫣这是怎么了?深夜更改账号签名,还发出一段伤感视频
- 作为一个打码的,有没有一段时间特不想打码,后来是咋熬过来的
- 姑苏区|姑苏区:建设大运河文化带“最最精华的一段”
- 益智贝贝玩具|哈弗大狗的首批车主,开了一段时间后,总结出这几点
- 新都桥|
- 怎样向不懂编程的人描述某一段代码的“优美”?
- 高中生|
- 编写测试用例时参照实际项目还是需求文档
- 五菱宏光|MPV界新晋之王!五菱宏光S3月销量超3万台
