找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1375|回复: 24

[求助] [求助]:请大侠来看看这个程序的问题(修改属性值)

[复制链接]
发表于 2004-5-13 10:34:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
请大侠来看看这个程序的问题:

(Defun c:SBlock (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
  (setq slist (entget (ssname (ssget) 0)))
  (SetQ sname (Cdr (Assoc 2 slist))
slist (TblSearch "BLOCK" sname)
  )
  (SetQ sname (Cdr (Assoc -2 slist)))
  (While sname
    (setq slist (entget sname))
    (if (/= (cdr (assoc 3 slist)) nil)
    (princ (cdr (assoc 1 slist)))
      )
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 3 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))
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-5-13 11:01:32 | 显示全部楼层
(princ (cdr (assoc 1 slist)))好象有问题
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-13 11:16:31 | 显示全部楼层
这样,但不能修改属性值:
(Defun c:SBlock (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
  (setq slist (entget (ssname (ssget) 0)))
  (SetQ sname (Cdr (Assoc 2 slist))
slist (TblSearch "BLOCK" sname)
  )
  (SetQ sname (Cdr (Assoc -2 slist)))
  (While sname
    (setq slist (entget sname))
    (if (/= (cdr (assoc 3 slist)) nil)
(progn
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 3 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))
  )
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 11:27:48 | 显示全部楼层
刚刚看错的,
不过楼上的老兄的改的那个ATTDEF好像不是属性值呵呵,
1那个组码是默认属性值~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-13 11:37:06 | 显示全部楼层
有哪位能改进下吗
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 11:42:23 | 显示全部楼层
我在帮你查资料,

(Defun c:SB (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
;|(setq slist (entget (ssname (ssget) 0)))
(SetQ sname (Cdr (Assoc 2 slist))
slist (TblSearch "BLOCK" sname)
)
  
(SetQ sname (Cdr (Assoc -2 slist)))|;
  
(SetQ sname (ssname (ssget) 0))
  (setq sn sname)
(While sname
(setq slist (entget sname))
(if (= (cdr (assoc 0 slist)) "ATTRIB")
(progn
(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)
(princ)
)

OK了~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 11:49:38 | 显示全部楼层
你企图通过(setq sname (EntNext sname))遍历块容器内的各个图元,但属性文字、标签、提示数据并不存于块容器中,属性与块之间是松散的链接,只有炸开后单独提取属性的DXF组码才行,它的类名在Autocad 2005中为"attdef",如:((-1 . <Entity name: 7ef69a50>) (0 . "ATTDEF") (330 . <Entity name:
7ef6ecb8>) (5 . "2AA") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbText") (10 427.032 229.142 0.0) (40 . 3.0) (1 . "val") (50 . 0.0)
(41 . 0.85) (51 . 0.0) (7 . "HZ") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0
0.0 1.0) (100 . "AcDbAttributeDefinition") (3 . "pro") (2 . "TAG") (70 . 0) (73
. 0) (74 . 0))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 11:59:55 | 显示全部楼层
(Defun c:SB (/ slist sname etbll)
(princ "\n修改属性值---VER 1.0。")
;|(setq slist (entget (ssname (ssget) 0)))
(SetQ sname (Cdr (Assoc 2 slist))
slist (TblSearch "BLOCK" sname)
)
  
(SetQ sname (Cdr (Assoc -2 slist)))|;
  
(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)
)
完善了一下~
楼主的主要问题 是用了那个TblSearch,这样就等于只修改了默认的值,:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 12:06:26 | 显示全部楼层
(Defun c:SBlock        ()
  (princ "\n修改属性值---VER 1.0。")
  (setq slist (entget (ssname (ssget) 0)))
  (SetQ        sname (Cdr (Assoc 2 slist))
        slist (TblSearch "BLOCK" sname)
  )
  (SetQ sname (Cdr (Assoc -2 slist)))
  (While sname
    (setq slist (entget sname))
    (if        (= (cdr (assoc 0 slist)) "ATTDEF")
(progn
      (princ (cdr (assoc 1 slist)))
   
    (setq val (getstring (strcat "\n输入新的属性值<<"
                                 (cdr (assoc 3 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)
  (entupd sname)
  )
      )
    (setq sname (EntNext sname))
  )
  (princ)
)
为何能改但不更新呢?请教
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 12:12:50 | 显示全部楼层
这里的(SetQ sname (Cdr (Assoc 2 slist))
slist (TblSearch "BLOCK" sname)
)
(SetQ sname (Cdr (Assoc -2 slist)))
SNAME是默认块,不是你那个当前块,所以改的是默认属性值~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-13 14:31:52 | 显示全部楼层
8 楼的这个可以,不过能让
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 2 slist)) "--->" (cdr (assoc 1 slist)) ">>:")))
换成是属性提示值吗
(setq val (getstring (strcat "\n输入新的属性值<<" (cdr (assoc 3 slist)) "--->" (cdr (assoc 1 slist)) ">>:")))
还有好像选择对象没用,图中有多少块它就要改多少块
有点问题.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-13 16:59:50 | 显示全部楼层
我想如要实现对选取的属性块的属性值的更改,理论上应该用双重的while循环
(ssget '((0 . "INSERT")))   构造选择集
(while 选择集中有块
(while 对其中有属性的每个块提取属性值并替换
)
)
以上步骤不复杂,但还是那个问题:对单个属性块能否提取出属性值、标签、提示?我看到的资料应该是不可以,因为属性值等独立于块存在,是'((0 . "ATTRIB"))的数据
八楼的程序实质上是在遍历整个图纸中的dxf数据(由(setq sname (EntNext sname))可看出),而非在选中的块中遍历每个块的数据,最关键出是'((0 . "INSERT"))的组码中找不到与属性有关的东西,唯一可能的组码330我也试过,是指向块记录的指针
求教
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-14 05:27:33 | 显示全部楼层
用VLISP吧!
(defun changeattribute ()
  (setq a (car (nentsel "\nSelect an Attribute: ")))
  (setq b (vlax-ename->vla-object a))
  (setq oh (vlax-get-property b 'textstring))
  (setq atv (getstring "Input New Value:"))
  (vlax-put-property b 'textstring atv)
  (princ)        
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-5-14 08:52:23 | 显示全部楼层
长老,你这个textstring是什么?
我在这里测试不了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-14 10:01:57 | 显示全部楼层
属性的属性值

; IAcadAttributeReference: AutoCAD Attribute Reference Interface
; Property values:
;   Alignment = 10
;   Application (RO) = #<VLA-OBJECT IAcadApplication 00a99ab4>
;   Backward = 0
;   Color = 6
;   Constant (RO) = 0
;   Document (RO) = #<VLA-OBJECT IAcadDocument 00ef1f8c>
;   FieldLength = 0
;   Handle (RO) = "3776"
;   HasExtensionDictionary (RO) = 0
;   Height = 0.15
;   Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 03881844>
;   InsertionPoint = (5.61316 0.140752 0.0)
;   Invisible = 0
;   Layer = "title_block"
;   Linetype = "BYLAYER"
;   LinetypeScale = 1.0
;   Lineweight = -1
;   Normal = (0.0 0.0 1.0)
;   ObjectID (RO) = 1077024048
;   ObjectName (RO) = "AcDbAttribute"
;   ObliqueAngle = 0.0
;   OwnerID (RO) = 1077024040
;   PlotStyleName = "Color_6"
;   Rotation = 0.0
;   ScaleFactor = 1.0
;   StyleName = "ROMAND"
;   TagString = "T1"
;   TextAlignmentPoint = (5.91316 0.215752 0.0)
;   TextGenerationFlag = 0
;   TextString = "H924"                    <<<<<<<<
;   Thickness = 0.0
;   UpsideDown = 0
;   Visible = -1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-11-1 04:53 , Processed in 0.279655 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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