edata
发表于 2014-5-13 18:44:30
词典位置
小菜123
发表于 2014-5-13 19:35:51
本帖最后由 小菜123 于 2014-5-13 19:44 编辑
不好意思,还是不明白怎么搞
能否把图片上盖住的程序显示出来看看
edata
发表于 2014-5-13 21:23:33
测试代码
(defun c:tt (/ return)
(if(setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))));返回图层词典数据
(if(setq return (cdr (assoc 360 return)));返回关联的数据
(if(setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)));返回图层状态词典数据 (cdadr return)
(if(setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 350 (car x))) (entget (cdadr return)))));返回状态名的图元名表 修改将在这层
(if return(setq return (cddr(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 330 (car x))) (entget (car return))))));返回图层图元名表
(if return (entget (car return));回到图层的表了=(entget(tblobjname "layer" "0"))
)
)
)
)
)
)
)
下面是调试数据
; 1 表格 从 #<editor "<未命名 0> 正在加载..."> 加载
_$
_$ (setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))));返回词典数据
((-1 . <图元名: 7ef83c10>) (0 . "TABLE") (2 . "LAYER") (5 . "2") (102 . "{ACAD_XDICTIONARY") (360 . <图元名: 7ef83fa8>) (102 . "}") (330 . <图元名: 0>) (100 . "AcDbSymbolTable") (70 . 7))
_$ (setq return (cdr (assoc 360 return)))
<图元名: 7ef83fa8>
_$ (setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)))
((3 . "ACAD_LAYERSTATES") (360 . <图元名: 7ef83fb0>) (3 . "ACLYDICTIONARY") (360 . <图元名: 7ef91020>))
_$ (setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 350 (car x))) (entget (cdadr return)))))
(<图元名: 7ef83fb8> <图元名: 7ef91018>)
_$ (entget (car return))
((-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"))
_$
最后的表是 状态管理器命名的图元数据,其中第三个330组码即图层的图元名,后面的代码应该是相关状态组码值,前面的302应该是图层状态设定当前图层名,其他还得查dxf手册。
理论上应该改可以修改这个表,达到修改图层的目的。
小菜123
发表于 2014-5-13 22:21:35
谢谢提供,我试试试看
小菜123
发表于 2014-5-14 09:05:28
运行下面的程序后,(entmod l3)更新不成功,而且词典的数据变多了 (defun c:tt (/ return l1 aa l2 bb)
(if (setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))));返回图层词典数据
(if (setq return (cdr (assoc 360 return)));返回关联的数据
(if (setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)));返回图层状态词典数据 (cdadr return)
(if (setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 350 (car x))) (entget (cdadr return)))));返回状态名的图元名表 修改将在这层
(progn
(setq l1 (entget (car return))
aa (cons 330 (tblobjname "layer" "123")) ;;测试去掉图层"123"
l2 (reverse (cdr (member aa (reverse l1))))
bb (cdddr (cdddr (member aa l1)))
l3 (append l2 bb) ;;生成entmod表
)
);;progn
)
)
)
)
)
edata
发表于 2014-5-16 22:15:59
(330 . <图元名: 7ef83fa0>) (90 . 8) (62 . 7) (370 . -3) (331 . <图元名: 7ef83cb0>) (1 . "Color_7")
你确定刷掉了这几段?
其实词典操作我也不是很熟悉,不过用导出编辑的方式确实可行,用layer命令行模式导出las文件,再编辑他,然后删除原来的状态名,导入即可。
当然编辑las文件也是这个相关组码。这个是dim图层的las信息,因为123图层被我删了。
8
dim
90
8
62
3
370
18
6
Continuous
2
Color_3
小菜123
发表于 2014-5-17 09:05:45
取得的数据表L1如下:
((-1 . <Entity name: 4007a150>) (0 . "XRECORD") (5 . "CA") (102 .
"{ACAD_REACTORS") (330 . <Entity name: 4007a148>) (102 . "}") (330 . <Entity
name: 4007a148>) (100 . "AcDbXrecord") (280 . 1) (91 . 259) (330 . <Entity
name: 4007a110>) (90 . 9) (62 . 4) (370 . -3) (331 . <Entity name: 40078cb0>)
(1 . "Color_4") (330 . <Entity name: 40078c80>) (90 . 8) (62 . 7) (370 . 15)
(331 . <Entity name: 40078cb0>) (1 . "Color_7"))
(tblobjname "layer" "123")返回的实体:<Entity name: 4007a110>
修改后的数据表L3如下:
((-1 . <Entity name: 4007a150>) (0 . "XRECORD") (5 . "CA") (102 .
"{ACAD_REACTORS") (330 . <Entity name: 4007a148>) (102 . "}") (330 . <Entity
name: 4007a148>) (100 . "AcDbXrecord") (280 . 1) (91 . 259) (330 . <Entity
name: 40078c80>) (90 . 8) (62 . 7) (370 . 15) (331 . <Entity name: 40078cb0>)
(1 . "Color_7"))
(entmod l3)后再取数据表L1变成了:
((-1 . <Entity name: 4007a150>) (0 . "XRECORD") (5 . "CA") (102 .
"{ACAD_REACTORS") (330 . <Entity name: 4007a148>) (102 . "}") (330 . <Entity
name: 4007a148>) (100 . "AcDbXrecord") (280 . 1) (91 . 259) (330 . <Entity
name: 4007a110>) (90 . 9) (62 . 4) (370 . -3) (331 . <Entity name: 40078cb0>)
(1 . "Color_4") (330 . <Entity name: 40078c80>) (90 . 8) (62 . 7) (370 . 15)
(331 . <Entity name: 40078cb0>) (1 . "Color_7") (91 . 259) (330 . <Entity name:
40078c80>) (90 . 8) (62 . 7) (370 . 15) (331 . <Entity name: 40078cb0>) (1 .
"Color_7"))
smartstar
发表于 2015-4-2 15:51:54
没有下文了吗?
自贡黄明儒
发表于 2015-4-2 16:03:01
smartstar 发表于 2015-4-2 15:51 static/image/common/back.gif
没有下文了吗?
同感,强烈抗议LZ有始无终
言社长
发表于 2016-5-15 11:00:51
图层状态保存很有用