This question was asked somewhere else. Not an easy problem to solve.
I did something trying to find but it was not a window and do all, but rather a pick pick style. Looking at bottom dims would be a do bottom "B" option.
PICK PICK PICK PICK PICK PICK then enter does all dims
PICK PICK PICK then enter does 2 dims
PICK PICK then enter does overall
Enter exits
A single dim line would be PICK PICK PICK PICK PICK PICK then enter does all dims then ENTER to exit
It recognises the XY of the points so does a sort to reorganize for dim points, the gap and offset spacing from object was hard coded. Its about repeating rows/columns of dims form pick points based on 4 sides.
I have to edit this but need a dwg to get the correct Dim style and offsets etc. This was done for 200 off.
; https://www.cadtutor.net/forum/topic/77391-how-can-i-modify-this-code-to-allow-me-to-select-a-base-point-as-basis/
; Dimensions a shape with a 200 offset for 4 sides Right Left Top Bottom.
; By AlanH May 2023
(defun c:dim200 ( / dr200 dl200 db200 dt200 lst ans)
(defun dr200 ( / pt1 pt2 x lst2 j pt3)
(setq lst2 '())
(foreach pt lst
(setq lst2 (cons (cadr pt) lst2))
)
(setq X (car (vl-sort lst2 '>)))
(setq pt3 (list (+ x 200.) (cadr (car lst))))
(setq x (length lst))
(setq j 0)
(setvar 'osmode 0)
(repeat (- x 1)
(command "dim" "ver" (nth j lst) (nth (1+ j) lst) pt3 "" "exit")
(setq j (1+ j))
)
(setvar 'osmode oldsnap)
(princ)
)
(defun dl200 ( / pt1 pt2 x lst2 j pt3)
(setq lst2 '())
(foreach pt lst
(setq lst2 (cons (car pt) lst2))
)
(setq X (car (vl-sort lst2 '<)))
(setq pt3 (list (- x 200.) (cadr (car lst))))
(setq x (length lst))
(setq j 0)
(setvar 'osmode 0)
(repeat (- x 1)
(command "dim" "ver" (nth j lst) (nth (1+ j) lst) pt3 "" "exit")
(setq j (1+ j))
)
(setvar 'osmode oldsnap)
(princ)
)
(defun dt200 ( / pt1 pt2 y lst2 j pt3)
(setq lst2 '())
(foreach pt lst
(setq lst2 (cons (cadr pt) lst2))
)
(setq Y (car (vl-sort lst2 '>)))
(setq pt3 (list (car (car lst)) (+ y 200.) ))
(setq x (length lst))
(setq j 0)
(setvar 'osmode 0)
(repeat (- x 1)
(command "dim" "hor" (nth j lst) (nth (1+ j) lst) pt3 "" "exit")
(setq j (1+ j))
)
(setvar 'osmode oldsnap)
(princ)
)
(defun db200 ( / pt1 pt2 y lst2 j pt3)
(setq lst2 '())
(foreach pt lst
(setq lst2 (cons (cadr pt) lst2))
)
(setq Y (car (vl-sort lst2 '<)))
(setq pt3 (list (car (car lst)) (- y 200.) ))
(setq x (length lst))
(setq j 0)
(setvar 'osmode 0)
(repeat (- x 1)
(command "dim" "hor" (nth j lst) (nth (1+ j) lst) pt3 "" "exit")
(setq j (1+ j))
)
(setvar 'osmode oldsnap)
(princ)
)
;;;;;;; starts here
(setq oldsnap (getvar 'osmode))
(setq lst '())
(while (setq pt1 (getpoint "\nPick dim point in sequence Enter to stop "))
(setq lst (cons pt1 lst))
)
(if (not AH:Butts)(load "Multi Radio buttons.lsp"))
(setq ans (ah:butts 1 "V" '("Choose a side" "Right" "Left" "Top" "Bottom")))
(cond
((= ans "Right")(dr200))
((= ans "Left")(dl200))
((= ans "Top")(dt200))
((= ans "Bottom")(db200))
)
(setvar 'osmode oldsnap)
(princ)
)
Is this helpful to you Waffle slabs.