autolisp超越窗口坐标绘图
最近遇到一个怪现象,试了好多方法都解决不了:坐标超越窗口,无论是用command、vl-cmdf还是用entmake,均画线失败。不提示错误,但也不显示;
但是如果开始窗口缩放合适大小,就能正确输出;
另外如果窗口太小,取点又漂移;
已经将捕捉关闭了
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setvar "attdia" 0)
(setvar "attreq" 0); 0=使用默认值,不提示输入属性
(defun *error* (msg)
(setvar "cmdecho" 1)
(setvar "attdia" 1)
(setvar "attreq" 1)
(setvar "osmode" 16383)
(if workbook (vlax-invoke-method workbook 'Close 0));;; 清理对象
(if excel-app (vlax-invoke-method excel-app 'Quit))
(mapcar 'vlax-release-object (vl-remove 'nil (list range borders worksheet worksheet0 worksheets workbook excel-app doc)));; 释放对象
(if (not (or (vl-string-search "QUIT" (strcase msg)) (vl-string-search "EXIT" (strcase msg)))) (princ (strcat "\n** error: " msg " **")))
)
只有这一个Autolisp有问题,其他Autolisp超出窗口的都能绘制;
请各位大神支支招
(defun *error* (msg / )
;; 恢复系统变量
(setvar "CMDECHO" 1)
(setvar "ATTDIA" 1)
(setvar "ATTREQ" 1)
(setvar "OSMODE" 16383)
;; 添加这些
(if old-viewmode (setvar "VIEWMODE" old-viewmode))
(if old-worldview (setvar "WORLDVIEW" old-worldview))
;; Excel清理
(if workbook (vlax-invoke-method workbook 'Close 0))
(if excel-app (vlax-invoke-method excel-app 'Quit))
(mapcar 'vlax-release-object
(vl-remove 'nil (list range borders worksheet worksheet0
worksheets workbook excel-app doc)))
;; 强制刷新
(command "_.REGEN")
(if (not (or (vl-string-search "QUIT" (strcase msg))
(vl-string-search "EXIT" (strcase msg))))
(princ (strcat "\n** error: " msg " **")))
(princ)
)
(defun c:your-command (/ old-viewmode old-worldview ...)
;; 保存原始状态
(setq old-viewmode (getvar "VIEWMODE"))
(setq old-worldview (getvar "WORLDVIEW"))
;; 设置环境
(setvar "CMDECHO" 0)
(setvar "OSMODE" 0)
(setvar "VIEWMODE" 0)
(setvar "WORLDVIEW" 1)
(setvar "LIMCHECK" 0)
;; 你的代码...
(*error* ""); 正常退出时也调用清理
)
没遇到过。一直都正常,可以在屏幕外画图 qifeifei 发表于 2025-12-1 18:43
问题依旧... 初步解决办法是:AutoCAD换成ZWCAD
页:
[1]