Here is a quick and dirty example, using a data entry helper function. Some other ways to do the same thing also shown (remmed out) in code.
(defun C:LineMPL (/ MP P1 P2 OldOsnap)
; Draw line based on centre point and length
; KJM - Jan 2025
; Uses custom functions:
; getdata
; Get inputs
; Midpoint
(setq MP (getpoint "\nSelect line midpoint..."))
; Length with pre-set default
(if (and (not MyLength) (not (type MyLength) 'REAL)) (setq MyLength 10.0)) ; hard coded starting default
(setq MyLength (getdata "R" "Enter length " MyLength))
; Angle (even though you do not need, someone else might. Rem it out if not needed)
(if (and (not MyAngle) (not (type MyAngle) 'REAL)) (setq MyAngle 0.0)) ; hard coded starting default
(setq MyAngle (getdata "R" "Enter angle (degrees) " MyAngle))
; Better method that allows pick, but no default
;(setq MyAngle (getangle MP "\nSelect or enter angle..."))
; Make line endpoints
(setq P1 (polar MP (+ MyAngle pi) (* 0.5 MyLength)))
(setq P2 (polar P1 MyAngle MyLength))
; Draw line (or could entmake the line - see example below)
; Cancel any current object snaps
(setq OldOsnap (getvar "OSMODE"))
(setvar "OSMODE" 0)
(command ".LINE" P1 P2 "")
; Reset object snap setting
(setvar "OSMODE" OldOsnap)
; Draw line using entmake (do not need to worry about object snaps)
;(entmake (list '(0 . "LINE") (cons 10 P1) (cons 11 P2)))
(princ)
)
; ========================================================= Helper functions
(defun GetData (DataType DataPrompt Default / Data)
; Get Integer, Real, String or Point, returns Data
; KJM 1990?
; Input:
; DataType - (string, typ 1 char) desired type of value
; where "I" = integer
; "R" = Real
; "S" = String
; "P" = Point (or vector)
; DataPrompt - (string) text prompt
; Default - (integer or real) default value
; Returns
; value of type specified by 'DataType'
; Uses custom functions:
; none!
(setq DataType (strcase (substr DataType 1 1)))
(prompt (strcat "\n" DataPrompt " <"))
(princ Default)(princ)
(cond
((= DataType "I") ; Integer
(progn
(setq Data (getint ">: "))
(if (= Data nil) (setq Data Default))
)
)
((= DataType "R") ; Real
(progn
(setq Data (getreal ">: "))
(if (= Data nil) (setq Data Default))
)
)
((= DataType "S") ; String (with spaces)
(progn
(setq Data (getstring 1 ">: "))
(if (= Data "") (setq Data Default))
)
)
((= DataType "P") ; Point
(progn
(setq Data (getpoint ">: "))
(if (= Data nil) (setq Data Default))
)
)
)
Data ; return data
)