找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1050|回复: 5

[求助] [求助]:可不可以把属性块里的"提示"作为过滤条件对图块进行

[复制链接]
发表于 2009-5-16 18:39:47 | 显示全部楼层 |阅读模式

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

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

×
可不可以把属性块里的"提示"作为过滤条件对图块进行选择呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-5-17 21:05:49 | 显示全部楼层
应该是可以的吧,如果不可以也没有关系,扩大搜索范围,然后进行选择集的处理,剔除不符合条件的即可。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2009-5-19 09:23:01 | 显示全部楼层
(setq ss (ssget "X" (list (0 . "INSERT"))))

(setq en (ssname ss 0))
(setq elist (entget en '("*"))) ;如果有扩展数据,一并取出。

(setq sname (cdr (assoc 2 elist))
      elist (tblsearch "BLOCK" sname))
(setq etbll (cons slist etbll)
      sname (cdr (assoc -2 slist))
      )
(while (setq etbll (cons (entget sname) etbll)
                         sname (entnext sname)
                         )
  )

有部分是抄书上的,没有写全,etbll就是所有的数据了,相信你根据这个数据剔除选择集中不符合条件的应该很简单了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-19 20:00:15 | 显示全部楼层
;;利用属性块中的提示选择块
;;(setq FILTER (JW_ATT "test"))
;;(setq SS (ssget (list (cons 0 "INSERT") (cons 2 FILTER))))
(defun JW_ATT (str / BLK_NA FILTER)
;;By carrot1983 2009-05-18
(setq FILTER "")
(vlax-for BLK        (vla-get-blocks
                (vla-get-activedocument (vlax-get-acad-object))
                )
(vlax-for X        BLK
(if (and (= (vla-get-objectname X) "AcDbAttributeDefinition")
         (wcmatch        (vla-get-promptstring X)
                        str
         ) ;_支持模糊匹配
         (setq BLK_NA (vla-get-name BLK))
        )
        (setq FILTER (strcat "`" BLK_NA "," FILTER)) ;_`匿名块用到
)
)
)
(if (= FILTER "")
NIL
FILTER
)
)
;有很多这样的块,提示有“标高_1:10”、“标高_1:20”“标高_1:40”“标高_1:50”“标高_1:100”“标高_1:150”“标高_1:200”
;需要批量进行处理
;下面这个程序可以完成,要搜索图中所有的块,然后才进行判断,文件大一点的话太慢了。
;请教如何改成:只对所选的块进行判断?
(defun C:TT ( / edat edat1 en filter in_sc1 ins ins_e insc n n_in2 scal ss_bg promptstring)
(princ
    "\n把属性块里的(提示)作为过滤条件对图块进行选择 By carrot1983 REV2009-05-19"
  )
(setq ss (ssget '((0 . "INSERT"))))
(SETQ scal 50)
(if (/= nil (setq FILTER (JW_ATT (strcat "标高*"))))
(progn
(vl-cmdf "select" ss "")
(setq ss_bg (ssget "p" (list (cons 0 "INSERT") (cons 2 FILTER))))
(repeat (setq n (sslength ss_bg))
(setq edat1 (ssname ss_bg (setq n (1- n)))
edat (tblobjname "BLOCK" (cdr (assoc 2 (setq INS_e (entget edat1)))))
)
(while (and edat (setq en (entget edat)))
    (if (= "ATTDEF" (cdr (assoc 0 en)))
    (setq tag  (cdr (assoc 2 en))
     promptstring (cdr (assoc 3 en))
      )
    )
    (setq edat (entnext edat))
)
(setq IN_SC1 (atof (substr promptstring (+ (vl-string-position (ascii ":") promptstring) 2))));提取标高_1:后面的数据

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 23:33 , Processed in 0.178556 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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