明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 816|回复: 3

[提问] 关于选择指定名称的块和根据点表创建选择集

[复制链接]
发表于 2015-6-29 14:54 | 显示全部楼层 |阅读模式
  1. (defun C:wx()
  2. (vl-load-com)
  3. (command "undo" "be")
  4. (setvar "cmdecho" 0)
  5. (command "ucs" "w")
  6. (princ "\n请选择物体:")
  7. (while(null
  8. ;;;   (setq en (ssget '((0 . "LWPOLYLINE") (62 . 5) )   ))
  9.    ;选择指定名称的图块,例如块名为"a3",注释的上一句选择蓝色的多段线可以执行,我调试时都时用选的多段线
  10.    (setq en (ssget "x" '((0 . "~block,~a3"))))
  11.    ))
  12. (setq minx0 1e6 miny0 1e6 maxx0 -1e6 maxy0 -1e6)
  13. (setq i 0)
  14. (repeat (sslength en)
  15.   (setq end (ssname en i))
  16.   (setq end_data (entget end))
  17.    ;求选择集的最大和最小坐标
  18.   (vla-getboundingbox(vlax-ename->vla-object end) 'minp 'maxp)
  19. (setq minp (vlax-safearray->list minp)
  20.        maxp (vlax-safearray->list maxp))
  21. (setq minx (car minp)
  22.        maxx (car maxp)
  23.        miny (cadr minp)
  24.        maxy (cadr maxp))
  25.   ;获得选择集的最大和最小坐标
  26.   ;求出图框的高度h和宽度w
  27.   (setq w (- maxx minx)
  28.   h (- maxy miny))
  29. ;;;   ;判断图幅放大比例
  30.    
  31.   (cond
  32.   ((= (/ h 594) (/ w 841) ) (setq scl (/ h 594)))
  33.   ((= (/ h 420) (/ w 594) ) (setq scl (/ h 420)))
  34.   ((= (/ h 297) (/ w 420) ) (setq scl (/ h 297))))
  35. ;;;;求出图号位置
  36.     (setq tx1 (- maxx (* scl 81)))
  37.     (setq ty1 (+ miny (* scl 19)))
  38.     (setq tx2 (- maxx (* scl 5)))
  39.     (setq ty2 (+ miny (* scl 33)))
  40.    (setq px1 (list tx1 ty1))
  41.    (setq px2 (list tx2 ty1))
  42.    (setq px3 (list tx2 ty2))
  43.    (setq px4 (list tx1 ty2))
  44.    ;创建点表;以上运行都没出错,可以得到监视的px1-px4的值,但是下一步创建pt_list
  45.    ;点表时,监视得到的pt_list的值为((px1 px2 px3 px4)),通过进一步选择可以看到
  46.    ;px1的值,但是无法创建选择级,提示点参数错误
  47.    (setq pt_list list(px1 px2 px3 px4))
  48.    ;根据点表创建选择集
  49. (setq tuhao (ssget "WP" pt_list))
  50.   
  51.   (setq i(1+ i))
  52. )


  53. )
发表于 2015-6-29 15:37 | 显示全部楼层
(setq pt_list list(px1 px2 px3 px4))
==>
(setq pt_list (list px1 px2 px3 px4))
 楼主| 发表于 2015-6-29 16:34 | 显示全部楼层
本帖最后由 war32 于 2015-6-29 21:44 编辑
Andyhon 发表于 2015-6-29 15:37
(setq pt_list list(px1 px2 px3 px4))
==>
(setq pt_list (list px1 px2 px3 px4))

好吧,范了个低级错误,一直没检查出来,不过用ssget函数选择指定名称的块怎么办啊,其余的功能都实现了,现在就差选择指定名称的块了
发表于 2015-6-29 21:56 | 显示全部楼层
war32 发表于 2015-6-29 16:34
好吧,范了个低级错误,一直没检查出来,不过用ssget函数选择指定名称的块怎么办啊,其余的功能都实现了, ...

(setq en (ssget "x" '((0 . "~block,~a3"))))
==>
(setq en(ssget"X"'((0 . "insert")(2 . "指定的块名"))))
或者(setq en(ssget"X"(list'(0 . "insert")(cons 2(getstring"要选定的图块名:")))))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-25 23:30 , Processed in 0.200446 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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