明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: hhh454

在其他软件里面生成的文件,lisp不知道怎么实现,自己研究半天,弄不出来

  [复制链接]
发表于 2012-3-14 20:44 | 显示全部楼层
楼主 顶起来 别让沉了
 楼主| 发表于 2012-3-15 22:15 | 显示全部楼层
请Gu_XL版主帮忙解决,谢谢。
发表于 2012-3-16 21:13 | 显示全部楼层
本帖最后由 Gu_xl 于 2012-3-18 23:03 编辑
hhh454 发表于 2012-3-15 22:15
请Gu_XL版主帮忙解决,谢谢。

完整代码如下:
  1. (defun c:tt (/ OSMODE  CMDECHO   W W2   W22  H    KD   P1  P2
  2.         P3   P4  WH   NW   NH P    W0   H0   K    I  NN
  3.         NNN  FLAG NNH KD1
  4.        )
  5.   (defun *error* (msg)
  6.     (setvar 'osmode osmode)
  7.   (setvar 'cmdecho cmdecho)
  8.     (princ msg) (princ)
  9.     )
  10.   (setq osmode (getvar 'osmode))
  11.   (setq cmdecho (getvar 'cmdecho))
  12.   (setq w (getreal "\n砖块宽度<10.0>:"))
  13.   (if (null w) (setq w 10.0))
  14.   (setq w2 (* 0.5 w) w22 w2)
  15.   (setq h (getreal "\n砖块高度<5.0>:"))
  16.   (if (null h) (setq h 5.0))
  17.   (initget 7 "Yes No  ")
  18.   (setq KD1 (getkword "\n砖块尺寸余数是否取整[Yes/No]<No>:"))
  19.   (if (= kd1 "") (setq kd1 "No"))
  20.   (initget 7 "1 2  ")
  21.   (setq kd (getkword "\n[交错1/平行2]<1>"))
  22.   (if (= kd "") (setq kd "1"))
  23.   
  24.   (setq p1 (getpoint "\n左下角点:")
  25. p2 (getcorner p1 "\n右上角点:")
  26. )
  27.   (setvar 'osmode 0)
  28.   (setvar 'cmdecho 0)
  29.   (setq p3 (apply 'mapcar (list 'min p1 p2))
  30. p4 (apply 'mapcar (list 'max p1 p2))
  31. wh (mapcar '- p4 p3)
  32. nw (fix (/ (car wh) w2))
  33. nh (fix (/ (cadr wh) h))
  34. p p3 ;(polar p3 0 w2)
  35. )
  36.   ;;计算砖块宽度余数
  37.   (if (equal nw (/ (car wh) w2) 1e-5)
  38.     (setq w0 w2)
  39.     (setq w0 (- (car wh) (* nw w2))
  40.    nw (1+ nw)
  41.     )
  42.   )
  43.   ;;计算砖块高度余数
  44.   (if (equal nh (/ (cadr wh) h) 1e-5)
  45.     (progn
  46.       (setq h0 h)
  47.     )
  48.     (setq h0 (- (cadr wh) (* nh h))
  49.    nh (1+ nh)
  50.     )
  51.   )
  52.   (if (= "No" KD1)
  53.     ;;砖块余数不取整
  54.     (progn
  55.       (setq k -1
  56.      i -1
  57.      nn 0
  58.      nnn (/ nw 2)
  59.       )
  60.       (if (/= nw (* nnn 2))
  61. (setq nnn (1+ nnn))
  62.       )
  63.       (vl-cmdf "_rectang" p1 p2)
  64.     )
  65.     ;;砖块余数取整
  66.     (progn
  67.       (if (>= w0 (* 0.5 w2))
  68.            (setq W0 W2)
  69.     (setq w0 w2 nw (1- nw))
  70. )
  71.       (if (>= h0 (* 0.5 h))
  72.            (setq h0 h)
  73.     (setq h0 h nh (1- nh))
  74. )
  75.       (setq k -1
  76.      i -1
  77.      nn 0
  78.      nnn (/ nw 2)
  79.       )
  80.       (if (/= nw (* nnn 2))
  81. (setq nnn (1+ nnn))
  82.       )
  83.       (vl-cmdf "_rectang" p3 (strcat "@" (rtos (* nw w2) 2 4) "," (rtos (* nh h) 2 4)))
  84.       )
  85.     )
  86.   (cond ((= kd "1")
  87.   (vl-cmdf "_pline") (vl-cmdf p)
  88.   (repeat nnn
  89.     (setq nn (1+ nn))
  90.     (if (= nn nnn) (setq w2 w0))
  91.     (setq k (* -1 k))
  92.     (setq flag (not flag))
  93.     (setq nnh 0)
  94.     (repeat nh
  95.       (setq i (* -1 i) nnh (1+ nnh))
  96.       (if flag
  97. (progn
  98.    (if (/= nn nnn)
  99.             (vl-cmdf (strcat "@" (rtos (* i w2) 2 4) "<0"))
  100.      (vl-cmdf (strcat "@" (rtos (* i w0) 2 4) "<0"))
  101.      )
  102.       (if (/= nnh nh)
  103.           (vl-cmdf (strcat "@" (rtos (* k h) 2 4) "<90"))
  104. (vl-cmdf (strcat "@" (rtos (* k h0) 2 4) "<90"))
  105. )
  106.       )

  107. (progn
  108.    (if (/= 1 nnh)
  109.            (vl-cmdf (strcat "@" (rtos (* k h) 2 4) "<90"))
  110.      (vl-cmdf (strcat "@" (rtos (* k h0) 2 4) "<90"))
  111.      )
  112.       (if (< nnh nh)
  113. (if (/= nn nnn)
  114. (vl-cmdf (strcat "@" (rtos (* i w2) 2 4) "<0"))
  115.    (vl-cmdf (strcat "@" (rtos (* i w0) 2 4) "<0"))
  116.    )
  117. )
  118.       )
  119. )
  120.       
  121.       )
  122.    
  123.       (if (< nn nnn)
  124. (if flag
  125.          (vl-cmdf (strcat "@" (rtos w 2 4) "<0"))
  126.    (vl-cmdf (strcat "@" (rtos w2 2 4) "<0"))
  127.    )
  128.     )
  129.       
  130.    
  131.     )
  132.   (vl-cmdf "")
  133.   (setq i -1 w2 w22)
  134.   (vl-cmdf "_pline") (vl-cmdf p3)
  135.   (setq nn 0)
  136.   (repeat nh
  137.     (setq i (* -1 i) nn (1+ nn))
  138.     (if (= "No" kd1)
  139.     (vl-cmdf (strcat "@" (rtos (* i (car wh)) 2 4) "<0"))
  140.       (vl-cmdf (strcat "@" (rtos (* i (* nw w2)) 2 4) "<0"))
  141.       )
  142.     (if (/= nn nh)
  143.     (vl-cmdf (strcat "@" (rtos h 2 4) "<90"))
  144.       (vl-cmdf (strcat "@" (rtos h0 2 4) "<90"))
  145.       )
  146.     )
  147.   
  148.   (vl-cmdf "")
  149.   )
  150. ;;平行
  151. (t
  152.       (setq i -1)
  153.   (vl-cmdf "_pline") (vl-cmdf p3)
  154.   (setq nn 0)
  155.   (repeat nw
  156.     (setq i (* -1 i) nn (1+ nn))
  157.     (if (= "No" kd1)
  158.     (vl-cmdf (strcat "@" (rtos (* i (cadr wh)) 2 4) "<90"))
  159.       (vl-cmdf (strcat "@" (rtos (* i (* nh h)) 2 4) "<90"))
  160.       )
  161.     (if (/= nn nw)
  162.     (vl-cmdf (strcat "@" (rtos w2 2 4) "<0"))
  163.       (vl-cmdf (strcat "@" (rtos w0 2 4) "<0"))
  164.       )
  165.     )
  166.   
  167.   (vl-cmdf "")
  168.   
  169.   (setq i -1)
  170.   (vl-cmdf "_pline") (vl-cmdf p3)
  171.   (setq nn 0)
  172.   (repeat nh
  173.     (setq i (* -1 i) nn (1+ nn))
  174.     (if (= "No" kd1)
  175.     (vl-cmdf (strcat "@" (rtos (* i (car wh)) 2 4) "<0"))
  176.       (vl-cmdf (strcat "@" (rtos (* i (* nw w2)) 2 4) "<0"))
  177.       )
  178.     (if (/= nn nh)
  179.     (vl-cmdf (strcat "@" (rtos h 2 4) "<90"))
  180.       (vl-cmdf (strcat "@" (rtos h0 2 4) "<90"))
  181.       )
  182.     )
  183.   
  184.   (vl-cmdf "")
  185.   )
  186. )
  187.     (setvar 'osmode osmode)
  188.   (setvar 'cmdecho cmdecho)
  189. (princ)
  190.   )

2012.03.18更新代码,增加砖块尺寸余数是否取整可选项。

评分

参与人数 3明经币 +3 收起 理由
luyu9635 + 1 很给力!太好了
hhh454 + 1 谢谢g版,万分感谢,得到你很多的帮助了
仲文玉 + 1 赞一个!

查看全部评分

发表于 2012-3-16 21:45 | 显示全部楼层
G版的程序一定要看,支持
发表于 2012-3-16 21:56 | 显示全部楼层
G版的程序,一定先顶再看
发表于 2012-3-16 23:33 | 显示全部楼层
G版的程序一定要看,看了还要再看
发表于 2012-3-18 11:09 | 显示全部楼层
Gu_xl 发表于 2012-3-16 21:13
代码如下:
**** 本内容被作者隐藏 ****

G版 不错  要是能捕捉点就好了!!
发表于 2012-3-18 12:05 | 显示全部楼层
问题 已解决!!!
发表于 2012-3-18 12:48 | 显示全部楼层
Gu_xl 发表于 2012-3-16 21:13
代码如下:
**** 本内容被作者隐藏 ****

  出现这种问题 要不不够 要不大出 G版能弄成下面这种吗? 在最上面或最右边的时候 让它根据范围缩小

本帖子中包含更多资源

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

x
发表于 2012-3-18 22:48 | 显示全部楼层
shang_123 发表于 2012-3-18 12:48
出现这种问题 要不不够 要不大出 G版能弄成下面这种吗? 在最上面或最右边的时候 让它根据范围缩小

13楼代码按要求更新,增加是否调整砖块余数尺寸可选项。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-4 15:01 , Processed in 1.925923 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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