Have a look at this, depending on what your measuring I use a drag over method pick 2 points and use a ssget "F" so get two objects can then do a VL intersectwith for 1st point, then a VL closestpointto so distance pt1 pt2 is the offset.
Replace in the while below. using "F" Fence can do multiple parallel lines in one go.
; make mline
; By alan H oct 2020
; Set to bylayer at moment
; Thanks to FIXO for original code
(defun c:makml ( / lst1 lst2 lst desc MLINE_STYLE_NAME )
(setq MLINE_STYLE_NAME (getstring "\nEnter mline name ")
desc (getstring "\nEnter description ")
)
(while (setq off (getreal "\Enter offset Enter to finish " ))
(setq lst (cons off lst))
)
(if (= desc nil)(setq desc MLINE_STYLE_NAME))
(setq lst1
(list '(0 . "MLINESTYLE")
'(100 . "AcDbMlineStyle")
(cons 2 MLINE_STYLE_NAME)
'(70 . 0)
(cons 3 desc)
'(62 . 256)
'(51 . 1.5708)
'(52 . 1.5708)
'(71 . 4)
)
)
(setq x (length lst))
(repeat x
(setq lst2 (list
(cons 49 (nth (setq x (- x 1)) lst))
(cons 62 256)
(cons 6 "BYLAYER")
)
)
(setq lst1 (append lst1 lst2))
)
(if
(not (dictadd
(cdar (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))
MLINE_STYLE_NAME
(entmakex lst1)
)
)
(Alert "Impossible to create mline style\n perhaps this was exist earlier")
)
(setvar 'cmlstyle MLINE_STYLE_NAME)
(princ)
)
(c:makml)