明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7015|回复: 12

一个绘制容器中倒流板的程序,请各位高手指出不足之处,多谢!

  [复制链接]
发表于 2003-12-5 18:49:00 | 显示全部楼层 |阅读模式
  1. (setq ag 0);;;原始角
  2. (setq WE (+ ag pi));;;西
  3. (setq NO (+ ag (/ pi 2)));;;北
  4. (setq SO (+ WE (/ pi 2)));;;南
  5. (SETQ EA AG);;;东
  6. (SETQ WN (+ AG (* PI 0.75)));;;西北
  7. (SETQ EN (+ AG (* PI 0.25)));;;东北
  8. (SETQ WS (+ AG (* PI 1.25)));;;西南
  9. (SETQ ES (+ AG (* PI 1.75)));;;南
  10. (setq os (getvar "osmode" ))
  11. (defun newos()
  12.   (setvar "osmode" 0)
  13.   )
  14. (defun oldos()
  15.   (setvar "osmode" os)
  16.   )

  17. (defun swdraw()
  18.   (command "layer" "m" "draw" "" )
  19.   )
  20. (defun swcenter()
  21.   (command "layer" "m" "center" "" )
  22.   )

  23. ;;;-----------------------------------------------------
  24. ;;;绘制导流板
  25. ;;;-----------------------------------------------------   
  26. (defun c:dlb()
  27.   (SETVAR "errno" 0)
  28.   (setvar "cmdecho" 1)
  29.   (setq lay (getvar "clayer"))
  30.   (setq olderr *error*)
  31.   (defun *error* (msg)
  32.     (setq errno (getvar "errno"))
  33.     ;(princ "\n")
  34.     ;(princ msg)
  35.     (reset)
  36.     (princ"\n出错!再来")
  37.     (c:dlb)
  38.     ;(setvar *error* olderr)
  39.     )
  40.   (setq dcl_id (load_dialog "dlb.dcl"))
  41.   (if (not (new_dialog "dlb" dcl_id)
  42.       )
  43.     (exit)
  44.   )
  45.   ;;;初始化
  46.   (setq tyft 1 nsz 1 listkswz 0 zxbj 150 listnum 0 nj 1000 bh 10 jj 200)
  47.   (action_tile "tyft" "(progn (setq tyft (atoi $Value) dxft 0 pg 0)(mode_tile "bh" 0) )    ")
  48.   (action_tile "dxft" "(progn (setq dxft (atoi $Value) tyft 0 pg 0)(mode_tile "bh" 0) )    ")
  49.   (action_tile "pg" "(progn (setq pg (atoi $Value) tyft 0 dxft 0) (mode_tile "bh" 1) )    ")
  50.   (action_tile "ssz" "(progn (setq ssz (atoi $Value) nsz 0) )    ")
  51.   (action_tile "nsz" "(progn (setq nsz (atoi $Value) ssz 0) )    ")
  52.   (action_tile "sc" "(progn (setq listnum (atoi $Value)) )    ")
  53.   (action_tile "nj" "(progn (setq nj (atoi $Value)) )    ")
  54.   (action_tile "bh" "(progn (setq bh (atoi $Value)) )    ")
  55.   (action_tile "jj" "(progn (setq jj (atoi $Value)) )    ")
  56.   (action_tile "zxbj" "(progn (setq zxbj(atoi $Value)) )    ")
  57.   (action_tile "kswz" "(progn (setq listkswz(atoi $value)))")
  58.   (action_tile "txt" "(progn (setq txt(atoi $value)))")
  59.   (start_image "helpme")
  60.   (slide_image 1 1 (dimx_tile "helpme") (dimy_tile "helpme") "orientation")
  61.   (end_image)
  62.   (action_tile "accept" "(setq flag 1)(done_dialog)")
  63.   (action_tile "cancel" "(princ \n退出程序)")
  64.   (action_tile "help" "(alert "\\n1.本程序可以画封头上倒流板的展开图和盘管的俯视图\\n\\n2.本程序画出的螺旋线是通过四点法近似模拟的\\n\\n3.椭圆封头外圆展开尺寸近似为:1.21*(di+2*t)\\n\\n4.碟形封头上外圆展开尺寸近似为:  1.12*(di+2*t)")")
  65.   (start_dialog)
  66.   (unload_dialog dcl_id)
  67.   (if (= flag 1)
  68.     (progn
  69.       (startdlb)
  70.     )

  71.   )
  72. )
  73. (defun startdlb()
  74.   (setq p0 (getpoint"\n请选择一个中心点:"))
  75.   (setq sc (nth listnum (list 1 2 3 4 5 6 8 10 12 15 16 20 25 30 40 50 60 80)))
  76.   (setq kswz (nth listkswz (list 0 90 180 270)))
  77.   (setq nj (/ nj sc) bh (/ bh sc) jj (/ jj sc) zxbj (/ zxbj sc))
  78.   (cond
  79.     ((= tyft 1)
  80.        (setq wj(* 1.21 (+ nj bh)))
  81.         )
  82.     ((= dxft 1)
  83.        (setq wj(* 1.12 (+ nj bh)))
  84.         )
  85.     ((= pg 1)
  86.        (setq wj nj)
  87.      )
  88.     )
  89.   
  90.   (setq n 1)
  91.   (setq r (+(/ wj 2) (/ jj 8)))
  92.   (swcenter)
  93.   (newos)
  94.   (command "pline" (polar p0 no (/ wj 2)) (polar p0 so (/ wj 2)) ""
  95.            "pline" (polar p0 0 (/ wj 2)) (polar p0 pi (/ wj 2)) ""
  96.            )
  97.   (if (= txt 1)
  98.     (progn
  99.       (COMMAND "Text" "j" "mc" (polar p0 no (+ 6(/ wj 2))) 5 0 "0%%d" ""  )
  100.       (COMMAND "Text" "j" "mc" (polar p0 0 (+ 6(/ wj 2))) 5 0 "90%%d" ""  )
  101.       (COMMAND "Text" "j" "mc" (polar p0 so (+ 6(/ wj 2))) 5 0 "180%%d" ""  )
  102.       (COMMAND "Text" "j" "mc" (polar p0 pi (+ 7(/ wj 2))) 5 0 "270%%d" ""  )
  103.     )
  104.   )
  105.   (swdraw)
  106.   (cond
  107.     ((= ssz 1)
  108.      (progn
  109.        (setq ang (* kswz (/ pi 180)))
  110.        (drawssz)
  111.        )
  112.      )
  113.     ((= nsz 1)
  114.      (progn
  115.        (setq ang (* kswz (/ pi 180)))
  116.        (drawnsz)
  117.        )
  118.      )
  119.     )
  120.   (oldos)
  121.   (reset)
  122.   (princ "\n命令-->DLB \nBY SWAYWOOD")
  123. )
  124. (defun drawnsz()
  125.     (while (> r zxbj)
  126.     (progn
  127.       (setq p1(polar p0 (- (* (/ pi 4) (- (* 2 n) 1)) ang) (* jj (sqrt 2) 0.125))
  128.             r(- r (* 1 0.25 jj))
  129.             pt1(polar p1 (- (* n pi 0.5) ang) r)
  130.             pt2(polar p1 (- (+ (/ pi 2) (* n pi 0.5)) ang) r)
  131.             )
  132.       (command "arc" "c" p1 pt1 pt2)
  133.       (setq n(+ n 1))
  134.       )
  135.     )
  136.   )
  137. (defun drawssz()
  138.     (while (> r zxbj)
  139.     (progn
  140.       (setq p1(polar p0 (- (* (/ pi 4) (- 5 (* 2 n))) ang) (* jj (sqrt 2) 0.125))
  141.             r(- r (* 1 0.25 jj))
  142.             pt1(polar p1 (- (* (/ pi 2) (- 2 n)) ang) r)
  143.             pt2(polar p1 (- (* (/ pi 2) (- 1 n)) ang) r)
  144.             )
  145.       (command "arc" "c" p1 pt2 pt1)
  146.       (setq n(+ n 1))
  147.       )
  148.     )
  149.   )
  150. (defun reset()
  151. (setvar "clayer" lay)
  152. (setvar "cmdecho" 0)
  153. (setq r nil pt1 nil pt2 nil p0 nil nj nil wj nil bh nil zxbj nil
  154.    jj nil sc nil tyft nil dxft nil pg nil ssz nil nsz nil listkswz nil
  155.     listnum nil ang nil n nil  flag nil txt nil)
  156. (if lay (setq lay nil))
  157. (if os (setvar "osmode" os) (setvar "osmode" 4607))
  158. )

  159. dlb: dialog {
  160.           label = "螺旋线模拟" ;
  161.         :column{
  162.                 :boxed_row {
  163.                           label = "型式";
  164.                         : radio_button {
  165.                           key = "tyft";       
  166.                           label = "椭圆封头放样";
  167.                           value = "1";
  168.                           }
  169.                         : radio_button {
  170.                           key = "dxft";       
  171.                           label = "碟型封头放样";
  172.                           value = "0";
  173.                           }
  174.                         : radio_button {
  175.                           key = "pg";       
  176.                           label = "盘管俯视图";
  177.                           value = "0";
  178.                           }
  179.                   }
  180.                   :row{
  181.                         :boxed_row {
  182.                                   label = "方向";
  183.                                 : radio_button {
  184.                                   key = "ssz";       
  185.                                   label = "顺时针";
  186.                                   value = "0";
  187.                                   }
  188.                                 : radio_button {
  189.                                   key = "nsz";       
  190.                                   label = "逆时针";
  191.                                   value = "1";
  192.                                   }
  193.                           }
  194.                         :boxed_row {
  195.                                   label = "绘图比例";
  196.                                    : popup_list
  197.                                    { key = "sc";
  198.                                      list ="1:1\n1:2\n1:3\n1:4\n1:5\n1:6\n1:8\n1:10\n1:12\n1:15\n1:16\n1:20\n1:25\n1:30\n1:40\n1:50\n1:60\n1:80";
  199.                                      width = 15;
  200.                                      fixed_height = false;
  201.                                    }                          }
  202.                   }
  203.                           
  204.                 :row{
  205.                         :boxed_column {
  206.                                   alignment=left;
  207.                                   
  208.                                   label = "开始位置";
  209.                                   : popup_list
  210.                                            { key = "kswz";
  211.                                              list ="0°\n90°\n180°\n270°";
  212.                                              width = 15;
  213.                                              fixed_height = false;
  214.                                            }
  215.                                 : toggle {
  216.                                   key = "txt";       
  217.                                   label = " 标出角度文字";
  218.                                   value = "0";
  219.                                   }
  220.                                  : image
  221.                                  { key = "helpme";
  222.                                    width = 14;
  223.                                    aspect_ratio = 1;
  224.                                    color=dialog_background;
  225.                                  }
  226.                                            
  227.                           }
  228.                         :boxed_column {
  229.                                   label = "参数";
  230.                                 : edit_box {
  231.                                   edit_width=6;
  232.                                   key = "nj";       
  233.                                   label = "封头内径或盘管外圈直径";
  234.                                   value=1000;
  235.                                   }
  236.                                 : edit_box {
  237.                                   edit_width=6;
  238.                                   key = "bh";       
  239.                                   label = "壁厚(仅对封头有效)";
  240.                                   value=8;
  241.                                   }
  242.                                 : edit_box {
  243.                                   edit_width=6;
  244.                                   key = "jj";       
  245.                                   label = "节距";
  246.                                   value=100;
  247.                                   }
  248.                                 : edit_box {
  249.                                   edit_width=6;
  250.                                   key = "zxbj";       
  251.                                   label = "螺旋线半径不小于";
  252.                                   value=150;
  253.                                   }
  254.                                   ok_cancel_help ;
  255. }
  256.                   }
  257.           }


  258. }
发表于 2003-12-6 12:44:00 | 显示全部楼层

回复

"绘制容器中倒流板", 我明白是具体做什么?
能加些图示(*)吗? 你要达到什么效果?
单纯这些代码,别人不好理解.
 楼主| 发表于 2003-12-6 22:42:00 | 显示全部楼层
斑竹
下图是运行时的界面和绘制出的螺旋线
我想让各位大侠看一下有哪些地方可以改的更好
另外,我还有几点想请教:
1.能不能实现在选择“型式”中的前两项的时候,参数中的第一个EDIT_BOX的LABEL只显示“封头内径”字样,而选择"判官俯视图“时,则显示”盘管外圈直径“?
2.怎么让我的错误处理做得更好,我对这个不大熟。
3.怎么有效地,更加详细地设置帮助系统(假如我的帮助内容很多的话,如何让程序链接到指定的帮助文件)?

本帖子中包含更多资源

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

x
发表于 2003-12-8 10:06:00 | 显示全部楼层
封头尺寸的输入项,如能点击后变成按标准进行选择可能会更好,当然也可以包含自定义项。
发表于 2003-12-8 11:02:00 | 显示全部楼层
锥型封头没有
 楼主| 发表于 2003-12-8 12:36:00 | 显示全部楼层
四楼,五楼说的是,待我有时间时改进,你们也是搞化机的?以后多多交流啊!
如有人能给我解决一下3楼提的问题的话,本人将不胜感激!
发表于 2007-6-15 21:19:00 | 显示全部楼层
楼主程序能不能给我一个Email:pppsheng@163.com  QQ:313042743谢谢
发表于 2008-4-24 11:09:00 | 显示全部楼层

程序相当的不错,我时常用到,特别是夹套容器的绘制

发表于 2008-4-24 13:10:00 | 显示全部楼层
问题1的解决方案:
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

发表于 2008-4-29 08:14:00 | 显示全部楼层
楼上的对话框程序第22行“ list="1:1\n1:2\n1:3\n1:4\n1:5\n1:6\n1:8\n1:10\n1:12\n1:15\n1:16\n1:20\n1:25”在1:1前少了n,在加载对话框时出现错误,加了n后就能正常加载了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 14:21 , Processed in 0.191873 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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