乐筑天下

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

[编程交流] 选择块内部或交叉点

[复制链接]

73

主题

261

帖子

195

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
375
发表于 2022-7-5 17:33:34 | 显示全部楼层 |阅读模式
你好
我在网上找到了一个lisp,很喜欢这个lisp,但我可以有第三个选项“both”,在里面和交叉。
 
  1. (defun c:SWCC (/ _pac add ss i e temp it o a b pts tempC i3 ec)
  2. ;; Select Within/Crossing Curve
  3. ;; Alan J. Thompson, 03.31.11 / 05.11.11
  4. (vl-load-com)
  5. (defun _pac (e / l v d lst)
  6.    (setq d (- (setq v (/ (setq l (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e))) 100.))))
  7.    (while (< (setq d (+ d v)) l)
  8.      (setq lst (cons (trans (vlax-curve-getPointAtDist e d) 0 1) lst))
  9.    )
  10. )
  11. (initget 0 "Crossing Within")
  12. (setq *SWCC:Opt*
  13.         (cond ((getkword (strcat "\nSpecify selection method witin curve [Crossing/Within] <"
  14.                                  (cond (*SWCC:Opt*)
  15.                                        ((setq *SWCC:Opt* "Crossing"))
  16.                                  )
  17.                                  ">: "
  18.                          )
  19.                )
  20.               )
  21.               (*SWCC:Opt*)
  22.         )
  23. )
  24. (princ "\nSelect closed curves to select object(s) within: ")
  25. (if (setq add (ssadd)
  26.            ss  (ssget '((-4 . "<OR")
  27.                         (0 . "CIRCLE,ELLIPSE")
  28.                         (-4 . "<AND")
  29.                         (0 . "*POLYLINE")
  30.                         (-4 . "&=")
  31.                         (70 . 1)
  32.                         (-4 . "AND>")
  33.                         (-4 . "OR>")
  34.                        )
  35.                )
  36.      )
  37.    (progn (repeat (setq i (sslength ss))
  38.             (if (setq temp (ssget "_WP" (_pac (setq e (ssname ss (setq i (1- i)))))))
  39.               (repeat (setq i2 (sslength temp)) (ssadd (ssname temp (setq i2 (1- i2))) add))
  40.             )
  41.             (if (eq *SWCC:Opt* "Crossing")
  42.               (progn (vla-getboundingbox (setq o (vlax-ename->vla-object e)) 'a 'b)
  43.                      (setq pts (mapcar 'vlax-safearray->list (list a b)))
  44.                      (if (setq tempC (ssget "_C"
  45.                                             (list (caar pts) (cadar pts) 0.)
  46.                                             (list (caadr pts) (cadadr pts) 0.)
  47.                                      )
  48.                          )
  49.                        (repeat (setq i3 (sslength tempC))
  50.                          (if (vlax-invoke
  51.                                o
  52.                                'Intersectwith
  53.                                (vlax-ename->vla-object (setq ec (ssname tempC (setq i3 (1- i3)))))
  54.                                acExtendNone
  55.                              )
  56.                            (ssadd ec add)
  57.                          )
  58.                        )
  59.                      )
  60.               )
  61.             )
  62.           )
  63.           (sssetfirst nil add)
  64.           (ssget "_I")
  65.    )
  66. )
  67. (princ)
  68. )

 
谢谢
 
PmxCAD
回复

使用道具 举报

4

主题

305

帖子

225

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
97
发表于 2022-7-5 19:14:23 | 显示全部楼层
 
 
我不太确定你在问什么?当你说“两者”(这正是“交叉选择”(Crossing Selection)应该包括的内容)时,里面的对象和穿过边界的对象。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 04:22 , Processed in 0.447752 second(s), 67 queries .

© 2020-2025 乐筑天下

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