本帖最后由 xianaihua 于 2011-11-20 08:20 编辑
给你一个所有交点上画圆的程序:
 - ;所有交点上画圆
- (setq *ModelSpace*
- (vla-get-ModelSpace
- (vla-get-ActiveDocument
- (vlax-get-acad-object)
- ) ;_ 结束vla-get-ActiveDocument
- ) ;_ end of vla-get-ModelSpace
- ) ;_ end of setq
- (defun c:test (/ ss)
- (vl-load-com)
- (if (setq ss (ssget))
- (foreach x (IntersectionsinSet ss)
- (vla-AddCircle *ModelSpace* (vlax-3d-point x) 10)
- ) ;_ 结束foreach
- ) ;_ 结束if
- (princ)
- ) ;_ 结束defun
- (defun IntersectionsinSet (ss / a b i j l)
- (setq i (sslength ss))
- (while (not (minusp (setq j (1- i)
- i (1- i)
- ) ;_ 结束setq
- ) ;_ 结束minusp
- ) ;_ 结束not
- (setq a (vlax-ename->vla-object (ssname ss i)))
- (while (not (minusp (setq j (1- j))))
- (setq b (vlax-ename->vla-object (ssname ss j))
- l (cons (GroupByNum (vlax-invoke a 'IntersectWith b acExtendNone) 3)
- l
- ) ;_ 结束cons
- ) ;_ 结束setq
- ) ;_ 结束while
- ) ;_ 结束while
- (apply 'append l)
- ) ;_ 结束defun
- (defun GroupByNum (l n / r)
- (if l
- (cons
- (reverse (repeat n
- (setq r (cons (car l) r)
- l (cdr l)
- ) ;_ 结束setq
- r
- ) ;_ 结束repeat
- ) ;_ 结束reverse
- (GroupByNum l n)
- ) ;_ 结束cons
- ) ;_ 结束if
- ) ;_ 结束defun
你只需改动一下,只选直线 - (setq ss (ssget '((0 . "line"))))
|