This code will make your work much easier you can select as much as you want from the "Almost Rectangle"
Like if you have 100 or 1000 it will automate the work for you.
Best Regards.
HTML Code:
;; -----------------------
;; ARec = Almost Rectangle
;; -----------------------
(vl-load-com)
(defun pflaot (pl) (list (float (car pl)) (float (cadr pl))))
(defun make:lwpoly (ptsList)
(setq acadObj (vlax-get-acad-object))
(setq doc (vla-get-ActiveDocument acadObj))
(setq *ModelSpace* (vla-get-ModelSpace doc))
(setq pline (vla-addLightweightPolyline *ModelSpace*
(progn
(setq ptsList (apply 'append (mapcar 'pflaot ptsList)))
(setq arraySpace (vlax-make-safearray vlax-vbdouble (cons 0 (- (length ptsList) 1))))
(setq sArray (vlax-safearray-fill arraySpace ptsList))
(vlax-make-variant sArray)
)))
(vla-put-closed pline T)
pline
)
(defun Midda (q1 q2 / xmid ymid)
(setq xmid (/ (+ (nth 0 q1) (nth 0 q2)) 2))
(setq ymid (/ (+ (nth 1 q1) (nth 1 q2)) 2))
(list xmid ymid)
)
(defun rec:a (pobj /)
(setq p1(car(pline:po pobj)))
(setq p2(cadr(pline:po pobj)))
(setq p3(caddr(pline:po pobj)))
(setq p4(cadddr(pline:po pobj)))
(setq PX (Midda P1 P2))
(setq PY (Midda P3 P4))
(setq PP (Midda PX PY))
(setq AA (angle PX PY))
(setq DA (/ (+ (distance P1 P2) (distance P3 P4)) 4))
(setq DB (/ (+ (distance P1 P4) (distance P2 P3)) 4))
(setq TA1 (polar PP AA DB))
(setq TA2 (polar PP (+ AA PI) DB))
(setq AA (+ AA (/ PI 2)))
(setq Q1 (polar PX AA DA))
(setq Q2 (polar PX (+ AA PI) DA))
(setq Q3 (polar PY (+ AA PI) DA))
(setq Q4 (polar PY AA DA))
(make:lwpoly (list Q1 Q2 Q3 Q4))
)
(defun flout>list2d (coords / coords coordpairs)
(while coords
(setq coordpairs (cons (list (car coords) (cadr coords)) coordpairs)
coords (cddr coords))
)
(setq coordpairs (reverse coordpairs))
coordpairs
)
(defun po:list (ent prop / ent)
(setq crlp (vlax-get (vlax-ename->vla-object ent) prop))
crlp
)
(defun pline:po (plobj)
(setq pol(flout>list2d(po:list plobj 'Coordinates)))
pol
)
;; -----------------------
(defun C:ARec (/ plnl)
(command-s "_undo" "_g")
(princ "Select a retangle/s:")
(setq ss (ssget '((0 . "*LWPOLYLINE")(70 . 1))))
(setq ssl(sslength ss))
(setq n 0)
(repeat ssl
(setq pln (ssname ss n))
(if
(= (length(pline:po pln))4)
(setq plnl(append plnl (list pln)))
(princ)
)
(setq n (1+ n))
)
(mapcar (function(lambda (x)
(rec:a x)))
plnl)
(command-s "_undo" "_e")
(princ)
)
;; -----------------------