乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 9|回复: 9

[编程交流] 你如何在取消符中编码

[复制链接]

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:27:58 | 显示全部楼层 |阅读模式
我试图修改现有的lisp例程,以包括一个函数,供用户(即我)取消运行该例程。当lisp运行时,似乎没有办法取消它。(对于大型dwg,可能需要很长很长的时间才能完成)我认为您不必在程序中编写退出或退出函数,但显然对于这一个,我会这么做,因为退出的唯一方法是按住CTRL+SHFT+ESC并终止ACAD进程。谢谢。
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 06:40:22 | 显示全部楼层
你的代码是在运行循环还是什么?
还有什么能让这个功能运行这么长时间?
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:45:40 | 显示全部楼层
听起来像是在处理一个大数据集。。。可能是因为代码效率低下(不确定,因为没有发布任何代码)。
 
在任何情况下,Ctrl+Shift与此无关,只有当您点击Esc时,例程才会由于内置(或本地化的)*错误*处理程序而停止。
回复

使用道具 举报

11

主题

968

帖子

919

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
99
发表于 2022-7-6 06:53:50 | 显示全部楼层
我认为OP意味着Ctrl+shift+Esc打开任务管理器,然后从中终止acad。exe进程。 
但是是的,Lisp程序里面可能出了什么问题。可能是一个永远不会结束的循环,或者代码运行效率极低/经过太多迭代。我们只能肯定地说,如果我们可以看到代码-所以等待操作返回更多信息。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 07:00:08 | 显示全部楼层
 
 
同意,这是最有可能的罪魁祸首。
 
1+
回复

使用道具 举报

2

主题

9

帖子

7

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:02:30 | 显示全部楼层
对不起,这是代码。
我将其放入宏中,以便在关闭dwg时运行。但是,如果我在一个大的dwg集(150多个)布局上运行代码,那太可怕了。当我试图用ESC取消它时,它什么都不做。所以,我必须等待一个小时,否则就终止这个过程。如果我有时间,这没什么大不了的,但如果我忘记了,我需要保存这幅画(就像我刚才做的那样),那么我就完了。我必须允许它完成才能保存我的更改。
 
 
  1. (vl-load-com)
  2. (defun c:zza (/ *error* oldCtab)
  3. (defun *error* (msg)
  4.    (and oldCtab (setvar 'ctab oldCtab))
  5.    (cond ((not msg))                                                                    ; Normal exit
  6.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  7.          ((princ (strcat "\n** Error: " msg " ** ")))                           ; Fatal error, display it
  8.    )
  9.    (princ)
  10. )
  11. (if (and (setq oldCtab (getvar 'ctab))
  12.           (setq acApp (vlax-get-acad-object))
  13.      )
  14.    (foreach tab (layoutlist)
  15.      (setvar 'ctab tab)
  16.      (vla-zoomall acApp)
  17.    )
  18. )
  19. (*error* nil)
  20. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:09:55 | 显示全部楼层
 
 
我觉得那看起来很熟悉。
 
... 那么为什么不先检查未保存的更改呢?
 
  1. (vl-load-com)
  2. (defun c:ZoomAll (/ *error* oldCtab acApp mspace)
  3. (defun *error* (msg)
  4.    (and oldCtab (setvar 'ctab oldCtab))
  5.    (cond ((not msg))                                                   ; Normal exit
  6.          ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
  7.          ((princ (strcat "\n** Error: " msg " ** ")))                  ; Fatal error, display it
  8.    )
  9.    (princ)
  10. )
  11. (if (= 0 (getvar 'dbmod))
  12.    (if (and (setq oldCtab (getvar 'ctab))
  13.             (setq acApp (vlax-get-acad-object))
  14.        )
  15.      (foreach tab (layoutlist)
  16.        (setvar 'ctab tab)
  17.        (if (setq mspace (< 1 (getvar 'cvport)))
  18.          (vla-put-mspace acDoc :vlax-false)
  19.        )
  20.        (vla-zoomall acApp)
  21.        (if mspace
  22.          (vla-put-mspace acDoc :vlax-true)
  23.        )
  24.      )
  25.    )
  26.    (prompt "\n** Unsaved changes, save and try again ** ")
  27. )
  28. (*error* nil)
  29. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 07:19:51 | 显示全部楼层
 
[皮特·坎贝尔声音]
 
... 像这样的事情。
 
[/PeterCampbellVoice]
 

                               
登录/注册后可看大图

 
#疯子
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 07:27:08 | 显示全部楼层
在遍历布局时可能会更快,
而不是:
  1. (foreach tab (layoutlist)
  2. ....
  3. )

使用此选项:
  1. (setq olayouts  (vla-get-layouts doc))
  2. (vlax-for olayout olayouts  
  3. ;|rest code here|;
  4. )

未测试
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 07:34:02 | 显示全部楼层
我最近将我的更改为:
 
  1. (defun c:ZAL (/ ctab)
  2. ;; Zoom extents of viewport in All Layouts (excluding Model)
  3. ;; Alan J. Thompson
  4. (or *Acad* (setq *Acad* (vlax-get-acad-object)))
  5. (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument *Acad*)))
  6. (setq ctab (getvar 'CTAB))
  7. (foreach layout (layoutlist)
  8.    (setvar 'CTAB layout)
  9.    (vla-put-mspace *AcadDoc* :vlax-false)
  10.    (vla-zoomwindow *Acad* (vlax-3d-point (getvar 'LIMMIN)) (vlax-3d-point (getvar 'LIMMAX)))
  11. )
  12. (setvar 'CTAB ctab)
  13. (princ)
  14. )
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-10 16:05 , Processed in 0.882764 second(s), 75 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表