乐筑天下

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

[编程交流] Lisp设置捕捉点和cop

[复制链接]

9

主题

18

帖子

9

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 15:17:35 | 显示全部楼层 |阅读模式
有人能帮忙吗。我通常在任何时候都设置了几个捕捉点。复制时,我会定期将捕捉点设置为端点或中点,复制捕捉点,然后将其重置为以前的捕捉。
 
我写了这个Lisp程序的句子,但是。。。。。它将捕捉点设置为将对象复制到第一个位置,但在复制的第一个实例之后,捕捉点将恢复为所有捕捉点,而不是中点或端点。
 
  1. (defun C:Copy-Point (/ copy_objects osm cm Choice)
  2. (setq copy_objects (ssget))
  3. (setq osm (getvar 'osmode) cm (getvar 'copymode))
  4. (setvar "copymode" 1)
  5.    (initget 1 "Midpoint Endpoint")
  6.    (setq Choice (getkword "\nWhich Point [Midpoint/Endpoint]: "))
  7.        (cond
  8.        ((= Choice "Midpoint")(command "osmode" 2 ))
  9.        ((= Choice "Endpoint")(command "osmode" 1 ))
  10.        )
  11. (command "copy" copy_objects "" "m" pause pause)
  12. (setvar 'osmode osm)
  13. (setvar 'copymode cm)
  14. (princ)
  15. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:31:23 | 显示全部楼层
我不知道为什么你不在99%的工作中使用osmode 3,这两个快照之间的距离足够远,不会选择错误的1。
回复

使用道具 举报

9

主题

18

帖子

9

银币

初来乍到

Rank: 1

铜币
45
发表于 2022-7-5 15:43:12 | 显示全部楼层
嗨,比格尔。这些快照似乎距离不够远。我正在绘制一个35mm宽的屋顶木材,因此捕捉端和中间之间只有17.5mm。木材相距600mm,可以跨越12m,因此在缩小时很难选择正确的捕捉,因此在本例中只切换一个捕捉点。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 15:47:35 | 显示全部楼层
你是对的,我会想一个更好的办法。你想过几天后在这里发一个帖子吗。不同的方法。
 
例如,使用无大代码,但必须加载defuns。
 
复制
选择对象
'1拾取左端或右端
选择下一点,但您可以使用“1”2“3”4,这取决于您。
  1. (defun c:1 ( ) (command "end"))
  2. (defun c:2 ( ) (command "mid"))
  3. (defun c:3 ( ) (command "perp"))
  4. (defun c:4 ( ) (command "centre")) ;circle
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 15:53:54 | 显示全部楼层
我认为比格尔是离线的?这是痛苦的500内部服务器错误!!
我的想法是在*error*中恢复osmode,但COPY命令有自己的错误句柄,如果按下仍然无法调试。
所以在复制对象后,尝试命令:Q来恢复osmode
 
  1. (eval (list 'defun-q 'C:Q 'nil '(ai_sysvar nil)))
  2. (defun C:CPP (/ copy_objects Choice)
  3. (if (setq copy_objects (ssget))
  4.    (progn (initget 1 "Midpoint Endpoint")
  5.    (setq Choice (getkword "\nWhich Point [Midpoint/Endpoint]: "))
  6.    (ai_sysvar (list '("cmdecho" . 0)
  7.                     (cons "osmode"
  8.                           (if (= Choice "Midpoint")
  9.                             2
  10.                             1
  11.                             )
  12.                           )
  13.                     )
  14.               )
  15.    (command "copy" copy_objects "" "m" "\""\")
  16.    )
  17.    )
  18. (princ)
  19. )
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:01:56 | 显示全部楼层
我只是试图通过使用透明命令来删除iniget步骤,你可以有任意多个,如果你真的想忘乎所以,想想这个,按osnap END的END键,比如说Home for mid,但要拧紧键盘。居中翻页?向下翻页???
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:10:26 | 显示全部楼层
@AdamW:
尝试使用:
  1. ...
  2. (command "_.copy" copy_objects "" "_multiple")
  3. (while (/= 0 (getvar 'cmdactive)) (command pause))
  4. (setvar 'osmode osm)
  5. ...
回复

使用道具 举报

5

主题

956

帖子

963

银币

初来乍到

Rank: 1

铜币
35
发表于 2022-7-5 16:24:53 | 显示全部楼层
是的,(命令暂停)耍了个花招
“指挥官”的好建议
 
我尝试了不同的方法,因为失败了
  1. (while (/= 0 (getvar 'cmdactive)) ([color="red"]command[/color]))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 13:04 , Processed in 1.273074 second(s), 68 queries .

© 2020-2025 乐筑天下

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