明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5108|回复: 20

[已解答] 扩展数据选择求帮助!

[复制链接]
发表于 2015-12-17 19:47:32 | 显示全部楼层 |阅读模式
10明经币
本帖最后由 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×35STUD=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)
)
附件: 您需要 登录 才可以下载或查看,没有账号?注册
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2015-12-17 19:47:33 | 显示全部楼层


本帖子中包含更多资源

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

x

点评

谢谢院长大人  发表于 2015-12-18 10:29
回复

使用道具 举报

 楼主| 发表于 2015-12-17 19:49:08 | 显示全部楼层
本帖最后由 yaokui25 于 2015-12-17 22:08 编辑

希望大家不要被我下面的代码迷惑
我的目的是点选带有扩展数据"MF_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 ("MF_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 '("MF_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)
)
回复

使用道具 举报

发表于 2015-12-17 20:20:18 | 显示全部楼层
虑选扩展信息样例如下:
  1. (setq ss (ssget "X" (list '(0 . "LWPOLYLINE")'(8 . "SSFW") (list -3 (list "CBJ" (cons 1000 (rtos n0 2 0)))))))
回复

使用道具 举报

 楼主| 发表于 2015-12-17 20:28:55 | 显示全部楼层
springwillow 发表于 2015-12-17 20:20
虑选扩展信息样例如下:

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

使用道具 举报

发表于 2015-12-17 20:39:51 | 显示全部楼层
yaokui25 发表于 2015-12-17 20:28
谢谢您的回答,能否帮我改改上面的代码
  1. (setq ss (ssget "X" (list(list -3 (list "PMF_GROUP_HEADER_KEGAKI")))))
回复

使用道具 举报

 楼主| 发表于 2015-12-17 20:54:18 | 显示全部楼层
springwillow 发表于 2015-12-17 20:39


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

使用道具 举报

发表于 2015-12-17 22:08:09 | 显示全部楼层
  1. ;; tt(过滤扩展数据)
  2. (defun c:tt ()
  3.   (defun abc (s1 / d3 lst)
  4.     (setq d3 (xyp-DXF -3 s1))
  5.     (setq lst (mapcar 'cdr d3))
  6.     (setq lst (apply 'append lst))
  7.     (mapcar 'cdr lst)
  8.   )
  9.   (setq s1  (car (entsel "\n选择文本: "))
  10.         tx  (xyp-DXF 1 s1)
  11.         i   -1
  12.         ss1 (ssadd)
  13.   )
  14.   (if (setq ss (ssget '((0 . "LINE") (8 . "xdata"))))
  15.     (progn
  16.       (while (setq s1 (ssname ss (setq i (1+ i))))
  17.         (if (and (setq lst (abc s1))
  18.                  (vl-some '(lambda (x) (vl-string-search x tx)) lst)
  19.             )
  20.           (ssadd s1 ss1)
  21.         )
  22.       )
  23.       (sssetfirst nil ss1)
  24.     )
  25.   )
  26.   (princ)
  27. )
回复

使用道具 举报

 楼主| 发表于 2015-12-17 22:12:39 | 显示全部楼层
xyp1964 发表于 2015-12-17 22:08

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

使用道具 举报

发表于 2015-12-17 22:19:59 | 显示全部楼层
  1. ;; tt(过滤扩展数据)
  2. (defun c:tt ()
  3.   (defun abc (s1 / lst)
  4.     (setq lst (mapcar 'cdr (cdr (assoc -3 (entget s1 '("*"))))))
  5.     (mapcar 'cdr (apply 'append lst))
  6.   )
  7.   (setq s1  (car (entsel "\n选择文本: "))
  8.         tx  (cdr (assoc 1 (entget s1)))
  9.         i   -1
  10.         ss1 (ssadd)
  11.   )
  12.   (if (setq ss (ssget '((0 . "LINE") (8 . "xdata"))))
  13.     (progn
  14.       (while (setq s1 (ssname ss (setq i (1+ i))))
  15.         (if (and (setq lst (abc s1))
  16.                  (vl-some '(lambda (x) (vl-string-search x tx)) lst)
  17.             )
  18.           (ssadd s1 ss1)
  19.         )
  20.       )
  21.       (sssetfirst nil ss1)
  22.     )
  23.   )
  24.   (princ)
  25. )
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 00:44 , Processed in 0.223704 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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