明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8073|回复: 24

[已解答] 关于CAD恢复上次选择对象的LISP

[复制链接]
发表于 2013-10-29 00:49 | 显示全部楼层 |阅读模式
大家都知道,CAD在绘图时,比如我要移动,先输入M,再输入P,会恢复上次选择对象,但是P在右手边,有点不方便,想改为其它键,比如改为“T”或者“B”之类的,该怎么改呢?网上搜了很久都没找到方法,有哪位大哥能帮我写个LISP,先在此谢谢了!

发表于 2013-10-31 15:55 | 显示全部楼层
本帖最后由 ㄘ丶转裑ㄧ灬 于 2016-10-15 11:59 编辑

因为我习惯先选择图元再输入命令,所以下面两个程序在先输入命令的情况下就是上一选择集了;
几年来几乎没用过默认的复制和移动了,反而在其他人的机器上用默认的很不习惯。

  1. ;;;;;;********当前或上一选择集的移动及复制
  2. (defun c:a ()
  3. (command "Ortho" "on")
  4.   (setq ss (ssget "i"));;;;将已选中的实体加入选择集
  5.   (if (= ss nil)
  6.   (command ".move" "previous" "");;;;如果选择集为空,则执行移动上一选择集命令
  7.   (command ".move");;;;如果选择集不为空,则执行正常移动命令
  8.   )
  9.   (princ)
  10. )
  11. (defun c:c ()
  12. (command "Ortho" "on")
  13.   (setq ss (ssget "i"));;;;将已选中的实体加入选择集
  14.   (if (= ss nil)
  15.   (command ".copy" "previous" "" "m");;;;如果选择集为空,则执行复制上一选择集命令
  16.   (command ".copy" "m");;;;如果选择集不为空,则执行正常复制命令
  17.   )
  18.   (princ)
  19. )


另外还有一个单独的恢复上一选择集:
  1. ;;;****************选中上一选择集(布局空间不起作用)(快捷键为30是因为我把F1映射为0了)
  2. (defun C:30( / ss)
  3. (if (setq ss (ssget "_P"))
  4. (sssetfirst nil ss)
  5. )
  6. (princ)
  7. )


回复 支持 1 反对 0

使用道具 举报

发表于 2018-12-17 15:47 | 显示全部楼层
ㄘ丶转裑ㄧ灬 发表于 2013-10-31 15:55
因为我习惯先选择图元再输入命令,所以下面两个程序在先输入命令的情况下就是上一选择集了;
几年来几乎没 ...

很好用,感谢
发表于 2013-10-29 08:22 | 显示全部楼层
这点影晌也不是很大吧!!!
发表于 2013-10-29 08:26 | 显示全部楼层
我的方法:
(DEFUN C:STRETCH-p        ()
  (setvar "cmdecho" 0)
  (command "STRETCH" "p")
  (princ)
)
(DEFUN C:move-p()
  (setvar "cmdecho" 0)
  (command "move" "p")
  (princ)
)
……
发表于 2013-10-29 08:27 | 显示全部楼层
P是前一次的英文开头,好记。
发表于 2013-10-29 09:55 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-10-30 08:30 编辑

楼主的意思是那个p所在位置不方便左手按它,你们给人家说不影响
解决楼主的问题有两个办法,一个最笨也最有效的办法是改键盘的排线,让P和T或者B或者别的哪个键交换,当然这不容易实现
那么是不是可以写个最简单的程序自己先对输入进行处理后去调用MOVE命令?
[/code]
  1. (defun c:MOVE1()
  2.   (INITGET "T B S")
  3.   (if(MEMBER(GETKWORD"TorB上一次S重新选择:")'("T" "B"))
  4.     (if(ssget"") (command"MOVE""") (command"MOVE"))
  5.     (command"MOVE")
  6.     )
  7.   )

  8. (defun c:MOVE2()
  9.   (if (/=""(GETSTRING"任意输入上一次空输入重新选择:"))
  10.      (if(ssget"") (command"MOVE""") (command"MOVE"))
  11.     (command"MOVE")
  12.    )
  13.   )
发表于 2013-10-29 15:55 | 显示全部楼层
llsheng_73 发表于 2013-10-29 09:55
楼主的意思是那个p所在位置不方便左手按它,你们给人家说不影响
解决楼主的问题有两个办法,一个最笨 ...

楼上的太有才了。。。。。竟然想着改键盘排线。。。太不理实了吧。。
这么简单的问题LISP都解决不了,,那LISP就没用了
发表于 2013-10-29 18:31 | 显示全部楼层
不改排线,不过好象有软件可以改键盘的说
 楼主| 发表于 2013-10-29 19:25 | 显示全部楼层
smartstar 发表于 2013-10-29 08:26
我的方法:
(DEFUN C:STRETCH-p        ()
  (setvar "cmdecho" 0)

朋友你好,首先感谢你耐心的解答。
你的方法我试过了,我输入M,然后输入P,CAD显示:没有上一个选择集,也不知道是哪里的问题。
我的想法就是在输入M之后,不用输入P,比如输入N,T之类的字母来代替。当然,用移花接木可以搞定,但是相当于是更改了键盘。
 楼主| 发表于 2013-10-29 19:41 | 显示全部楼层
llsheng_73 发表于 2013-10-29 09:55
楼主的意思是那个p所在位置不方便左手按它,你们给人家说不影响
解决楼主的问题有两个办法,一个最笨 ...

朋友你这个思路不错,但好像还是不行,我是这么操作的:
我首先输入MOVE1,然后输出T
选择对象: P 没有上一个选择集。
选择对象: nil
目前知道用组合键可以搞定_PREVIOUS,比如我在CUI里改为CTRL+T,在任何时候都能调用上一次选择对象。而我的目的就是相当于用单个字母来代替这个组合键。从使用习惯来看,再输完M命令后,左手并不便于切换到组合键,故在此求助各位朋友。
发表于 2013-10-29 21:16 | 显示全部楼层
这个要修改acad.exe
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 06:00 , Processed in 0.428316 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表