最初由 dubing 发布
[B]不太理解 eachy 所说的 原理
1 xdapi 中的 xdrx_getinterss 函数 使用方法 (xdrx_getinterss ss) ss---选择集
2 VLA 方法,论坛有现成的代码,搜索LUCAS,但是那个程序没有过滤重复点。
如果使用选择集,我想?.. [/B] 
- [PHP]
- xdrx_getinters
- 功 能:1.求两个AcDbCurve(曲线)实体的交点.
- 2.求一个AcDbCurve(曲线)实体和一个选择集中所有AcDbCurve(曲线)的交点。
- 3.求一个选择集中所有AcDbCurve(曲线)实体的交点.
- 4.求一个选择集SS1中的所有AcDbCurve实体和另个选择集SS2所有AcDbCurve实体的交点。
- 调用格式: 1. (xdrx_getinters <实体图元1> <实体图元2> [扩展方式])
- 2. (xdrx_getinters <实体图元名> <选择集> [扩展方式])
- 3. (xdrx_getinters <选择集> [扩展方式])
- 4. (xdrx_getinters <选择集1> <选择集2> [扩展方式])
- 5. (xdrx_getinters (<pt1>...<ptn>) <曲线实体名> [扩展方式])
- 6. (xdrx_getinters (<pt1>...<ptn>) <选择集> [扩展方式])
- 7. (xdrx_getinters (<pt1>...<ptn>) (<pt1>...<ptn>) [扩展方式])
- 说 明:1.程序能求AcDbCurve(包括:AcDbLine、AcDbArc、AcDbCircle、AcDbEllipse、AcDbSpline、
- AcDbPolyline(lwpolyline)交点。
- 2.参数[扩展方式]:
- 对于1种情况:
- 0:不延伸实体
- 1:延伸第一个实体
- 2:延伸第二个实体
- 3: 两个都延伸
- 对于第二、三、四种情况(选择集):
- 0: 不延伸实体
- 1: 两个都延伸
- 示 例: 1. 求天正建筑软件轴线层上,所有轴线的交点
- (if (setq ss (ssget "x" (list (cons 8 (xdrx_getlyrname "轴线")) '((0 . "line")))))
- (progn
- (setq intl (xdrx_getinters ss))
- )
- )
- 2. 点取一根轴线,然后求出与这个轴线相交的所有轴线交点。
- (setq lyr (xdrx_getlyrname "轴线"))
- (if (setq en (xdrx_entsel "\n请点取一个轴线<退出>:" (list (cons 8 lyr) '(0 . "line"))))
- (progn
- (xdrx_setentodb)
- (setq p1 (xdrx_getentdxf 10)
- p2 (xdrx_getentdxf 11)
- ss (ssget "f" p1 p2 (list (cons 8 lyr) '(0 . "line")))
- )
- (if (setq intl (xdrx_getinters (car en) ss))
- (progn
- .....;;intl中为交点表
- )
- )
- )
- )
- [/PHP]
2 LUCAS
- [PHP]
- ;;求所有线的交点
- (defun C:TT (/ SS M E1 N E2 PTS PL PT1)
- (vl-load-com)
- (setq SS (ssget '((0 . "*LINE,ARC,CIRCLE,ELLIPSE")))
- M 0
- )
- (while (< M (1- (sslength SS)))
- (setq E1 (vlax-ename->vla-object (ssname SS M))
- N (1+ M)
- )
- (while (< N (sslength SS))
- (setq E2 (vlax-ename->vla-object (ssname SS N))
- PTS (vlax-variant-value (vla-intersectwith E1 E2 0))
- )
- (if (> (vlax-safearray-get-u-bound PTS 1) 0)
- (progn
- (setq PTS (vlax-safearray->list PTS))
- (while (> (length PTS) 0)
- (setq PT1 (list (car PTS) (cadr PTS) (caddr PTS)))
- (if (not (member PT1 PL))
- (setq PL (cons PT1 PL))
- (setq PTS (cdddr PTS))
- )
- )
- )
- )
- (setq N (1+ N))
- )
- (setq M (1+ M))
- )
- PL
- )[/PHP]
|