- UID
- 516
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-14
- 最后登录
- 1970-1-1
|
发表于 2004-5-15 14:40:42
|
显示全部楼层
(Defun c:SB (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
(if (setq ss (ssget '((0 . "INSERT"))))
(progn
(setq i 0)
(repeat (sslength ss)
(SetQ sname (ssname ss i))
(setq sn sname
ct T
)
(While ct
(setq slist (entget sname))
(cond
((= (cdr (assoc 0 slist)) "ATTRIB")
(command ".undo" "E")
(command ".undo" "BE")
(if (/= (setq val (getstring (strcat "\n输入新的属性值<<"
(cdr (assoc 2 slist))
"--->"
(cdr (assoc 1 slist))
">>:"
)
)
)
""
)
(progn
(setq slist (subst (cons 1 val) (assoc 1 slist) slist))
(entmod slist)
)
)
(command ".undo" "E")
)
((= (cdr (assoc 0 slist)) "SEQEND") (setq ct nil))
(T nil)
)
(setq sname (EntNext sname))
)
(entupd sn)
(setq i (1+ i))
)
)
)
(princ)
)
(Defun c:St (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
(if (setq ss (ssget '((0 . "INSERT"))))
(progn
(command ".undo" "E")
(command ".undo" "BE")
(SetQ sname (ssname ss 0))
(setq sn sname
ct T
)
(setq slist (entget sname))
(While ct
(setq slist (entget sname))
(cond
((= (cdr (assoc 0 slist)) "ATTRIB")
(if (/= (setq val (getstring (strcat "\n输入新的属性值<<"
(cdr (assoc 2 slist))
"--->"
(cdr (assoc 1 slist))
">>:"
)
)
)
""
)
(progn
(setq slist (subst (cons 1 val) (assoc 1 slist) slist))
(entmod slist)
)
)
)
((= (cdr (assoc 0 slist)) "SEQEND") (setq ct nil))
(T nil)
)
(setq sname (EntNext sname))
)
(entupd sn)
(setq i 1)
(if (> (sslength ss) 1)
(repeat (1- (sslength ss))
(SetQ sname (ssname ss i))
(setq sn sname
ct T
)
(setq slist (entget sname))
(While ct
(setq slist (entget sname))
(cond
((= (cdr (assoc 0 slist)) "ATTRIB")
(if (/= val
""
)
(progn
(setq
slist (subst (cons 1 val) (assoc 1 slist) slist)
)
(entmod slist)
)
)
)
((= (cdr (assoc 0 slist)) "SEQEND") (setq ct nil))
(T nil)
)
(setq sname (EntNext sname))
)
(entupd sn)
(setq i (1+ i))
)
)
(command ".undo" "E")
)
)
(princ)
)
修改了前面那位说的会改所有块的问题
然后给出了两个处理方法,一个是改每一个选中的块改不同的值(前面的SB),一个是都改成一个相同的值(后面的ST)
引用:
以上步骤不复杂,但还是那个问题:对单个属性块能否提取出属性值、标签、提示?我看到的资料应该是不可以,因为属性值等独立于块存在,是'((0 . "ATTRIB"))的数据
八楼的程序实质上是在遍历整个图纸中的dxf数据(由(setq sname (EntNext sname))可看出),而非在选中的块中遍历每个块的数据,最关键出是'((0 . "INSERT"))的组码中找不到与属性有关的东西,唯一可能的组码330我也试过,是指向块记录的指针
求教
你看到的那个块的组码并不包括块中对象,就像你看不到块里面的线的属性一样,块中的对象应该用ENTNEXT遍历整个块,当找到"SEQEND"这个子对象是块的结束标记,之前的就是没有去判断这个结束标记所以变成了遍历整个文件了~文件中
"ATTRIB"的数据是属性默认值, |
|