An another way with no (command), if you want try!...
Code:
(defun orthoxline (orientation / key pt)
(if (not (tblsearch "LAYER" "G-ANNO-NPLT"))
(entmake
'(
(0 . "LAYER")
(100 . "AcDbSymbolTableRecord")
(100 . "AcDbLayerTableRecord")
(2 . "G-ANNO-NPLT")
(70 . 0)
(62 . 133)
(290 . 0)
(370 . -3)
(6 . "Continuous")
)
)
)
(princ "\nPick Point(s): ")
(setq key '(0 (0.0 0.0 0.0)))
(while (/= (car key) 25)
(while (and (setq key (grread T 8 2)) (/= (car key) 3) (/= (car key) 25))
(cond
((eq (car key) 5)
(redraw)
(grdraw (cadr key) (polar (cadr key) (angle (trans '(0.0 0.0 0.0) 0 1) (trans (cdr orientation) 0 1)) (* 10 (getvar "VIEWSIZE"))) 133)
(grdraw (cadr key) (polar (cadr key) (angle (trans (cdr orientation) 0 1) (trans '(0.0 0.0 0.0) 0 1)) (* 10 (getvar "VIEWSIZE"))) 133)
)
)
)
(cond
((/= (car key) 25)
(setq pt
(osnap
(cadr key)
(if (zerop (logand 16384 (getvar "OSMODE")))
(apply 'strcat
(vl-remove-if 'null
(mapcar
'(lambda ( a / )
(if (= (car a) (logand (car a) (getvar "osmode")))
(cdr a)
)
)
'(
(1 . "_end,")
(2 . "_mid,")
(4 . "_cen,")
(8 . "_nod,")
(16 . "_qua,")
(32 . "_int,")
(64 . "_ins,")
(128 . "_per,")
(256 . "_tan,")
(512 . "_nea,")
(1024 . "_gce,")
(2048 . "_app,")
(8192 . "_par,")
)
)
)
)
"_none"
)
)
)
(entmake
(list
'(0 . "XLINE")
'(100 . "AcDbEntity")
'(67 . 0)
'(410 . "Model")
'(8 . "G-ANNO-NPLT")
'(100 . "AcDbXline")
(cons 10 (if pt (trans pt 1 0) (trans (cadr key) 1 0)))
orientation
)
)
)
(T (setq key '(25 (0.0 0.0 0.0))))
)
(redraw)
)
(prin1)
)
(defun C:xlh () (orthoxline (cons 11 (getvar "UCSXDIR"))))
(defun C:xlv () (orthoxline (cons 11 (getvar "UCSYDIR"))))