明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2131|回复: 4

请教: 如何编写生成所选框内并且匹配过滤符表的实体选择集.

[复制链接]
发表于 2003-7-8 17:08:00 | 显示全部楼层 |阅读模式
请问各位高手: 如何编写生成所选框内并且匹配过滤符表的实体选择集.
我的目的是这样的:
     此段程序用来汇一个DWG文件中的管子材料的,是一个文件一张图.现在想改成一个文件多张图, 下列语句需要加上框选条件,点由用户输入:
   (setq ab (ssget "X" (list '(0 . "TEXT") (cons 8 layer))))
   ;;;其中layer为变量
   已经知道框选的两个点:
   (setq w1 (list (+ x1 112) (+ y1 -117)))
   (setq w2 (list (+ x1 -320) (+ y1 190)))
   如何利用 (ssget "WP" pt_list 过滤符表) 选择在w1 w2 框内的,并且在layer层上的所有TEXT.我在R14上没有调试成功.
   (1) (setq ab (ssget "W" w1 w2 (list '(0 . "TEXT") (cons 8 layer))))
   (2) (setq ab (ssget "WP" (list w1 w2) (list '(0 . "TEXT") (cons 8 layer))))

  请教各位如何实现上述功能.

下面为管段图汇料原程序的一部分:

  1. ;;;;;;========管子汇料=====<1>
  2. (princ)
  3. (princ "搜索管子")
  4. (setq filename1 (strcat "c:\\cad-r14\\iso-edb\" xmgh_tpdi "\" djdh "\" djdh "gj.txt" ))
  5. (setq fp (open filename1 "r"))
  6. (while (setq dn (read-line fp))
  7.      (setq filename (strcat "c:\\cad-r14\\iso-edb\" xmgh_tpdi "\" djdh "\" djdh "gz.txt"))
  8.      (setq f (open filename "r")) (setq dn1 "333")
  9.                     (while   (/= dn dn1)  
  10.                                (setq sz (read-line f))
  11.                 (setq sza (read sz))
  12.                              (setq dn1 (nth 0 sza))
  13.                              (if (= dn dn1)
  14.                                    (progn
  15.                     (setq gj (nth 1 sza))  (setq bh (nth 2 sza)) (setq ms (nth 3 sza))
  16.                      (setq cl (nth 4 sza)) (setq by1 (nth 5 sza))(setq by2 (nth 6 sza))         
  17.                      (setq desc (strcat "PIPE" " " gj "''" " " bh " " ms))
  18.          (setq layer (strcat dn djdh "-iso"));;;;求层名
  19.                           ))
  20.               );;;end while
  21.   (close f)  
  22.    
  23. ;;;========管子汇料开始
  24. [b][U][I](setq ab (ssget "X" (list '(0 . "TEXT") (cons 8 layer))))[/I][/U][/b]
  25. ;;;上句
  26.       (if (/= ab nil)
  27.          (progn
  28.             (setq i 0)
  29.              (while (< i (sslength ab))
  30.                (setq b (ssname ab i))
  31.                (setq a (entget b))
  32.                (setq text (assoc '1 a))
  33.                (setq text (cdr text))
  34.                (setq gz-sl (+ gz-sl (atof text)))
  35.                (setq i (+ 1 i))   
  36.              )
  37.             (setq gz-sl (/ gz-sl 1000))
  38.             (setq gz-sl (rtos gz-sl 2 2))
  39.             (if (/= gz-sl 0)
  40.               (progn
  41.                    (setq gz-sl (strcat gz-sl "m"))
  42.                    (command "text" p1 2.3 0 desc)
  43.                    (command "text" p2 2.3 0 cl)
  44.                    (command "text" p3 2.3 0 gz-sl)
  45.                    ;;;^*^
  46.                    (princ)(princ "搜索管子")
  47.                    (setq gz-sl 0)
  48.                         (setq y1 (+ y1 6))
  49.                         (setq p1 (list x1 y1));;DESCRIPTION
  50.                         (setq p2 (list (+ x1 59.5) y1));;MATERIAL
  51.                         (setq p3 (list (+ x1 75.5) y1));;QTY
  52.                         (setq p4 (list (+ x1 85.3) y1));;REMARK

  53.                      );;over progn
  54.                     );;;;over if
  55.                    );;;over progn
  56.              );;;;over if
  57. (PRINC".")
  58. );;;end 每层循环结束
  59. (close fp);;;;关掉管径数据库
  60. ;;;;;;;;=======管子汇料结束
发表于 2003-7-8 17:54:00 | 显示全部楼层
你说的不成功是指什么,有什么错误提示,或返回值是什么?
 楼主| 发表于 2003-7-8 19:30:00 | 显示全部楼层
(1)(setq ab (ssget "W" w1 w2 (list '(0 . "TEXT") (cons 8 layer))))
   执行结果不对,应该搜索到的图元却没有搜索到.

(2)(setq ab (ssget "WP" (list w1 w2) (list '(0 . "TEXT") (cons 8 layer))))
错误信息为:Unexpected exception in lisp main!
现在我想知道第二种做法错在哪?
谢谢!!
发表于 2003-7-9 08:53:00 | 显示全部楼层
我两个返回都正确,没有你说的错误,
第一个返回需要的结果,
第二个返回空,因为WP是在后面点列表围成的多边形中选择,两个点不能产生一个多边形,所以不能包含任何东西,因此返回空。
发表于 2003-7-10 20:55:00 | 显示全部楼层
其实多看CAD的帮助文档会发现很多,呵呵,我就是看帮助文档编程的,当然起步是龙龙仔大哥对我的启发,不然可能我现在都不会。好像引用元素时元素是变量时应该都用cons的格式吧。如果框选范围不是要很精确的话,可以去掉ssget后面的参数。
(setq ab (ssget (list (cons 0 "text") (cons 8 layer))))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 18:48 , Processed in 0.175931 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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