Here is 2 versions to play with for offset to center between 2 lines...
;;; http://www.theswamp.org/index.php?topic=29537.0
;;; Patrick_35, GILE
;;; MsgBox
(defun ARCH:MsgBox2 (title buttons message time / return WshShell)
(setq WshShell (vlax-create-object "WScript.Shell"))
(setq return (vlax-invoke
WshShell
'Popup
message
time
title
(itoa buttons)
)
)
(vlax-release-object WshShell)
return
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Select Function ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ARCH:SELECT-1 ()
(while (or (not (setq sel1 (entsel "\n* Select Object *")))
(and (/= (cdr (assoc 0 (setq ent (entget (car sel1))))) "LINE")
(/= (cdr (assoc 0 (setq ent (entget (car sel1))))) "POLYLINE")
(/= (cdr (assoc 0 (setq ent (entget (car sel1))))) "LWPOLYLINE")))
(ARCH:MsgBox2 " Arch Program : Error" 16 "
Selection Error Message
--------------------------------------------------------------------------------------------
You did not Select Anything. Please try again." 4))
(princ))
(defun ARCH:SELECT-2 ()
(while (or (not (setq sel2 (entsel "\n* Select Object *")))
(and (/= (cdr (assoc 0 (setq ent (entget (car sel2))))) "LINE")
(/= (cdr (assoc 0 (setq ent (entget (car sel2))))) "POLYLINE")
(/= (cdr (assoc 0 (setq ent (entget (car sel2))))) "LWPOLYLINE")))
(ARCH:MsgBox2 " Arch Program : Error" 16 "
Selection Error Message
--------------------------------------------------------------------------------------------
You did not Select Anything. Please try again." 4))
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;; Center Between Lines Function ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ARCH:CEN-BETWEEN-LIN (/ p1 p2 p3 obj1 obj2)
(ARCH:SELECT-1)
(setvar "osmode" 0)
;;(princ "\n* Single wall fill *")
(setq obj1 (car sel1))
(setq p1 (car (cdr sel1)))
(ARCH:SELECT-2)
(setq obj2 (car sel2))
(setq p2 (car (cdr sel2)))
(command "dist" "nea" p1 "per" p2)
(setq dist_1 (getvar "distance"))
(setq dist_2 (/ dist_1 2.0))
(setq x (/ (+ (car p1) (car p2)) 2))
(setq y (/ (+ (cadr p1) (cadr p2)) 2))
(setq z (/ (+ (caddr p1) (caddr p2)) 2))
(setq p3 (list x y z))
(command ".offset" dist_2 obj1 p3 "")
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; New Wall Fill Routine ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun ARCH:CEN-BETWEEN-LIN2 (/ a b p1 p2 pt ent1 ent2 ent3)
;;(if (not ARCH:GetIntersect)(load (strcat ARCH#UTIF "ARCH_GET_INTERSECT")))
(defun CEN-BETWEEN-LIN-DOIT ()
(command "line" a b "")
(setq ent1 (entlast))
(cond (SS1
(repeat (sslength SS1)
(setq ent2 (cdr (assoc -1 (entget (ssname SS1 0)))))
(setq p1 (ARCH:GetIntersect ent1 ent2))
(setq ent3 (cdr (assoc -1 (entget (ssname SS1 1)))))
(setq p2 (ARCH:GetIntersect ent1 ent3)))))
(command "dist" "nea" p1 "per" p2)
(setq dist_1 (getvar "distance"))
(setq dist_2 (/ dist_1 2.0))
(setq x (/ (+ (car p1) (car p2)) 2))
(setq y (/ (+ (cadr p1) (cadr p2)) 2))
(setq z (/ (+ (caddr p1) (caddr p2)) 2))
(setq p3 (list x y z))
(command ".offset" dist_2 ent2 p3 "")
(entdel ent1)
(princ))
(setvar "orthomode" 0)
(setvar "osmode" 0)
;;(initget 1)
(setq a (getpoint "\n* Draw Crossing Line *"))
(initget 33)
(setq b (getpoint a))
(setq pt (list a b))
(setq SS1 (ssget "F" pt '((0 . "LINE"))))
(cond
((or (= SS1 nil) (/= (sslength SS1) 2))
(ARCH:MsgBox2 " Arch Program : Error" 16 "
Selection Error Message
--------------------------------------------------------------------------------------------
Invalid Selection...either you selected nothing, a
double line <line on top of a line>, or a polyline.
If a double line, delete one, or if a polyline
change it to a line. Now you can try again..." 4))
((CEN-BETWEEN-LIN-DOIT)))
(princ))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; Get the Intersection Function ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;One of the better ways is to use the IntersectWith method:
;;;Written by R. Robert Bell
;;;Takes either ENames or Objects, returns list or nil.
(defun ARCH:GetIntersect (obj1 obj2)
(foreach
obj '(obj1 obj2)
(if (= (type (eval obj)) 'ENAME)
(set obj
(vlax-EName->vla-Object
(eval obj)
)
)
)
)
(vlax-Invoke obj1 'IntersectWith obj2 acExtendBoth)
)