明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4312|回复: 9

帮忙编写一个dcl对话框面积计算的lisp程序

[复制链接]
发表于 2016-2-5 11:58:03 | 显示全部楼层 |阅读模式
5明经币
  1. mjbz:dialog{
  2.         label="面积标注";
  3.         :boxed_radio_row{
  4.             label="转换单位";
  5.             :radio_button{
  6.                 label="平方米";
  7.                 key="mm";
  8.                          }
  9.             :radio_button{
  10.                 label="亩";
  11.                 key="mu";
  12.                 value="1";      //预设选项
  13.                    }
  14.               }

  15.               
  16.         :boxed_row{
  17.              label="标注方式";
  18.              :button{
  19.                      label="单一标注";
  20.                      key="dybz";
  21.                    }
  22.              :button{
  23.                      label="批量标注";
  24.                      key="plbz";
  25.                    }
  26.                  }
  27.         spacer_1;                //空白一行
  28.         ok_cancel;
  29.         }
希望最后提供源码,想要学习一下

发表于 2016-2-6 08:09:18 | 显示全部楼层
  1. mjbz:dialog{
  2. label="面积标注";
  3. :boxed_radio_row{
  4.   label="转换单位";
  5.         key="zhdw";
  6.   :radio_button{label="平方米";key="mm";}
  7.   :radio_button{label="亩";key="mu";value="1";}      //预设选项
  8. }
  9. :boxed_row{
  10.   label="标注方式";
  11.   :button{label="单一标注";key="dybz";}
  12.   :button{label="批量标注";key="plbz";}
  13. }
  14. spacer_1;                //空白一行
  15. ok_cancel;
  16. }
  1. (defun c:mjbz ()
  2. (setvar "CMDECHO" 0)
  3. (setq re 2)
  4. (if (> (setq dcl_id (load_dialog "mjbz.dcl")) 0) (progn
  5.   (while (> re 1)
  6.    (if (new_dialog "mjbz" dcl_id) (progn
  7.     (action_tile "dybz" "(getdata)(done_dialog 2)")
  8.     (action_tile "plbz" "(getdata)(done_dialog 3)")
  9.     (action_tile "accept" "(done_dialog 1)")
  10.     (action_tile "cancel" "(done_dialog 0)")
  11.     (setq re (start_dialog))
  12.    )
  13.     (princ "\n无法显示对话框!")
  14.    )
  15.    (cond
  16.     ((= re 2)
  17.      (if (setq pt (getpoint "\n区域内一点: ")) (progn
  18.       (command "bondory" pt "")
  19.       (command "area" "e" "l" "" "ERASE" "L" "")
  20.       (setq mj (strcat (rtos (/ (getvar "AREA") x) 2 3) " " zhdw))
  21.       (command "TEXT" pt "" "" 0 mj)
  22.      ))
  23.     )
  24.     ((= re 3)
  25.      (while (setq pt (getpoint "\n区域内一点: "))
  26.       (command "bondory" pt "")
  27.       (command "area" "e" "l" "" "ERASE" "L" "")
  28.       (setq mj (strcat (rtos (/ (getvar "AREA") x) 2 3) " " zhdw))
  29.       (command "TEXT" pt "" "" 0 mj)
  30.      )
  31.     )
  32.    )
  33.   )
  34.   (unload_dialog dcl_id)
  35. )
  36.   (princ "\n无法加载对话框!")
  37. )
  38. (princ)
  39. )
  40. (defun getdata ()
  41. (setq x (if (= (get_tile "zhdw") "mm") 1 666666.667));2000000/3
  42. )
回复

使用道具 举报

 楼主| 发表于 2016-2-6 14:17:40 | 显示全部楼层
ZZXXQQ 发表于 2016-2-6 08:09

命令: mjbz
区域内一点: 未知命令“MJBZ”。按 F1 查看帮助。
; 错误: 参数类型错误: stringp nil
加载之后会出现这个错误是怎么回事
回复

使用道具 举报

发表于 2016-10-22 23:27:01 | 显示全部楼层
不错的资料, 谢谢分享啊。
回复

使用道具 举报

发表于 2019-7-9 09:39:07 来自手机 | 显示全部楼层
试试,谢谢分享!!!!
回复

使用道具 举报

发表于 2019-8-23 12:29:58 | 显示全部楼层
有问题,~~~~~~~~~~~
回复

使用道具 举报

发表于 2021-2-28 12:11:24 | 显示全部楼层

试试,谢谢分享!!!!
回复

使用道具 举报

发表于 2022-6-25 14:21:33 | 显示全部楼层
本帖最后由 song宋_74729 于 2022-8-13 08:52 编辑

===================================================
   (setq dcl_file (open (setq tmp-dcl-file-name (vl-filename-mktemp nil nil  ".DCL")) "w"))
              (progn
                 (foreach x
                   '(  

                     "mjbz:dialog{"  
                     "        label=\"面积标注\";"  
                     "        :boxed_radio_row{"  
                     "            label=\"转换单位\";"  
                     "            :radio_button{"  
                     "                label=\"平方米\";"  
                     "                key=\"mm\";"  
                     "                         }"  
                     "            :radio_button{"  
                     "                label=\"亩\";"  
                     "                key=\"mu\";"  
                     "                value=\"1\";      //默认选项"  
                     "                   }"  
                     "              }"  
                     "              "  
                     "        :boxed_row{"  
                     "             label=\"标注方式\";"  
                     "             :button{"  
                     "                     label=\"单一标注\";"  
                     "                     key=\"dybz\";"  
                     "                   }"  
                     "             :button{"  
                     "                     label=\"批量标注\";"  
                     "                     key=\"plbz\";"  
                     "                   }"  
                     "                 }"  
                     "        spacer_1;                //空白一行"  
                     "        ok_cancel;"  
                     "        }"  
     ) (write-line x dcl_file) )
     (setq dcl_file (close dcl_file)))

    (defun c:mjbz ()
     (setvar "CMDECHO" 0)
     (setq re 2)
     (if (> (setq dcl_id (load_dialog tmp-dcl-file-name)) 0) (progn
      (while (> re 1)
       (if (new_dialog "mjbz" dcl_id) (progn
        (action_tile "dybz" "(getdata)(done_dialog 2)")
        (action_tile "plbz" "(getdata)(done_dialog 3)")
        (action_tile "accept" "(done_dialog 1)")
        (action_tile "cancel" "(done_dialog 0)")
        (setq re (start_dialog))
       )
        (princ "\n无法显示对话框!")
       )
       (cond
        ((= re 2)
         (if (setq pt (getpoint "\n区域内一点: ")) (progn
          (command "bondory" pt "")
          (command "area" "e" "l" "" "ERASE" "L" "")
          (setq mj (strcat (rtos (/ (getvar "AREA") x) 2 3) " " zhdw))
          (command "TEXT" pt "" "" 0 mj)
         ))
        )
        ((= re 3)
         (while (setq pt (getpoint "\n区域内一点: "))
          (command "bondory" pt "")
          (command "area" "e" "l" "" "ERASE" "L" "")
          (setq mj (strcat (rtos (/ (getvar "AREA") x) 2 3) " " zhdw))
          (command "TEXT" pt "" "" 0 mj)
         )
        )
       )
      )
      (unload_dialog dcl_id)
     )
      (princ "\n无法加载对话框!")
     )
     (princ)
    )
    (defun getdata ()
     (setq x (if (= (get_tile "zhdw") "mm") 1 666666.667));2000000/3
    )

回复

使用道具 举报

发表于 2022-9-5 15:02:38 | 显示全部楼层
不错,学习、学习
回复

使用道具 举报

发表于 2022-9-5 19:03:53 | 显示全部楼层
本帖最后由 xj6019 于 2022-9-5 19:06 编辑



源码大佬已经给你很多了,换种新玩法
需要两个文件同时加载,才有效,一种高效便捷的dcl玩法,嘿嘿嘿!!!!!!

摘自附件文件内的对话框部分的代码,如下:
(defun C:NM (/ acttlst dclcidian key2str lst_str)
        (setq dclcidian "mianji-cidian")
        (setq lst_str
                (append(dcl-name "面积标注" )                        
                        (dcl-vh '("BH" "转换单位"))                        
                        (dcl-dan '(("平方米" "INGFANG" "5") ("亩" "MU" "5")) "")
                        (dcl-vh "e")
                        (dcl-vh '("BH" "标注方式"))               
                        (dcl-an  '(("单一标注" "DANYI" "8" "2")("批量标注" "ILIANG" "8" "2"))"")
                        (dcl-vh "e")
                        (dcl-oc)        ;确认按钮                                                               
                )
        )   
        (setq key2str(val2str '(1 0 0 0)))        
        (setq acttlst '(("DANYI" "3" "(dcl-DANYI)")("ILIANG" "4" "(dcl-PILIANG)")))
        (xj-dcl-k  dclcidian  lst_str  key2str nil acttlst)        
        (princ)
)

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 14:08 , Processed in 0.213804 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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