明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1856|回复: 9

复制出来的对象如何再次获得

  [复制链接]
发表于 2009-10-11 23:26:00 | 显示全部楼层 |阅读模式

在写一个旋转复制的命令,复制出来的对象如何让程序能获得呢.

我想过原理,可以让程序找到x与y的坐标全选再R移除p上次选择,可是由于ss边上如果有别的东西不在选择集里,如此框选会误选到不要的图元,行不通哇!

(defun c:rcc ()
  (setvar "cmdecho" 0)
  (command "undo" "be")
  (setq os (getvar "osmode"))
  (setq om (getvar "orthomode"))
  (setvar "orthomode" 0)
  (prompt "Copy and Rotate")
  (setq ss (ssget))
  (if (not(tblsearch "layer" "8"))
      (command "layer" "new" "8" "set" "8" "c" "8" "8" "lt" "hidden" "8" "")
  )
  (if ss
     (progn
        (setq dian (getpoint "\nPick Bese point"))
        (command "copy" ss "" dian dian)                   

        (command "rotate" ss "" dian pause)                                        ;这里的ss不是想要的对象,应将copy后的新图元进入选择集
        (command "chprop" ss "" "la" "8" "c" "bylayer" "lt" "bylayer" "")
      )
   )
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2009-10-12 08:26:00 | 显示全部楼层

entlast可以取得最后生成的对象

如果是多个对象,要用到循环了

发表于 2009-10-12 08:59:00 | 显示全部楼层

(setq ss (ssadd) e (entlast))

<这里生成新的实体>

(while (setq e (entnext e))

    (setq ss (ssadd e ss))

)

 楼主| 发表于 2009-10-12 13:04:00 | 显示全部楼层
明白了﹐非常感謝2位﹗
 楼主| 发表于 2009-10-13 00:02:00 | 显示全部楼层

哎,看是看明白了,可是程序老不对,下面的程序中ss1的选项一直是空白

(defun c:rcc ()
  (setvar "cmdecho" 0)
  (command "undo" "be")
  (setq os (getvar "osmode"))
  (setq om (getvar "orthomode"))
  (setvar "orthomode" 0)
  (prompt "Copy and Rotate")
  (setq ss (ssget))
  (if (not(tblsearch "layer" "8"))
      (command "layer" "new" "8" "set" "8" "c" "8" "8" "lt" "hidden" "8" "")
  )
  (if ss
     (progn
        (setq dian (getpoint "\nPick Bese point"))
        (command "copy" ss "" dian dian)

     (setq ss1 (ssadd) e (entlast))
     (while (setq e (entnext e))
        (setq ss1 (ssadd e ss1))

      )

        (command "rotate" ss "" dian pause)
        (command "chprop" ss1 "" "la" "8" "c" "bylayer" "lt" "bylayer" "")  ;;这里的ss1一直是空的

      )
   )
)

发表于 2009-10-13 10:01:00 | 显示全部楼层
  1. ;; [功能] 获取在图元 en 之后产生的图元的选择集
  2. ;; [参数] en----图元名
  3. ;; [返回] 选择集
  4. ;; [测试]1.(setq en (entlast))
  5. ;;         执行创建图元的命令,如 LINE,BOUNDARY
  6. ;;         (setq ss (ttt en))
  7. ;;       2.(setq ss (ttt (car(entsel))))
  8. (defun ttt (en / ss)
  9.   (if en
  10.     (progn
  11.       (setq ss (ssadd))
  12.       (while (setq en (entnext en))
  13.         (if (not (member (cdr (assoc 0 (entget en)))
  14.                          '("ATTRIB" "VERTEX" "SEQEND")  ;;;注意这个部分
  15.                  )
  16.             )
  17.           (ssadd en ss)
  18.         )
  19.       )
  20.       (if (zerop (sslength ss)) (setq ss nil))
  21.       ss
  22.     )
  23.     (ssget "_x")
  24.   )
  25. )
 楼主| 发表于 2009-10-13 23:34:00 | 显示全部楼层
哎,caoyin版主的程序不知道怎么连接上5楼的程序,高深的程序接受不了,只能慢慢来了!
发表于 2009-10-14 08:00:00 | 显示全部楼层
(defun C:RCC (/ DIAN EN OM OS SS)
  (setvar "cmdecho" 0)
  (command "undo" "be")
  (setq OS (getvar "osmode"))
  (setq OM (getvar "orthomode"))
  (setvar "orthomode" 0)
  (prompt "Copy and Rotate")
  (setq SS (ssget))
  (if (not (tblsearch "layer" "8"))
    (command "_.layer" "new" "8" "set" "8" "c" "8" "8" "lt" "hidden" "8"
      "")
  )
  (if SS
    (progn
      (setq EN (entlast))
      (setq DIAN (getpoint "\nPick Bese point"))
      (command "_.copy" SS "" DIAN DIAN)
      (command "_.chprop"
        (TTT EN)
        ""
        "la"
        "8"
        "c"
        "bylayer"
        "lt"
        "bylayer"
        ""
      )
      (command "_.rotate" SS "" DIAN PAUSE)
      ;;這裡的ss1一直是空的
    )
  )
)
 楼主| 发表于 2009-10-14 08:05:00 | 显示全部楼层

TTT是什么﹐不能執行呀

Select objects:
Pick Bese point; error: no function definition: TTT

发表于 2009-10-14 08:13:00 | 显示全部楼层
TTT ??====&gt;看6樓
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-6 09:59 , Processed in 0.181776 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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