乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 68|回复: 4

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

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 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. ;;;;;;========管子汇料=====
  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. ;;;;;;;;=======管子汇料结束
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-7-8 17:54:00 | 显示全部楼层
你说的不成功是指什么,有什么错误提示,或返回值是什么?
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 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!
现在我想知道第二种做法错在哪?
谢谢!!
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2003-7-9 08:53:00 | 显示全部楼层
我两个返回都正确,没有你说的错误,
第一个返回需要的结果,
第二个返回空,因为WP是在后面点列表围成的多边形中选择,两个点不能产生一个多边形,所以不能包含任何东西,因此返回空。
回复

使用道具 举报

9

主题

22

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2003-7-10 20:55:00 | 显示全部楼层
其实多看CAD的帮助文档会发现很多,呵呵,我就是看帮助文档编程的,当然起步是龙龙仔大哥对我的启发,不然可能我现在都不会。好像引用元素时元素是变量时应该都用cons的格式吧。如果框选范围不是要很精确的话,可以去掉ssget后面的参数。
(setq ab (ssget (list (cons 0 "text") (cons 8 layer))))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 00:45 , Processed in 2.814560 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表