明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3094|回复: 14

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

[复制链接]
发表于 2013-4-24 23:36:13 | 显示全部楼层 |阅读模式
1明经币
麻烦哪位高手帮小弟写一个图层互换的程序,希望能实现如下功能:
框选含有 图层A 和 图层B 的两种对象后,互换对象的图层。
小弟在此先谢谢各位高手了

最佳答案

发表于 2013-4-24 23:36:14 | 显示全部楼层
本帖最后由 Gu_xl 于 2013-4-25 21:59 编辑

  1. (defun c:tt ()  (setq        e1   (car (entsel "\n选择图层1对象:"))
  2.         e2   (car (entsel "\n选择图层2对象:"))
  3.         lay1 (cdr (assoc 8 (entget e1)))
  4.         lay2 (cdr (assoc 8 (entget e2)))
  5.   )
  6.   (if (setq ss (ssget (list (cons 8 (strcat lay1 "," lay2)))))
  7.     (repeat (setq n (sslength ss))
  8.       (setq el (entget (ssname ss (setq n (1- n)))))
  9.       (if (= (strcase lay1) (strcase (cdr (assoc 8 el))))
  10.         (entmod (subst (cons 8 lay2) (assoc 8 el) el))
  11.         (entmod (subst (cons 8 lay1) (assoc 8 el) el))
  12.       )
  13.     )
  14.   )
  15.   (princ)
  16. )

点评

G大师,如果构件超多,这样速度是不是比直接对调修改2个图层的属性慢呀!  发表于 2013-4-26 08:04
回复

使用道具 举报

 楼主| 发表于 2013-4-25 17:14:12 | 显示全部楼层
Gu_xl 发表于 2013-4-25 09:31

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

点评

修改代码见沙发!  发表于 2013-4-25 22:01
回复

使用道具 举报

发表于 2013-4-25 18:17:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

发表于 2013-4-25 18:18:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

 楼主| 发表于 2013-4-25 20:48:45 | 显示全部楼层
(setq ent  (cdr (assoc 2 (entget "\n请选择图元:")
是不是少了几个括号哦

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

使用道具 举报

 楼主| 发表于 2013-4-25 20:49:23 | 显示全部楼层
500w008 发表于 2013-4-25 18:18
(setq ent  (cdr (assoc 2 (entget "\n请选择图元:")

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

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

使用道具 举报

发表于 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)
)
回复

使用道具 举报

 楼主| 发表于 2013-4-26 03:18:43 | 显示全部楼层
Gu_xl 发表于 2013-4-24 23:36

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

使用道具 举报

 楼主| 发表于 2013-4-26 03:29:16 | 显示全部楼层
yjr111 发表于 2013-4-25 21:27
(defun renamela(oldla newla)
  (command "rename" "layer" oldla newla )
)

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

点评

图层属性可以用chprop命令修改  发表于 2013-4-26 16:54
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-2-21 03:11 , Processed in 0.195213 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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