yaokui25 发表于 2015-12-17 19:47:32

扩展数据选择求帮助!

本帖最后由 yaokui25 于 2015-12-18 15:14 编辑

最近遇到个棘手的问题,就是选择含有相同扩展数据的所有对象
今天研究了一天也没弄出个结果来,肯定大家帮帮忙!
说明内容在附件里
下面是附件里的内容《某一条线上的所扩展数据》
我想通过点选某条线段线,拾取该线上的扩展数据。根据 PMF_GROUP_HEADER_KEGAKI 中最后一趟代码的关键字 P STUD=M24×35 《关键字P后面是变化的   例如 STUD=M24×35G》来选中所有对象。

PMF_YOUSETSU_GROUPNAME
1000      PMF_1GA42U_Kegaki_21
PMF_YOUSETSU_FIGURE
1000      0
1040      542.802
·
·
·
PMF_GROUP_HEADER_KEGAKI
1000      F
1000      P STUD=M24×35

下面是根据 院长 和 llsheng_73 两位前辈的代码拼凑起来的
基本实现了我所要的功能但是有一点比较头疼的问题就是
STUD=M24×35和STUD=M24×35G 无法分开识别
如果选择STUD=M24×35 则 STUD=M24×35G 也会别一同选择上!
也就是说获取 P 后面的文字内用完全一致的对象!
(defun C:kkk (/ en e i s)
(setq s1 (car (entsel "\n ***** 选择文本: "))
      tx (cdr (assoc 1 (entget s1))))
(if(setq i 0 s (ssget "X"'((0 . "*LINE")(-3("PMF_GROUP_HEADER_KEGAKI")))))
    (progn
      (repeat(sslength s)
         (setq e(ssname s i))
          (if(vl-string-search (strcat tx)
            (apply'strcat(mapcar'cdr(vl-remove-if'(lambda(x)(/=(car x)1000))(cdr(last(assoc -3(entget e'("PMF_GROUP_HEADER_KEGAKI")))))))))
          (setq i(1+ i))
         (ssdel e s)
         )
      )
       (sssetfirst nil s)
      (if(>(setq i(sslength s)) 0)
      (princ (strcat "【" (itoa i) "】"tx" 被选择了."))
      )
    )
      (princ (strcat "\n ***** "tx" 不存在. *****"))
)
(princ)
)

xyp1964 发表于 2015-12-17 19:47:33



yaokui25 发表于 2015-12-17 19:49:08

本帖最后由 yaokui25 于 2015-12-17 22:08 编辑

希望大家不要被我下面的代码迷惑
我的目的是点选带有扩展数据"PMF_GROUP_HEADER_KEGAKI" 根据它所含有的"STUD=M24×35"关键字,来选择所有对象.
希望大家有时间的话能看看我上传的附件,里面有详细说明。

下面是自己做的,仅供参考!
(defun C:K333 (/ dxf ent i rt ss)(setvar "cmdecho" 0)
(setvar "cmdecho" 0)
(setq ss (ssget "X" '((-3 ("PMF_GROUP_HEADER_KEGAKI")))))
(if (not (null ss))
    (progn
      (setq i(sslength ss)
            rt (ssadd)
      )
      (repeat i
      (setq ent (ssname ss (setq i (1- i)))
            dxf (entget ent '("PMF_GROUP_HEADER_KEGAKI"))
            dxf (assoc -3 dxf)
      )
      (if (vl-string-search "STUD=M24×35" (cdr (cadadr dxf)))
          (ssadd ent rt)
      )
      )
      (princ (strcat "\n 〓共选择了【" (itoa (sslength rt)) "】个对象〓"))
      (sssetfirst nil rt)
    )
)

(setvar "cmdecho" 1)
(princ)
)

springwillow 发表于 2015-12-17 20:20:18

虑选扩展信息样例如下:(setq ss (ssget "X" (list '(0 . "LWPOLYLINE")'(8 . "SSFW") (list -3 (list "CBJ" (cons 1000 (rtos n0 2 0)))))))

yaokui25 发表于 2015-12-17 20:28:55

springwillow 发表于 2015-12-17 20:20 static/image/common/back.gif
虑选扩展信息样例如下:

谢谢您的回答,能否帮我改改上面的代码

springwillow 发表于 2015-12-17 20:39:51

yaokui25 发表于 2015-12-17 20:28 static/image/common/back.gif
谢谢您的回答,能否帮我改改上面的代码

(setq ss (ssget "X" (list(list -3 (list "PMF_GROUP_HEADER_KEGAKI")))))

yaokui25 发表于 2015-12-17 20:54:18

springwillow 发表于 2015-12-17 20:39 static/image/common/back.gif


我也是这么改的,还是选不中
PMF_GROUP_HEADER_KEGAKI   <存在两行数据只能选中 F>
1000      F
1000      P STUD=M24×35

xyp1964 发表于 2015-12-17 22:08:09

;; tt(过滤扩展数据)
(defun c:tt ()
(defun abc (s1 / d3 lst)
    (setq d3 (xyp-DXF -3 s1))
    (setq lst (mapcar 'cdr d3))
    (setq lst (apply 'append lst))
    (mapcar 'cdr lst)
)
(setq s1(car (entsel "\n选择文本: "))
      tx(xyp-DXF 1 s1)
      i   -1
      ss1 (ssadd)
)
(if (setq ss (ssget '((0 . "LINE") (8 . "xdata"))))
    (progn
      (while (setq s1 (ssname ss (setq i (1+ i))))
      (if (and (setq lst (abc s1))
               (vl-some '(lambda (x) (vl-string-search x tx)) lst)
            )
          (ssadd s1 ss1)
      )
      )
      (sssetfirst nil ss1)
    )
)
(princ)
)

yaokui25 发表于 2015-12-17 22:12:39

xyp1964 发表于 2015-12-17 22:08 static/image/common/back.gif


真心谢谢版主大人,由于电脑的系统原因,您的通用函数加载之后是乱码。恳请您能否提供一个完整程序。今天废了好大劲也没弄出来。

xyp1964 发表于 2015-12-17 22:19:59

;; tt(过滤扩展数据)
(defun c:tt ()
(defun abc (s1 / lst)
    (setq lst (mapcar 'cdr (cdr (assoc -3 (entget s1 '("*"))))))
    (mapcar 'cdr (apply 'append lst))
)
(setq s1(car (entsel "\n选择文本: "))
      tx(cdr (assoc 1 (entget s1)))
      i   -1
      ss1 (ssadd)
)
(if (setq ss (ssget '((0 . "LINE") (8 . "xdata"))))
    (progn
      (while (setq s1 (ssname ss (setq i (1+ i))))
      (if (and (setq lst (abc s1))
               (vl-some '(lambda (x) (vl-string-search x tx)) lst)
            )
          (ssadd s1 ss1)
      )
      )
      (sssetfirst nil ss1)
    )
)
(princ)
)
页: [1] 2 3
查看完整版本: 扩展数据选择求帮助!