找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lucas3

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

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-11 06:55:03 来自手机 | 显示全部楼层
Free-Lancer 发表于 2014-9-10 21:16
只要一个 lib.vlx 即可,这个包含了 app.fas
先写个三点弧


6个Radio_button+1个image_button,不如换成6个image_button更直观,也可以少点一次

点评

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

使用道具 举报

发表于 2014-9-11 08:17:58 | 显示全部楼层
st788796 发表于 2014-9-11 06:55
6个Radio_button+1个image_button,不如换成6个image_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 "bmid" "0")
  8. )
  9. (defun c:tt (/              GetArcPoints        cGetPoints          slbname
  10.              slst     params   str        fn         id          e
  11.              sp              ep       lst
  12.             )
  13.   ;;返回点对应 ARC 三点参数
  14.   (defun GetArcPoints (e p v / p v vc)
  15.     (setq vc (xdrx_vector_rotate v _pi2))
  16.     (cond
  17.       ((= $globle_mode "fup"))
  18.       ((= $globle_mode "fmid"))
  19.       ((= $globle_mode "fdn"))
  20.       ((= $globle_mode "bup"))
  21.       ((= $globle_mode "bmid"))
  22.       ((= $globle_mode "bdn"))
  23.       (t)
  24.     )
  25.   )
  26.   ;;返回每个间隔点及切线方向向量
  27.   (defun cGetPoints (e spam epam / d n)
  28.     (setq d (abs (xdrx_curve_getdistatparam e spam epam))
  29.           n (fix (/ d $globle_dis))
  30.     )
  31.     (mapcar
  32.       '(lambda (x)
  33.          (list (xdrx_curve_getpointatparam e x)
  34.                (xdrx_vector_normalize (xdrx_curve_getfirstderiv e x))
  35.          )
  36.        )
  37.       (XD::Geom:NumDiv
  38.         (xdrx_curve_getparamatpoint e ep)
  39.         (xdrx_curve_getparamatpoint e sp)
  40.         n
  41.       )
  42.     )
  43.   )
  44.   (setq        slbname        (findfile "sldlib.slb")
  45.         slst        '("fup" "fmid" "fdn" "bup" "bmid" "bdn")
  46.         params        '("wid" "dis")
  47.         str        '("temp:dialog {"
  48.                   "label = \"焊肉符号\" ;"
  49.                   ": column {"
  50.                   "  : row {"
  51.                   "    : image_button { height = 6; key = \"fup\";}"
  52.                   "    : image_button { height = 6; key = \"fmid\";}"
  53.                   "    : image_button { height = 6; key = \"fdn\";}"
  54.                   "    }"
  55.                   "  : row {"
  56.                   "    : image_button { height = 6; key = \"bup\";}"
  57.                   "    : image_button { height = 6; key = \"bmid\";}"
  58.                   "    : image_button { height = 6; key = \"bdn\";}"
  59.                   "    }"
  60.                   "  : boxed_row {"
  61.                   "    label = \"参数\";"
  62.                   "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  63.                   "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  64.                   "    : toggle {key = \"tol\"; label = \"整线\";}"
  65.                   "    }"
  66.                   "  ok_cancel;"
  67.                   "  errtile;"
  68.                   "  }"
  69.                   "}"
  70.                  )
  71.   )
  72.   (setq        fn (dcl:make str) ;_写出临时 dcl
  73.         id (dcl:load fn "temp") ;_加载 DCL 文件
  74.   )
  75.   ;;set_tile  
  76.   (dcl:settile
  77.     '("wid" "dis" "tol")
  78.     (mapcar 'vl-princ-to-string
  79.             (list $globle_wid $globle_dis $globle_totle)
  80.     )
  81.   ) ;_设置 string 格式按钮默认值
  82.   (mapcar '(lambda (key fn) (Dcl:SlideImage key fn 0))
  83.           slst
  84.           (list        (strcat slbname "(hanroufup)")
  85.                 (strcat slbname "(hanroufmid)")
  86.                 (strcat slbname "(hanroufdn)")
  87.                 (strcat slbname "(hanroubup)")
  88.                 (strcat slbname "(hanroubmid)")
  89.                 (strcat slbname "(hanroubdn)")
  90.           )
  91.   ) ;_设置 image_button
  92.   (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  93.   ;;action_tile
  94.   (mapcar '(lambda (x) (action_tile x "(setq $globle_mode $key)"))
  95.           slst
  96.   )
  97.   (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  98.   (DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态,全局变量
  99.   (DCL:Accept) ;_定义 accept and cancel
  100.   ;;Main program
  101.   (if (= (dcl:start id fn) 1) ;_ok
  102.     (progn
  103.       (setq e (car (xdrx_entsel
  104.                      "\n拾取曲线: "
  105.                      '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))
  106.                    )
  107.               )
  108.       )
  109.       (if (= $globle_totle "1")
  110.         (setq lst (list        e
  111.                         (xdrx_curve_getstartparam e)
  112.                         (xdrx_curve_getendparam e)
  113.                   )
  114.         )
  115.         (if (and (setq sp (getpoint "\nStart Point: "))
  116.                  (setq ep (getpoint "\nEnd Point: "))
  117.             )
  118.           (setq        lst (list e
  119.                           (xdrx_curve_getparamatpoint e sp)
  120.                           (xdrx_curve_getparamatpoint e ep)
  121.                     )
  122.           )
  123.         )
  124.       )
  125.     )
  126.   )
  127.   ;;绘制主程序
  128.   (if lst
  129.     (princ)
  130.   )
  131.   (princ)
  132. )
  133. ;;==============================================================
  134. (defun Arc:3pMake (p1 p2 p3 / r d an p pc sa se midp)
  135.   (defun midp (p1 p2)
  136.     (mapcar '(lambda (x y)
  137.                (* 0.5 (+ x y))
  138.              )
  139.             p1
  140.             p2
  141.     )
  142.   )
  143.   (setq        d    (car (trans (mapcar '- p2 p1) 0 (mapcar '- p3 p1)))
  144.         an   (angle p1 p3)
  145.         _pi2 (/ pi 2)
  146.         p11  (midp p1 p2)
  147.         p22  (midp p2 p3)
  148.   )
  149.   (if (setq pc (inters p11
  150.                        (polar p11 (+ (angle p1 p2) _pi2) 1.)
  151.                        p22
  152.                        (polar p22 (+ (angle p2 p3) _pi2) 1.)
  153.                        nil
  154.                )
  155.       )
  156.     (progn
  157.       (setq r  (distance p1 pc)
  158.             sa (angle pc p1)
  159.             se (angle pc p3)
  160.       )
  161.       (if (minusp d)
  162.         (if (and (< sa se) (< (angle pc p2) sa))
  163.           ;;(vlax-invoke (fy:acspace) 'AddArc pc r se (+ pi pi sa))
  164.           (xdrx_circle_make pc r se (+ pi pi sa))
  165.           ;;(vlax-invoke (fy:acspace) 'AddArc pc r sa se)
  166.           (xdrx_circle_make pc r sa se)
  167.         )
  168.         (if (< se (angle pc p2) sa) ;_顺时针
  169.           ;;(vlax-invoke (fy:acspace) 'AddArc pc r se sa)
  170.           (xdrx_circle_make pc r se sa)
  171.           ;;(vlax-invoke (fy:acspace) 'AddArc pc r se (+ pi pi sa))
  172.           (xdrx_circle_make pc r se (+ pi pi sa))
  173.         )
  174.       )
  175.     )
  176.   )
  177. )
20140911081419.jpg

点评

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 08:46:36 | 显示全部楼层
Free-Lancer 发表于 2014-9-11 08:17
建议不错,主体框架这样

看起来很cool ,期待最终版本

点评

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

使用道具 举报

发表于 2014-9-11 09:37:00 | 显示全部楼层
lucas3 发表于 2014-9-11 08:46
看起来很cool ,期待最终版本

加上 Slide  就是这样,主程序用 xdapi 函数写起来就简单了

20140911093225.jpg

sldlib.rar

3.22 KB, 下载次数: 2, 下载积分: D豆 -1 , 活跃度 1

点评

Free-Lancer大师,确实漂亮,谢谢! 不要用API函数写啊,, 用您的app函数也行啊 不然要加载的就太多了,本来的意愿 是想在q3_2006 前辈的程序上稍做修改,  详情 回复 发表于 2014-9-11 09:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 09:54:04 | 显示全部楼层
Free-Lancer 发表于 2014-9-11 09:37
加上 Slide  就是这样,主程序用 xdapi 函数写起来就简单了

Free-Lancer大师,确实漂亮,谢谢!
不要用API函数写啊,{:soso_e109:}, 用您的app函数也行啊
不然要加载的就太多了,本来的意愿 是想在q3_2006 前辈的程序上稍做修改,{:soso_e109:}

点评

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

使用道具 举报

发表于 2014-9-11 11:19:12 | 显示全部楼层
lucas3 发表于 2014-9-11 09:54
Free-Lancer大师,确实漂亮,谢谢!
不要用API函数写啊,, 用您的app函数也行啊
不然要 ...


那就先凑合吧
  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
  10.              ep          lst  dv   l         an   p1   p2        aa   a          an   d
  11.              d1          d2   e    f         i    odlst        p1   p2          pr   q
  12.              w          x    y
  13.             )

  14.   (setq        slbname        (findfile "sldlib.slb")
  15.         slst        '("fup" "fmid" "fdn" "bup" "bmid" "bdn")
  16.         params        '("wid" "dis")
  17.         str        '("temp:dialog {"
  18.                   "label = \"焊肉符号\" ;"
  19.                   ": column {"
  20.                   "  : row {"
  21.                   "    : image_button { height = 6; key = \"fup\";}"
  22.                   "    : image_button { height = 6; key = \"fmid\";}"
  23.                   "    : image_button { height = 6; key = \"fdn\";}"
  24.                   "    }"
  25.                   "  : row {"
  26.                   "    : image_button { height = 6; key = \"bup\";}"
  27.                   "    : image_button { height = 6; key = \"bmid\";}"
  28.                   "    : image_button { height = 6; key = \"bdn\";}"
  29.                   "    }"
  30.                   "  : boxed_row {"
  31.                   "    label = \"参数\";"
  32.                   "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  33.                   "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  34.                   "    : toggle {key = \"tol\"; label = \"整线\";}"
  35.                   "    }"
  36.                   "  ok_cancel;"
  37.                   "  errtile;"
  38.                   "  }"
  39.                   "}"
  40.                  )
  41.   )
  42.   (setq        fn (dcl:make str) ;_写出临时 dcl
  43.         id (dcl:load fn "temp") ;_加载 DCL 文件
  44.   )
  45.   ;;set_tile  
  46.   (dcl:settile
  47.     '("wid" "dis" "tol" )
  48.     (mapcar 'vl-princ-to-string
  49.             (list $globle_wid $globle_dis $globle_totle)
  50.     )
  51.   ) ;_设置 string 格式按钮默认值
  52.   (set_tile $globle_mode "1")
  53.   (mapcar '(lambda (key fn) (Dcl:SlideImage key fn 0))
  54.           slst
  55.           (list        (strcat slbname "(hanroufup)")
  56.                 (strcat slbname "(hanroufmid)")
  57.                 (strcat slbname "(hanroufdn)")
  58.                 (strcat slbname "(hanroubup)")
  59.                 (strcat slbname "(hanroubmid)")
  60.                 (strcat slbname "(hanroubdn)")
  61.           )
  62.   ) ;_设置 image_button
  63.   (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  64.   ;;action_tile
  65.   (mapcar '(lambda (x) (action_tile x "(setq $globle_mode $key)"))
  66.           slst
  67.   )
  68.   (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  69.   (DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态,全局变量
  70.   (DCL:Accept) ;_定义 accept and cancel
  71.   ;;Main program
  72.   (if (and (= (dcl:start id fn) 1) ;_ok
  73.            (setq e (car        (entsel
  74.                           "\n拾取曲线: "
  75.                           ;;'((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))
  76.                         )
  77.                    )
  78.            )
  79.       )
  80.     (progn
  81.       ;;(setq dv (* (/ 5. 16.) $globle_wid))
  82.       (if (= $globle_totle "1")
  83.         (setq l        (list e
  84.                       (vlax-curve-getstartparam e)
  85.                       (vlax-curve-getendparam e)
  86.                 )
  87.         )
  88.         (if (and (setq sp (getpoint "\nStart Point: "))
  89.                  (setq ep (getpoint "\nEnd Point: "))
  90.             )
  91.           (setq        l (cons        e
  92.                         (vl-sort (vlax-curve-getparamatpoint
  93.                                    e
  94.                                    (vlax-curve-getclosestpointto e sp)
  95.                                  )
  96.                                  (vlax-curve-getparamatpoint
  97.                                    e
  98.                                    (vlax-curve-getclosestpointto e ep)
  99.                                  )
  100.                                  '<
  101.                         )
  102.                   )
  103.           )
  104.         )
  105.       )
  106.     )
  107.   )
  108.   ;;绘制主程序
  109.   (if l
  110.     (progn
  111.       (setq odlst (mapcar 'getvar '("cmdecho" "osmode" "peditaccept")))
  112.       (mapcar 'setvar '("cmdecho" "osmode") '(0 544))
  113.       (if (member $globle_mode '("bup" "bmid" "bdn"))
  114.         (setq w (- $globle_wid))
  115.         (setq w $globle_wid)
  116.       )
  117.       (setq d  $globle_dis
  118.             d1 (vlax-curve-getDistAtparam (car l) (cadr l))
  119.             d2 (vlax-curve-getDistAtparam (car l) (last l))
  120.             a  (car l)
  121.             i  -1
  122.             l  nil
  123.       )
  124.       (while (< (setq pr (+ (* (setq i (1+ i)) d) d1)) d2)
  125.         (setq l (cons (vlax-curve-getPointAtparam a pr) l))
  126.       )
  127.       (setq l (reverse l))
  128.       (setvar "osmode" 0)
  129.       (cond
  130.         ((member $globle_mode '("fup" "bup")) (setq f 1))
  131.         ((member $globle_mode '("fmid" "bmid")) (setq f 2))
  132.         (t (setq f 3))
  133.       )
  134.       (mapcar '(lambda (x)
  135.                  (setq an (HH:PtFirstAngle a x)
  136.                        q  (mat:rotation x an)
  137.                        e  (mkarc x w f)
  138.                  )
  139.                  (vla-transformby
  140.                    (vlax-ename->vla-object e)
  141.                    (vlax-tmatrix q)
  142.                  )
  143.                )
  144.               l
  145.       )
  146.       (mapcar 'setvar '("cmdecho" "osmode") odlst)
  147.     )
  148.   )
  149.   (princ)
  150. )
  151. ;;==============================================================
  152. (defun mkarc (p w f / p1 p2)
  153.   (cond
  154.     ((= f 3)
  155.      (setq p1 (mapcar '- p (list (* -0.25 w) (* 0.5 (abs w))))
  156.            p2 (mapcar '- p (list 0 (abs w)))
  157.      )
  158.      (vl-cmdf "arc" p p1 p2)
  159.     )
  160.     ((= f 2)
  161.      (setq p1 (mapcar '+ p (list (* 0.25 w) (* -0.5 (abs w))))
  162.            p2 (mapcar '+ p (list (* 0.25 w) (* 0.5 (abs w))))
  163.      )
  164.      (vl-cmdf "arc" p1 p p2)
  165.     )
  166.     ((= f 1)
  167.      (setq p1 (mapcar '+ p (list (* 0.25 w) (* 0.5 (abs w))))
  168.            p2 (mapcar '+ p (list 0 (abs w)))
  169.      )
  170.      (vl-cmdf "arc" p p1 p2)
  171.     )
  172.   )
  173.   (entlast)
  174. )
  175. (defun mat:rotation (cen ang / c s x y)
  176.   (setq        c (cos ang)
  177.         s (sin ang)
  178.   )
  179.   (setq        x (car cen)
  180.         y (cadr cen)
  181.   )
  182.   (list
  183.     (list c (- s) 0. (- x (- (* c x) (* s y))))
  184.     (list s c 0. (- y (+ (* s x) (* c y))))
  185.     '(0. 0. 1. 0.)
  186.     '(0. 0. 0. 1.)
  187.   )
  188. )
  189. (defun HH:PtFirstAngle (obj pt)
  190.   (setq param (vlax-curve-getParamAtPoint obj pt))
  191.   (angle pt
  192.          (mapcar '+ pt (vlax-curve-getFirstDeriv obj param))
  193.   )
  194. )

点评

谢谢!可是还有好多问题,起点终点绘制提示,错误: 参数太多 ,整线布置时,多段线,矩形等都不成功!还是等最终版吧  详情 回复 发表于 2014-9-11 11:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 11:51:48 | 显示全部楼层

谢谢!可是还有好多问题,起点终点绘制提示,错误: 参数太多 ,整线布置时,多段线,矩形等都不成功!还是等最终版吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-11 12:52:31 来自手机 | 显示全部楼层
lucas3 发表于 2014-9-11 11:51
谢谢!可是还有好多问题,起点终点绘制提示,错误: 参数太多 ,整线布置时,多段线,矩形等都不成功!还 ...

源程序可以吗?

点评

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 13:36:41 | 显示全部楼层

回长老,源程序可以的呀,源程序只是不能选择整线布置

点评

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 19:19:22 | 显示全部楼层
本帖最后由 lucas3 于 2014-9-11 20:26 编辑
Free-Lancer 发表于 2014-9-9 09:12
End , lib.vlx 已更新

谢谢Free-Lancer大师,晓东的活雷锋!非常感谢!很有用的样例程序!有一点建议!就是幻灯片选中与被选中不好查看,能否选中后背景变为白色?之前有见过这样的示例

还有一个问题,绕死我了! 我觉得应该用从起始点到--->终点 的方向来决定弧的方向上图:以第三种方式为例
01.png
起始点在左,终点在右,向右旋转后,就相当起点在上,终点在下
02.png

或者继续向右旋转,直到,起点在下,终点在上
03.png

测试:两条线,分别以起始点在上和起始点在下测试,但结果都是一样,跟左侧的对比不同
1.gif

另外,拿一条直线跟多段线测试,起点都在上方
测试结果又不一样!
2.gif

对过上方的测试发现,果真绕晕了!有时真不知选择哪一种方式来绘制了
有一个想法,不需要6个幻灯片,只需要2个,就像我发的主题里的那个一样,一个是弧在线侧边,一个是在中间,
如果绘制时选择的是在侧边,那么选择起点和终点后(或整线),可以预览,可以通过一个按键来改变弧的方向,另一个按键来改变在曲线的一侧还是另一侧,满意后,空格或右键结束! 如果选择的是弧在曲线的中间,就简单点,那么绘制后,只需一个按键来改变弧的方向,满意后结束。



点评

DCL 部分都是源码,自己加上几句就可以将当前的背景变白 第二个问题和曲线方向有关,用 reverse 转向一下就知道了  详情 回复 发表于 2014-9-11 20:41

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 出题引导交流奖!

查看全部评分

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-11 20:08:04 | 显示全部楼层
在指定两点的时候可以不考虑线的方向,只和拾取方向有关
整线布置时可以提示一个方向

点评

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

使用道具 举报

发表于 2014-9-11 20:41:00 | 显示全部楼层
lucas3 发表于 2014-9-11 19:19
谢谢Free-Lancer大师,晓东的活雷锋!非常感谢!很有用的样例程序!有一点建议!就是幻灯片选中与被选中 ...


DCL 部分都是源码,自己加上几句就可以将当前的背景变白
第二个问题和曲线方向有关,用 reverse 转向一下就知道了
  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 (/             ImageAction     GetArcPoints    slbname slst
  10.              params  str     fn             id             e             sp             ep
  11.              lst     n             nl             pts     ptl     dist    ml
  12.             )
  13.   ;;返回点对应 ARC 三点参数
  14.   (defun GetArcPoints (e p v / w2 w4 an an1 tp p1 p2)
  15.     (setq an  (angle '(0. 0. 0.) v)
  16.           an1 (+ an (/ pi 2))
  17.           w4  (/ $globle_wid 4.)
  18.           w2  (/ $globle_wid 2)
  19.     )
  20.     (cond
  21.       ((= $globle_mode "fup")
  22.        (setq p2        (polar p an1 $globle_wid)
  23.              p1        (polar (fy:midp p p2) an w4)
  24.        )
  25.        (list p p1 p2)
  26.       )
  27.       ((= $globle_mode "fmid")
  28.        (setq tp        (polar p (+ pi an) w4)
  29.              p1        (polar tp an1 w2)
  30.              p2        (polar tp (+ pi an1) w2)
  31.        )
  32.        (list p1 p p2)
  33.       )
  34.       ((= $globle_mode "fdn")
  35.        (setq p2        (polar p (+ an1 pi) $globle_wid)
  36.              p1        (polar (fy:midp p p2) an w4)
  37.        )
  38.        (list p p1 p2)
  39.       )
  40.       ((= $globle_mode "bup")
  41.        (setq p2        (polar p an1 $globle_wid)
  42.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  43.        )
  44.        (list p p1 p2)
  45.       )
  46.       ((= $globle_mode "bmid")
  47.        (setq tp        (polar p (+ pi an) w4)
  48.              p1        (polar tp an1 w2)
  49.              p2        (polar tp (+ an1 pi) w2)
  50.        )
  51.        (list p1 p p2)
  52.       )
  53.       ((= $globle_mode "bdn")
  54.        (setq p2        (polar p (+ pi an1) $globle_wid)
  55.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  56.        )
  57.        (list p p1 p2)
  58.       )
  59.       (t)
  60.     )
  61.   )
  62.   (defun ImageAction ()
  63.     (apply 'Dcl:SlideImage
  64.            (append (assoc $globle_mode slst) '(0))
  65.     )
  66.     (setq $globle_mode $key)
  67.     (apply 'dcl:slideimage (append (assoc $key slst) '(7)))
  68.     (Dcl:SetError (cadr (assoc $key ml)))
  69.   )
  70.   (setq        slbname        (findfile "sldlib.slb")
  71.         ml        '(("fup" "左上正向")
  72.                   ("fmid" "居中正向")
  73.                   ("fdn" "右下正向")
  74.                   ("bup" "左上反向")
  75.                   ("bmid" "居中反向")
  76.                   ("bdn" "右下反向")
  77.                  )
  78.         slst        (list
  79.                   (list "fup" (strcat slbname "(hanroufup)"))
  80.                   (list "fmid" (strcat slbname "(hanroufmid)"))
  81.                   (list "fdn" (strcat slbname "(hanroufdn)"))
  82.                   (list "bup" (strcat slbname "(hanroubup)"))
  83.                   (list "bmid" (strcat slbname "(hanroubmid)"))
  84.                   (list "bdn" (strcat slbname "(hanroubdn)"))
  85.                 )
  86.         params        '("wid" "dis")
  87.         str        '("temp:dialog {"
  88.                   "label = \"焊肉符号\" ;"
  89.                   ": column {"
  90.                   "  : row {"
  91.                   "    : image_button { height = 6; key = \"fup\";}"
  92.                   "    : image_button { height = 6; key = \"fmid\";}"
  93.                   "    : image_button { height = 6; key = \"fdn\";}"
  94.                   "    }"
  95.                   "  : row {"
  96.                   "    : image_button { height = 6; key = \"bup\";}"
  97.                   "    : image_button { height = 6; key = \"bmid\";}"
  98.                   "    : image_button { height = 6; key = \"bdn\";}"
  99.                   "    }"
  100.                   "  : boxed_row {"
  101.                   "    label = \"参数\";"
  102.                   "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  103.                   "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  104.                   "    : toggle {key = \"tol\"; label = \"整线\";}"
  105.                   "    }"
  106.                   "  ok_cancel;"
  107.                   "  errtile;"
  108.                   "  }"
  109.                   "}"
  110.                  )
  111.   )
  112.   (setq        fn (dcl:make str) ;_写出临时 dcl
  113.         id (dcl:load fn "temp") ;_加载 DCL 文件
  114.   )
  115.   ;;set_tile  
  116.   (dcl:settile
  117.     '("wid" "dis" "tol")
  118.     (mapcar 'vl-princ-to-string
  119.             (list $globle_wid $globle_dis $globle_totle)
  120.     )
  121.   ) ;_设置 string 格式按钮默认值
  122.   (set_tile $globle_mode "1")

  123.   (Dcl:SetError (cadr (assoc $globle_mode ml)))
  124.   (mapcar '(lambda (x)
  125.              (if (= (car x) $globle_mode)
  126.                (apply 'Dcl:SlideImage (append x '(7)))
  127.                (apply 'Dcl:SlideImage (append x '(0)))
  128.              )
  129.            )
  130.           slst
  131.   ) ;_设置 image_button
  132.   (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  133.   ;;action_tile
  134.   (mapcar '(lambda (x) (action_tile x "(ImageAction)"))
  135.           (mapcar 'car slst)
  136.   )
  137.   (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  138.   (DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态,全局变量
  139.   (DCL:Accept) ;_定义 accept and cancel
  140.   ;;Main program
  141.   (if (and (= (dcl:start id fn) 1) ;_ok
  142.            (setq e (car (entsel "\n拾取曲线: ")))
  143.            (wcmatch (cdr (assoc 0 (entget e)))
  144.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  145.            )
  146.       )
  147.     (progn
  148.       (if (= $globle_totle "1")
  149.         (setq lst (list        e
  150.                         (vlax-curve-getstartparam e)
  151.                         (vlax-curve-getendparam e)
  152.                   )
  153.         )
  154.         (if (and (setq sp (getpoint "\nStart Point: "))
  155.                  (setq ep (getpoint sp "\nEnd Point: "))
  156.             )
  157.           (setq        lst
  158.                  (cons e
  159.                        (vl-sort        (list (vlax-curve-getparamatpoint
  160.                                         e
  161.                                         (vlax-curve-getclosestpointto e sp)
  162.                                       )
  163.                                       (vlax-curve-getparamatpoint
  164.                                         e
  165.                                         (vlax-curve-getclosestpointto e ep)
  166.                                       )
  167.                                 )
  168.                                 '<
  169.                        )
  170.                  )
  171.           )
  172.         )
  173.       )
  174.     )
  175.   )
  176.   ;;绘制主程序
  177.   (if lst
  178.     (progn
  179.       (fy:begin)
  180.       (setq dist (fix (- (vlax-curve-getdistatparam e (last lst))
  181.                          (vlax-curve-getdistatparam e (cadr lst))
  182.                       )
  183.                  )
  184.             n         (fix (/ dist $globle_dis))
  185.             nl         (XD::Geom:NumDiv (last lst) (cadr lst) n)
  186.             pts         (mapcar '(lambda (x)
  187.                             (list (vlax-curve-getpointatparam e x)
  188.                                   (vlax-curve-getfirstderiv e x)
  189.                             )
  190.                           )
  191.                          nl
  192.                  )
  193.             ptl         (mapcar '(lambda (x)
  194.                             (apply 'GetArcPoints (cons e x))
  195.                           )
  196.                          pts
  197.                  )
  198.       )
  199.       (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  200.               ptl
  201.       )
  202.       (fy:end)
  203.     )
  204.   )
  205.   (princ)
  206. )

点评

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 20:55:47 | 显示全部楼层
Free-Lancer 发表于 2014-9-11 20:41
DCL 部分都是源码,自己加上几句就可以将当前的背景变白
第二个问题和曲线方向有关,用 reverse 转向 ...

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-11 21:28:35 来自手机 | 显示全部楼层
在不改变曲线方向情况下,两点间可以由拾取先后确定方向,但整线时仍旧需要两点确定方向

点评

我觉得对于封闭图形,比如圆,矩形等,选择了起始点与终止点后,还应该选择是哪一段,否侧会在相反的一侧绘制 [attachimg]9843[/attachimg]  详情 回复 发表于 2014-9-11 23:21
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-11 23:21:33 | 显示全部楼层
st788796 发表于 2014-9-11 21:28
在不改变曲线方向情况下,两点间可以由拾取先后确定方向,但整线时仍旧需要两点确定方向

我觉得对于封闭图形,比如圆,矩形等,选择了起始点与终止点后,还应该选择是哪一段,否侧会在相反的一侧绘制
tt.png

点评

闭合线需要改造一下 XD::Geom:NumDiv 函数 只和取点方向有关好办,判断一下两点的参数大小,如果反向时将 Firstderiv 反转 180 度,并且点表 reverse 即可  详情 回复 发表于 2014-9-12 08:25
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 05:58 , Processed in 0.476727 second(s), 72 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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