明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 156|回复: 2

绘制管道程序。

[复制链接]
发表于 8 小时前 | 显示全部楼层 |阅读模式
本帖最后由 183017064 于 2025-2-26 14:25 编辑
  1.   (defun pt ( /  p1 p2)
  2.   (setq oldecho (getvar "cmdecho"))
  3.   (setvar "cmdecho" 0)
  4.   (setq p1 nil
  5.   p2 nil
  6.   )
  7.   (while (or
  8.      (null p1)
  9.      (null p2)
  10.    )
  11.     (if (null p1)
  12.       (progn
  13.   (setq p1 (getpoint (strcat "\n<空格>重新开始OR<Esc>退出OR请点击第一个点:当前管外经:"
  14.            (rtos (* offset_distance 2) 2 2)
  15.          )
  16.      )
  17.   )
  18.   (if (null p1)
  19.     (progn
  20.       (princ "\n您重新输入偏移量。")
  21.       (C:djg)
  22.     )
  23.   )
  24.       )
  25.     )
  26.     (if (null p2)
  27.       (setq p2 (getpoint p1 "\n请点击第二个点:"))
  28.     )
  29.   )
  30.   (line p1 p2)
  31. )



  32. (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)
  33.   
  34.   
  35.   (setq original_line (entmakex (list (cons 0 "LINE") (cons 10 p1) (cons 11 p2))))
  36.   ; 计算直线的方向向量
  37.   (setq dx (- (car p2) (car p1)))
  38.   (setq dy (- (cadr p2) (cadr p1)))
  39.   ; 计算垂直方向向量(通过交换坐标并改变其中一个的符号)
  40.   (setq perp_dx (- dy))
  41.   (setq perp_dy dx)
  42.   ; 计算垂直方向的单位向量
  43.   (setq xiangliang (sqrt (+ (* perp_dx perp_dx) (* perp_dy perp_dy))))
  44.   (setq unit_perp_dx (/ perp_dx xiangliang))
  45.   (setq unit_perp_dy (/ perp_dy xiangliang))
  46.   ; 计算偏移后的端点坐标
  47.   (setq new_p1 (list (+ (car p1) (* offset_distance unit_perp_dx))
  48.                  (+ (cadr p1) (* offset_distance unit_perp_dy))))
  49.   (setq new_p2 (list (+ (car p2) (* offset_distance unit_perp_dx))
  50.                  (+ (cadr p2) (* offset_distance unit_perp_dy))))
  51.   (setq new_line1 (entmakex (list (cons 0 "LINE") (cons 10 new_p1) (cons 11 new_p2))))
  52.   (setq new_p3 (list (- (car p1) (* offset_distance unit_perp_dx))
  53.                  (- (cadr p1) (* offset_distance unit_perp_dy))))
  54.   (setq new_p4 (list (- (car p2) (* offset_distance unit_perp_dx))
  55.                  (- (cadr p2) (* offset_distance unit_perp_dy))))
  56.   (setq new_line2 (entmakex (list (cons 0 "LINE") (cons 10 new_p3) (cons 11 new_p4))))
  57.   ; 删除初始直线
  58.   (command "erase" original_line "")
  59.   
  60.   (pt)
  61. )

  62. (defun C:djg( / offset_distance)
  63.   
  64.   (setq offset_distance (getreal "\n请输入管外经: "))
  65.   (setq offset_distance (/ offset_distance 2 ))
  66.   
  67.   (pt)
  68. )

回复

使用道具 举报

发表于 8 小时前 | 显示全部楼层
感谢大佬分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 8 小时前 | 显示全部楼层

闹着玩,程序比较简单,我谈不上大佬,刚学,就是小白一枚。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-26 22:19 , Processed in 0.163855 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表