lansedi 发表于 2013-4-24 23:36:13

求助,哪位高手帮忙写个图层互换的程序

麻烦哪位高手帮小弟写一个图层互换的程序,希望能实现如下功能:
框选含有 图层A 和 图层B 的两种对象后,互换对象的图层。
小弟在此先谢谢各位高手了

Gu_xl 发表于 2013-4-24 23:36:14

本帖最后由 Gu_xl 于 2013-4-25 21:59 编辑

(defun c:tt ()(setq        e1   (car (entsel "\n选择图层1对象:"))
        e2   (car (entsel "\n选择图层2对象:"))
        lay1 (cdr (assoc 8 (entget e1)))
        lay2 (cdr (assoc 8 (entget e2)))
)
(if (setq ss (ssget (list (cons 8 (strcat lay1 "," lay2)))))
    (repeat (setq n (sslength ss))
      (setq el (entget (ssname ss (setq n (1- n)))))
      (if (= (strcase lay1) (strcase (cdr (assoc 8 el))))
        (entmod (subst (cons 8 lay2) (assoc 8 el) el))
        (entmod (subst (cons 8 lay1) (assoc 8 el) el))
      )
    )
)
(princ)
)

lansedi 发表于 2013-4-25 17:14:12

Gu_xl 发表于 2013-4-25 09:31 static/image/common/back.gif


谢谢Gu版主,你的已经很好的,但是每次都要输入互换的图层名还是有点麻烦
这个图层交换功能,我希望是直接框选对象(所有对象中,只有2种不同图层),点右键确定(应该是在框选的时候,自动读取所选对象的图层,不需要再输入图层名了),然后框选中的对象图层就互换了,不知道能这么改进不

500w008 发表于 2013-4-25 18:17:23

500w008 发表于 2013-4-25 18:18:21

lansedi 发表于 2013-4-25 20:48:45

(setq ent(cdr (assoc 2 (entget "\n请选择图元:")
是不是少了几个括号哦

以上几句是直接替换这些么?小弟完全门外汉,弄不懂。。
(setq lay1 (getstring "\n输入图层1名称:")
      lay2 (getstring "\n输入图层2名称:")
      )

lansedi 发表于 2013-4-25 20:49:23

500w008 发表于 2013-4-25 18:18 static/image/common/back.gif
(setq ent(cdr (assoc 2 (entget "\n请选择图元:")




(setq ent(cdr (assoc 2 (entget "\n请选择图元:")
是不是少了几个括号哦

以上几句是直接替换这些么?小弟完全门外汉,弄不懂。。
(setq lay1 (getstring "\n输入图层1名称:")
      lay2 (getstring "\n输入图层2名称:")
      )

yjr111 发表于 2013-4-25 21:27:58

(defun renamela(oldla newla)
(command "rename" "layer" oldla newla )
)
(defun c:tt (/ ss la1 la2 oldla1 oldla2)
(princ"\n选择要互换图层的2个图元:")
(setq ss (ssget))
(setq        la1    (cdr (assoc 8 (entget (ssname ss 0))))
        la2    (cdr (assoc 8 (entget (ssname ss 1))))
        oldla1 la1
        oldla2 la2
)
(renamela la1(setq newla1 (strcat "new" la1)))
(renamela la2(setq newla2 (strcat "new" la2)))
(renamela newla2 oldla1)
(renamela newla1 oldla2)
(princ)
)

lansedi 发表于 2013-4-26 03:18:43

Gu_xl 发表于 2013-4-24 23:36 static/image/common/back.gif


谢谢Gu版主,程序很棒,就是需要这个功能
要是和yjr111的综合下就更好了,yan大侠的更快捷,不需要先选择2个图层对象,而是直接框选就能交换所选对象图层
但是他的效果不如Gu版主的直观,(1)只交换了图层名称,颜色、线型等属性没有交换过来,让人一使用就知道是图层互换了;(2)yan大侠的是交换了图中所有属于2个图层的对象,而不是只交换所框选部分的对象图层。

lansedi 发表于 2013-4-26 03:29:16

yjr111 发表于 2013-4-25 21:27 static/image/common/back.gif
(defun renamela(oldla newla)
(command "rename" "layer" oldla newla )
)


谢谢yan大侠,你的程序满足了我说的要求,不过Gu版主的程序更符合我的想法些,你的程序有2点不足(1)只交换了图层名称,颜色、线型等属性没有交换过来,让人一使用就知道是图层互换了;(2)yan大侠的是交换了图中所有属于2个图层的对象,而不是只交换所框选部分的对象图层,框选外的对象也被强制修改了图层。
我不知道怎么在回复中给明经币。。。。等小弟研究一下怎么转币先,毕竟你的也符合我所述程序的要求
不过最佳答案只有一个
页: [1] 2
查看完整版本: 求助,哪位高手帮忙写个图层互换的程序