找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 932|回复: 4

[求助] [求助]:高手能不能给个最简单的DCL和相关的autolisp指令

[复制链接]
发表于 2005-12-31 11:45:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
如题
给个例子
麻烦指点下
想学dcl  不大理解
我也看不懂 support里面的两个dcl文件
就是不懂
谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-31 13:31:41 | 显示全部楼层
这里有一个
lisp文件:
  1. (defun c:test ()
  2.   (setq dcl_id (load_dialog "dcl-test.dcl"))
  3.   (setq do_what 2)
  4.   (while (>= do_what 2)
  5.     (if        (= null (new_dialog "test1" dcl_id))
  6.       (progn
  7.         (princ "\n未能显示对话框。")
  8.         (setq dialogshow nil)
  9.         (exit)
  10.       )                                        ;progn结束
  11.     )
  12.     (action_tile "dcl" "(done_dialog 2)")
  13.     (action_tile "accept" "(done_dialog 1)")

  14.     (setq do_what (start_dialog))
  15.     (cond
  16.       ((= do_what 1)
  17.        (alert "END")
  18.       )
  19.       ((= do_what 2)
  20.        (next)
  21.       )
  22.     )
  23.   )
  24.   (unload_dialog dcl_id)
  25. )
  26. (defun next ()
  27.   (new_dialog "test2" dcl_id)
  28.   (action_tile "accept" "(done_dialog 1)")

  29.   (setq dial (start_dialog))
  30.   (if (= dial 1)
  31.     (alert "另一对话框调用成功...")
  32.   )
  33. )

DCL文件:
  1. test1:dialog{label="另一对话框...";
  2.             :button{label="另一对话框...";key="dcl";}
  3.             spacer_1;ok_cancel;
  4.             }
  5. test2:dialog{label="对话框贰";
  6.             :edit_box{label="文本:";key="text";}
  7.             spacer_1;ok_cancel;
  8.             }

我这里还有一个绘制键槽的程序,可能有点长,但是我感觉比较经典,好多参数多运用到了
lisp文件:
  1. ;;;加载activex支持功能
  2. (vl-load-com)


  3. ;;;加载*modelspace*模型空间参数
  4. (setq *modelspace*
  5.        (vla-get-modelspace
  6.          (vla-get-activedocument (vlax-get-acad-object))
  7.        )
  8. )


  9. ;;;函数gi:getpointinput
  10. (defun gi:getpointinput
  11.        (/ centrevc radiusva widthvb depthvt angleva lungu)
  12.                                         ;(alert
  13.                                         ;"函数gi:getpointinput获取用户绘制键槽的输入数据。"
  14.                                         ;)
  15.   (if (setq centrevc (getpoint "\n输入圆心点:"))
  16.     (if        (setq radiusva (getdist "\n输入圆的半径:"))
  17.       (if (setq widthvb (getdist "\n输入键槽宽度:"))
  18.         (if (setq depthvt (getdist "\n输入键槽深度:"))
  19.           (if (setq angleva (getangle "\n输入键槽方向角度值:"))
  20.             (if        (setq lungu (getint "\n输入1为画轮毂,0为画轮轴:"))
  21.               (list
  22.                 (cons 10 centrevc)
  23.                 (cons 40 radiusva)
  24.                 (cons 41 widthvb)
  25.                 (cons 42 depthvt)
  26.                 (cons 50 angleva)
  27.                 (cons 90 lungu)
  28.               )
  29.             )
  30.           )
  31.         )
  32.       )
  33.     )
  34.   )
  35.                                         ;t
  36. )


  37. ;;;gi:getinput函数
  38. (defun gi:getinput ()
  39.   (alert "正确,开始绘图!"
  40.   )
  41.   t
  42. )


  43. ;;;函数:gi:list->variantarray();
  44. (defun gi:list->variantarray (ptslist / arrayspace sarray)
  45.   ;;给双精度实数表示的二维点数组分配空间
  46.   (setq        arrayspace
  47.          (vlax-make-safearray
  48.            vlax-vbdouble                ;元素类型
  49.            (cons 0
  50.                  (- (length ptslist) 1)
  51.            )                                ;数组维数
  52.          )
  53.   )
  54.   (setq sarray (vlax-safearray-fill arrayspace ptslist)) ;返回数组变体
  55.   (vlax-make-variant sarray)
  56. )



  57. ;;;函数gi:drawoutline将绘制键槽
  58. (defun gi:drawoutline (boundarydata         /          vladatapts
  59.                        centrevc        radiusva widthvb  depthvt  angleva
  60.                        lungu        rb         zb          fb           rt
  61.                        xw1        yw1         xw2          yw2           xw3
  62.                        yw3        xw4         yw4          p1           p2
  63.                        p3        p4         polypoints           pline
  64.                        arc        centre
  65.                       )
  66.                                         ;(alert
  67.                                         ;(strcat "这个函数将用多段线绘制键槽"
  68.                                         ;"\n并返回多段线图元名或指针。"
  69.                                         ;)
  70.                                         ;)
  71.   (setq        centrevc (cdr (assoc 10 boundarydata))
  72.         radiusva (cdr (assoc 40 boundarydata))
  73.         widthvb         (cdr (assoc 41 boundarydata))
  74.         depthvt         (cdr (assoc 42 boundarydata))
  75.         angleva         (cdr (assoc 50 boundarydata))
  76.         lungu         (cdr (assoc 90 boundarydata))
  77.   )
  78.   (if (= 1 lungu)
  79.     ;;计算轮毂中键槽各交点坐标
  80.     (setq rb (sqrt (- (* radiusva radiusva)
  81.                       (/ (* widthvb widthvb) 4)
  82.                    )
  83.              )
  84.           zb (/ widthvb 2)
  85.           fb (- 0 (/ widthvb 2))
  86.           rt (+ radiusva depthvt)
  87.     )                                        ;结束setq
  88.     ;;计算轮轴中键槽各交点坐标
  89.     (setq rb (sqrt (- (* radiusva radiusva)
  90.                       (/ (* widthvb widthvb) 4)
  91.                    )
  92.              )
  93.           zb (/ widthvb 2)
  94.           fb (- 0 (/ widthvb 2))
  95.           rt (- radiusva depthvt)
  96.     )                                        ;结束setq
  97.   )                                        ;结束if
  98.   (setq        xw1 (+ (car centrevc)
  99.                (- (* rb (cos angleva)) (* zb (sin angleva)))
  100.             )
  101.         yw1 (+ (cadr centrevc)
  102.                (+ (* rb (sin angleva)) (* zb (cos angleva)))
  103.             )
  104.         xw2 (+ (car centrevc)
  105.                (- (* rb (cos angleva)) (* fb (sin angleva)))
  106.             )
  107.         yw2 (+ (cadr centrevc)
  108.                (+ (* rb (sin angleva)) (* fb (cos angleva)))
  109.             )
  110.         xw3 (+ (car centrevc)
  111.                (- (* rt (cos angleva)) (* fb (sin angleva)))
  112.             )
  113.         yw3 (+ (cadr centrevc)
  114.                (+ (* rt (sin angleva)) (* fb (cos angleva)))
  115.             )
  116.         xw4 (+ (car centrevc)
  117.                (- (* rt (cos angleva)) (* zb (sin angleva)))
  118.             )
  119.         yw4 (+ (cadr centrevc)
  120.                (+ (* rt (sin angleva)) (* zb (cos angleva)))
  121.             )
  122.   )                                        ;结束setq
  123.   ;;结束变换并形成键槽各交点坐标的列表。
  124.   (setq        p1 (list xw1 yw1)
  125.         p2 (list xw2 yw2)
  126.         p3 (list xw3 yw3)
  127.         p4 (list xw4 yw4)
  128.   )                                        ;结束setq
  129.   ;;下边语句将四个点的坐标列表的元素串在一起构成一个新表,并给变量。
  130.   (setq        polypoints
  131.          (apply        'append
  132.                 (list p1 p4 p3 p2)
  133.          )
  134.   )                                        ;结束setq
  135.   (setq        arc (vla-addarc
  136.               *modelspace*
  137.               (vlax-3d-point centrevc)
  138.               radiusva
  139.               (angle centrevc p1)
  140.               (angle centrevc p2)
  141.             )                                ;画圆弧线
  142.   )
  143.   ;;数据转换
  144.   (setq vladatapts (gi:list->variantarray polypoints))
  145.   ;;用activex automation将多段线添加到模型空间
  146.   (setq        pline (vla-addlightweightpolyline
  147.                 *modelspace*
  148.                 vladatapts
  149.               )
  150.   )

  151.                                         ;'somename
  152. )




  153. ;;;函数C:GIancao是程序的主函数
  154. (defun c:giancao (/ gi_giancaodata polylinename)
  155.   (if (setq gi_giancaodata (gi:getdialoginput))
  156.     (if        (gi:getinput)
  157.       (progn
  158.         (setq polylinename (gi:drawoutline gi_giancaodata))
  159.       )
  160.                                         ;(princ "\n函数 gi:drawoutline 的返回值<")
  161.                                         ;(princ polylinename)
  162.                                         ;(princ ">")
  163.                                         ;(alert "祝贺-你的程序已完成!")
  164.                                         ;)
  165.       (princ "\n取消函数。")
  166.     )
  167.     (princ "\n绘制键槽的信息不完全!")
  168.   )
  169.   (princ)
  170. )
  171. ;;;显示信息,向用户通知命令
  172. (princ "\n绘制键槽命令giancao。")
  173. (princ)





  174. ;;函数gi:getdialoginput()
  175. (defun gi:getdialoginput (/            shuruva   dcl_id        vallist
  176.                           do_what   dialogloaded        dialogshow
  177.                           xe            ye              ze        nxe
  178.                           nye            nze
  179.                          )
  180.                                         ;(alert
  181.                                         ;"函数gi:getdialoginput将通过消息框通知用户参数输入的结果及下一步的行动。"
  182.                                         ;)
  183.                                         ;t
  184.   (setq        dialogloaded t
  185.         dialogshow   t
  186.   )
  187.   (if (> 0 (setq dcl_id (load_dialog "jiaocao.dcl")))
  188.     (progn
  189.       (princ "\n未能加载对话框文件:jiaocao.dcl")
  190.       (setq dialogloaded nil)
  191.     )
  192.   )                                        ;结束if
  193.   (setq        nxe "0.0"
  194.         nye "0.0"
  195.         nze "0.0"
  196.   )
  197.   (setq do_what 2)
  198.   (while (>= do_what 2)
  199.     (if        (= null (new_dialog "jiancao" dcl_id))
  200.       (progn
  201.         (princ "\n未能显示输入键槽参数对话框。")
  202.         (setq dialogshow nil)
  203.         (exit)
  204.       )                                        ;progn结束
  205.     )                                        ;if结束
  206.     (set_tile "yuanxinx" nxe)
  207.     (set_tile "yuanxiny" nye)
  208.     (set_tile "yuanxinz" nze)
  209.     (action_tile "lungua" "(gshendu)")
  210.     (action_tile "lunzhou" "(zshendu)")
  211.     (action_tile
  212.       "accept"
  213.       "(setq shuruvar (ok)) (done_dialog 1)"
  214.     )
  215.     (action_tile "cancel" "(done_dialog 0)")
  216.     (action_tile "shiqudian" "(done_dialog 4)")
  217.     (setq do_what (start_dialog))
  218.     (cond
  219.       ((= do_what 4)
  220.        (setq centre (getpoint "\n输入圆心点:"))
  221.        (setq xe        (car centre)
  222.              ye        (cadr centre)
  223.              ze        (caddr centre)
  224.        )
  225.        (setq nxe (rtos xe))
  226.        (setq nye (rtos ye))
  227.        (setq nze (rtos ze))
  228.       )
  229.       ((= what_next 0)
  230.        (prompt "\n对话框被取消。")
  231.       )
  232.     )                                        ;结束cond
  233.   )                                        ;结束while
  234.   (unload_dialog dcl_id)
  235.   shuruvar
  236. )


  237. ;;;ok函数
  238. (defun ok ()
  239.   (setq lungu (atoi (get_tile "lungua")))
  240.   (setq        centrevc (list (atof (get_tile "yuanxinx"))
  241.                        (atof (get_tile "yuanxiny"))
  242.                        (atof (get_tile "yuanxinz"))
  243.                  )
  244.   )                                        ;结束setq
  245.   (setq radiusva (atof (get_tile "banjing")))
  246.   (setq        windex        (atoi (get_tile "kuandu"))
  247.         wlist        '("2"         "3"        "4"    "5"    "6"    "8"    "10"
  248.                   "12"         "14"        "16"   "18"   "20"   "22"   "25"
  249.                   "28"         "32"        "36"   "40"   "45"   "50"   "56"
  250.                   "63"         "70"        "80"   "90"   "100"
  251.                  )
  252.         widthvb        (atoi (nth windex wlist))
  253.   )                                        ;结束setq
  254.   (if (= 1 (atoi (get_tile "lungua")))
  255.     (setq dgindex (atoi (get_tile "gushendu"))
  256.           dglist  '("1.0"    "1.4"    "1.8"    "2.3"        "2.8"
  257.                     "3.3"    "3.8"    "4.3"    "4.4"        "4.9"
  258.                     "5.4"    "6.4"    "7.4"    "8.4"        "9.4"
  259.                     "10.4"   "11.4"   "12.4"   "14.4"        "15.4"
  260.                     "17.4"   "19.5"
  261.                    )
  262.           depthvt (atof (nth dgindex dglist))
  263.     )
  264.     ;;提取轮轴深度
  265.     (setq dzindex (atoi (get_tile "zoshendu"))
  266.           dzlist  '("1.2"    "1.8"    "2.5"    "3.0"        "3.5"
  267.                     "4.0"    "5.0"    "5.5"    "6.0"        "7.0"
  268.                     "7.5"    "9.0"    "10.0"   "11.0"        "12.0"
  269.                     "13.0"   "15.0"   "17.0"   "20.0"        "22.0"
  270.                     "25.0"   "28.0"   "31.0"
  271.                    )
  272.           depthvt (atof (nth dzindex dzlist))
  273.     )
  274.   )                                        ;结束if
  275.   (setq angleva (angtof (get_tile "jiaodu") 0))
  276.   (list
  277.     (cons 10 centrevc)
  278.     (cons 40 radiusva)
  279.     (cons 41 widthvb)
  280.     (cons 42 depthvt)
  281.     (cons 50 angleva)
  282.     (cons 90 lungu)
  283.   )
  284. )                                        ;结束defun



  285. ;;;gshendu函数
  286. (defun gshendu ()
  287.   (mode_tile "gushendu" 0)
  288.   (mode_tile "zoshendu" 1)
  289. )


  290. ;;;zshendu函数
  291. (defun zshendu ()
  292.   (mode_tile "gushendu" 1)
  293.   (mode_tile "zoshendu" 0)
  294. )

DCL文件:
  1. jiancao:dialog {
  2.         label = "输入键槽参数对话框";
  3.         spacer;
  4.         :boxed_column {
  5.                 label = "选择绘制键槽参数";
  6.                 spacer;
  7.                 :boxed_radio_row {
  8.                         label = "选择绘制键槽类型";
  9.                         :radio_button {
  10.                                 label = "绘制轮毂";
  11.                                 key = "lungua";
  12.                                 value = "1";
  13.                         }
  14.                         :radio_button {
  15.                                 label = "绘制轮轴";
  16.                                 key = "lunzhou";
  17.                         }
  18.                 }
  19.                 spacer;
  20.                 :boxed_row {
  21.                         label = "输入键槽参数";
  22.                         spacer;
  23.                         :boxed_column {
  24.                                 label = "输入轮毂或轮轴的圆心坐标";
  25.                                 :edit_box {
  26.                                         label = "圆心的X坐标值:";
  27.                                         key = "yuanxinx";
  28.                                         edit_width = 10;
  29.                                 }
  30.                                 :edit_box {
  31.                                         label = "圆心的Y坐标值:";
  32.                                         key = "yuanxiny";
  33.                                         edit_width = 10;
  34.                                 }
  35.                                 :edit_box {
  36.                                         label = "圆心的Z坐标值:";
  37.                                         key = "yuanxinz";
  38.                                         edit_width = 10;
  39.                                 }
  40.                                 :button {
  41.                                         label = "拾取点...";
  42.                                         key = "shiqudian";
  43.                                 }
  44.                         }
  45.                         :boxed_column {
  46.                                 label = "输入参数";
  47.                                 :edit_box {
  48.                                         label = "输入圆的半径r:";
  49.                                         key = "banjing";
  50.                                         value = "0.0";
  51.                                         edit_width = 14;
  52.                                 }
  53.                                 :popup_list {
  54.                                         label = "输入键槽宽度b:";
  55.                                         key = "kuandu";
  56.                                         width = 14;
  57.                                         list = "2\n3\n4\n5\n6\n8\n10\n12\n14\n16\n18\n20\
  58.                                         22\n25\n28\n32\n36\n40\n45\n50\n56\n63\n70\n80\
  59.                                         90\n100 ";
  60.                                         value = "";
  61.                                 }
  62.                                 :popup_list {
  63.                                         label = "轮毂键槽深度t:";
  64.                                         key = "gushendu";
  65.                                         width = 12;
  66.                                         list = "1.0\n1.4\n1.8\n2.3\n2.8\n3.3\n3.8\n4.3\
  67.                                         4.4\n4.9\n5.4\n6.4\n7.4\n8.4\n9.4\n10.4\n11.4\
  68.                                         12.4\n14.4\n15.4\n17.4\n19.5 ";
  69.                                         value = "";
  70.                                 }
  71.                                 :popup_list {
  72.                                         label = "轮轴键槽深度t:";
  73.                                         key = "zoshendu";
  74.                                         width = 12;
  75.                                         list = "1.2\n1.8\n2.5\n3.0\n3.5\n4.0\n5.0\n5.5\
  76.                                         6.0\n7.0\n7.5\n9.0\n10.0\n12.0\n13.0\n15.0\
  77.                                         17.0\n20.0\n22.0\n25.0\n28.0\n31.0 ";
  78.                                         value = "";
  79.                                         is_enabled = "false";
  80.                                 }
  81.                                 :edit_box {
  82.                                         label = "键槽角度αC°:";
  83.                                         key = "jiaodu";
  84.                                         value = "0.0";
  85.                                         edit_width = 14;
  86.                                 }
  87.                         }
  88.                 }
  89.         }
  90.         spacer;
  91.         ok_cancel;
  92. }
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-31 16:48:17 | 显示全部楼层
谢谢
对话框相关的lisp语句还不熟络
打包回去好好看看
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-4 14:09:00 | 显示全部楼层
最近正好想学对话框。赶紧打包回家。非常感谢。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-1-4 22:28:37 | 显示全部楼层
最初由 eobser 发布
[B]谢谢
对话框相关的lisp语句还不熟络
打包回去好好看看 [/B]


谢谢啦
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-29 00:07 , Processed in 0.315137 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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