借用网上的一段代码,再通过chatgpt修改成目前这个样子。将以下代码复制粘贴到一个文本文件,将文件保存为lsp文件。
在bricscad或者autocad中使用appload命令调用此lsp文件。
命令行输入zbbz启动。
(defun C:zbbz( / zb gd cld osm x_text y_text x_text_insert y_text_insert line_length text_style end_x)
; 定义自定义命令 zbbz,并声明局部变量 (setq osm (getvar "osmode")) ; 获取当前的对象捕捉模式,并将其存储在变量 osm 中 (setvar "osmode" 33) ; 设置对象捕捉模式为 33 (端点和中点捕捉) (setq gd (getreal "指定标注文字高度:>")) ; 提示用户输入标注文字的高度,并将其存储在变量 gd 中 (if (= gd nil) (setq gd 0.5)) ; 如果用户没有输入高度(即 gd 为 nil),则将高度设为 0.5 (setq text_style (getvar "textstyle")) ; 获取当前文字样式 (while (setq zb (getpoint "指定坐标点:")) ; 开始一个循环,提示用户输入坐标点,并将其存储在变量 zb 中 (setq cld (getpoint zb "指定文字插入点:")) ; 提示用户在指定坐标点 zb 的基础上输入文字插入点,并将其存储在变量 cld 中 (entmake (list '(0 . "LINE") ; 创建一条直线实体 '(67 . 0) ; 在模型空间中创建 '(8 . "0") ; 图层为 0 (list 10 (car zb) (cadr zb) 0) ; 起点坐标 (list 11 (car cld) (cadr cld) 0) ; 终点坐标 '(210 0.0 0.0 1.0) ; 直线的法向矢量 ) ) (setq line_length (* gd 13)) ; 根据 cld 和 zb 的 X 坐标关系确定直线终点坐标 (setq end_x (if (>= (car cld) (car zb)) (+ (car cld) line_length) (- (car cld) line_length))) ; 创建水平直线实体 (entmake (list '(0 . "LINE") ; 创建一条直线实体 '(67 . 0) ; 在模型空间中创建 '(8 . "0") ; 图层为 0 (list 10 (car cld) (cadr cld) 0) ; 起点坐标为 cld (list 11 end_x (cadr cld) 0) ; 终点坐标根据条件判断设置 '(210 0.0 0.0 1.0) ; 直线的法向矢量 ) ) ; 调整文本插入点 (if (< (car cld) (car zb)) ; 如果 cld 的 X 坐标小于 zb 的 X 坐标 (progn (setq x_text_insert (- (+ (car cld) (/ gd 4)) (* 13 gd))) ; 计算新的 X 文字插入点 (setq y_text_insert (cadr cld)) ; 计算新的 Y 文字插入点 ) ; 如果 cld 的 X 坐标大于等于 zb 的 X 坐标,使用原始的文本插入点 (progn (setq x_text_insert (+ (car cld) (/ gd 4))) (setq y_text_insert (cadr cld)) ) ) ; 创建 x= 文字实体 (setq x_text (entmake (list '(0 . "TEXT") ; 创建文本实体 (list 10 x_text_insert (+ y_text_insert (/ gd 3)) 0) ; 文字插入点 (cons 40 gd) ; 文字高度 (cons 1 (strcat "X=" (rtos (cadr zb) 2 2))) ; 文字内容 '(50 . 0) ; 文字旋转角度 (cons 7 text_style) ; 使用当前文字样式 '(41 . 0.7) ; 文字宽度因子 ) )) ; 创建 y= 文字实体 (setq y_text (entmake (list '(0 . "TEXT") (list 10 x_text_insert (- y_text_insert (+ gd (/ gd 3)))) ; 文字插入点的 X 坐标和 X 坐标的插入点相同,Y 坐标减少高度 gd 和 gd 的 1/3 (cons 40 gd) ; 文字高度 (cons 1 (strcat "Y=" (rtos (car zb) 2 3))) ; 文字内容 '(50 . 0) ; 文字旋转角度 (cons 7 text_style) ; 使用当前文字样式 '(41 . 0.7) ; 文字宽度因子 ) )) ) (setvar "osmode" osm) ; 恢复之前的对象捕捉模式 (princ) ; 结束程序 )