明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1654|回复: 6

[求助]谁给看看如何增加选取函数

[复制链接]
发表于 2010-6-16 16:14:00 | 显示全部楼层 |阅读模式
  1. BZBGPD:dialog
  2. { label="标注标高坡度V1.0";
  3.   : row {
  4.          :edit_box
  5.                   {label="标高(m):";
  6.                   key="bz_bg";
  7.                   edit_limit=14;
  8.                   edit_width=10;
  9.                   fixed_width=true;
  10.                   value=100.123;
  11.                    }
  12.          spacer=0;
  13.          :button
  14.          {label="点取";
  15.          key="qubg";
  16.          width=3;
  17.          fixed_width=true;
  18.          }
  19.   }
  20.   :radio_row
  21.   {label="";
  22.                :radio_button
  23.                {label="无";
  24.                key="bz_wbg";
  25.                value=0;
  26.                }
  27.                :radio_button
  28.                {label="轨面";
  29.                key="bz_gmbg";
  30.                value=1;
  31.                }
  32.                :radio_button
  33.                {label="巷道底板";
  34.                key="bz_dbbg";
  35.                value=0;
  36.                }
  37.   }
  38.   : row {
  39.          :edit_box
  40.                   {label="左坡度(‰):";
  41.                   key="bz_zpd";
  42.                   edit_limit=10;
  43.                   edit_width=8;
  44.                   fixed_width=true;
  45.                   value=-3.3;
  46.                    }
  47.          spacer=0;
  48.          :button
  49.          {label="点取";
  50.          key="quzpd";
  51.          width=3;
  52.          fixed_width=true;
  53.          }
  54.   }
  55.   : row {
  56.          :edit_box
  57.                   {label="左距离(m):";
  58.                   key="bz_zjl";
  59.                   edit_limit=10;
  60.                   edit_width=8;
  61.                   fixed_width=true;
  62.                   value=100.123;
  63.                    }
  64.          spacer=0;
  65.          :button
  66.          {label="点取";
  67.          key="quzjl";
  68.          width=3;
  69.          fixed_width=true;
  70.          }
  71.   }
  72.   : row {
  73.          :edit_box
  74.                   {label="右坡度(‰):";
  75.                   key="bz_ypd";
  76.                   edit_limit=10;
  77.                   edit_width=8;
  78.                   fixed_width=true;
  79.                   value=3.3;
  80.                    }
  81.          spacer=0;
  82.          :button
  83.          {label="点取";
  84.          key="quypd";
  85.          width=3;
  86.          fixed_width=true;
  87.          }
  88.   }
  89.   : row {
  90.          :edit_box
  91.                   {label="右距离(m):";
  92.                   key="bz_yjl";
  93.                   edit_limit=12;
  94.                   edit_width=8;
  95.                   fixed_width=true;
  96.                   value=100.123;
  97.                    }
  98.          spacer=0;
  99.          :button
  100.          {label="点取";
  101.          key="quyjl";
  102.          width=3;
  103.          fixed_width=true;
  104.          }
  105.   }
  106. :edit_box
  107.                   {label="文字高度:";
  108.                   key="bz_zg";
  109.                   edit_limit=10;
  110.                   edit_width=8;
  111.                   fixed_width=true;
  112.                   value=3;
  113.                    }
  114.   ok_cancel;
  115.   }
   ------------------------------------
以下是lisp代码
  1. (defun C:bzbgpd ()    (SETQ DCL_ID (LOAD_DIALOG "bzbgpd.dcl"));;;打开dcl文件
  2.                   (NEW_DIALOG "BZBGPD" DCL_ID);;;打开对话框
  3.                   (action_tile "accept" "(r_bzbgpd) (done_dialog) ")
  4.                   (START_DIALOG) (UNLOAD_DIALOG DCL_ID);;;开启对话框接受用户输入 结束对话框
  5.   (if (and (setq pt1 (getpoint "\n起点:"))
  6.            (setq pt2 (getpoint  "\n终点:"))
  7.      )
  8.     (progn
  9.       (setvar "osmode" 0 ) ;;对象捕捉无
  10.       (setvar "aunits" 3;;角度弧度
  11.              )
  12.       (setq fwj (angle pt1 pt2))
  13.       (if (>= fwj (* pi 0.16));;上边标注
  14.           (setq pt3 (polar pt2 (* pi 0.5) (* zg 9))
  15.                 pt6 (polar pt2 (* pi 0.5) (* zg 6))
  16.   pt4 (polar pt3 (* pi 1) (* zg 5))
  17.                 pt5 (polar pt3 (* pi 0) (* zg 5))
  18.                 pt7 (polar pt6 (+ (* pi 1) (* zpd  0.018)) (* zg 5))
  19.                 pt8 (polar pt6 (+ (* pi 0) (* ypd  0.018)) (* zg 5))
  20.   pt9 (polar pt7 (* pi 1.5) (* zg 0.5))
  21.   pt10 (polar pt8 (* pi 1.5) (* zg 0.5))
  22.           )
  23. )
  24.       (if (>= fwj (* pi 0.84));;左边边标注
  25.           (setq pt3 (polar pt2 (* pi 1) (* zg 9))
  26.                 pt6 (polar pt2 (* pi 1) (* zg 6))
  27.   pt4 (polar pt3 (* pi 1.5) (* zg 5))
  28.                 pt5 (polar pt3 (* pi 0.5) (* zg 5))
  29.                 pt7 (polar pt6 (+ (* pi 1.5) (* zpd  0.018)) (* zg 5))
  30.                 pt8 (polar pt6 (+ (* pi 0.5) (* ypd  0.018)) (* zg 5))
  31.   pt9 (polar pt7 (* pi 0) (* zg 0.5))
  32.   pt10 (polar pt8 (* pi 0) (* zg 0.5))
  33.           )
  34. )
  35.       (if (>= fwj (* pi 1.34));;下边边标注
  36.           (setq pt3 (polar pt2 (* pi 1.5) (* zg 9))
  37.                 pt6 (polar pt2 (* pi 1.5) (* zg 6))
  38.   pt4 (polar pt3 (* pi 1) (* zg 5))
  39.                 pt5 (polar pt3 (* pi 0) (* zg 5))
  40.                 pt7 (polar pt6 (+ (* pi 1) (* zpd  0.018)) (* zg 5))
  41.                 pt8 (polar pt6 (+ (* pi 0) (* ypd  0.018)) (* zg 5))
  42.   pt9 (polar pt7 (* pi 1.5) (* zg 0.5))
  43.   pt10 (polar pt8 (* pi 1.5) (* zg 0.5))
  44.           )
  45. )
  46.       (if (or (>= fwj (* pi 1.75)) (< fwj (* pi 0.16))) ;;右边边标注
  47.           (setq pt3 (polar pt2 (* pi 0) (* zg 9))
  48.                 pt6 (polar pt2 (* pi 0) (* zg 6))
  49.   pt4 (polar pt3 (* pi 0.5) (* zg 5))
  50.                 pt5 (polar pt3 (* pi 1.5) (* zg 5))
  51.                 pt7 (polar pt6 (+ (* pi 0.5) (* zpd  0.018)) (* zg 5))
  52.                 pt8 (polar pt6 (+ (* pi 1.5) (* ypd  0.018)) (* zg 5))
  53.   pt9 (polar pt7 (* pi 1) (* zg 0.5))
  54.   pt10 (polar pt8 (* pi 1) (* zg 0.5))
  55.           )
  56. )
  57.       (command "pline" pt1 pt2 pt3 ""
  58.         "line" pt4 pt5 ""
  59.         "line" pt6 pt7 ""
  60.         "line" pt6 pt8 ""
  61.         )
  62.       (setq
  63.             zpd (rtos zpd 2 1)
  64.             zjl (rtos zjl 2 3)
  65.             ypd (rtos ypd 2 1)
  66.             yjl (rtos yjl 2 3)
  67.        )
  68.       (cond ((= wbg  1) bg)
  69.             ((= gmbg 1) (setq bg (strcat bg "(轨面)")))
  70.             ((= dbbg 1) (setq bg (strcat bg "(巷道底板)")));判断标高类型
  71.     )
  72.       (command "text" "J" "BC" pt3 zg (angle pt4 pt5) bg
  73.         "text" "J" "BL" pt7 zg (angle pt7 pt6) zpd
  74.         "text" "J" "TL" pt9 zg (angle pt7 pt6) zjl
  75.         "text" "J" "BR" pt8 zg (angle pt6 pt8) ypd
  76.         "text" "J" "TR" pt10 zg (angle pt6 pt8) yjl)
  77.     )
  78.   )
  79.   (princ)
  80. );;;endbzbgpd
  81. ;;;;;;接上面坐标表赋值函数
  82. (DEFUN r_bzbgpd() (setq   bg (get_tile "bz_bg");;;坐标表赋值给各个变量函数点号
  83.            wbg (atof (get_tile "bz_wbg"));;;无
  84.           gmbg (atof (get_tile "bz_gmbg"));;;轨面
  85.           dbbg (atof (get_tile "bz_dbbg"));;;巷道底板
  86.            zpd (atof (get_tile "bz_zpd"));;;左坡度
  87.                          zjl (atof (get_tile "bz_zjl"));;;左距离
  88.            ypd (atof (get_tile "bz_ypd"));;;右坡度
  89.                          yjl (atof (get_tile "bz_yjl"));;;右距离
  90.             zg (abs (atof (get_tile "bz_zg")));;;文字高度
  91.          )
  92. )
  93. ;;;结束赋值函数



希望增加图中选取按钮的lisp,最好在上面的lisp中加载。

本帖子中包含更多资源

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

x
 楼主| 发表于 2010-6-16 16:15:00 | 显示全部楼层
实在搞不出来了,头都大了,给个参考帖子   http://bbs.mjtd.com/forum.php?mod=viewthread&tid=79678&replyID=&skin=0
发表于 2010-6-16 17:28:00 | 显示全部楼层
图中点选数据并将数据反映到对话框中
实际上包含了几方面的内容
一。临时关闭对话框前
对原始对话框数据的保存
二。选取数据后
更新之前保存的数据
三。恢复对话框并赋新值

思路清晰了
怎么编程只是个体力活

给你个程序片段供参考
  1. (defun c:xxx()
  2. ...
  3. (setq yourdcl (load_dialog "yourdcl.dcl"))
  4. (new_dialog "yourdclname" yourdcl "" )
  5. (对话框初始化)
  6. (对话框动作定义)
  7. ...
  8. )
  9. (defun 对话框动作定义()
  10. ...
  11. (action_tile "key1" "(save_dcl)(done_dialog 2)")
  12. (action_tile "key2" "(save_dcl)(done_dialog 2)")
  13. ...
  14. (setq oke (start_dialog) )
  15. (cond
  16.   ( (= 1 oke)(...))
  17.   ( (= 2 oke)(seldata))
  18. )
  19. )
  20. (defun save_dcl()
  21. (setq old_dcl '())
  22. (foreach x '("tt1" "tt2" ...)
  23.   (setq a (cons x (get_tile x)))
  24.   (setq old_dcl (append old_dcl (list a)))
  25. )
  26. ...
  27. )
  28. (defun load_dcl( dcltemp )
  29. (new_dialog "yourdclname" yourdcl "")
  30. (foreach x dcltemp
  31.   (setq a (car x))
  32.   (setq b (cadr x))
  33.   (set_tile a b)
  34. )
  35. (对话框动作定义)
  36. )
  37. (defun seldata()
  38. (setq a (entsel))
  39. (if a
  40.   (progn
  41.    (setq new_dcl (更新数据 a old_dcl))
  42.    (load_dcl new_dcl)
  43.   )
  44.   (load_dcl old_dcl)
  45. )
  46. )


发表于 2010-6-16 19:03:00 | 显示全部楼层
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

发表于 2010-6-16 19:09:00 | 显示全部楼层

这样不好吧

对于不是求程序的提问者

直接贴出完整程序

不就失去了学习的动力了吗

 楼主| 发表于 2010-6-16 21:25:00 | 显示全部楼层
lisp比较难,因为它太灵活了,学习vb语言感觉没有这么难,一段程序可以很复杂也可以很精练,lisp函数太多,还不容易调试
 楼主| 发表于 2010-6-17 09:03:00 | 显示全部楼层
再次感谢ZZXXQQ
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-2 06:38 , Processed in 0.182632 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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