非你可1 发表于 2025-3-2 17:46:04

三点画室内门的程序画出来不对,请大神指点


(defun c:Door3P (/ pt1 pt2 pt3 ang width door_len)
(setvar "cmdecho" 0) ; 关闭命令回显
;-- 用户输入处理 --
(if (and (setq pt1 (getpoint "\n选择门洞插入点: "))
         (setq pt2 (getpoint pt1 "\n指定开启方向端点: "))
         (setq pt3 (getpoint pt2 "\n指定门板宽度确认点: ")))
    (progn
      ;-- 参数计算 --
      (setq ang (angle pt1 pt2))   ; 计算开启角度
      (setq width (distance pt2 pt3)) ; 计算门板宽度
      (setq door_len (distance pt1 pt2)) ; 门板长度默认取墙厚

      ;-- 图层设置 --
      (command "-layer" "m" "门构件" "c" "7" "" "lw" "0.3" "" "") ; 创建门图层

      ;-- 绘制门板矩形 --
      (command "pline"
      pt1
      (polar pt1 (+ ang (/ pi 2)) (/ width 2)) ; 计算左上角点
      (polar (polar pt1 ang door_len) (+ ang (/ pi 2)) (/ width 2)) ; 右上角点
      (polar pt1 ang door_len) ; 右下角点
      "c") ; 闭合多段线

      ;-- 绘制开启弧线 --
      (command "arc" pt1 "c" pt2 (polar pt1 ang door_len)) ; 三点画弧

      (princ "\n门构件绘制完成!"))
    (princ "\n输入点无效,操作已取消。"))
(princ))


xyp1964 发表于 2025-3-3 09:07:23

(defun c:tt ()
"三点画门"
(if (and (setq pt1 (getpoint "\n选择门洞插入点: "))
         (setq pt2 (getpoint pt1 "\n指定开启方向端点: "))
         (setq pt3 (getpoint pt2 "\n指定门板宽度确认点: "))
      )
    (progn
      (setq ang   (angle pt1 pt2) ; 计算开启角度
            width (* (distance pt2 pt3) 0.5) ; 计算门板宽度
            ww    (distance pt1 pt2) ; 门板长度默认取墙厚
      )
      (command "-layer" "m" "门构件" "c" "7" "" "lw" "0.3" "" "") ; 创建门图层
      (setq pt4(polar pt1 ang ww) ; 右下角点
            pt1a (polar pt1 (+ ang (/ pi 2)) width) ; 计算左上角点
            pt4a (polar pt4 (+ ang (/ pi 2)) width) ; 右上角点
            pt4b (polar pt4 (- ang (/ pi 2)) width)
      )
      (command "pline" pt1 pt1a pt4a pt4 "c")
      (command "arc" pt1 "c" pt2 pt4b) ; 三点画弧
    )
)
(princ)
)

mahuan1279 发表于 2025-3-2 18:35:59

配个图,标注好点的序号,更好理解些。

uualice2020 发表于 2025-3-2 21:39:38

画圆弧 ang 有问题

阿猪蛋 发表于 2025-3-3 09:02:14

配个图,标注好点的序号,更好理解些。

jianxiucai 发表于 2025-3-4 08:38:16

配个图,无图无真相
页: [1]
查看完整版本: 三点画室内门的程序画出来不对,请大神指点