Hey Tim,
Works in a UCS. Not well tested, but seems OK.
(defun c:CopyLine ( / ent obj len pt param p1 p2 end newline)
(if
(and
(setq ent (entsel "\nSelect line: "))
(setq obj (vlax-ename->vla-object (car ent)))
(eq "AcDbLine" (vlax-get obj 'ObjectName))
(setq len (getdist "\nEnter length of new line: "))
)
(progn
(setq pt (trans (cadr ent) 1 0)
pt (vlax-curve-GetClosestPointTo obj pt)
param (vlax-curve-getParamAtPoint obj pt)
)
(if (< param (* 0.5 (vlax-curve-GetEndParam obj)))
(setq p1 (vlax-get obj 'StartPoint)
p2 (vlax-get obj 'EndPoint)
end "StartPoint"
)
(setq p1 (vlax-get obj 'EndPoint)
p2 (vlax-get obj 'StartPoint)
end "EndPoint"
)
)
(setq newline (vlax-invoke obj 'Copy))
(vlax-invoke newline 'Move p2 p1)
(vlax-put newline end (polar p1 (angle p2 p1) len))
)
)
(princ)
) ;end