明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2024|回复: 5

[求助]请求完善将所选实体层置为当前层后,实体层的颜色能否随层,谢谢!

[复制链接]
发表于 2010-9-15 15:20 | 显示全部楼层 |阅读模式
;;----------------------
;;将所选实体层置为当前层
;;----------------------
(defun c:cl (/ ent ent_data clay olay)
  (setq olay (getvar "clayer"))
  (setq ent (car (entsel (strcat "\n选择物体/当前层为<" olay ">:"))))
  (if (/= nil ent)
    (progn
      (setq ent_data (entget ent))
      (setq clay (cdr (assoc 8 ent_data)))
      (setvar "clayer" clay)
      (prompt (strcat "\n成功将图层设为<" clay ">:"))
    )
  )
)
发表于 2010-9-15 22:42 | 显示全部楼层
(setvar "Cecolor" "ByLayer")    ; add this line
 楼主| 发表于 2010-9-16 09:13 | 显示全部楼层

感谢Anhyhon,实体层的颜色是有红、黄、绿等颜色的,随层后,颜色也有红、黄、绿等颜色,不是单纯的白色,谢谢!

发表于 2010-9-17 12:18 | 显示全部楼层
  1. ;;----------------------
  2. ;;将所选实体层置为当前层
  3. ;;----------------------
  4. (defun c:cl (/ ent ent_data clay olay)
  5.   (setq olay (getvar "clayer"))
  6.   (setq ent (car (entsel (strcat "\n选择物体/当前层为<" olay ">:"))))
  7.   (if (/= nil ent)
  8.     (progn
  9.       (setq ent_data (entget ent))
  10.       (command "_change" ent "" "_p" "_color" "bylayer" "")
  11.       (setq clay (cdr (assoc 8 ent_data)))
  12.       (setvar "clayer" clay)
  13.       (prompt (strcat "\n成功将图层设为<" clay ">:"))
  14.     )
  15.   )
  16. )
块的改不了
发表于 2010-9-17 16:50 | 显示全部楼层
本帖最后由 作者 于 2010-9-18 7:15:31 编辑

;;;用新的组码值替换原值
(defun dxfupd(ent dxfcode newval / elst newlst  )
  (setq elst(entget ent))

  (setq newlst(append elst (list (cons dxfcode newval))))

  (entmod newlst)
  (entupd ent))

 

 

(defun c:cl (/ ent ent_data clay olay e blkname blkref elst)
  (setq olay (getvar "clayer"))
  (setq ent (car (entsel (strcat "\n选择物体 (当前层为<" olay ">) :"))))
  (cond
;;;  (if ;|(/= nil ent)|;  ent
    ((not ent) (princ "\n")) ;_无效对象,静默退出
    (ent ;_有效对象
     (setq ent_data (entget ent))
     (setq conlst (assoc 8 ent_data)) ;_实体层关联表
     (setq clay (cdr conlst)) ;_所选实体所在的层名
     (setvar "clayer" clay) ;_设置当前层
     (dxfupd ent 62 256)
;;;     (entmod (subst (cons 62 256) (assoc 62 ent_data) ent_data))
;;;     (entupd ent)
     (if
       (equal "INSERT" (cdr (assoc 0 ent_data))) ;_块
 (progn
;;;   (entmod (subst conlst (assoc 8 ent_data) ent_data))
;;;   (entupd ent)
   (dxfupd ent 8 clay)
   (setq blkname (cdr (assoc 2 ent_data))) ;_块名
   (setq blkdef (tblsearch "block" blkname)) ;_块定义

   (setq e (cdr (assoc -2 blkdef))) ;_块中第一个图元
  
;;;   (setq elst (append (entget e) (list (cons 62 0)))) ;_块中第一个图元颜色随块
;;;(setq elst (append (entget e)(list (cons 62 256))));_块中第一个图元颜色随层
;;;   (entmod (subst (cons 62 0) (assoc 62 elst) elst))
;;;   (entupd e)

  
   (dxfupd e 62 0);_等效于上面的代码,随块
;;;   (dxfupd e 62 256);_颜色随层

   (while (and
     (setq e (entnext e))
     (setq elst (entget e))

     (/= (cdr (assoc 0 elst)) "SEQEND")
   )

;;;     (setq elst (append elst (list (cons 62 0)))) ;_块中图元颜色随块
;;;;;;  (setq elst (append elst (list (cons 62 256))))    ;_块中图元颜色随层
;;;     (entmod elst)
;;;     (entupd e)

    
      (dxfupd e 62 0);_等效于上面的代码,颜色随块
;;;     (dxfupd e 62 256);_颜色随层
   )
   (entupd ent)
 )
     )
    )
  )

(princ)

)

 

 

简单的写了一下,还有另一种方法用vl函数,也很方便,防错功能没有,自已改改吧

发表于 2020-9-24 13:14 | 显示全部楼层
caiqs 发表于 2010-9-17 16:50
本帖最后由 作者 于 2010-9-18 7:15:31 编辑  ;;;用新的组码值替换原值(defun dxfupd(ent dxfcode newval  ...

收藏备用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 20:12 , Processed in 0.201507 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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