明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3027|回复: 14

[讨论]看看这个修改属性块的程序

  [复制链接]
发表于 2004-5-13 14:51:00 | 显示全部楼层 |阅读模式
这个程序为什么不能只修改所选的对象了(如果我只选一个属性块,但它会循环更改图中所有的属性块): (Defun c:SB (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
(SetQ sname (ssname (ssget '((0 . "INSERT"))) 0))
(setq sn sname)
(While sname
(setq slist (entget sname))
(if (= (cdr (assoc 0 slist)) "ATTRIB")
(progn
(command ".undo" "E")
(command ".undo" "BE")
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 2 slist)) "--->" (cdr (assoc 1 slist)) ">>:")))
(setq val (if (= val "") (cdr (assoc 1 slist)) val))
(setq slist (subst (cons 1 val) (assoc 1 slist) slist))
(entmod slist)
(command ".undo" "E")
)
)
(setq sname (EntNext sname))
)
(entupd sn)
(princ)
)
另外能让
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 2 slist)) "--->" (cdr (assoc 1 slist)) ">>:")))
换成是属性提示值吗(好像要ATTDEF对象)
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 3 slist)) "--->" (cdr (assoc 1 slist)) ">>:")))

发表于 2004-5-13 16:13:00 | 显示全部楼层
你用的是EntNext,他会一个一个的找下去,(if (= (cdr (assoc 0 slist)) "ATTRIB")
中多加条件,仔细看看飞班主连接给你的程序吧,我原来也搞不清楚的。
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=19422
发表于 2004-5-13 16:51:00 | 显示全部楼层
指令:_ddatte
发表于 2004-5-14 08:14:00 | 显示全部楼层
(defun C:SB (/ SLIST SNAME ETBLL)
(princ "\n修改屬性值---VER 1.0。")
(setq SNAME (ssname (ssget ":s" '((0 . "INSERT") (66 . 1))) 0))
(if SNAME
(progn
(command ".undo" "E")
(command ".undo" "BE")
(setq SN SNAME
SNAME (entnext SNAME)
)
(while (/= "SEQEND" (cdr (assoc 0 (setq SLIST (entget SNAME)))))
(setq VAL (getstring (strcat "\n輸入新的屬性值<<"
(cdr (assoc 2 SLIST))
"--->"
(cdr (assoc 1 SLIST))
">>:"
)
)
)
(setq VAL (if (= VAL "")
(cdr (assoc 1 SLIST))
VAL
)
)
(setq SLIST (subst (cons 1 VAL) (assoc 1 SLIST) SLIST))
(entmod SLIST)
(setq SNAME (entnext SNAME))
)
(entupd SN)
(command ".undo" "E")
)
)
(princ)
)
 楼主| 发表于 2004-5-14 08:53:00 | 显示全部楼层
龙版主的这个程序好棒,多谢了。



如果能在提示里显示属性提示值就更好了。


另外你这个SEQEND是指什么?
请指教小弟的愚问。
发表于 2004-5-14 13:24:00 | 显示全部楼层

;;選擇帶屬性圖塊

(setq SNAME (ssname (ssget ":s" '((0 . "INSERT") (66 . 1))) 0))

Dxf 66

變動屬性伴隨旗號(可選擇的;預設值 = 0);若屬性伴隨旗號的值是 1,則插入點後預期會接著一系列屬性元件(由 seqend 元件結束)

seqend元件

標記聚合線頂點(頂點類型名稱)的結尾,或具有屬性值( 66 群碼表示且在插入圖元中不為 0 )屬性圖元(屬性類型名稱)的結尾。這個碼不會儲存在 DXF 檔案中。 (defun C:SB (/ SLIST SNAME ETBLL SN1 SN1LIST)
(princ "\n修改屬性值---VER 1.0。")
(setq SNAME (ssname (ssget ":s" '((0 . "INSERT") (66 . 1))) 0))
(if SNAME
(progn
(command ".undo" "E")
(command ".undo" "BE")
(setq SN SNAME
SNAME (entnext SNAME)
)
(setq SN1
(cdr
(assoc -2
(tblsearch "block" (cdr (assoc 2 (entget SN))))
)
)
)
(while (/= "SEQEND" (cdr (assoc 0 (setq SLIST (entget SNAME)))))
(setq SN1LIST (entget SN1))
(setq VAL (getstring (strcat "\n輸入新的屬性值<<"
(cdr (assoc 3 SN1LIST))
"--->"
(cdr (assoc 1 SLIST))
">>:"
)
)
)
(setq VAL (if (= VAL "")
(cdr (assoc 1 SLIST))
VAL
)
)
(setq SLIST (subst (cons 1 VAL) (assoc 1 SLIST) SLIST))
(entmod SLIST)
(setq SN1 (entnext SN1))
(setq SNAME (entnext SNAME))
)
(entupd SN)
(command ".undo" "E")
)
)
(princ)
)

 楼主| 发表于 2004-5-14 14:13:00 | 显示全部楼层
非常感谢龙版主!!
 楼主| 发表于 2004-5-14 16:10:00 | 显示全部楼层
哦,龙版主,有个问题请教,用你6楼的程序测试下面这个图提参数类型错误:


       

本帖子中包含更多资源

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

x
 楼主| 发表于 2004-5-17 11:03:00 | 显示全部楼层
再请教龙版主,SEQEND这个是指什么?
发表于 2004-5-17 11:19:00 | 显示全部楼层
看看帮助文件中的创建复杂图元
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 05:45 , Processed in 0.161867 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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