天正标注水平垂直免点鼠标
直接附代码,不接受任何批评,老原则:肯定有人会说这玩意,有啥鸟用!!!!
(defun C:DD (/ *error* pt1 pt2 choice input)
(vl-load-com)
;; 定义错误处理函数
(defun *error* (msg)
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(princ "\n")
(princ "\n操作已取消"))
(princ)
)
;; 初始化选项,允许 H V D
(initget "H V D")
;; 获取起点或选项
(setq input (getpoint "\n起点或 [水平标注H/垂直标注V/逐点标注D]<逐点标注D>: "))
(cond
;; 返回点坐标,默认为 D
((listp input) (setq pt1 input choice "D"))
;; 返回选项字符串
((member input '("H" "V" "D")) (setq choice input))
;; 回车或取消,默认 D
(t (setq choice "D"))
)
;; 如果未获取 pt1,提示输入起点
(while (not pt1)
(setq pt1 (getpoint "\n起点: "))
(if (not pt1) (princ "\n请选取起点或取消操作。"))
)
;; 获取第二点
(setq pt2 (getpoint pt1 "\n第二点: "))
(while (not pt2)
(setq pt2 (getpoint pt1 "\n第二点: "))
(if (not pt2) (princ "\n请选取第二点或取消操作。"))
)
;; 根据选项调整 pt2 坐标
(cond
((= choice "H") (setq pt2 (list (car pt2) (cadr pt1) (caddr pt2))))
((= choice "V") (setq pt2 (list (car pt1) (cadr pt2) (caddr pt2))))
((= choice "D") pt2)
)
;; 调用天正标注命令
(command-s "TDIMMP" pt1 pt2)
;; 清理错误处理
(*error* nil)
(princ)
)
我弥陀佛,戒骄戒躁 TDIMMP天正的这个命令都非常好用了,还有必要这样吗:lol 不接受批评
TDIMMP也就是因为必须用他,但他又连基本的水平垂直都还要手动,程序员也不知道干嘛想的
应该是可以自动水平垂直,再改改就是了 (defun C:DD (/ *error* pt1 pt2 choice input dx dy)
(vl-load-com)
;; 定义错误处理函数
(defun *error* (msg)
(if (not (member msg '("Function cancelled" "quit / exit abort")))
(if msg
(princ (strcat "\n错误: " msg))
(princ "\n操作已取消"))
)
(princ)
)
;; 初始化选项,仅允许 D(逐点标注)
(initget "D")
;; 获取起点或选项
(setq input (getpoint "\n起点或 [逐点标注D]<自动水平/垂直>: "))
(cond
;; 返回点坐标,默认自动水平/垂直
((listp input) (setq pt1 input choice nil))
;; 返回选项字符串
((= input "D") (setq choice "D"))
;; 回车或取消,默认自动水平/垂直
(t (setq choice nil))
)
;; 如果未获取 pt1,提示输入起点
(while (not pt1)
(setq pt1 (getpoint "\n起点: "))
(if (not pt1) (princ "\n请选取起点或取消操作。"))
)
;; 获取第二点
(setq pt2 (getpoint pt1 "\n第二点: "))
(while (not pt2)
(setq pt2 (getpoint pt1 "\n第二点: "))
(if (not pt2) (princ "\n请选取第二点或取消操作。"))
)
;; 根据选项调整 pt2 坐标
(cond
;; 逐点标注,直接使用 pt2
((= choice "D")
(setq pt2 pt2))
;; 自动水平/垂直判断
(t
;; 计算 X 和 Y 坐标差值
(setq dx (abs (- (car pt2) (car pt1)))
dy (abs (- (cadr pt2) (cadr pt1))))
(if (> dx dy)
;; 水平标注,调整 pt2 的 Y 坐标与 pt1 相同
(progn
(setq pt2 (list (car pt2) (cadr pt1) (caddr pt2)))
(princ "\n水平标注"))
;; 垂直标注,调整 pt2 的 X 坐标与 pt1 相同
(progn
(setq pt2 (list (car pt1) (cadr pt2) (caddr pt2)))
(princ "\n垂直标注"))
)
)
)
;; 调用天正标注命令
(command-s "TDIMMP" pt1 pt2)
;; 清理错误处理
(*error* nil)
(princ)
)
页:
[1]