明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 小菜123

[提问] 求教关于图层状态的编辑

[复制链接]
发表于 2014-5-13 18:44 | 显示全部楼层
词典位置



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2014-5-13 19:35 | 显示全部楼层
本帖最后由 小菜123 于 2014-5-13 19:44 编辑

不好意思,还是不明白怎么搞
能否把图片上盖住的程序显示出来看看
发表于 2014-5-13 21:23 | 显示全部楼层
测试代码
  1.   (defun c:tt (/ return)
  2.   (if(setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))));返回图层词典数据
  3.       (if(setq return (cdr (assoc 360 return)));返回关联的数据
  4.   (if(setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)));返回图层状态词典数据 (cdadr return)   
  5.     (if(setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 350 (car x))) (entget (cdadr return)))));返回状态名的图元名表 修改将在这层
  6.       
  7.       (if return(setq return (cddr(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 330 (car x))) (entget (car return))))));返回图层图元名表
  8.         (if return (entget (car return));回到图层的表了=(entget(tblobjname "layer" "0"))
  9.     )
  10.         )
  11.       )
  12.     )
  13.   )
  14.       )
  15.     )


下面是调试数据
  1. ; 1 表格 从 #<editor "<未命名 0> 正在加载..."> 加载
  2. _$
  3. _$ (setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))));返回词典数据
  4.   
  5. ((-1 . <图元名: 7ef83c10>) (0 . "TABLE") (2 . "LAYER") (5 . "2") (102 . "{ACAD_XDICTIONARY") (360 . <图元名: 7ef83fa8>) (102 . "}") (330 . <图元名: 0>) (100 . "AcDbSymbolTable") (70 . 7))
  6. _$ (setq return (cdr (assoc 360 return)))
  7. <图元名: 7ef83fa8>
  8. _$ (setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)))
  9. ((3 . "ACAD_LAYERSTATES") (360 . <图元名: 7ef83fb0>) (3 . "ACLYDICTIONARY") (360 . <图元名: 7ef91020>))
  10. _$ (setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 350 (car x))) (entget (cdadr return)))))
  11. (<图元名: 7ef83fb8> <图元名: 7ef91018>)
  12. _$ (entget (car return))
  13. ((-1 . <图元名: 7ef83fb8>) (0 . "XRECORD") (5 . "F7") (102 . "{ACAD_REACTORS") (330 . <图元名: 7ef83fb0>) (102 . "}") (330 . <图元名: 7ef83fb0>) (100 . "AcDbXrecord") (280 . 1) (91 . 495) (301 . "") (290 . 0) (302 . "0") (330 . <图元名: 7ef83fa0>) (90 . 8) (62 . 7) (370 . -3) (331 . <图元名: 7ef83cb0>) (1 . "Color_7") (330 . <图元名: 7ef83f98>) (90 . 8) (62 . 7) (370 . -3) (331 . <图元名: 7ef83cb0>) (1 . "Color_7") (330 . <图元名: 7ef83f88>) (90 . 8) (62 . 7) (370 . -3) (331 . <图元名: 7ef83cb0>) (1 . "Color_7") (330 . <图元名: 7ef83c80>) (90 . 8) (62 . 7) (370 . -3) (331 . <图元名: 7ef83cb0>) (1 . "Color_7"))
  14. _$

最后的表是 状态管理器命名的图元数据,其中第三个330组码即图层的图元名,后面的代码应该是相关状态组码值,前面的302应该是图层状态设定当前图层名,其他还得查dxf手册。
理论上应该改可以修改这个表,达到修改图层的目的。


 楼主| 发表于 2014-5-13 22:21 | 显示全部楼层
谢谢提供,我试试试看
 楼主| 发表于 2014-5-14 09:05 | 显示全部楼层
运行下面的程序后,(entmod l3)更新不成功,而且词典的数据变多了
  1. (defun c:tt (/ return l1 aa l2 bb)
  2.   (if (setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))));返回图层词典数据
  3.       (if (setq return (cdr (assoc 360 return)));返回关联的数据
  4.   (if (setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)));返回图层状态词典数据 (cdadr return)   
  5.     (if (setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 350 (car x))) (entget (cdadr return)))));返回状态名的图元名表 修改将在这层
  6.        (progn
  7.    (setq l1 (entget (car return))
  8.                aa (cons 330 (tblobjname "layer" "123")) ;;测试去掉图层"123"
  9.          l2 (reverse (cdr (member aa (reverse l1))))
  10.          bb (cdddr (cdddr (member aa l1)))
  11.          l3 (append l2 bb) ;;生成entmod表
  12.    )
  13.       );;progn
  14.       )
  15.     )
  16.   )
  17.       )
  18.     )
发表于 2014-5-16 22:15 | 显示全部楼层
(330 . <图元名: 7ef83fa0>) (90 . 8) (62 . 7) (370 . -3) (331 . <图元名: 7ef83cb0>) (1 . "Color_7")
你确定刷掉了这几段?
其实词典操作我也不是很熟悉,不过用导出编辑的方式确实可行,用layer命令行模式导出las文件,再编辑他,然后删除原来的状态名,导入即可。
当然编辑las文件也是这个相关组码。这个是dim图层的las信息,因为123图层被我删了。
  1.   8
  2. dim
  3. 90
  4. 8
  5. 62
  6. 3
  7. 370
  8. 18
  9.   6
  10. Continuous
  11.   2
  12. Color_3
 楼主| 发表于 2014-5-17 09:05 | 显示全部楼层
  1. 取得的数据表L1如下:

  2. ((-1 . <Entity name: 4007a150>) (0 . "XRECORD") (5 . "CA") (102 .
  3. "{ACAD_REACTORS") (330 . <Entity name: 4007a148>) (102 . "}") (330 . <Entity
  4. name: 4007a148>) (100 . "AcDbXrecord") (280 . 1) (91 . 259) (330 . <Entity
  5. name: 4007a110>) (90 . 9) (62 . 4) (370 . -3) (331 . <Entity name: 40078cb0>)
  6. (1 . "Color_4") (330 . <Entity name: 40078c80>) (90 . 8) (62 . 7) (370 . 15)
  7. (331 . <Entity name: 40078cb0>) (1 . "Color_7"))

  8. (tblobjname "layer" "123")返回的实体:<Entity name: 4007a110>

  9. 修改后的数据表L3如下:

  10. ((-1 . <Entity name: 4007a150>) (0 . "XRECORD") (5 . "CA") (102 .
  11. "{ACAD_REACTORS") (330 . <Entity name: 4007a148>) (102 . "}") (330 . <Entity
  12. name: 4007a148>) (100 . "AcDbXrecord") (280 . 1) (91 . 259) (330 . <Entity
  13. name: 40078c80>) (90 . 8) (62 . 7) (370 . 15) (331 . <Entity name: 40078cb0>)
  14. (1 . "Color_7"))

  15. (entmod l3)后再取数据表L1变成了:

  16. ((-1 . <Entity name: 4007a150>) (0 . "XRECORD") (5 . "CA") (102 .
  17. "{ACAD_REACTORS") (330 . <Entity name: 4007a148>) (102 . "}") (330 . <Entity
  18. name: 4007a148>) (100 . "AcDbXrecord") (280 . 1) (91 . 259) (330 . <Entity
  19. name: 4007a110>) (90 . 9) (62 . 4) (370 . -3) (331 . <Entity name: 40078cb0>)
  20. (1 . "Color_4") (330 . <Entity name: 40078c80>) (90 . 8) (62 . 7) (370 . 15)
  21. (331 . <Entity name: 40078cb0>) (1 . "Color_7") (91 . 259) (330 . <Entity name:
  22. 40078c80>) (90 . 8) (62 . 7) (370 . 15) (331 . <Entity name: 40078cb0>) (1 .
  23. "Color_7"))
复制代码
发表于 2015-4-2 15:51 | 显示全部楼层
没有下文了吗?
发表于 2015-4-2 16:03 | 显示全部楼层
smartstar 发表于 2015-4-2 15:51
没有下文了吗?

同感,强烈抗议LZ有始无终
发表于 2016-5-15 11:00 | 显示全部楼层
图层状态保存很有用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 09:41 , Processed in 0.300481 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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