 - (defun c:ddd
- (/ pfir pt p1 p2 p3 p4 pt lobj1 lobj2 key a b c d dist e1 e2 ept i j k ent
- l_int l_p1 l_p2 lay len len_int spt ss ptl)
- (vl-load-com)
- (command "ucs" "w")
- (setq pfir (getpoint "sss"))
- (setq pt (polar pfir pi 100))(setq dist 100)
- (setq p1 (polar pfir (+ (angle pfir pt) (/ pi 2)) dist))
- (setq p2 (polar p1 (angle pfir pt) (distance pfir pt)))
- (setq p3 (polar pfir (+ (angle pfir pt) (/ pi 2)) (* dist -1)))
- (setq p4 (polar p3 (angle pfir pt) (distance pfir pt)))
- (entmake (list '(0 . "LINE") (cons 10 p1) (cons 11 p2)))
- ;(setq line1 (entlast))
- (setq lobj1 (vlax-ename->vla-object (entlast)))
- (entmake (list '(0 . "LINE") (cons 10 p3) (cons 11 p4)))
- ;(setq line2 (entlast))
- (setq lobj2 (vlax-ename->vla-object (entlast)))
- (setq key nil)
- (while (AND (/= (car key) 3) (/= (car key) 11))
- (setq key (grread nil 1 0)
- pt (cadr key)
- ) ;end set
- (setq p1 (polar pfir (+ (angle pfir pt) (/ pi 2)) dist))
- (setq p2 (polar p1 (angle pfir pt) (distance pfir pt)))
- (setq p3 (polar pfir (+ (angle pfir pt) (/ pi 2)) (* dist -1)))
- (setq p4 (polar p3 (angle pfir pt) (distance pfir pt)))
- (vla-put-startpoint lobj1 (vlax-3d-point p1))
- (vla-put-endpoint lobj1 (vlax-3d-point p2))
- (vla-put-startpoint lobj2 (vlax-3d-point p3))
- (vla-put-endpoint lobj2 (vlax-3d-point p4))
- ); end while
- (setq ptl '())
- (setq ptl (append (append (append (append ptl (list p1)) (list p2)) (list p4)) (list p3)))
- (setq ss (ssget "CP" ptl (list (cons 0 "LINE")(cons 8 "梁虚线,梁实线"))))
- (setq i 0
- l_p1 '() l_p2 '() l_int '()
- len (sslength ss)
- );end set
- (setq lay (vla-get-layer (vlax-ename->vla-object (ssname ss 0))))
-
- (repeat len ;把直线端点存入表中
- (setq ent (vlax-ename->vla-object (ssname ss i))
- i (+ 1 i)
- p1 (vlax-safearray->list (vlax-variant-value (vla-get-startpoint ent)))
- p2 (vlax-safearray->list (vlax-variant-value (vla-get-endpoint ent)))
- l_p1 (cons p1 l_p1)
- l_p2 (cons p2 l_p2)
- );end set
- );end repeat
- (command "erase" ss "")
- (setq i 0)
- (repeat len
- (setq p1 (nth i l_p1)
- p2 (nth i l_p2)
- j 0
- );end set
- (repeat len ;计算某线与其他所有线的交点
- (if (/= j i)
- (setq p3 (nth j l_p1)
- p4 (nth j l_p2)
- j (+ 1 j)
- pt (inters p1 p2 p3 p4)
- l_int (if (AND pt (unequal pt p1)(unequal pt p2)) (cons pt l_int) l_int)
- );end set
- (setq j (+ 1 j))
- );end if
- );end repeat
- (setq l_int (cons p2 (cons p1 l_int)))
- (if (< (abs(- (car p1) (car p2))) 0.0001) ;排序
- (setq l_int (vl-sort l_int (function (lambda (e1 e2)(< (cadr e1) (cadr e2)))) ))
- (setq l_int (vl-sort l_int (function (lambda (e1 e2)(< (car e1) (car e2)))) ))
- );end if
- (setq len_int (length l_int)
- a (nth 0 l_int) b (nth 1 l_int)
- c (nth (- len_int 1) l_int)
- d (nth (- len_int 2) l_int)
- ) ;end set
- (if (< (distance a b) (distance c d)) (setq l_int (reverse l_int)))
- (setq k 0)
- (repeat (/ (length l_int) 2) ;画新线
- (setq spt (nth k l_int) ept (nth (+ k 1) l_int) k (+ k 2) )
- (entmake (list '(0 . "LINE") (cons 10 spt) (cons 11 ept) (cons 8 lay)))
- ) ;end repeat
- (setq l_int '() i (+ 1 i))
- );end repeat
-
- (command "ucs" "p")
- ) ;end fun
- (defun unequal (a b)
- (if (equal a b) nil T)
- ) ;end fun
该贴已经同步到 蒹葭_Keirll的微博 |