明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1698|回复: 7

[基础] 一个画中空玻璃的lisp。求修改

[复制链接]
发表于 2013-4-26 21:41 | 显示全部楼层 |阅读模式
做了个画中空玻璃的程序,只能做到图示一的地步,求修改到:yes、no的样式。yes是玻璃封口;no是不封口

(defun c:blz ()
  (command "undo" "group")
  (setvar "osmode" 255)
  (setvar "cmdecho" 0)
  (while (setq p1 (getpoint "\n输入6+12+6中空玻璃第一点:"))
    (setq p2 (getpoint p1 "\n输入6+12+6中空玻璃下一点:"))
    (setvar "osmode" 0)
    (command "line" p1 p2 "")
    (setq ang (angle p1 p2))
    (setq ang1 (+ ang (* pi 0.5)))
    (setq ec (entlast))
    (command "change" ec "" "p" "c" 2 "")
    (command "line" (polar p1 ang1 24) (polar p2 ang1 24) "")
    (setq ec1 (entlast))
    (command "change" ec1 "" "p" "c" 2 "")
    (command "line" (polar p1 ang1 1) (polar p2 ang1 1) "")
    (setq ec2 (entlast))
    (command "change" ec2 "" "p" "c" 8 "")
    (command "line" (polar p1 ang1 5) (polar p2 ang1 5) "")
    (setq ec4 (entlast))
    (command "change" ec4 "" "p" "c" 8 "")
    (command "line" (polar p1 ang1 6) (polar p2 ang1 6) "")
    (setq ec5 (entlast))
    (command "change" ec5 "" "p" "c" 2 "")
   (command "line" (polar p1 ang1 18) (polar p2 ang1 18) "")
    (setq ec6 (entlast))
    (command "change" ec6 "" "p" "c" 2 "")
    (command "line" (polar p1 ang1 19) (polar p2 ang1 19) "")
    (setq ec3 (entlast))
    (command "change" ec3 "" "p" "c" 8 "")
    (command "line" (polar p1 ang1 23) (polar p2 ang1 23) "")
    (setq ec3 (entlast))
    (command "change" ec3 "" "p" "c" 8 "")
    (setq dist (distance p1 p2)
          ang  (angle p1 p2)
    )
    (if        (and (<= dist 39) (> dist 9))
      (zx (polar p1 ang (/ (- dist 9) 2)) ang)
      (progn (setq n (fix (/ dist 39)))
             (repeat n
               (zx (polar p1 ang (+ (* (1- n) 9) (* n 30))) ang)
               (setq n (1- n))
             )
      )
    )
    (setvar "osmode" 255)
    (command "undo" "end")
  )

  (princ)                                ;静默退出
)



附上dwg文件




本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2013-4-27 08:58 | 显示全部楼层
图片看不清且缺函数
发表于 2013-4-27 09:11 | 显示全部楼层
这个是单片玻璃的,改改就是中空玻璃了
  1. ;;;&&&&&&&&&&开始检查是否存在图层,如无创建之函数&&&&&&&&&&
  2. ;;;=============================================
  3. ;;;      通用函数  检查是否存在图层,如无创建之              
  4. ;;;参数:l_p------打印标志(整型) 如果设置为 0,则不打印此图层
  5. ;;;      l_l------线型(字符串)              
  6. ;;;      l_c------颜色(整型)               
  7. ;;;      l_s------图层状态(整型)                     
  8. ;;;      l_n------图层名(字符串)
  9. (defun ly_mak (l_p l_l l_c l_s l_n /)
  10.   (if (= (tblobjname "LAYER" l_n) nil)
  11.     (progn
  12.       (entmake (list
  13.                  (cons 0 "LAYER")
  14.                  (cons 100 "AcDbSymbolTableRecord")
  15.                  (cons 100 "AcDbLayerTableRecord")
  16.                  (if l_p
  17.                    (cons 290 l_p)
  18.                    '(290 . 1)
  19.                  ) ;_ 结束if
  20.                  (if l_l
  21.                    (cons 6 l_l)
  22.                    '(6 . "CONTINUOUS")
  23.                  ) ;_ 结束if
  24.                  (if l_c
  25.                    (cons 62 l_c)
  26.                    '(62 . 7)
  27.                  ) ;_ 结束if
  28.                  (if l_s
  29.                    (cons 70 l_s)
  30.                    '(70 . 0)
  31.                  ) ;_ 结束if
  32.                  (cons 2 l_n)
  33.                ) ;_ 结束list
  34.       ) ;_ 结束entmake
  35.     ) ;_ 结束progn
  36.   ) ;_ 结束if
  37. ) ;_ 结束defun
  38. ;;;修改组码en 图元名 num 组码 ch 修改为
  39. (defun ch_dxf (en num ch / old_num new_num ent)
  40.   (if (setq ent            (entget en)
  41.             new_num (cons num ch)
  42.             old_num (assoc num ent)
  43.       ) ;_ 结束setq
  44.     (entmod (subst new_num old_num ent))
  45.     (entmod (reverse (cons new_num (reverse ent))))
  46.   ) ;_ 结束if
  47. ) ;_ 结束defun
  48. ;;; 建立多段线
  49. (defun emk_pl (width ptlist ly close_? / elem ed)
  50.   (setq        ed (list (cons 0 "LWPOLYLINE")
  51.                  (cons 100 "AcDbEntity")
  52.                  (cons 100 "AcDbPolyline")
  53.                  (cons 90 (length ptlist))
  54.                  (cons 70
  55.                        (if close_?
  56.                          1
  57.                          0
  58.                        )
  59.                  )
  60.                  (cons 43 width)
  61.                  (cons 67 0)
  62.                  (cons 8 ly)
  63.            )                                ; list
  64.   ) ;_ 结束setq
  65. ;;;setq
  66.   (foreach elem        ptlist
  67.     (setq ed (append ed (list (cons 10 elem))))
  68.   )
  69. ;;;foreach
  70.   (entmake ed)
  71.   (entlast)
  72. )
  73. ;;;单片玻璃绘制
  74. (defun ghbl_draw (oi pt1 pt2 dist1 dist2 / pt ang lst1 lst2)
  75.   (setq        ang  (angle pt2 pt1)
  76.         lst1 (append (mapcar '(lambda (pt) (polar pt (+ ANG (/ PI 2)) DIST1))
  77.                              (list pt2 pt1)
  78.                      )
  79.                      (mapcar '(lambda (pt) (polar pt (- ANG (/ PI 2)) DIST1))
  80.                              (list pt1 pt2)
  81.                      )
  82.              )
  83.         lst2 (append (mapcar '(lambda (pt) (polar pt (+ ANG (/ PI 2)) DIST2))
  84.                              (list pt2 pt1)
  85.                      )
  86.                      (mapcar '(lambda (pt) (polar pt (- ANG (/ PI 2)) DIST2))
  87.                              (list pt1 pt2)
  88.                      )
  89.              )
  90.   )
  91.   (cond
  92.     ((= OI "Yes")
  93.      (ch_dxf (emk_pl 0 lst1 "玻璃" t) 62 9)
  94.      (command "._chamfer" "d" (- dist2 dist1) (- dist2 dist1))
  95.      (command "._chamfer" "p" (emk_pl 0 lst2 "玻璃" t))
  96.     )
  97.     ((= OI "No")
  98.      (ch_dxf (emk_pl 0 lst1 "玻璃" nil) 62 9)
  99.      (command "._chamfer" "d" (- dist2 dist1) (- dist2 dist1))
  100.      (command "._chamfer" "p" (emk_pl 0 lst2 "玻璃" nil))
  101.     )
  102.   )
  103. )
  104. (defun c:ghbl(/ old_luprec old_cmd oi dist1 dist2 pt1 pt2)
  105.   (setq old_luprec (getvar "luprec"))
  106.   (setq old_cmd (getvar "cmdecho"))
  107.   (setvar "luprec" 3)
  108.   (setvar "cmdecho" 0)
  109.   (ly_mak 1 "continuous" 2 0 "玻璃")
  110.   (initget 1 "A B C D E F G")
  111.   (if **ghblHDoi**
  112.   (SETQ        OI (getkword
  113.              (STRCAT "\n玻璃厚度[5(A)/6(B)/8(C)/10(D)/12(E)/15(F)/19(G)]<" **ghblHDoi** ">")
  114.            )
  115.   )
  116.   (SETQ        OI (getkword
  117.              "\n玻璃厚度[5(A)/6(B)/8(C)/10(D)/12(E)/15(F)/19(G)]<B>"
  118.            )
  119.   )
  120.     )
  121.   (SETQ **ghblHDoi** OI)
  122.   (COND        ((= OI "A")
  123.          (SETQ dist1 1.
  124.                dist2 2.5
  125.          )
  126.         )
  127.         ((= OI "B")
  128.          (SETQ dist1 1.5
  129.                dist2 3.
  130.          )
  131.         )
  132.         ((= OI "C")
  133.          (SETQ dist1 2.5
  134.                dist2 4.
  135.          )
  136.         )
  137.         ((= OI "D")
  138.          (SETQ dist1 3.5
  139.                dist2 5.
  140.          )
  141.         )
  142.         ((= OI "E")
  143.          (SETQ dist1 4.5
  144.                dist2 6.
  145.          )
  146.         )
  147.         ((= OI "F")
  148.          (SETQ dist1 6.
  149.                dist2 7.5
  150.          )
  151.         )
  152.         ((= OI "G")
  153.          (SETQ dist1 7.5
  154.                dist2 9.5
  155.          )
  156.         )
  157.   )
  158.   (setq        pt1  (getpoint "\n拾取起点:")
  159.         pt2  (getpoint pt1 "\n拾取终点:")
  160.   )
  161.   (initget 1 "Yes No")
  162.   (if **ghblKKoi**
  163.   (SETQ        OI (getkword (STRCAT "\n[终点封口(Yes)/终点放开(No)]<" **ghblKKoi** ">")))
  164.   (SETQ        OI (getkword "\n[终点封口(Yes)/终点放开(No)]<No>"))
  165.     )
  166.   (SETQ **ghblKKoi** OI)
  167.   (cond
  168.     ((= OI "Yes")(ghbl_draw oi pt1 pt2 dist1 dist2))
  169.     ((= OI "No")(ghbl_draw oi pt1 pt2 dist1 dist2))
  170.   )
  171.   (setvar "luprec" old_luprec)
  172.   (setvar "cmdecho" old_cmd)
  173.   (princ)
  174. )
 楼主| 发表于 2013-4-27 11:41 | 显示全部楼层
呵呵,可俺改不了啊,请老大出手
 楼主| 发表于 2013-4-29 14:02 | 显示全部楼层
老大们,出手帮帮
 楼主| 发表于 2013-5-24 17:16 | 显示全部楼层
顶起来,,,,,,,,,,,,,,
发表于 2013-5-24 22:50 | 显示全部楼层
ZZXXQQ 发表于 2013-5-1 03:58
图片看不清且缺函数

6+12A+6中空玻璃

本帖子中包含更多资源

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

x
发表于 2024-3-22 08:08 | 显示全部楼层
感谢分享感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 03:38 , Processed in 0.292795 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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