I haven't read your requirements to code for what you exactly need, but I did something for myself based on pattern picture you provided... It's based on my hatch make routines... So here is it (mortar - gaps are equal in x/y directions - I haven't dive even more in the task as I think it's good and as it is now)...
(defun c:hm-2platesrun ( / ss ch apth asupppth f ass scal w1 w2 h m )
(vl-load-com)
(prompt "\nHATCH MAKE")
(print)
(setenv "MaxHatch" "10000000")
(prompt "\nSelect boundary...")
(setq ss (ssget))
(print)
(if (null *w1*)
(progn
(initget 7)
(setq w1 (getdist "\nPick or specify width of 1st plate : "))
(setq *w1* w1)
)
(progn
(initget 6)
(setq w1 (getdist (strcat "\nPick or specify width 1st plate <" (rtos *w1* 2 8) "> : ")))
(if (null w1)
(setq w1 *w1*)
(setq *w1* w1)
)
)
)
(if (null *w2*)
(progn
(initget 7)
(setq w2 (getdist "\nPick or specify width of next adjacent plate : "))
(setq *w2* w2)
)
(progn
(initget 6)
(setq w2 (getdist (strcat "\nPick or specify width of next adjacent plate <" (rtos *w2* 2 8) "> : ")))
(if (null w2)
(setq w2 *w2*)
(setq *w2* w2)
)
)
)
(if (null *h*)
(progn
(initget 7)
(setq h (getdist "\nPick or specify height of plates : "))
(setq *h* h)
)
(progn
(initget 6)
(setq h (getdist (strcat "\nPick or specify height of plates <" (rtos *h* 2 8) "> : ")))
(if (null h)
(setq h *h*)
(setq *h* h)
)
)
)
(initget "Yes No")
(setq ch (getkword "\nDo you want to implement mortar in hatch pattern [Yes/No] <Yes> : "))
(if (null ch)
(setq ch "Yes")
)
(if (= ch "Yes")
(progn
(alert "Width and height of plates will be reduced according to mortar width")
(if (null *m*)
(progn
(initget 7)
(setq m (getdist "\nPick or specify width of mortar of hatch pattern : "))
(setq *m* m)
)
(progn
(initget 6)
(setq m (getdist (strcat "\nPick or specify width of mortar of hatch pattern <" (rtos *m* 2 8) "> : ")))
(if (null m)
(setq m *m*)
(setq *m* m)
)
)
)
)
)
(setq apth (vla-get-path (vlax-get-acad-object)))
(setq asupppth (strcat apth "\\support"))
(setq f (open (strcat asupppth "\\hm-2platesrun.pat") "w"))
(write-line "*HM-2PLATESRUN,HM-2PLATESRUN" f)
(cond
( (eq ch "No")
(write-line (strcat "0," (rtos (/ 0 2) 2 8) "," (rtos (/ 0 2) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 0) 2 8) "," (rtos (- (+ w2 0)) 2 8)) f)
(write-line (strcat "0," (rtos (/ 0 2) 2 8) "," (rtos (- h (/ 0 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 0) 2 8) "," (rtos (- (+ w2 0)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w1 (/ 0 2)) 2 8) "," (rtos (/ 0 2) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 0) 2 8) "," (rtos (- (+ w1 0)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w1 (/ 0 2)) 2 8) "," (rtos (- h (/ 0 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 0) 2 8) "," (rtos (- (+ w1 0)) 2 8)) f)
(write-line (strcat "0," (rtos (/ 0 2) 2 8) "," (rtos (+ h (/ 0 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 0) 2 8) "," (rtos (- (+ w1 0)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w2 (/ 0 2)) 2 8) "," (rtos (+ h (/ 0 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 0) 2 8) "," (rtos (- (+ w2 0)) 2 8)) f)
(write-line (strcat "0," (rtos (/ 0 2) 2 8) "," (rtos (- (* 2 h) (/ 0 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 0) 2 8) "," (rtos (- (+ w1 0)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w2 (/ 0 2)) 2 8) "," (rtos (- (* 2 h) (/ 0 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 0) 2 8) "," (rtos (- (+ w2 0)) 2 8)) f)
(write-line (strcat "90," (rtos (/ 0 2) 2 8) "," (rtos (/ 0 2) 2 8) "," (rtos h 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h 0) 2 8) "," (rtos (- 0) 2 8)) f)
(write-line (strcat "90," (rtos (- w1 (/ 0 2)) 2 8) "," (rtos (/ 0 2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h 0) 2 8) "," (rtos (- (+ h 0)) 2 8)) f)
(write-line (strcat "90," (rtos (+ w1 (/ 0 2)) 2 8) "," (rtos (/ 0 2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h 0) 2 8) "," (rtos (- (+ h 0)) 2 8)) f)
(write-line (strcat "90," (rtos (- w2 (/ 0 2)) 2 8) "," (rtos (+ h (/ 0 2)) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h 0) 2 8) "," (rtos (- (+ h 0)) 2 8)) f)
(write-line (strcat "90," (rtos (+ w2 (/ 0 2)) 2 8) "," (rtos (+ h (/ 0 2)) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h 0) 2 8) "," (rtos (- (+ h 0)) 2 8)) f)
(write-line (strcat "90," (rtos (- (+ w1 w2) (/ 0 2)) 2 8) "," (rtos (/ 0 2) 2 8) "," (rtos h 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h 0) 2 8) "," (rtos (- 0) 2 8)) f)
)
( (eq ch "Yes")
(write-line (strcat "0," (rtos (/ m 2) 2 8) "," (rtos (/ m 2) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 m) 2 8) "," (rtos (- (+ w2 m)) 2 8)) f)
(write-line (strcat "0," (rtos (/ m 2) 2 8) "," (rtos (- h (/ m 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 m) 2 8) "," (rtos (- (+ w2 m)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w1 (/ m 2)) 2 8) "," (rtos (/ m 2) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 m) 2 8) "," (rtos (- (+ w1 m)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w1 (/ m 2)) 2 8) "," (rtos (- h (/ m 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 m) 2 8) "," (rtos (- (+ w1 m)) 2 8)) f)
(write-line (strcat "0," (rtos (/ m 2) 2 8) "," (rtos (+ h (/ m 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 m) 2 8) "," (rtos (- (+ w1 m)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w2 (/ m 2)) 2 8) "," (rtos (+ h (/ m 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 m) 2 8) "," (rtos (- (+ w2 m)) 2 8)) f)
(write-line (strcat "0," (rtos (/ m 2) 2 8) "," (rtos (- (* 2 h) (/ m 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w2 m) 2 8) "," (rtos (- (+ w1 m)) 2 8)) f)
(write-line (strcat "0," (rtos (+ w2 (/ m 2)) 2 8) "," (rtos (- (* 2 h) (/ m 2)) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (- w1 m) 2 8) "," (rtos (- (+ w2 m)) 2 8)) f)
(write-line (strcat "90," (rtos (/ m 2) 2 8) "," (rtos (/ m 2) 2 8) "," (rtos h 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h m) 2 8) "," (rtos (- m) 2 8)) f)
(write-line (strcat "90," (rtos (- w1 (/ m 2)) 2 8) "," (rtos (/ m 2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h m) 2 8) "," (rtos (- (+ h m)) 2 8)) f)
(write-line (strcat "90," (rtos (+ w1 (/ m 2)) 2 8) "," (rtos (/ m 2) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h m) 2 8) "," (rtos (- (+ h m)) 2 8)) f)
(write-line (strcat "90," (rtos (- w2 (/ m 2)) 2 8) "," (rtos (+ h (/ m 2)) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h m) 2 8) "," (rtos (- (+ h m)) 2 8)) f)
(write-line (strcat "90," (rtos (+ w2 (/ m 2)) 2 8) "," (rtos (+ h (/ m 2)) 2 8) "," (rtos (* 2 h) 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h m) 2 8) "," (rtos (- (+ h m)) 2 8)) f)
(write-line (strcat "90," (rtos (- (+ w1 w2) (/ m 2)) 2 8) "," (rtos (/ m 2) 2 8) "," (rtos h 2 8) "," (rtos (+ w1 w2) 2 8) "," (rtos (- h m) 2 8) "," (rtos (- m) 2 8)) f)
)
)
(close f)
(initget 1 "Yes No")
(setq ass (getkword "\nAssociative hatch [Yes/No] ? "))
(initget 6)
(setq scal (getreal "\nScale factor of hatch <1.0> : "))
(if (null scal)
(setq scal 1)
)
(vl-cmdf "_.-BHATCH" "_S" ss "" "_A" "_A" ass "" "_P" "HM-2PLATESRUN" scal "" "")
(princ)
)
HTH., Marko Ribar, d.i.a.
Marko Ribar, d.i.a. (graduated engineer of architecture)