yaokui25 发表于 2014-10-23 14:27:29

各位老师帮我看看这个图的扩展数据如何筛选

首先,图形都是由块组成的,然后每个边都有各自的扩展数据
同一个边
块分解之前的扩展数据是:
((-1 . <图形名: 7d9c9ca0>) (0 . INSERT) (330 . <图形名: 7e567dc0>) (5 . 4264) (100 .
AcDbEntity) (67 . 0) (410 . Model) (8 . GD24_F$R99$FG$BL_GAIKEI) (62 . 7) (6 .
Continuous) (100 . AcDbBlockReference) (2 . GD24_F$R99$FG$BL_LOWER) (10
-191114.0 17082.9 -18338.2) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 .
0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) (-3 (GAIKEI (1000 . W LOWER
C - -)) (KAKOUSHIRO (1000 . 0 0 0 0 0 0)) (TORITSUKE (1000 . WT S GD24_GWL
17.8013 -) (1013 -0.0963596 0.947234 0.305717))))
分解之后:
((-1 . <图形名: 7d9c9d38>) (0 . LINE) (330 . <图形名: 7e567dc0>) (5 . 4277) (100 .
AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (62 . 1) (6 . ByBlock) (100 .
AcDbLine) (10 3464.55 0.0 0.0) (11 3693.37 23.2772 2.49565e-009) (210 0.0 0.0
1.0) (-3 (YOUSETSU_KAKOU (1000 . K 0.0 45.0 0.0 27.2 0.0 0 11 1 0.0 0.0 0.0 0.0
0 0.0 0.0))))

问题就来了,分解之前和分解之后的扩展数据发生了变化
如何能选中分解之前的含有YOUSETSU_KAKOU ”K”扩展数据呢?同一个边分解的前后却发生了变化。

实在不行的话,那么把它分解然后选中含有YOUSETSU_KAKOU ”K”的扩展数据。

下面是小弟写的一个简陋的代码
迫不得已,在分解之后选中含有"K"的扩展数据结果还是没有选中
(defun c:K3 (/ ss)
   (setvar "cmdecho" 0)
   (SETQ ss (ssget "x" '((-3 ("YOUSETSU_KAKOU")(1000 . "K")))))
   (if (= ss (getvar ""))
   (vl-exit-with-error "")
   )
   (princ (strcat "\n 〓共选中了【" (itoa (sslength ss)) "】个対象〓 "))
   (sssetfirst nil ss)
(setvar "cmdecho" 1)
(princ)
)

附件已上传,请各位老师帮帮忙

vectra 发表于 2014-10-23 14:27:30

本帖最后由 vectra 于 2014-10-23 20:02 编辑


(defun get-block-names (/ blocks doc dxf rt)
(setq        doc    (vla-get-activedocument (vlax-get-acad-object))
        blocks (vla-get-blocks doc)
)

(vlax-for block blocks
    (if        (= :vlax-false (vla-get-islayout block))
      (vlax-for        ent block
        (setq dxf (entget (vlax-vla-object->ename ent) '("YOUSETSU_KAKOU"))
              dxf (cdr (assoc -3 dxf))
        )
        (if (and dxf
               (vl-string-search "K" (cdr (cadar dxf)))
               (not (member (vla-get-name block) rt))
          )
          (setq rt (cons (vla-get-name block) rt))
        )
      )
    )
)
rt
)

(defun concrete        (lst / rt)
(setq        rt(car lst)
        lst (cdr lst)
)
(while lst
    (setq rt(strcat rt "," (car lst))
          lst (cdr lst)
    )
)
rt
)
;;;_$ (concrete '("2" "1" "1"))
;;;"2,1,1"

(defun c:k3 (/ names ss)
(setq names (get-block-names))
(if names
    (progn
      (setq names (concrete names)
          ss          (ssget "X" (list '(0 . "INSERT") (cons 2 names)))
      )
      (sssetfirst nil ss)
    )
)
)

ivde 发表于 2014-10-23 15:58:50

xdata 1013 是一个随着父图元旋转和镜像(而不是移动、缩放或拉伸)的三维点 , 分解后就可能变化

vectra 发表于 2014-10-23 16:25:35

楼主没有理解 “块定义”、“INSERT”、图元、块定义内的图元的关系。筛选分解前图元扩展数据需要在块定义中遍历图元。

ssget 仅支持-3段过滤,即(-3 ("YOUSETSU_KAKOU"),其它扩展数据需遍历选择集并进行判断比较来筛选

yaokui25 发表于 2014-10-23 16:29:53

vectra 发表于 2014-10-23 16:25 static/image/common/back.gif
楼主没有理解 “块定义”、“INSERT”、图元、块定义内的图元的关系。筛选分解前图元扩展数据需要在块定义中 ...

谢谢您的点评,刚刚结束扩展数据把明经翻遍了也没找到合适的方法。
您能否帮兄弟一个忙,谢谢了

yaokui25 发表于 2014-10-23 16:31:17

ivde 发表于 2014-10-23 15:58 static/image/common/back.gif
xdata 1013 是一个随着父图元旋转和镜像(而不是移动、缩放或拉伸)的三维点 , 分解后就可能变化

我想再不分解的情况下选中对象,有什么办法吗?

yaokui25 发表于 2014-10-23 17:10:10

vectra 发表于 2014-10-23 16:49 static/image/common/back.gif


谢谢您耐心的回答
现在的这段代码,只能在块分解后才能被选中。可否实现在块不被分解的状态被下选中呢?
因为这方面没有接触过,所以能否实现实在不是很清楚,可能要求有些无理

vectra 发表于 2014-10-23 17:26:57

如果知道符合要求的那些块的名字,剩下的你可以搞定吗?

(defun test (/ blocks doc dxf rt)
(setq        doc    (vla-get-activedocument (vlax-get-acad-object))
        blocks (vla-get-blocks doc)
)

(vlax-for block blocks
    (if        (= :vlax-false (vla-get-islayout block))
      (vlax-for        ent block
        (setq dxf (entget (vlax-vla-object->ename ent) '("YOUSETSU_KAKOU"))
              dxf (cdr (assoc -3 dxf))
        )
        (if (and dxf
               (vl-string-search "K" (cdr (cadar dxf)))
               (not (member (vla-get-name block) rt))
          )
          (setq rt (cons (vla-get-name block) rt))
        )
      )
    )
)
rt
)

yaokui25 发表于 2014-10-23 18:07:15

vectra 发表于 2014-10-23 17:26 static/image/common/back.gif
如果知道符合要求的那些块的名字,剩下的你可以搞定吗?

我确实愚笨,恳请兄弟能否写个完整的,刚才自己弄了一下没得出结果
给您添麻烦了

yaokui25 发表于 2014-10-23 20:15:11

只差一步,大家帮忙完善一下吧
页: [1] 2
查看完整版本: 各位老师帮我看看这个图的扩展数据如何筛选