找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1134|回复: 3

[原创] 发两个小东西,选择含有相同属性值的同名块,并调用 特性面板 进行编辑

[复制链接]
发表于 2004-11-4 17:16:00 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 yularna 于 2015-1-26 18:38 编辑

发两个小东西,帮同事写的.
[pcode=lisp,true]
;; 选择同名块,并调用 特性面板 进行编辑.
(defun c:propblk ()
  (setq ss (ssget "x" (list (cons 0 "INSERT")(cons 2 (cdr(assoc 2 (entget(car(entsel "\n 选择参照块:")))))))))
  (sssetfirst ss ss)
  (vl-cmdf "._properties")
)

;; 选择含有相同属性值的同名块,并调用 特性面板 进行编辑.
(defun c:proprib (/ ss2 el en de d0 ss e o)
  (setq        ss2 (ssadd)
        el  (entsel "\n 选择参照块中的属性:")
        en  (entget (car el))
        de  (nentselp (cadr el))
        den (entget (car de))
  )
  (cond
    ((= "ATTRIB" (cdr (assoc 0 den)))
     (setq d0 (cdr (assoc 1 den))
           ss (ssget "x"(list (cons 0 "INSERT")(cons 2 (cdr (assoc 2 en)))))
           i  -1)
     (while (setq e (ssname ss (setq i (1+ i))))
       (setq o (vlax-ename->vla-object e))
       (if(and
           (eq (vla-get-HasAttributes o) :vlax-true)
           (apply 'or(mapcar'(lambda (x) (eq (vla-get-TextString x) d0))(vlax-invoke o 'GetAttributes)))
         )
          (ssadd e ss2)
       )
     )
     (progn (sssetfirst ss2 ss2) (vl-cmdf "._properties"))
    )
    (T (princ "\n 没有合适的实体!"))
  )
  (princ)
)
[/pcode]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-11-5 13:36:09 | 显示全部楼层
;;江南兄:Sorry![幫]同事寫的PROPRIB程序(點選及判斷結構寫得很差)!!  8-(
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-11-5 20:33:24 | 显示全部楼层
本帖最后由 yularna 于 2015-1-26 18:39 编辑

献丑了,临时写的,因为块中可能会有多个属性,属性值也各不相等,所以必须直接点中属性,才得到想要的选集,一时间还没想到更好的办法。
至于点选及判断结构,因为上述原因,这么写操作起来也不会“出错”。只是没有点中物体的时候,返回出错提示有点不雅观。
修改了一个
[pcode=lisp,true]
(defun c:bbb (/ dxf ss2 ae bn d0 i ss e o)
  (defun dxf (e id)(cdr(assoc id (entget e)))) ;; 取实体-实体表 的索引值.
  (setq        ss2 (ssadd)
        ae  (nentsel "\n 选择参照块中的属性<退出>:")
  )
  (cond
    ((member (getvar "errno") '(52 2)) nil)
    ((and ae (= "ATTRIB" (dxf (car ae) 0)))
     (setq bn (dxf (ssname (ssget (cadr ae) '((0 . "INSERT"))) 0) 2)
           d0 (dxf (car ae) 1))
     (setq i -1 ss (ssget "x" (list (cons 0 "INSERT")(cons 2 bn))))
     (while (setq e (ssname ss (setq i (1+ i))))
       (setq o (vlax-ename->vla-object e))
       (if (apply 'or (mapcar'(lambda (x) (eq (vla-get-TextString x) d0))(vlax-invoke o 'GetAttributes)))
         (ssadd e ss2)
       )
     )
     (sssetfirst ss2 ss2)
     (vl-cmdf "._properties")
    )
    (T (princ "\n 没有选中有效实体!")(c:bbb))
  )(princ)
)
[/pcode]

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 19:54 , Processed in 0.164691 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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