找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 7012|回复: 94

[已解决] 求修改一个程序(添加dialog )

[复制链接]

已领礼包: 3199个

财富等级: 富可敌国

发表于 2014-9-9 09:12:32 | 显示全部楼层 |阅读模式
悬赏20D豆已解决
本帖最后由 lucas3 于 2015-4-17 16:44 编辑

原贴地址在:http://bbs.mjtd.com/thread-111293-1-1.html
Free-Lancer大师,有一个程序想加一个对话框,能帮我修改下吗?万分感谢!
源程序如下: 原程序来之于q3_2006(感谢!)
  1. (defun mkarc (p w f / p1 p2)
  2. (cond
  3.   ((= f 3) (setq p1 (mapcar '- p (list (* -0.25 w) (* 0.5 (abs w)) ))
  4.   p2 (mapcar '- p (list 0 (abs w) ))
  5. )
  6. (vl-cmdf "arc" p p1 p2)
  7. )
  8.   ((= f 2) (setq p1 (mapcar '+ p (list (* 0.25 w) (* -0.5 (abs w)) ))
  9.   p2 (mapcar '+ p (list (* 0.25 w) (* 0.5 (abs w)) ))
  10. )
  11. (vl-cmdf "arc" p1 p p2)
  12. )
  13.   ((= f 1) (setq p1 (mapcar '+ p (list (* 0.25 w) (* 0.5 (abs w)) ))
  14.   p2 (mapcar '+ p (list 0 (abs w) ))
  15. )
  16. (vl-cmdf "arc" p p1 p2)
  17. )
  18. )
  19. (entlast)
  20. )
  21. (defun mat:rotation ( cen ang / c s x y)
  22.   (setq c (cos ang) s (sin ang))
  23.   (setq x (car cen) y (cadr cen))
  24.   (list
  25.     (list c (- s) 0. (- x (- (* c x) (* s y))))
  26.     (list s    c  0. (- y (+ (* s x) (* c y))))
  27.     '(0. 0. 1. 0.)
  28.     '(0. 0. 0. 1.)
  29.   )
  30. )
  31. (defun HH:PtFirstAngle (obj pt)
  32.   (setq param (vlax-curve-getParamAtPoint obj pt))
  33.   (angle pt (mapcar '+ pt (vlax-curve-getFirstDeriv obj param)))
  34. )
  35. (defun c:tt ( / aa a an d d1 d2 e f i l odlst p1 p2 pr q w x y)
  36. (setq odlst (mapcar 'getvar '("cmdecho" "osmode" "peditaccept")))
  37. (mapcar 'setvar '("cmdecho" "osmode") '(0 544))
  38. (setq w (getreal "\n输入圆弧宽度:") ;负值反向
  39.   d (getreal "\n输入圆弧间距:")
  40.   a (car (entsel "\n选择曲线:"))
  41.   p1 (getpoint "\n起点:")
  42.   p2 (getpoint "\n终点:")
  43.   l (list p1 p2)
  44.   l (vl-sort l '(lambda (x y) (< (vlax-curve-getDistAtPoint a x) (vlax-curve-getDistAtPoint a y)) ) )
  45.   p1 (car l)
  46.   p2 (cadr l)
  47.   d1 (vlax-curve-getDistAtPoint a p1)
  48.   d2 (vlax-curve-getDistAtPoint a p2)
  49.   i -1
  50.   l nil
  51. )
  52. (while (< (setq pr (+ (* (setq i (1+ i)) d) d1)) d2)
  53.   (setq l (cons (vlax-curve-getPointAtDist a pr) l))
  54. )
  55. (setq l (reverse l))
  56. (setvar "osmode" 0)
  57. (princ "\n[1上,2中,3下]")
  58. (setq aa (grread))
  59. (cond
  60.   ((= (cadr aa) 49) (setq f 1) )
  61.   ((= (cadr aa) 50) (setq f 2) )
  62.   ((= (cadr aa) 51) (setq f 3) )
  63. )
  64. (mapcar '(lambda(x)
  65. (setq an (HH:PtFirstAngle a x) q (mat:rotation x an) e (mkarc x w f))
  66. (vla-transformby (vlax-ename->vla-object e) (vlax-tmatrix q))
  67. ) l)
  68. (mapcar 'setvar '("cmdecho" "osmode") odlst)
  69. )



如果选择的是类型1,就还要选择是在哪曲线的哪一侧?可以用 鼠标指定吗?实际的情况是,程序中用“上,中,下” 来选择的。
220015c482cc46ggk8w6td.png


=================================================

另外圆弧的方向,实际的情况是输入正负值来完成的,我想直接在对话框上选择,对话框中的方向一项就是用来改变弧形的方向的。(如果能动态指定,那就更好!)
220018mqfobc6cv2ykf6fc.png
==================================================================

愿程序是不是改变捕捉设置呢?感觉用过之后,捕捉设置都变了,另外,当选择的曲线是圆或椭圆这种封闭曲线时,
我想整个曲线都布置,那起点与终点在一个点上,就没办法做到了。有什么好的方法么? (是不是加个整线布置的选项?如果选中整线布置,就不用选择起点和终点?)

以上感谢大师的帮助!!!


最佳答案

查看完整内容

End , lib.vlx 已更新
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-9-10 21:16:34 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-11 00:30 编辑
lucas3 发表于 2014-9-10 18:24
Free-Lancer大师,完整的修改版程序呢?感觉整的挺复杂的!到时还要加载两个库?

只要一个 lib.vlx 即可,这个包含了 app.fas
先写个三点弧
  1. (defun Arc:Make3 (p1 p2 p3 / r d an p pc sa se midp)
  2.   (defun midp (p1 p2)
  3.     (mapcar '(lambda (x y)
  4.                (* 0.5 (+ x y))
  5.              )
  6.             p1
  7.             p2
  8.     )
  9.   )
  10.   (setq        d    (car (trans (mapcar '- p2 p1) 0 (mapcar '- p3 p1)))
  11.         an   (angle p1 p3)
  12.         _pi2 (/ pi 2)
  13.         p11  (midp p1 p2)
  14.         p22  (midp p2 p3)
  15.   )
  16.   (if (setq pc (inters p11
  17.                        (polar p11 (+ (angle p1 p2) _pi2) 1.)
  18.                        p22
  19.                        (polar p22 (+ (angle p2 p3) _pi2) 1.)
  20.                        nil
  21.                )
  22.       )
  23.     (progn
  24.       (setq r  (distance p1 pc)
  25.             sa (angle pc p1)
  26.             se (angle pc p3)
  27.       )
  28.       (if (minusp d)
  29.         (if (and (< sa se) (< (angle pc p2) sa))
  30.           (vlax-invoke (fy:acspace) 'AddArc pc r se (+ pi pi sa))
  31.           (vlax-invoke (fy:acspace) 'AddArc pc r sa se)
  32.         )
  33.         (if (< se (angle pc p2) sa) ;_顺时针
  34.           (vlax-invoke (fy:acspace) 'AddArc pc r se sa)
  35.           (vlax-invoke (fy:acspace) 'AddArc pc r se (+ pi pi sa))
  36.         )
  37.       )
  38.     )
  39.   )
  40. )

记录下这个对话框

  1. (setq    str '("temp:dialog {"
  2.           "label = "焊肉符号" ;"
  3.           ": column {"
  4.           "  : row {"
  5.           "    : column {"
  6.           "      : image_button { height = 5; key = "sld";}"
  7.           "      : boxed_column {"
  8.           "        label = "参数" ;"
  9.           "        : edit_box { key = "wid"; label = "宽度" ;}"
  10.           "        : edit_box { key = "dis"; label = "间距" ;}"
  11.           "        }"
  12.           "      : toggle {key = "tol"; label = "整线";}"
  13.           "    }"
  14.           "  : column {"
  15.           "    : boxed_column {"
  16.           "      label="方向";"
  17.           "      : radio_button { key= "front"; label = "正";}"
  18.           "      : radio_button { key="back"; label ="反";}"
  19.           "      }"
  20.           "    : boxed_column {"
  21.           "      label = "位置" ;"
  22.           "      : radio_button { key = "left"; label = "左" ;}"
  23.           "      : radio_button { key = "mid"; label = "中" ;}"
  24.           "      : radio_button { key = "right"; label = "右" ;}"
  25.           "      }}"
  26.           "    }"
  27.           "  ok_cancel;"
  28.           "  errtile;"
  29.           "  }"
  30.           "}"
  31.          )
  32.   )

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

使用道具 举报

发表于 2014-9-9 09:12:33 | 显示全部楼层
lucas3 发表于 2014-9-11 13:36
回长老,源程序可以的呀,源程序只是不能选择整线布置

End , lib.vlx 已更新
  1. (mapcar        '(lambda (x y)
  2.            (if (not (eval x))
  3.              (set x y)
  4.            )
  5.          )
  6.         '($globle_wid $globle_dis $globle_mode $globle_totle)
  7.         '(2.0 1.0 "bmid" "0")
  8. )
  9. (defun c:tt (/ slbname slst params str fn id e sp ep lst n nl pts ptl
  10.              dist ml)
  11.   ;;返回点对应 ARC 三点参数
  12.   (defun GetArcPoints (e p v / w2 w4 an an1 tp p1 p2)
  13.     (setq an  (angle '(0. 0. 0.) v)
  14.           an1 (+ an (/ pi 2))
  15.           w4  (/ $globle_wid 4.)
  16.           w2  (/ $globle_wid 2)
  17.     )
  18.     (cond
  19.       ((= $globle_mode "fup")
  20.        (setq p2        (polar p an1 $globle_wid)
  21.              p1        (polar (fy:midp p p2) an w4)
  22.        )
  23.        (list p p1 p2)
  24.       )
  25.       ((= $globle_mode "fmid")
  26.        (setq tp        (polar p (+ pi an) w4)
  27.              p1        (polar tp an1 w2)
  28.              p2        (polar tp (+ pi an1) w2)
  29.        )
  30.        (list p1 p p2)
  31.       )
  32.       ((= $globle_mode "fdn")
  33.        (setq p2        (polar p (+ an1 pi) $globle_wid)
  34.              p1        (polar (fy:midp p p2) an w4)
  35.        )
  36.        (list p p1 p2)
  37.       )
  38.       ((= $globle_mode "bup")
  39.        (setq p2        (polar p an1 $globle_wid)
  40.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  41.        )
  42.        (list p p1 p2)
  43.       )
  44.       ((= $globle_mode "bmid")
  45.        (setq tp        (polar p (+ pi an) w4)
  46.              p1        (polar tp an1 w2)
  47.              p2        (polar tp (+ an1 pi) w2)
  48.        )
  49.        (list p1 p p2)
  50.       )
  51.       ((= $globle_mode "bdn")
  52.        (setq p2        (polar p (+ pi an1) $globle_wid)
  53.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  54.        )
  55.        (list p p1 p2)
  56.       )
  57.       (t)
  58.     )
  59.   )
  60.   (setq        slbname        (findfile "sldlib.slb")
  61.         ml        '(("fup" "左上正向")
  62.                   ("fmid" "居中正向")
  63.                   ("fdn" "右下正向")
  64.                   ("bup" "左上反向")
  65.                   ("bmid" "居中反向")
  66.                   ("bdn" "右下反向")
  67.                  )
  68.         slst        '("fup" "fmid" "fdn" "bup" "bmid" "bdn")
  69.         params        '("wid" "dis")
  70.         str        '("temp:dialog {"
  71.                   "label = \"焊肉符号\" ;"
  72.                   ": column {"
  73.                   "  : row {"
  74.                   "    : image_button { height = 6; key = \"fup\";}"
  75.                   "    : image_button { height = 6; key = \"fmid\";}"
  76.                   "    : image_button { height = 6; key = \"fdn\";}"
  77.                   "    }"
  78.                   "  : row {"
  79.                   "    : image_button { height = 6; key = \"bup\";}"
  80.                   "    : image_button { height = 6; key = \"bmid\";}"
  81.                   "    : image_button { height = 6; key = \"bdn\";}"
  82.                   "    }"
  83.                   "  : boxed_row {"
  84.                   "    label = \"参数\";"
  85.                   "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  86.                   "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  87.                   "    : toggle {key = \"tol\"; label = \"整线\";}"
  88.                   "    }"
  89.                   "  ok_cancel;"
  90.                   "  errtile;"
  91.                   "  }"
  92.                   "}"
  93.                  )
  94.   )
  95.   (setq        fn (dcl:make str) ;_写出临时 dcl
  96.         id (dcl:load fn "temp") ;_加载 DCL 文件
  97.   )
  98.   ;;set_tile  
  99.   (dcl:settile
  100.     '("wid" "dis" "tol")
  101.     (mapcar 'vl-princ-to-string
  102.             (list $globle_wid $globle_dis $globle_totle)
  103.     )
  104.   ) ;_设置 string 格式按钮默认值
  105.   (set_tile $globle_mode "1")
  106.   (Dcl:SetError (cadr (assoc $globle_mode ml)))
  107.   (mapcar '(lambda (key fn) (Dcl:SlideImage key fn 0))
  108.           slst
  109.           (list        (strcat slbname "(hanroufup)")
  110.                 (strcat slbname "(hanroufmid)")
  111.                 (strcat slbname "(hanroufdn)")
  112.                 (strcat slbname "(hanroubup)")
  113.                 (strcat slbname "(hanroubmid)")
  114.                 (strcat slbname "(hanroubdn)")
  115.           )
  116.   ) ;_设置 image_button
  117.   (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  118.   ;;action_tile
  119.   (mapcar
  120.     '(lambda (x)
  121.        (action_tile
  122.          x
  123.          "(setq $globle_mode $key)(Dcl:SetError  (cadr (assoc $key ml)))"
  124.        )
  125.      )
  126.     slst
  127.   )
  128.   (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  129.   (DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态,全局变量
  130.   (DCL:Accept) ;_定义 accept and cancel
  131.   ;;Main program
  132.   (if (and (= (dcl:start id fn) 1) ;_ok
  133.            (setq e (car        (entsel
  134.                           "\n拾取曲线: "
  135.                           ;;'((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))
  136.                         )
  137.                    )
  138.            )
  139.       )
  140.     (progn
  141.       (if (= $globle_totle "1")
  142.         (setq lst (list        e
  143.                         (vlax-curve-getstartparam e)
  144.                         (vlax-curve-getendparam e)
  145.                   )
  146.         )
  147.         (if (and (setq sp (getpoint "\nStart Point: "))
  148.                  (setq ep (getpoint sp "\nEnd Point: "))
  149.             )
  150.           (setq        lst
  151.                  (cons e
  152.                        (vl-sort        (list (vlax-curve-getparamatpoint
  153.                                         e
  154.                                         (vlax-curve-getclosestpointto e sp)
  155.                                       )
  156.                                       (vlax-curve-getparamatpoint
  157.                                         e
  158.                                         (vlax-curve-getclosestpointto e ep)
  159.                                       )
  160.                                 )
  161.                                 '<
  162.                        )
  163.                  )
  164.           )
  165.         )
  166.       )
  167.     )
  168.   )
  169.   ;;绘制主程序
  170.   (if lst
  171.     (progn
  172.       (setq dist (fix (- (vlax-curve-getdistatparam e (last lst))
  173.                          (vlax-curve-getdistatparam e (cadr lst))
  174.                       )
  175.                  )
  176.             n         (fix (/ dist $globle_dis))
  177.             nl         (XD::Geom:NumDiv (last lst) (cadr lst) n)
  178.             pts         (mapcar '(lambda (x)
  179.                             (list (vlax-curve-getpointatparam e x)
  180.                                   (vlax-curve-getfirstderiv e x)
  181.                             )
  182.                           )
  183.                          nl
  184.                  )
  185.             ptl         (mapcar '(lambda (x)
  186.                             (apply 'GetArcPoints (cons e x))
  187.                           )
  188.                          pts
  189.                  )
  190.       )
  191.       (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  192.               ptl
  193.       )
  194.     )
  195.   )
  196.   (princ)
  197. )

点评

谢谢Free-Lancer大师,晓东的活雷锋!非常感谢!很有用的样例程序!有一点建议!就是幻灯片选中与被选中不好查看,能否选中后背景变为白色?之前有见过这样的示例  详情 回复 发表于 2014-9-11 19:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-9 14:35:52 来自手机 | 显示全部楼层
这个可以有
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-10 07:56:51 | 显示全部楼层
由起点到终点,左右用距离的正负控制,类型分左、中、右

点评

大师能帮帮忙吗?加个对话框  详情 回复 发表于 2014-9-10 08:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-10 08:07:58 | 显示全部楼层
Free-Lancer 发表于 2014-9-10 07:56
由起点到终点,左右用距离的正负控制,类型分左、中、右

大师能帮帮忙吗?加个对话框

点评

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

使用道具 举报

发表于 2014-9-10 08:19:44 | 显示全部楼层
lucas3 发表于 2014-9-10 08:07
大师能帮帮忙吗?加个对话框

不需要 Slide

20140910080118.jpg

点评

大师,不能动态选择吗?用 左 ,中,右也不是很好区分吧,有时可能是上,中,下,了 ,另外一个层次考虑,弧线布置在曲线的两侧属于角焊缝, 而弧线布置在曲线的中间属于另外一种焊接方式 所以用这种选择方式会比  详情 回复 发表于 2014-9-10 09:40
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-10 09:40:10 | 显示全部楼层

大师,不能动态选择吗?用 左 ,中,右也不是很好区分吧,有时可能是上,中,下,了  ,另外一个层次考虑,弧线布置在曲线的两侧属于角焊缝, 而弧线布置在曲线的中间属于另外一种焊接方式
所以用这种选择方式会比较合理(类型1属于角焊缝)

                               
登录/注册后可看大图


另外弧的方向不能选择吗?

                               
登录/注册后可看大图


下面是SLD文件
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:sld.rar 
下载次数:1  文件大小:11.26 KB 
下载权限: 不限 以上  [免费赚D豆]




点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-10 10:23:05 来自手机 | 显示全部楼层
左中右应以前进方向区分
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-10 10:43:42 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-10 10:46 编辑
lucas3 发表于 2014-9-10 09:40
大师,不能动态选择吗?用 左 ,中,右也不是很好区分吧,有时可能是上,中,下,了  ,另外一个层次考虑 ...

这样规则, 由起点面向终点区分左中右

20140910103920.jpg

点评

大师,输入正负值多麻烦,能否直接做的选择在DCL上呢? 另外,当选择的曲线是圆或椭圆这种封闭曲线时, 我想整个曲线都布置,那起点与终点在一个点上,就没办法做到了。有什么好的方法么? (是不是加个整线布置的  详情 回复 发表于 2014-9-10 10:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-10 10:52:35 | 显示全部楼层
Free-Lancer 发表于 2014-9-10 10:43
这样规则, 由起点面向终点区分左中右

大师,输入正负值多麻烦,能否直接做的选择在DCL上呢?
另外,当选择的曲线是圆或椭圆这种封闭曲线时,
我想整个曲线都布置,那起点与终点在一个点上,就没办法做到了。有什么好的方法么? (是不是加个整线布置的选项?如果选中整线布置,就不用选择起点和终点?)

点评

不管怎样都是和起点终点方向有关  详情 回复 发表于 2014-9-10 11:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-10 11:10:34 | 显示全部楼层
lucas3 发表于 2014-9-10 10:52
大师,输入正负值多麻烦,能否直接做的选择在DCL上呢?
另外,当选择的曲线是圆或椭圆这种封闭曲线时,
...


不管怎样都是和起点终点方向有关,对话框部分
  1. (mapcar        '(lambda (x y)
  2.            (if (not (eval x))
  3.              (set x y)
  4.            )
  5.          )
  6.         '($globle_wid $globle_dis $globle_mode $globle_totle)
  7.         '(2.0 1.0 "mid" "0")
  8. )
  9. (defun c:tt (/ str fn id)
  10.   (setq        str '("temp:dialog {"
  11.               "    label = \"焊肉符号\" ;"
  12.               "    :column {"
  13.               "        :boxed_column {"
  14.               "            label = \"参数\" ;"
  15.               "            :edit_box {"
  16.               "                key = \"wid\" ;"
  17.               "                label = \"宽度\" ;"
  18.               "            }"
  19.               "            :edit_box {"
  20.               "                key = \"dis\" ;"
  21.               "                label = \"间距\" ;"
  22.               "            }"
  23.               "        }"
  24.               "        :boxed_row {"
  25.               "            label = \"方向\" ;"
  26.               "            :radio_button {"
  27.               "              key      =              \"left\" ;"
  28.               "                label = \"左\" ;"
  29.               "            }"
  30.               "            :radio_button {"
  31.               "              key      =     \"mid\" ;"
  32.               "                label = \"中\" ;"
  33.               "            }"
  34.               "            :radio_button {"
  35.               "                key = \"right\" ;"
  36.               "                label = \"右\" ;"
  37.               "            }"
  38.               "        }"
  39.               "    }"
  40.               "    :row{"
  41.               "     :toggle{"
  42.               "        key = \"tol\";"
  43.               "        label = \"整线\";"
  44.               "      }"
  45.               "      ok_only;}"
  46.               "    errtile;"
  47.               "}"
  48.              )
  49.   )
  50.   (setq        fn (dcl:make str)
  51.         id (dcl:load fn "temp")
  52.   )
  53.   (dcl:settile
  54.     '("wid" "dis" "tol")
  55.     (mapcar 'vl-princ-to-string
  56.             (list $globle_wid $globle_dis $globle_totle)
  57.     )
  58.   )
  59.   (dcl:radioinit '("left" "mid" "right") $globle_mode)
  60.   (dcl:radioaction '("left" "mid" "right") '$globle_mode)
  61.   (dcl:doeditbox '("left" "mid") '($globle_wid $globle_dis))
  62.   (dcl:dotoggle '("tol") '($globle_totle))
  63.   (action_tile
  64.     "accept"
  65.     (dcl:doeditbox '("wid" "dis") '($globle_wid $globle_dis))
  66.   )
  67.   (dcl:start id fn)
  68. )
  69. ;;===================================================
  70. (defun dcl:dotoggle (keylst syml)
  71.   (mapcar '(lambda (x y)
  72.              (action_tile
  73.                x
  74.                (strcat "(setq " (vl-symbol-name y) " $value)")
  75.              )
  76.            )
  77.           keylst
  78.           syml
  79.   )
  80. )
  81. (defun dcl:doeditbox (keylst syml)
  82.   (apply 'strcat
  83.          (mapcar '(lambda (x y)
  84.                     (strcat "(setq "
  85.                             (vl-symbol-name y)
  86.                             "(distof (get_tile \""
  87.                             x
  88.                             "\")))"
  89.                     )
  90.                   )
  91.                  keylst
  92.                  syml
  93.          )
  94.   )
  95. )
  96. (defun Dcl:RadioAction (keylst sym / actionx)
  97.   (foreach x keylst
  98.     (action_tile
  99.       x
  100.       (apply
  101.         'strcat
  102.         (append        (list (strcat "(setq " (vl-symbol-name sym) " $key" ")"))
  103.                 (mapcar        '(lambda (x)
  104.                            (strcat "(set_tile " "\"" x "\"" " \"0\")")
  105.                          )
  106.                         keylst
  107.                 )
  108.                 (list "(set_tile $key \"1\")")
  109.         )
  110.       )
  111.     )
  112.   )
  113. )
20140910110928.jpg

点评

谢谢Free-Lancer大师,那程序部分呢?  详情 回复 发表于 2014-9-10 11:21
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-10 11:21:39 | 显示全部楼层
Free-Lancer 发表于 2014-9-10 11:10
不管怎样都是和起点终点方向有关,对话框部分

谢谢Free-Lancer大师,那程序部分呢?

点评

基本搞定 edit_box toggle radio_button 这几个 控件了,以后再用就方便了 DCL 控制部分,lib.vlx 已更新  详情 回复 发表于 2014-9-10 16:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-10 16:51:03 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-10 16:53 编辑
lucas3 发表于 2014-9-10 11:21
谢谢Free-Lancer大师,那程序部分呢?


基本搞定 edit_box toggle radio_button 这几个 控件了,以后再用就方便了
  1. (mapcar        '(lambda (x y)
  2.            (if (not (eval x))
  3.              (set x y)
  4.            )
  5.          )
  6.         '($globle_wid $globle_dis $globle_mode $globle_totle)
  7.         '(2.0 1.0 "mid" "0")
  8. )
  9. (defun c:tt (/ str fn id tf dg)
  10.   (setq        str '("temp:dialog {"
  11.               "    label = \"焊肉符号\" ;"
  12.               "    :column {"
  13.               "        :boxed_column {"
  14.               "            label = \"参数\" ;"
  15.               "            :edit_box {"
  16.               "                key = \"wid\" ;"
  17.               "                label = \"宽度\" ;"
  18.               "            }"
  19.               "            :edit_box {"
  20.               "                key = \"dis\" ;"
  21.               "                label = \"间距\" ;"
  22.               "            }"
  23.               "        }"
  24.               "        :boxed_row {"
  25.               "            label = \"方向\" ;"
  26.               "            :radio_button {"
  27.               "              key      =              \"left\" ;"
  28.               "                label = \"左\" ;"
  29.               "            }"
  30.               "            :radio_button {"
  31.               "              key      =     \"mid\" ;"
  32.               "                label = \"中\" ;"
  33.               "            }"
  34.               "            :radio_button {"
  35.               "                key = \"right\" ;"
  36.               "                label = \"右\" ;"
  37.               "            }"
  38.               "        }"
  39.               "    }"
  40.               "    :row{"
  41.               "      :toggle{"
  42.               "         key = \"tol\";"
  43.               "         label = \"整线\";"
  44.               "      }"
  45.               "    ok_cancel;}"
  46.               "    errtile;"
  47.               "}"
  48.              )
  49.   )
  50.   (setq        fn (dcl:make str) ;_写出临时 dcl
  51.         id (dcl:load fn "temp") ;_加载 DCL 文件
  52.   )
  53.   ;;set_tile
  54.   ;;设置 string 格式按钮默认值
  55.   (dcl:settile
  56.     '("wid" "dis" "tol")
  57.     (mapcar 'vl-princ-to-string
  58.             (list $globle_wid $globle_dis $globle_totle)
  59.     )
  60.   )
  61.   ;;初始化 radio_button 按钮组
  62.   (DCL:RadioInit '("left" "mid" "right") '$globle_mode)
  63.   ;;检查数字格式的 edit_box
  64.   (DCL:ChkNumIn '("wid" "dis"))
  65.   ;;action_tile
  66.   (DCL:RadioAction '("left" "mid" "right") '$globle_mode)
  67.   ;;数字格式 edit_box 转化为全局变量
  68.   (DCL:EditboxNumAction
  69.     '("wid" "dis")
  70.     '($globle_wid $globle_dis)
  71.   )
  72.   ;;记录 toggle 按钮状态,全局变量
  73.   (DCL:ToggleAction "tol" '$globle_totle)
  74.   ;;ok
  75.   (DCL:Accept) ;_定义 accept and cancel
  76.   ;;Main program
  77.   (if (= (dcl:start id fn) 1)
  78.     (princ "\nOk!")
  79.   )
  80.   (princ)
  81. )

DCL 控制部分,lib.vlx 已更新
  1. ;;=============================================================;
  2. ;;             Aciton_tile                                     ;
  3. ;;=============================================================;
  4. (defun DCL:ToggleAction        (keylst syml)
  5.   (if (eq (type syml) 'LIST)
  6.     (mapcar '(lambda (x y)
  7.                (action_tile
  8.                  x
  9.                  (strcat "(setq " (vl-symbol-name y) " $value)")
  10.                )
  11.              )
  12.             keylst
  13.             syml
  14.     )
  15.     (action_tile
  16.       keylst
  17.       (strcat "(setq " (vl-symbol-name syml) " $value)")
  18.     )
  19.   )
  20. )
  21. ;;数字格式Edit_box 控件Action事件
  22. (defun DCL:EditboxNumAction (keylst syml)
  23.   (mapcar '(lambda (x y)
  24.              (action_tile x
  25.                (strcat "(setq "
  26.                        (vl-symbol-name y)
  27.                        "(distof (get_tile \""
  28.                        x
  29.                        "\")))"
  30.                )
  31.              )
  32.            )
  33.           keylst
  34.           syml
  35.   )
  36. )
  37. ;;String 格式 edit_box Action
  38. (defun DCL:EditboxAction (keylst syml)
  39.   (apply 'strcat
  40.          (mapcar '(lambda (x y)
  41.                     (strcat "(setq "
  42.                             (vl-symbol-name y)
  43.                             "(get_tile \""
  44.                             x
  45.                             "\"))"
  46.                     )
  47.                   )
  48.                  keylst
  49.                  syml
  50.          )
  51.   )
  52. )
  53. ;; Radio 组 Action
  54. ;; keylst ---- radio key list
  55. ;; def    ---- key
  56. (defun Dcl:RadioAction (keylst sym / actions)
  57.   (foreach x keylst
  58.     (action_tile
  59.       x
  60.       (apply
  61.         'strcat
  62.         (append
  63.           (list (strcat "(setq " (vl-symbol-name sym) " $key" ")"))
  64.           (mapcar '(lambda (x)
  65.                      (strcat "(set_tile " "\"" x "\"" " \"0\")")
  66.                    )
  67.                   keylst
  68.           )
  69.           (list "(set_tile $key \"1\")")
  70.         )
  71.       )
  72.     )
  73.   )
  74. )
  75. ;;多组Radio Action
  76. (defun Dcl:mRadioAction        (lst)
  77.   (mapcar '(lambda (x) (apply 'Dcl:RadioAction x)) lst)
  78. )
  79. (defun Dcl:Accept ()
  80.   (action_tile "accept" "(done_dialog 1)")
  81.   (action_tile "cancel" "(done_dialog 0)")
  82.   t
  83. )

点评

Free-Lancer大师,完整的修改版程序呢?  详情 回复 发表于 2014-9-10 18:24

评分

参与人数 1D豆 +5 收起 理由
lucas3 + 5 技术引导讨论和指点奖!

查看全部评分

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-10 18:24:10 | 显示全部楼层
本帖最后由 lucas3 于 2014-9-10 18:27 编辑
Free-Lancer 发表于 2014-9-10 16:51
基本搞定 edit_box toggle radio_button 这几个 控件了,以后再用就方便了

DCL 控制部分,lib.vlx  ...

Free-Lancer大师,完整的修改版程序呢?感觉整的挺复杂的!到时还要加载两个库?

点评

只要一个 lib.vlx 即可,这个包含了 app.fas 先写个三点弧  详情 回复 发表于 2014-9-10 21:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 05:45 , Processed in 0.629519 second(s), 79 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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