找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1711|回复: 1

[图块] (XD::Block:Select)获得INSERT,XREF在多边形顶点内的实体名

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-30 19:28:20 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Block:Select
调用格式: (XD::Block:Select ent pts sel filter)
参数说明: ent--INSERT,XREF实体名
pts--顶点表
sel--方式 "C" 交叉窗口 其他"W"
filter--类SSGET过滤表
返回值: 实体名表 或NIL
函数简介: 获得INSERT,XREF在多边形顶点内的实体名
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2013-06-30
备注: -
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. ;;;-----------------------------------------------------------;;
  2. ;;; 获得INSERT,XREF在多边形顶点内的实体名                     ;;
  3. ;;; 支持过滤表,如'((0 . "TEXT")(62 . 1)...)                  ;;
  4. ;;; 参数:                                                    ;;
  5. ;;;     ent--INSERT,XREF实体名                                ;;
  6. ;;;     pts--顶点表                                           ;;
  7. ;;;     sel--方式  "C" 交叉窗口 其他"W"                       ;;
  8. ;;;     filter--类SSGET过滤表                                 ;;
  9. ;;;返回值:实体名表
  10. ;;;-----------------------------------------------------------;;

  11. (defun XD::Block:Select (ent pts sel filter / box cname e elist lst m_b2w m_w2b n ob pts2 x)
  12.   (if (and
  13.         (setq cname (xdrx_object_classname ent))
  14.         (eq (car cname) "INSERT")
  15.       )
  16.     (progn
  17.       (setq m_b2w (xdrx_matrix_block2wcs ent)
  18.             m_w2b (xdrx_matrix_inverse m_b2w)
  19.             pts (mapcar
  20.                   '(lambda (x)
  21.                      (trans x 1 0)
  22.                    )
  23.                   pts
  24.                 )
  25.             pts2 (mapcar
  26.                    '(lambda (x)
  27.                        (trans (xdrx_point_transform x m_w2b) 0 1)
  28.                     )
  29.                    pts
  30.                  )
  31.       )
  32.       (setq ob (xdrx_object_get "block" (cdr (assoc 2 (entget ent)))))
  33.       (while (setq e (xdrx_object_next))
  34.         (setq elist (cons e elist))
  35.       )
  36.       (setq elist (mapcar
  37.                     'cadr
  38.                     elist
  39.                   )
  40.       )
  41.       (foreach n elist
  42.         (if (or
  43.               (not filter)
  44.               (and
  45.                 filter
  46.                 (vl-every '(lambda (x)
  47.                              (member x (entget e))
  48.                            ) filter
  49.                 )
  50.               )
  51.             )                               ; 过滤表
  52.           (progn
  53.             (setq box (xdrx_entity_box n))
  54.             (cond
  55.               ((= "C" (strcase sel))   ; _ 交叉窗交
  56.                 (if (vl-some '(lambda (x)
  57.                                 (apply
  58.                                   'xdrx_isinside
  59.                                   (cons x pts2)
  60.                                 )
  61.                               ) box
  62.                     )                       ; _ 文字四角点中任一点落在多边形内即被选中
  63.                   (progn
  64.                     (setq lst (cons n lst))
  65.                   )
  66.                 )
  67.               )
  68.               (t
  69.                 (if (vl-every '(lambda (x)
  70.                                 (apply
  71.                                   'xdrx_isinside
  72.                                   (cons x pts2)
  73.                                 )
  74.                               ) box
  75.                     )                       ; _ 文字四角点全部落在多边形内即被选中
  76.                   (setq lst (cons n lst))
  77.                 )
  78.               )
  79.             )
  80.           )
  81.         )
  82.       )
  83.     )
  84.   )
  85.   lst
  86. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 15个

财富等级: 恭喜发财

发表于 2021-4-5 09:41:55 | 显示全部楼层
授人以鱼不如授人以渔
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 06:44 , Processed in 0.721655 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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