本帖最后由 183017064 于 2025-2-26 14:25 编辑
 - (defun pt ( / p1 p2)
- (setq oldecho (getvar "cmdecho"))
- (setvar "cmdecho" 0)
- (setq p1 nil
- p2 nil
- )
- (while (or
- (null p1)
- (null p2)
- )
- (if (null p1)
- (progn
- (setq p1 (getpoint (strcat "\n<空格>重新开始OR<Esc>退出OR请点击第一个点:当前管外经:"
- (rtos (* offset_distance 2) 2 2)
- )
- )
- )
- (if (null p1)
- (progn
- (princ "\n您重新输入偏移量。")
- (C:djg)
- )
- )
- )
- )
- (if (null p2)
- (setq p2 (getpoint p1 "\n请点击第二个点:"))
- )
- )
- (line p1 p2)
- )
- (defun line (p1 p2 / dx dy new_line1 new_line2 new_p1 new_p2 new_p3 new_p4 original_line perp_dx perp_dy unit_perp_dy xiangliang)
-
-
- (setq original_line (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))))
- ; 计算直线的方向向量
- (setq dx (- (car p2) (car p1)))
- (setq dy (- (cadr p2) (cadr p1)))
- ; 计算垂直方向向量(通过交换坐标并改变其中一个的符号)
- (setq perp_dx (- dy))
- (setq perp_dy dx)
- ; 计算垂直方向的单位向量
- (setq xiangliang (sqrt (+ (* perp_dx perp_dx) (* perp_dy perp_dy))))
- (setq unit_perp_dx (/ perp_dx xiangliang))
- (setq unit_perp_dy (/ perp_dy xiangliang))
- ; 计算偏移后的端点坐标
- (setq new_p1 (list (+ (car p1) (* offset_distance unit_perp_dx))
- (+ (cadr p1) (* offset_distance unit_perp_dy))))
- (setq new_p2 (list (+ (car p2) (* offset_distance unit_perp_dx))
- (+ (cadr p2) (* offset_distance unit_perp_dy))))
- (setq new_line1 (entmakex (list (cons 0 "LINE") (cons 10 new_p1) (cons 11 new_p2))))
- (setq new_p3 (list (- (car p1) (* offset_distance unit_perp_dx))
- (- (cadr p1) (* offset_distance unit_perp_dy))))
- (setq new_p4 (list (- (car p2) (* offset_distance unit_perp_dx))
- (- (cadr p2) (* offset_distance unit_perp_dy))))
- (setq new_line2 (entmakex (list (cons 0 "LINE") (cons 10 new_p3) (cons 11 new_p4))))
- ; 删除初始直线
- (command "erase" original_line "")
-
- (pt)
- )
- (defun C:djg( / offset_distance)
-
- (setq offset_distance (getreal "\n请输入管外经: "))
- (setq offset_distance (/ offset_distance 2 ))
-
- (pt)
- )
|