试试这个程序,它应该只适用于零度或180度的矩形形状。
- (defun c:Test (/ ss)
- ;; Tharwat 09.07.2015 ;;
- (princ "\nSelect polyline [rectangular shapes only]:")
- (if (setq ss (ssget '((0 . "LWPOLYLINE") (90 . 4) (-4 . "&=") (70 . 1))))
- ((lambda (i / sn a b c pts p1 p2 p3 p4 1p 2p 3p 4p r)
- (while (setq sn (ssname ss (setq i (1+ i))))
- (vla-getboundingbox (vlax-ename->vla-object sn) 'a 'b)
- (setq pts (mapcar 'vlax-safearray->list (list a b)))
- (mapcar 'set '(p1 p3) pts)
- (setq p2 (list (car p1) (cadr p3))
- p4 (list (car p3) (cadr p1))
- c (inters p1 p3 p2 p4)
- )
- (if (< (distance p1 p2) (distance p2 p3))
- (setq r (list (distance p2 p3) (angle p2 p3)))
- (setq r (list (distance p1 p2) (angle p1 p2)))
- )
- (setq 1p (polar (polar c (cadr r) 0.25)
- (+ (cadr r) (* pi 0.5))
- (/ (car r) 2.)
- )
- 2p (polar 1p (+ (cadr r) pi) 0.5)
- 3p (polar 2p (+ (angle 1p 2p) (* pi 0.5)) (car r))
- 4p (polar 3p (angle 2p 1p) 0.5)
- )
- (entmakex (list '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- '(90 . 4)
- '(70 . 1)
- '(8 . "CN_3-4_PLY-SLOT-25R")
- (cons 10 1p)
- (cons 10 2p)
- (cons 10 3p)
- (cons 10 4p)
- )
- )
- )
- )
- -1
- )
- )
- (princ)
- )(vl-load-com)
|