代码有点错误。。。我不知道该怎么办,但我猜应该是这样的:
- ;;http://bbs.xdcad.org/thread-678248-1-1.html
- ;;by huang
- ;;mod by M.R.
- (defun c:myjoin (/ e h j lst n obj p11 p12 p21 p22 ss)
- (vl-load-com)
- (defun twoent (e1 e2)
- (setq p11 (vlax-curve-getstartpoint e1))
- (setq p12 (vlax-curve-getendpoint e1))
- (setq p21 (vlax-curve-getstartpoint e2))
- (setq p22 (vlax-curve-getendpoint e2))
- (if (and (equal (det p11 p12 p21) 0)
- (equal (det p11 p12 p22) 0)
- )
- [highlight];=> if you want only WCS calculation leave this line, but if you want it 3D replace line with T[/highlight]
- (progn
- (setq h (car (max-distance (list p11 p12 p21 p22))))
- (setq obj (vlax-ename->vla-object e1))
- (vlax-put obj 'startpoint (car h))
- (vlax-put obj 'endpoint (cadr h))
- )
- )
- )
- (cond
- ((setq ss (ssget '((0 . "LINE"))))
- (repeat (setq n (sslength ss))
- (setq e (ssname ss (setq n (1- n))))
- (setq lst (cons e lst))
- )
- (foreach j lst
- (mapcar '(lambda (x)
- (cond ((and (entget x) (entget j)) (twoent j x)))
- )
- lst
- )
- )
- )
- )
- (princ)
- )
- ;;(max-distance ptlst)=>(((-2670.87 3701.22 0.0) (-1725.61 3689.13 0.0)) . 945.338)
- (defun max-distance (h / d maxd pair q v)
- (setq q (cdr (append h h (list (car h)))))
- (setq maxd 0.0)
- (foreach u h
- (setq
- v (car
- (vl-sort q
- '(lambda (a b) (> (distance u a) (distance u b)))
- )
- )
- )
- (setq d (distance u v))
- (if (> d maxd)
- (setq maxd d
- pair (list u v)
- )
- )
- )
- (cons pair maxd)
- )
- ;;(det (getpoint)(getpoint)(getpoint))
- (defun det (p1 p2 p3)
- (+ (* (car p1)
- (- (* (cadr p2) (caddr p3)) (* (cadr p3) (caddr p2)))
- )
- (* (- (cadr p1))
- (- (* (car p2) (caddr p3)) (* (car p3) (caddr p2)))
- )
- (* (caddr p1)
- (- (* (car p2) (cadr p3)) (* (car p3) (cadr p2)))
- )
- )
- )
|