Maybe something like this for the rectangle.
Note: does not rule out parallelograms!
(defun c:test (/ ss lst elst vlst result)
(prompt"\nSelect closed plines.")
(setq ss (ssget '((0 . "LWPOLYLINE,POLYLINE")(-4 . "&")(70 . 1))))
;|
;; or get all closed plines
(setq ss (ssget "ALL" '((0 . "LWPOLYLINE,POLYLINE")(-4 . "&")(70 . 1))))
;; or get all closed plines on a layer in current space
(setq ss (ssget "ALL" (list '(0 . "LWPOLYLINE,POLYLINE")'(-4 . "&")'(70 . 1)
(cons 8 LayName) (cons 410 (getvar "ctab")))))
|;
;; create a list of all objects in the selection set
(setq lst (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
(foreach pl lst
(setq elst (entget pl))
(if (and (= (cdr(assoc 90 elst)) 4) ; has 4 vertex
(setq vlst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 10 (car x))) elst)))
(or (equal (distance (car vlst)(cadr vlst)) 6.0 0.0001)
(equal (distance (cadr vlst)(caddr vlst)) 6.0 0.0001)
)
)
;; got a closed pline with one side = to 6 units
(setq result (cons pl result))
)
)
(if result
(print (strcat "Got some. " (itoa (length result))))
(print "Got Nothing matching the length specified.")
)
(princ)
)