zgs378530220 发表于 2025-12-1 18:14:01

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超出窗口的都能绘制;
请各位大神支支招


qifeifei 发表于 2025-12-1 18:43:57

(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* ""); 正常退出时也调用清理
)

VBALISPER 发表于 2025-12-2 08:35:45

没遇到过。一直都正常,可以在屏幕外画图

zgs378530220 发表于 2025-12-2 08:45:55

qifeifei 发表于 2025-12-1 18:43


问题依旧...

zgs378530220 发表于 2025-12-2 16:08:18

初步解决办法是:AutoCAD换成ZWCAD
页: [1]
查看完整版本: autolisp超越窗口坐标绘图