明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 665|回复: 11

[讨论] 如何修改下面的代码实现柜门线

[复制链接]
发表于 2023-7-7 15:58 | 显示全部楼层 |阅读模式

    • (defun c:tt1 ( / h lay os p1 p1x p1y p2 p2x p2y)
    •   (setq os (getvar "OSMODE"))
    •   (setvar "cmdecho" 0)
    •   (if (= nil (setq h (getint "\n请输入分格数<4>:")))
    •       (setq h 4)
    •   )
    •   (setq p1 (getpoint "\n指定第一点:"))
    •   (command "rectang" p1 pause)
    •   (setq p2 (getvar "lastpoint")
    •         p1x (car p1)
    •         p1y (cadr p1)
    •         p2x (car p2)
    •         p2y (cadr p2)
    •   )
    •   (setq pt3 (list (+ p1x (/ (- p2x p1x) h)) p2y))
    •   (setq pt2 (list p1x p2y))
    •   (setq pt4 (list (+ p1x (/ (- p2x p1x) h)) p1y))
    •   (setq pa1 (mid_2point p1 pt2))
    •   (setq pa2 (mid_2point pt3 pt4))
    •   (setvar "OSMODE" 0)
    •   (progn
    •       (command "pline" pt3 pa1 pt4 "")
    •       (setq ent1 (entlast))
    •       (command "ARRAY" ent1 "" "R" 1 h (/ (- p2x p1x) h ) )
    •     )
    • (progn
    •       (command "pline" p1 pa2 pt2 "")
    •       (setq ent2 (entlast))
    •       (command "ARRAY" ent2 "" "R" 1 h (/ (- p2x p1x) h ) )
    •     )
    • (progn
    •       (command "line" pt3 pt4 "")
    •       (setq ent3 (entlast))
    •       (command "ARRAY" ent3 "" "R" 1 (1- h) (/ (- p2x p1x) h) )
    •     )
    •   (setvar "OSMODE" os)
    •   (princ)
    • )
    • ;;求两点的中点
    • ;(setq mid_ptA (mid_2point pt1 pt2))
    • (defun mid_2point(e1 e2)
    • (setq mid (mapcar '(lambda (x y) (/ (+ x y) 2))
    •       e1
    •       e2
    •   ))
    • )
    • ;请教各位大佬如何实现这个柜门线,好像用阵列实现不了,但又不知道怎么修改,希望各位大佬出手看下,谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2023-7-7 16:46 | 显示全部楼层
  1. (defun c:tt1 (/ h h1 lay os p1 p1x p1y p2 p2x p2y)
  2.   (setq os (getvar "OSMODE"))
  3.   (setvar "cmdecho" 0)
  4.   (if (= nil (setq h (getint "\n请输入分格数<4>:")))
  5.     (setq h 4)
  6.   )
  7.   (setq h1 (fix (* h 0.5)))
  8.   (setq p1 (getpoint "\n指定第一点:"))
  9.   (command "rectang" p1 pause)
  10.   (setq        p2  (getvar "lastpoint")
  11.         p1x (car p1)
  12.         p1y (cadr p1)
  13.         p2x (car p2)
  14.         p2y (cadr p2)
  15.   )
  16.   (setq pt3 (list (+ p1x (/ (- p2x p1x) h)) p2y))
  17.   (setq pt2 (list p1x p2y))
  18.   (setq pt4 (list (+ p1x (/ (- p2x p1x) h)) p1y))
  19.   (setq pa1 (mid_2point p1 pt2))
  20.   (setq pa2 (mid_2point pt3 pt4))
  21.   (setvar "OSMODE" 0)
  22.   (progn
  23.     (command "pline" pt3 pa1 pt4 "")
  24.     (setq ent1 (entlast))
  25.     (command "mirror" ent1 "" pt3 pt4 "n")
  26.     (setq entm (entlast))
  27.     (command "-ARRAY" ent1 entm "" "R" 1 h1 (/ (- p2x p1x) h1))
  28.   )
  29. ;;;  (progn
  30. ;;;    (command "pline" p1 pa2 pt2 "")
  31. ;;;    (setq ent2 (entlast))
  32. ;;;    (command "ARRAY" ent2 "" "R" 1 h (/ (- p2x p1x) h))
  33. ;;;  )
  34.   (progn
  35.     (command "line" pt3 pt4 "")
  36.     (setq ent3 (entlast))
  37.     (command "ARRAY" ent3 "" "R" 1 (1- h) (/ (- p2x p1x) h))
  38.   )
  39.   (setvar "OSMODE" os)
  40.   (princ)
  41. )
  42. ;;求两点的中点
  43. ;;(setq mid_ptA (mid_2point pt1 pt2))
  44. (defun mid_2point (e1 e2)
  45.   (setq        mid (mapcar '(lambda (x y) (/ (+ x y) 2))
  46.                     e1
  47.                     e2
  48.             )
  49.   )
  50. )

点评

大佬,可以改成识别内部空间,用鼠标去控制方向吗  发表于 2023-10-10 09:23
改后的程序柜门数只能双数,单数会出错。  发表于 2023-7-7 16:51

评分

参与人数 1明经币 +1 收起 理由
depgfdepgf + 1 虽然不是很完美,也要表示感谢下,谢谢!

查看全部评分

发表于 2023-7-7 17:33 | 显示全部楼层
本帖最后由 start4444 于 2023-7-8 17:40 编辑


(defun c:tt5 (/ d ent1 ent3 h os p1 p1x p1y p2 p2x p2y pa1 pa2 pt2 pt3 pt4 px)  
  (setq os (getvar "OSMODE"))
  (setvar "cmdecho" 0)
  (if (= nil (setq h (getint "\n请输入分格数<4>:")))
                (setq h 4)
  )
  (setq p1 (getpoint "\n指定第一点:"))
  (command "rectang" p1 pause)
  (setq p2 (getvar "lastpoint"))
(if (>  (car p1) (car p2)) (setq px p1 p1 p2 p2 px))
        (setq
                p1x (car p1)
                p1y (cadr p1)
                p2x (car p2)
                p2y (cadr p2)
  )
  (setq pt3 (list (+ p1x (/ (- p2x p1x) h)) p2y))
  (setq pt2 (list p1x p2y))
  (setq pt4 (list (+ p1x (/ (- p2x p1x) h)) p1y))
  (setq pa1 (mid_2point p1 pt2))
  (setq pa2 (mid_2point pt3 pt4))
  (setvar "OSMODE" 0)
        (command "pline" pt3 pa1 pt4 "")
        (setq ent1 (entlast) d (/ (abs (- p1x p2x)) h))
        (command "line" pt3 pt4 "")
        (setq ent3 (entlast))
        (repeat (1- h)
                (command "MIRROR" ent1 ""  pt3 pt4 "N")(setq ent1 (entlast))
                (command "COPY" ent3 "" pt3 (polar pt3 0 d))        (setq ent3 (entlast))
                (setq pt3 (polar pt3 0 d) pt4 (polar pt4 0 d))
        )
        (if (= (rem h 2)1) (command "MIRROR" ent1 ""  (polar pt3 0 (* -0.5 d)) (polar pt4 0 (* -0.5 d)) "y"))
  (setvar "OSMODE" os)
  (princ)
)
;;求两点的中点
;(setq mid_ptA (mid_2point pt1 pt2))
(defun mid_2point(e1 e2)
        (setq mid (mapcar '(lambda (x y) (/ (+ x y) 2))
                                                        e1
                                                        e2
                                                ))
)

评分

参与人数 1明经币 +1 收起 理由
depgfdepgf + 1 谢谢大佬,完美了,谢谢

查看全部评分

 楼主| 发表于 2023-7-7 20:29 | 显示全部楼层
start4444大佬可以帮忙再次看下不,还有点小BUG

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

已经更新了  发表于 2023-7-8 17:40
发表于 2023-7-10 00:42 | 显示全部楼层
可以点选封闭区域实现以上功能吗?不用选对角顶点

点评

我也想要这个效果  发表于 2023-10-10 09:24
发表于 2023-7-10 16:55 | 显示全部楼层
start4444 发表于 2023-7-7 17:33
(defun c:tt5 (/ d ent1 ent3 h os p1 p1x p1y p2 p2x p2y pa1 pa2 pt2 pt3 pt4 px)  
  (setq os (getv ...

大佬这个如何改成左边单开?
 楼主| 发表于 2023-7-11 16:29 | 显示全部楼层
depgfdepgf 发表于 2023-7-7 20:29
start4444大佬可以帮忙再次看下不,还有点小BUG

谢谢start4444大佬!很完美了,感谢!
发表于 2023-7-11 23:18 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

本版积分规则

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

GMT+8, 2024-5-13 01:33 , Processed in 0.147287 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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