sinommw 发表于 2013-10-29 00:49:58

关于CAD恢复上次选择对象的LISP

大家都知道,CAD在绘图时,比如我要移动,先输入M,再输入P,会恢复上次选择对象,但是P在右手边,有点不方便,想改为其它键,比如改为“T”或者“B”之类的,该怎么改呢?网上搜了很久都没找到方法,有哪位大哥能帮我写个LISP,先在此谢谢了!

ㄘ丶转裑ㄧ灬 发表于 2013-10-31 15:55:56

本帖最后由 ㄘ丶转裑ㄧ灬 于 2016-10-15 11:59 编辑

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

;;;;;;********当前或上一选择集的移动及复制
(defun c:a ()
(command "Ortho" "on")
(setq ss (ssget "i"));;;;将已选中的实体加入选择集
(if (= ss nil)
(command ".move" "previous" "");;;;如果选择集为空,则执行移动上一选择集命令
(command ".move");;;;如果选择集不为空,则执行正常移动命令
)
(princ)
)
(defun c:c ()
(command "Ortho" "on")
(setq ss (ssget "i"));;;;将已选中的实体加入选择集
(if (= ss nil)
(command ".copy" "previous" "" "m");;;;如果选择集为空,则执行复制上一选择集命令
(command ".copy" "m");;;;如果选择集不为空,则执行正常复制命令
)
(princ)
)

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

石井鱼 发表于 2018-12-17 15:47:53

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

很好用,感谢

xiongqunan 发表于 2013-10-29 08:22:39

这点影晌也不是很大吧!!!

smartstar 发表于 2013-10-29 08:26:47

我的方法:
(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:31

P是前一次的英文开头,好记。

llsheng_73 发表于 2013-10-29 09:55:38

本帖最后由 llsheng_73 于 2013-10-30 08:30 编辑

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

(defun c:MOVE2()
(if (/=""(GETSTRING"任意输入上一次空输入重新选择:"))
   (if(ssget"P") (command"MOVE""P") (command"MOVE"))
    (command"MOVE")
   )
)

ysq101 发表于 2013-10-29 15:55:18

llsheng_73 发表于 2013-10-29 09:55 static/image/common/back.gif
楼主的意思是那个p所在位置不方便左手按它,你们给人家说不影响
解决楼主的问题有两个办法,一个最笨 ...

楼上的太有才了。。。。。竟然想着改键盘排线。。。太不理实了吧。。
这么简单的问题LISP都解决不了,,那LISP就没用了

llsheng_73 发表于 2013-10-29 18:31:30

不改排线,不过好象有软件可以改键盘的说

sinommw 发表于 2013-10-29 19:25:37

smartstar 发表于 2013-10-29 08:26 static/image/common/back.gif
我的方法:
(DEFUN C:STRETCH-p        ()
(setvar "cmdecho" 0)


朋友你好,首先感谢你耐心的解答。
你的方法我试过了,我输入M,然后输入P,CAD显示:没有上一个选择集,也不知道是哪里的问题。
我的想法就是在输入M之后,不用输入P,比如输入N,T之类的字母来代替。当然,用移花接木可以搞定,但是相当于是更改了键盘。

sinommw 发表于 2013-10-29 19:41:40

llsheng_73 发表于 2013-10-29 09:55 static/image/common/back.gif
楼主的意思是那个p所在位置不方便左手按它,你们给人家说不影响
解决楼主的问题有两个办法,一个最笨 ...
朋友你这个思路不错,但好像还是不行,我是这么操作的:
我首先输入MOVE1,然后输出T
选择对象: P 没有上一个选择集。
选择对象: nil
目前知道用组合键可以搞定_PREVIOUS,比如我在CUI里改为CTRL+T,在任何时候都能调用上一次选择对象。而我的目的就是相当于用单个字母来代替这个组合键。从使用习惯来看,再输完M命令后,左手并不便于切换到组合键,故在此求助各位朋友。

logoin 发表于 2013-10-29 21:16:05

这个要修改acad.exe
页: [1] 2 3
查看完整版本: 关于CAD恢复上次选择对象的LISP