明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2493|回复: 6

[源码] 上一选择集优化

  [复制链接]
发表于 2012-9-4 14:20 | 显示全部楼层 |阅读模式
本帖最后由 ㄘ丶转裑ㄧ灬 于 2015-1-7 17:37 编辑

  1. (defun c:a ()
  2. (command "move" "previous" "")
  3. (princ)
  4. )

用这个操作画图的时候,确实比以前快了不少,省了几次按键,
但是还有一个问题,我平常的习惯是先选择后执行的,上面的代码是只针对空选时的,
我想不管是什么情况,都只用一个命令去执行移动,
即有选择集时移动当前选择集,没有时移动上一选择集。

想了个比较笨的办法就是再执行一次。。。
  1. (defun c:a ()
  2. (command "move" "previous" "")
  3. (command "move" "previous" "")
  4. (princ)
  5. )

大家别笑哈,由于是新手,只会这样写。。。但是又出现下面这样的情况。。
命令:  A move
选择对象: previous 找到 1 个

选择对象:
指定基点或 [位移(D)] <位移>:  move
需要点或选项关键字。
; 错误: 函数被取消

指定基点或 [位移(D)] <位移>:
指定第二个点或 <使用第一个点作为位移>: *取消*


上面这个倒是可以用,就是看着不舒服,呵呵。。。。


2014.08.28更新,参考了论坛里的代码,感谢!
http://bbs.mjtd.com/thread-88900-1-1.html
  1. (defun c:a ()  (setq ss (ssget "i")) ;将已选中的实体加入选择集
  2.   (if (= ss nil)
  3.     (command "move" "previous" "") ;如果选择集为空,则执行移动上一选择集命令
  4.     (command "move")   ;如果选择集不为空,则执行正常移动命令
  5.   )
  6.   (princ)
  7. )

  8. ;对于复制,此方法的修改版本不能通用于所有CAD,只支持2010以上。
  9. ;(defun c:c ()
  10. ; (setq ss (ssget "i")) ;将已选中的实体加入选择集
  11. ; (if (= ss nil)
  12. ;   (command "copy" "previous" "" "m") ;如果选择集为空,则执行复制上一选择集命令
  13. ;   (command "COPY" "M")   ;如果选择集不为空,则执行正常复制命令
  14. ; )
  15. ; (princ)
  16. ;)

  17. ;旧版本,通用所有CAD。
  18. (defun c:c ()
  19. (setvar "pickfirst" 1)
  20. (setvar "pickfirst" 0)
  21. (command "copy" "previous" "" "m")
  22. (setvar "pickfirst" 1)
  23. (princ)
  24. )

点评

看着晕,不知道楼主到底要做什么。  发表于 2012-9-4 15:52
"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2012-9-4 16:19 | 显示全部楼层
呵呵,谢谢Z版能看我帖子。。。
我想把移动<M>和移动上一选择集<M+P>这两个命令合并成一个命令。。。。
这样后面继续操作的时候就只需按空格了,其实最后面那个代码就已经可以实现了,只是小纠结了一下。。
发表于 2012-9-4 16:22 | 显示全部楼层

  1. (defun c:a ()
  2.    (cond
  3.      ((cadr (ssgetfirst))
  4.       (command "move")  
  5.      )
  6.      ((or
  7.        (setq ss (ssget "P"))
  8.        (setq ss (ssget))
  9.       )
  10.       (command "move" ss "")
  11.    ))
  12.    (while (= (logand (getvar "CmdActive") 1) 1) (command pause))
  13. )

点评

额。。。刚刚试了下,不能先选择后执行,不过还是要谢谢你!!!  发表于 2012-9-4 16:38
发表于 2012-9-4 16:50 | 显示全部楼层
check pickfirst == 1
发表于 2012-9-4 20:44 | 显示全部楼层
这样行吗?
  1. (defun c:tt ()
  2. (command "MOVE")
  3. (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  4. (command "MOVE" "P" "")
  5. (while (> (getvar "CMDACTIVE") 0) (command PAUSE))
  6. (princ)
  7. )
发表于 2012-9-4 20:54 | 显示全部楼层
本帖最后由 lidaxiu 于 2012-9-4 20:55 编辑

没明白,程序可以用啊
发表于 2020-9-11 21:34 | 显示全部楼层
哈哈,,支持一下,有想法就实现,加油   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 06:12 , Processed in 0.403755 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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