找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lzy9788

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

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

使用道具 举报

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

使用道具 举报

发表于 2004-5-15 15:06:43 | 显示全部楼层
"INSERT" 的66组码为1说明有属性,用entnext 一路下去就算属性实体,当找到"SEQEND"这个子对象是块的结束标记,之前和“insert”之间都是属性
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-15 17:51:15 | 显示全部楼层
谢谢!luoyaya和陌生人长老诲人不倦
(Defun c:SB ()
  (princ "\n修改属性值---VER 1.0。")
  (setq ss (ssget '((0 . "INSERT"))))
  (setq sscnt (sslength ss))
  (command ".undo" "BE")

  (While (> sscnt 0)
    (setq sn (ssname ss (setq sscnt (1- sscnt))))
    (setq sname sn)
    (setq slist (entget sname))
    (if        (assoc 66 slist)
      (progn
        (while
          (/= (cdr (assoc 0 (entget (setq sname (entnext sname)))))
              "SEQEND"
          )

           (setq blkattlist (entget sname) ;属性紧跟在后面
                 blkattval  (assoc 1 blkattlist)
           )
           (redraw sname 3)
           (setq newval        (getstring (strcat "\n输入新的属性值<<"
                                           (cdr (assoc 2 blkattlist))
                                           "--->"
                                           (cdr (assoc 1 blkattlist))
                                           ">>:"
                                   )
                        )
           )
           (setq newval        (if (= newval "")
                          (cdr (assoc 1 blkattlist))
                          newval
                        )
           )
           (setq blkattlist
                  (subst (cons 1 newval)
                         (assoc 1 blkattlist)
                         blkattlist
                  )
           )
           (entmod blkattlist)
           (entupd sname)
        )                                ;内层while
      )                                        ;progn
    )                                        ;if
  )                                        ;while
  (command ".undo" "E")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-5-16 14:08:34 | 显示全部楼层
最初由 blackspot 发布
[B]谢谢!luoyaya和陌生人长老诲人不倦
(Defun c:SB ()
  (princ "\n修改属性值---VER 1.0。")
  (setq ss (ssget '((0 . "INSERT"))))
  (setq sscnt (sslength ss))
  (command ".undo" "BE")

  (While (> ss... [/B]

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

使用道具 举报

发表于 2004-5-16 14:41:57 | 显示全部楼层
后面的(entupd sname)已经更新屏幕了,我就没再用(redraw sname)了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-16 17:25:39 | 显示全部楼层
最初由 blackspot 发布
[B]后面的(entupd sname)已经更新屏幕了,我就没再用(redraw sname)了 [/B]

不知道你试过没,redraw 之后会在屏幕上有个影子的
向那位说的一样要用REDRAW再更新一下的
不过我觉得最好还是不要用REDRAW的,一个意义不是很大,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-16 17:34:22 | 显示全部楼层
(redraw 物体名 3)是高亮显啊,我以前一直在程序中这样显示以表达哪些有效物体被选中的,再在主功能段后用(redraw 物体名 4)恢复常态显示,但在此程序中(entupd)本身有刷新的功能了
请教luoyaya,"redraw 之后会在屏幕上有个影子的"是指有可能的副作用吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 05:13 , Processed in 0.217581 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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