乐筑天下

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

[编程交流] 如何在Lis时重置OSNAP

[复制链接]

14

主题

54

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 07:35:03 | 显示全部楼层 |阅读模式
我想知道在终止lisp时是否可以将OSNAP重置回初始设置。
 
例如,我的“OSMODE”初始设置为47,出于某种原因,我可能需要将“OSMODE”设置为0,以确保它不会捕捉到附近的对象,但如果我现在终止此lisp,我将不得不再次设置“OSMODE”。
 
有人能帮忙吗?
 
 
非常感谢
回复

使用道具 举报

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 07:45:05 | 显示全部楼层
对不起,我不知道如何告诉你去做,但我知道一份写得好的清单会完全满足你的要求。
保存prelisp OSMODE设置,并在完成后或退出后恢复它(如果发生这种情况)。
有人肯定会澄清如何为你做这件事。
我打赌如果你去http://www.lee-mac.com/programs.html,
看看李·麦克的口吃,你会发现
从lisp中快速了解应该如何完成。
回复

使用道具 举报

14

主题

54

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 07:51:33 | 显示全部楼层
谢谢Dadgad,实际上我已经看了一段时间李的Lisp程序了,因为我真的不太擅长这个,我还没有找到任何解决方案,甚至,我不够聪明,无法理解。
 
我不知道这是否与*错误*有关,我仍在研究它。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 07:59:42 | 显示全部楼层
  1. (setq os (getvar 'osmode))
  2. (setvar 'osmode 0)
  3. ;;; you codes here ...
  4. (setvar 'osmode os)
回复

使用道具 举报

14

主题

54

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:06:59 | 显示全部楼层
谢谢Tharwat,我已经在我的lisp中包含了您建议的代码,我的问题是lisp在到达行(setvar“osmode”os)之前被终止,例如按ESC
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 08:08:38 | 显示全部楼层
错误子程序将处理该问题。。。
 
需要考虑的几件事。。(仅举一个例子)
 
  1. (defun c:Test  (/ *error* p1 p2 os)
  2. (defun *error*  (x)
  3.    (if os
  4.      (setvar 'osmode os))
  5.    (if (eq (strcase x) "*CANCEL*")
  6.      (princ "\n cancelled ...."))
  7.    (princ)
  8.    )
  9. (setq os (getvar 'osmode))
  10. (setvar 'osmode 0)
  11. (if (and (setq p1 (getpoint "\n Specify first point :"))
  12.           (setq p2 (getpoint "\n nexi point :" p1))
  13.           )
  14.    (command "_.line" p1 p2 "")
  15.    (princ)
  16.    )
  17. (setvar 'osmode os)
  18. (princ)
  19. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:21:13 | 显示全部楼层
 
您是否使用“Esc”终止LISP?
 
如果是这样,您将需要使用*错误*处理程序来重置环境。
回复

使用道具 举报

14

主题

54

帖子

40

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 08:26:24 | 显示全部楼层
我们并不是想通过按ESC键来终止LISP,我们习惯于在绘图过程中按ESC键!!这就是为什么我们总是丢失OSMODE设置的原因。
 
我正在查看Lee Mac编程中的*error*示例,如果我在error子程序中添加一行(setvar“osmode”my\u osmode),它似乎可以工作。我还在测试。
 
 
非常感谢。
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 08:33:57 | 显示全部楼层
另一种易于恢复的方法是关闭运行Osnap,而不是关闭所有Osnap设置。在这种情况下,崩溃只意味着重新打开OSNAP,例如使用F3。要在AutoLISP中关闭运行OSNAP,首先保存原始值,然后用16384屏蔽OSMODE——如下所示:
 
  1. (setq OriginalOsmode (getvar "OSMODE"))
  2. (setvar "OSMODE" (logior 16384 OriginalOsmode))

 
当处理NYRFPT程序并且没有错误处理程序时,这很方便,尽管错误处理程序肯定是最好的方法。当然,您仍然需要重置一行:
 
  1. (setvar "OSMODE" OriginalOsmode)
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 08:39:08 | 显示全部楼层
你可以试试这个
http://xaydungit.vn/diendan/showthread.php?3551-Reset-l%E1%BA%A1i bi%E1%BA%BFn-OSNAP-sau-khi-d%C3%B9ng lisp&高亮显示=Reset+OSNAP
 
只需加载它
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 04:55 , Processed in 0.686259 second(s), 72 queries .

© 2020-2025 乐筑天下

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