找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1021|回复: 1

[LISP函数]:轉貼:選擇集交點

[复制链接]

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-13 23:11:11 | 显示全部楼层 |阅读模式

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

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

×
[PHP]
;;; -----------------------------------------------
;;; cdnc5-02.lsp
;;; bill kramer
;;; find all intersections between objects in
;;; the selection set ss.
;;; process - create drawing with intersecting lines and lwpolylines.
;;;           load function set
;;;           run command function intlines
;;;           intersections are marked with point objects on current
;;; layer
(defun ssinterlines (/ ssl               ; length of ss
                        pts               ; returning list
                        aobj1               ; object 1
                        aobj2               ; object 2
                        n1               ; loop counter
                        n2               ; loop counter
                        ipts               ; intersects
                        a n nn holdosmode
                     )
  (vl-load-com)
  (command "_.UNDO" "_GROUP")
  (setq holdosmode (getvar "OSMODE"))
  (setvar "OSMODE" 0)
  (setq ss (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))
  (setq n1 0                               ; index for outer loop
        ssl (sslength ss)
  )                                       ; outer loop, first through
                                       ; second
                                       ; to last
  (while (< n1 (1- ssl))               ; get object 1, convert to vla
                                       ; object type
    (setq aobj1 (ssname ss n1)
          aobj1 (vlax-ename->vla-object aobj1)
          n2 (1+ n1)
    )                                       ; index for inner loop
                                       ; inner loop, go through
                                       ; remaining
                                       ; objects
    (while (< n2 ssl)                       ; get object 2, convert to vla
                                       ; object
      (setq aobj2 (ssname ss n2)
            aobj2 (vlax-ename->vla-object aobj2) ; find intersections
                                       ; of
                                       ; objects
            ipts (vla-intersectwith aobj1 aobj2 0) ; variant result
            ipts (vlax-variant-value ipts)
      )                                       ; variant array has values?
      (if (> (vlax-safearray-get-u-bound ipts 1) 0)
        (progn                               ; array holds values, convert
                                       ; it
          (setq ipts                       ; to a list.
                (vlax-safearray->list ipts)
          )                               ; loop through list
                                       ; constructing
                                       ; points
          (while (> (length ipts) 0)
            (setq pts (cons (list (car ipts) (cadr ipts)
                                  (caddr ipts)
                            ) pts
                      )
                  ipts (cdddr ipts)
            )
          )
        )
      )
      (setq n2 (1+ n2))
    )                                       ; inner loop end
    (setq n1 (1+ n1))
  )                                       ; outer loop end
  (print pts)
  (setvar "OSMODE" holdosmode)
  (command "_.UNDO" "_END")
  (princ)
)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-12-13 23:37:29 | 显示全部楼层
可以改一改

  1. (defun ssinters        (/ ss el aobj1 el1 aobj2 ipts pts)
  2.   (vl-load-com)
  3.   (if (ssget '((0 . "*line,arc,circle,ellipse")))
  4.     (vlax-for obj (vla-get-activeselectionset
  5.                     (vla-get-activedocument (vlax-get-acad-object))
  6.                   )
  7.       (setq el (cons obj el))
  8.     )
  9.   )
  10.   (while el
  11.     (setq aobj1 (car el))
  12.     (if        (setq el1 (cdr el))
  13.       (foreach aobj2 el1
  14.         (if (and (setq ipts (vla-intersectwith aobj1 aobj2 0))
  15.                  (setq ipts (vlax-variant-value ipts))
  16.                  (> (vlax-safearray-get-u-bound ipts 1) 0)
  17.             )
  18.           (progn
  19.             (setq ipts (vlax-safearray->list ipts))
  20.             (while (> (length ipts) 0)
  21.               (setq pts         (cons (list (car ipts)
  22.                                      (cadr ipts)
  23.                                      (caddr ipts)
  24.                                )
  25.                                pts
  26.                          )
  27.                     ipts (cdddr ipts)
  28.               )
  29.             )
  30.           )
  31.         )
  32.       )
  33.     )
  34.     (setq el (cdr el))
  35.   )
  36.   pts
  37. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 06:37 , Processed in 0.321398 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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