明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2951|回复: 5

[提问] LISP和DCL一同使用时,不显示对话框

[复制链接]
发表于 2018-3-23 17:14:56 | 显示全部楼层 |阅读模式
本帖最后由 xxwz 于 2018-3-23 17:16 编辑

AutoCAD程序设计魔法书》中16-4章节的例子,lsp和dcl文件见附件。
  1. (defun c:dia5b()
  2.   (setvar "CMDECHO" 0)
  3.   (dcl_dia5b)
  4.   (prin1)
  5. )
  6. (defun dcl_dia5b()
  7.   (setq dcl_id (load_dialog "dia5b"))
  8.   (new_dialog "dia5b" dcl_id)
  9.   (set_tile "kww" "50")
  10.   (set_tile "khh" "50")
  11.   (action_tile "bb1" "(get_ww_hh) (done_dialog 1)")
  12.   (action_tile "bb2" "(get_ww_hh) (done_dialog 2)")
  13.   (action_tile "bb3" "(get_ww_hh) (done_dialog 3)")
  14.   (setq dd (start_dialog))
  15.   (cond ((= dd 1) (c:dia5b1))
  16.         ((= dd 2) (c:dia5b2))
  17.         ((= dd 3) (c:dia5b3))
  18.         (t        (alert "未完成任何动作!!!"))
  19.   )
  20. )
  21. (defun get_ww_hh()       ;取得对话框的ww与hh值
  22.   (setq ww (atof (get_tile "kww")))
  23.   (setq hh (atof (get_tile "khh")))
  24. )
  25. (defun c:dia5b1()       ;L型主程序
  26.   (setvar "CMDECHO" 0)
  27.   (get_input_data)
  28.   (command "PLINE" p1 p2 p3 pm34 pm pm14 "c")
  29.   (prin1)
  30. )
  31. (defun c:dia5b2()       ;X型主程序
  32.   (setvar "CMDECHO" 0)
  33.   (get_input_data)
  34.   (command "PLINE" p1 p2 p3 p4 "c")
  35.   (command "LINE" p1 p3 "")
  36.   (command "LINE" p2 p4 "")
  37.   (prin1)
  38. )
  39. (defun c:dia5b3()       ;漏斗型主程序
  40.   (setvar "CMDECHO" 0)
  41.   (get_input_data)
  42.   (command "PLINE" p1 p2 p4 p3 "c")
  43.   (prin1)
  44. )
  45. (defun get_input_data()       ;共同数据取得与处理子程序
  46.   ;;;(setq ww (getreal "\n宽度WW:"))       ;动作取消
  47.   ;;;(setq hh (getreal "\n高度HH:"))       ;动作取消
  48.   (setq p1 (getpoint "\n插入点:"))
  49.   (setq p2 (polar p1 0 ww))
  50.   (setq p3 (polar p2 (* pi 0.5) hh))
  51.   (setq p4 (polar p3 pi ww))
  52.   (setq pm (inters p1 p3 p2 p4))
  53.   (setq pm12 (polar p1 0 (* ww 0.5)))
  54.   (setq pm34 (polar p3 pi (* ww 0.5)))
  55.   (setq pm23 (polar p2 (* pi 0.5) (* hh 0.5)))
  56.   (setq pm14 (polar p1 (* pi 0.5) (* hh 0.5)))
  57. )
  1. /*★★★★★ListDCL @ fsxm.mjtd.com★★★★★*/
  2. dia5b:dialog {
  3.     label = "按钮测试范例" ;
  4.     :boxed_row {
  5.         label = "图形尺寸" ;
  6.         :edit_box {
  7.             edit_width = 8 ;
  8.             key = "kww" ;
  9.             label = "宽度WW" ;
  10.         }
  11.         :edit_box {
  12.             edit_width = 8 ;
  13.             key = "khh" ;
  14.             label = "高度HH" ;
  15.         }
  16.     }
  17.     :button {
  18.         key = "bb1" ;
  19.         label = "绘制DIA5B1→L  型" ;
  20.     }
  21.     :button {
  22.         key = "bb2" ;
  23.         label = "绘制DIA5B2→X  型" ;
  24.     }
  25.     :button {
  26.         key = "bb3" ;
  27.         label = "绘制DIA5B3→漏洞型" ;
  28.     }
  29.     spacer_1;
  30.     cancel_button;
  31. }

程序运行后,不出现对话框,直接提示"未完成任何动作!!!"。
请大神帮看看什么原因,谢谢!

祝好!

本帖子中包含更多资源

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

x
发表于 2018-3-24 14:21:20 | 显示全部楼层
dia5b.dcl 文件  加到支持文件搜索路径中  或  在    (setq dcl_id (load_dialog "dia5b"))中加入绝对路径 如:
  (setq dcl_id (load_dialog "D:\\dia5b")) ,把文件放到D盘根目录中
 楼主| 发表于 2018-3-25 09:59:05 | 显示全部楼层
gaomingabc456 发表于 2018-3-24 14:21
dia5b.dcl 文件  加到支持文件搜索路径中  或  在    (setq dcl_id (load_dialog "dia5b"))中加入绝对路径  ...

谢谢回复,有两个问题:
1、另外一个示例(dia5a),我用类似的方法是能成功的;
2、load_dialog加载DCL文件,搜寻的顺序是:当前的工作路径文件夹,当前编辑图文件的所在文件夹,AutoCAD所设定的支持路径,包含AutoCAD执行文件所在的文件夹。所以,路径应该没有问题吧?
 楼主| 发表于 2018-3-25 17:32:58 | 显示全部楼层
问题找到了,但是原理不明白,下面两种情况中lsp和dcl文件均在CAD的“支持文件搜索路径”中。
1、原来的操作办法:在飞诗Lisp编辑器里面按F6(加载所有),然后在CAD里面输入快捷键(dia5b),这时就出现提问里面的错误。
2、另外的操作办法:在CAD里面输入(load “dia5b”),然后输入快捷键(dia5b),这时可以正常运行。
发表于 2019-6-22 22:17:41 | 显示全部楼层
支持的文件搜索路径中即可。
发表于 2022-6-29 14:28:35 | 显示全部楼层
=====================================================================
   (setq dcl_file (open (setq tmp-dcl-file-name (vl-filename-mktemp nil nil  ".DCL")) "w"))
              (progn
                 (foreach x
                   '(  

                     "/*★★★★★ListDCL @ fsxm.mjtd.com★★★★★*/"  
                     "dia5b:dialog {"  
                     "    label = \"按钮测试范例\" ;"  
                     "    :boxed_row {"  
                     "        label = \"图形尺寸\" ;"  
                     "        :edit_box {"  
                     "            edit_width = 8 ;"  
                     "            key = \"kww\" ;"  
                     "            label = \"宽度WW\" ;"  
                     "        }"  
                     "        :edit_box {"  
                     "            edit_width = 8 ;"  
                     "            key = \"khh\" ;"  
                     "            label = \"高度HH\" ;"  
                     "        }"  
                     "    }"  
                     "    :button {"  
                     "        key = \"bb1\" ;"  
                     "        label = \"绘制DIA5B1→L  型\" ;"  
                     "    }"  
                     "    :button {"  
                     "        key = \"bb2\" ;"  
                     "        label = \"绘制DIA5B2→X  型\" ;"  
                     "    }"  
                     "    :button {"  
                     "        key = \"bb3\" ;"  
                     "        label = \"绘制DIA5B3→漏洞型\" ;"  
                     "    }"  
                     "    spacer_1;"  
                     "    cancel_button;"  
                     "}"  
     ) (write-line x dcl_file) )
     (setq dcl_file (close dcl_file)))

(defun c:dia5b()
        (setvar "CMDECHO" 0)
        (dcl_dia5b)
        (prin1)
)
(defun dcl_dia5b()
        (setq dcl_id (load_dialog tmp-dcl-file-name))
        (new_dialog "dia5b" dcl_id)
        (set_tile "kww" "50")
        (set_tile "khh" "50")
        (action_tile "bb1" "(get_ww_hh) (done_dialog 1)")
        (action_tile "bb2" "(get_ww_hh) (done_dialog 2)")
        (action_tile "bb3" "(get_ww_hh) (done_dialog 3)")
        (setq dd (start_dialog))
        (cond ((= dd 1) (c:dia5b1))
                    ((= dd 2) (c:dia5b2))
                    ((= dd 3) (c:dia5b3))
                    (t        (alert "未完成任何动作!!!"))
        )
)
(defun get_ww_hh()       ;取得对话框的ww与hh值
        (setq ww (atof (get_tile "kww")))
        (setq hh (atof (get_tile "khh")))
)
(defun c:dia5b1()       ;L型主程序
        (setvar "CMDECHO" 0)
        (get_input_data)
        (command "PLINE" p1 p2 p3 pm34 pm pm14 "c")
        (prin1)
)
(defun c:dia5b2()       ;X型主程序
        (setvar "CMDECHO" 0)
        (get_input_data)
        (command "PLINE" p1 p2 p3 p4 "c")
        (command "LINE" p1 p3 "")
        (command "LINE" p2 p4 "")
        (prin1)
)
(defun c:dia5b3()       ;漏斗型主程序
        (setvar "CMDECHO" 0)
        (get_input_data)
        (command "PLINE" p1 p2 p4 p3 "c")
        (prin1)
)
(defun get_input_data()       ;共同数据取得与处理子程序
        ;;;(setq ww (getreal "\n宽度WW:"))       ;动作取消
        ;;;(setq hh (getreal "\n高度HH:"))       ;动作取消
        (setq p1 (getpoint "\n插入点:"))
        (setq p2 (polar p1 0 ww))
        (setq p3 (polar p2 (* pi 0.5) hh))
        (setq p4 (polar p3 pi ww))
        (setq pm (inters p1 p3 p2 p4))
        (setq pm12 (polar p1 0 (* ww 0.5)))
        (setq pm34 (polar p3 pi (* ww 0.5)))
        (setq pm23 (polar p2 (* pi 0.5) (* hh 0.5)))
        (setq pm14 (polar p1 (* pi 0.5) (* hh 0.5)))
)




合併版 ,試試看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 17:22 , Processed in 0.179961 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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