 - (defun convex-area (ptlst)
- (setq cenpt (mapcar '*
- '(0.5 0.5)
- (mapcar '+
- (apply 'mapcar (cons 'min ptlst))
- (apply 'mapcar (cons 'max ptlst))
- )
- )
- )
- (setq
- ptlst (vl-sort ptlst
- '(lambda (a b) (< (angle cenpt a) (angle cenpt b)))
- )
- )
- (setq
- f (lambda (lst)
- (abs
- (apply
- '+
- (mapcar '(lambda (x y)
- (* (- (car y) (car x)) (+ (cadr x) (cadr y)))
- )
- lst
- (append (cdr lst) (list (car lst)))
- )
- )
- )
- )
- )
- (setq area (f ptlst))
- (setq ptlst (vl-remove-if
- '(lambda (x) (> (f (vl-remove x ptlst)) area))
- ptlst
- )
- )
- )
- (defun c:tt ()
- (setq ss (ssget)
- n -1
- ptlst '()
- )
- (while (setq ent (ssname ss (setq n (1+ n))))
- (setq ptlst (cons (cdr (assoc 10 (entget ent))) ptlst))
- )
- (while (not (= (length (setq ptlst (convex-area ptlst)))
- (length (setq ptlst (convex-area ptlst)))
- )
- )
- )
- (entmake (append (list '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- (cons 90 (length ptlst))
- '(70 . 1)
- )
- (mapcar '(lambda (pt) (cons 10 pt)) ptlst)
- )
- )
- (princ)
- )
|