找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lucas3

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

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-11 23:46:18 来自手机 | 显示全部楼层
lucas3 发表于 2014-9-11 23:21
我觉得对于封闭图形,比如圆,矩形等,选择了起始点与终止点后,还应该选择是哪一段,否侧会在相反的一侧 ...

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

使用道具 举报

发表于 2014-9-12 08:25:02 | 显示全部楼层
lucas3 发表于 2014-9-11 23:21
我觉得对于封闭图形,比如圆,矩形等,选择了起始点与终止点后,还应该选择是哪一段,否侧会在相反的一侧 ...


闭合线需要改造一下 XD::Geom:NumDiv 函数

只和取点方向有关好办,判断一下两点的参数大小,如果反向时将 Firstderiv 反转 180 度,并且点表 reverse 即可

点评

期待大师出招完善啊,拜托  详情 回复 发表于 2014-9-12 17:41
大师,我觉得多选几次是没关系的,只要一次能画准, 否则画过之后,不对,删除再画,再不对,再删除再画,这样反复几次就更悲剧呀。 我见有的程序关于方向是这样操作的:绘制后出现一个提示,方向正确吗?输入Y就结  详情 回复 发表于 2014-9-12 08:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-12 08:39:09 | 显示全部楼层
Free-Lancer 发表于 2014-9-12 08:25
闭合线需要改造一下 XD::Geom:NumDiv 函数

只和取点方向有关好办,判断一下两点的参数大小,如果反 ...

大师,我觉得多选几次是没关系的,只要一次能画准, 否则画过之后,不对,删除再画,再不对,再删除再画,这样反复几次就更悲剧呀。
我见有的程序关于方向是这样操作的:绘制后出现一个提示,方向正确吗?输入Y就结束,输入N 就反转到另一侧。

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-12 09:07:59 | 显示全部楼层
lucas3 发表于 2014-9-12 08:39
大师,我觉得多选几次是没关系的,只要一次能画准, 否则画过之后,不对,删除再画,再不对,再删除再画 ...

你这个相当于四个方向, 如果要再提示还要前面的6个选择方式干什么

点评

回长老,我没有要求6个选择方式啊,我的目的只有一个,1.如果选择的是圆弧在曲线中间,那么就需要选择圆弧的方向 2.如果选择的是圆弧在曲线侧边,那么就需要选择圆弧的方向,还需要选择是在曲线的哪一侧。  详情 回复 发表于 2014-9-12 09:30
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-12 09:30:04 | 显示全部楼层
st788796 发表于 2014-9-12 09:07
你这个相当于四个方向, 如果要再提示还要前面的6个选择方式干什么

回长老,我没有要求6个选择方式啊,我的目的只有一个,1.如果选择的是圆弧在曲线中间,那么就需要选择圆弧的方向

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

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-12 17:41:53 | 显示全部楼层
Free-Lancer 发表于 2014-9-12 08:25
闭合线需要改造一下 XD::Geom:NumDiv 函数

只和取点方向有关好办,判断一下两点的参数大小,如果反 ...

期待大师出招完善啊,拜托{:soso_e183:}

点评

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

使用道具 举报

发表于 2014-9-13 08:37:50 | 显示全部楼层
lucas3 发表于 2014-9-12 17:41
期待大师出招完善啊,拜托


先测试下,下载新的 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 (/             IsClosed             GetArcPoints    slbname slst
  10.              params  str     fn             id             e             sp             ep
  11.              lst     n             nl             pts     ptl     dist    cspam
  12.              cepam   spam    epam    tpam    e0
  13.             )
  14.   (defun IsClosed (e)
  15.     (or        (vlax-curve-isclosed e)
  16.         (equal (vlax-curve-getstartpoint e)
  17.                (vlax-curve-getendpoint e)
  18.                1e-3
  19.         )
  20.     )
  21.   )
  22.   ;;返回点对应 ARC 三点参数
  23.   (defun GetArcPoints (e p v / w2 w4 an an1 tp p1 p2)
  24.     (setq an  (angle '(0. 0. 0.) v)
  25.           an1 (+ an (/ pi 2))
  26.           w4  (/ $globle_wid 4.)
  27.           w2  (/ $globle_wid 2)
  28.     )
  29.     (cond
  30.       ((= $globle_mode "fup")
  31.        (setq p2        (polar p an1 $globle_wid)
  32.              p1        (polar (fy:midp p p2) an w4)
  33.        )
  34.        (list p p1 p2)
  35.       )
  36.       ((= $globle_mode "fmid")
  37.        (setq tp        (polar p (+ pi an) w4)
  38.              p1        (polar tp an1 w2)
  39.              p2        (polar tp (+ pi an1) w2)
  40.        )
  41.        (list p1 p p2)
  42.       )
  43.       ((= $globle_mode "fdn")
  44.        (setq p2        (polar p (+ an1 pi) $globle_wid)
  45.              p1        (polar (fy:midp p p2) an w4)
  46.        )
  47.        (list p p1 p2)
  48.       )
  49.       ((= $globle_mode "bup")
  50.        (setq p2        (polar p an1 $globle_wid)
  51.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  52.        )
  53.        (list p p1 p2)
  54.       )
  55.       ((= $globle_mode "bmid")
  56.        (setq tp        (polar p (+ pi an) w4)
  57.              p1        (polar tp an1 w2)
  58.              p2        (polar tp (+ an1 pi) w2)
  59.        )
  60.        (list p1 p p2)
  61.       )
  62.       ((= $globle_mode "bdn")
  63.        (setq p2        (polar p (+ pi an1) $globle_wid)
  64.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  65.        )
  66.        (list p p1 p2)
  67.       )
  68.       (t)
  69.     )
  70.   )
  71.   (if (and (setq e (car (entsel "\n拾取曲线: ")))
  72.            (wcmatch (cdr (assoc 0 (entget e)))
  73.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  74.            )
  75.       )
  76.     (progn
  77.       (setq slbname (findfile "sldlib.slb")
  78.             slst    (list
  79.                       (list "fup"
  80.                             (strcat slbname "(hanroufup)")
  81.                             "左上正向"
  82.                       )
  83.                       (list "fmid"
  84.                             (strcat slbname "(hanroufmid)")
  85.                             "居中正向"
  86.                       )
  87.                       (list "fdn"
  88.                             (strcat slbname "(hanroufdn)")
  89.                             "右下正向"
  90.                       )
  91.                       (list "bup"
  92.                             (strcat slbname "(hanroubup)")
  93.                             "左上反向"
  94.                       )
  95.                       (list "bmid"
  96.                             (strcat slbname "(hanroubmid)")
  97.                             "居中反向"
  98.                       )
  99.                       (list "bdn"
  100.                             (strcat slbname "(hanroubdn)")
  101.                             "右下反向"
  102.                       )
  103.                     )
  104.             params  '("wid" "dis")
  105.             str            '("temp:dialog {"
  106.                       "label = \"焊肉符号\" ;"
  107.                       ": column {"
  108.                       "  : row {"
  109.                       "    : image_button { height = 6; key = \"fup\";}"
  110.                       "    : image_button { height = 6; key = \"fmid\";}"
  111.                       "    : image_button { height = 6; key = \"fdn\";}"
  112.                       "    }"
  113.                       "  : row {"
  114.                       "    : image_button { height = 6; key = \"bup\";}"
  115.                       "    : image_button { height = 6; key = \"bmid\";}"
  116.                       "    : image_button { height = 6; key = \"bdn\";}"
  117.                       "    }"
  118.                       "  : boxed_row {"
  119.                       "    label = \"参数\";"
  120.                       "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  121.                       "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  122.                       "    : toggle {key = \"tol\"; label = \"整线\";}"
  123.                       "    }"
  124.                       "  ok_cancel;"
  125.                       "  errtile;"
  126.                       "  }"
  127.                       "}"
  128.                      )
  129.       )
  130.       (setq fn (dcl:make str) ;_写出临时 dcl
  131.             id (dcl:load fn "temp") ;_加载 DCL 文件
  132.       )
  133.       ;;set_tile  
  134.       (dcl:settile
  135.         '("wid" "dis" "tol")
  136.         (mapcar        'vl-princ-to-string
  137.                 (list $globle_wid $globle_dis $globle_totle)
  138.         )
  139.       ) ;_设置 string 格式按钮默认值
  140.       (set_tile $globle_mode "1")
  141.       (Dcl:SetError (last (assoc $globle_mode slst)))
  142.       (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  143.       (DCL:ImageButton 'slst '$globle_mode)
  144.       (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  145.       (DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态,全局变量
  146.       (DCL:Accept) ;_定义 accept and cancel
  147.       ;;Main program
  148.       (if (= (dcl:start id fn) 1) ;_ok
  149.         (progn
  150.           (if (= $globle_totle "1")
  151.             (progn
  152.               (setq cspam (vlax-curve-getstartparam e)
  153.                     cepam (vlax-curve-getendparam e)
  154.               )
  155.               (DrawDirct e)
  156.               (if (and (isclosed e)
  157.                        (setq tpam (half e))
  158.                   )
  159.                 (if (> tpam (* 0.5 cepam)) ;_逆向
  160.                   (setq        nl
  161.                          (XD::Geom:NumDiv cepam 0.0 (float $globle_dis))
  162.                   )
  163.                   (setq        nl
  164.                          (XD::Geom:NumDiv 0.0 cepam (float $globle_dis))
  165.                   ) ;_正向
  166.                 )
  167.               )
  168.             )
  169.             (if        (and (setq sp (getpoint "\nStart Point: "))
  170.                      (setq ep (getpoint sp "\nEnd Point: "))
  171.                 )
  172.               (progn
  173.                 (setq spam (vlax-curve-getparamatpoint
  174.                              e
  175.                              (vlax-curve-getclosestpointto e sp)
  176.                            )
  177.                       epam (vlax-curve-getparamatpoint
  178.                              e
  179.                              (vlax-curve-getclosestpointto e ep)
  180.                            )
  181.                 )
  182.                 (if (and (isclosed e)
  183.                          (progn
  184.                            (grdraw sp ep 1 -1)
  185.                            t
  186.                          )
  187.                          (setq e0 (entsel "\n选择标注方向边: "))
  188.                          (setq tpam
  189.                                 (vlax-curve-getparamatpoint
  190.                                   (car e0)
  191.                                   (apply 'vlax-curve-getclosestpointto e0)
  192.                                 )
  193.                          )
  194.                     )
  195.                   (if (or (< spam tpam epam) ;_正向
  196.                           (> spam tpam epam)
  197.                       ) ;_逆向
  198.                     (setq nl (XD::Geom:NumDiv
  199.                                (vlax-curve-getdistatparam e spam)
  200.                                (vlax-curve-getdistatparam e epam)
  201.                                (float $globle_dis)
  202.                              )
  203.                     )
  204.                     (setq nl
  205.                            (XD::Geom:NumDiv
  206.                              (vlax-curve-getdistatparam e spam)
  207.                              (vlax-curve-getdistatparam e epam)
  208.                              (list (vlax-curve-getdistatparam
  209.                                      e
  210.                                      (vlax-curve-getendparam e)
  211.                                    )
  212.                                    $globle_dis
  213.                              )
  214.                            )
  215.                     )
  216.                   )
  217.                   (setq
  218.                     nl
  219.                      (XD::Geom:NumDiv epam spam (float $globle_dis))
  220.                   )
  221.                 )
  222.               )
  223.             )
  224.           )
  225.           (fy:begin)
  226.           ;;绘制主程序
  227.           (if nl
  228.             (progn (setq tf  (> spam epam)
  229.                          pts (mapcar '(lambda (x / v)
  230.                                         (setq v        (vlax-curve-getfirstderiv
  231.                                                   e
  232.                                                   (vlax-curve-getparamatdist e x)
  233.                                                 )
  234.                                         )
  235.                                         (list (vlax-curve-getpointatdist e x)
  236.                                               (if tf
  237.                                                 (mapcar '- v)
  238.                                                 v
  239.                                               )
  240.                                         )
  241.                                       )
  242.                                      nl
  243.                              )
  244.                          ptl (mapcar '(lambda (x)
  245.                                         (apply 'GetArcPoints (cons e x))
  246.                                       )
  247.                                      pts
  248.                              )
  249.                    )
  250.                    (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  251.                            ptl
  252.                    )
  253.             )
  254.           )
  255.           (fy:end)
  256.         )
  257.       )
  258.     )
  259.   )
  260.   (princ)
  261. )

点评

谢谢大师继续跟进, 测试的结果如下: 1.直线能点对点布置,但整线布置出错, 2. 整线布置均出错 3. 不封闭的多段线(圆弧,椭圆弧,多段线)均出错,但样条曲线可以 4.对于封闭曲线的处理,选择  详情 回复 发表于 2014-9-13 10:01
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-13 10:01:02 | 显示全部楼层
Free-Lancer 发表于 2014-9-13 08:37
先测试下,下载新的 lib.vlx

谢谢大师继续跟进,{:soso_e179:}
测试的结果如下:
1.直线能点对点布置,但整线布置出错,
2. 整线布置均出错
3. 不封闭的多段线(圆弧,椭圆弧,多段线)均出错,但样条曲线可以
4.对于封闭曲线的处理,选择哪一段布置,这个做的比较好!
5.圆弧的方向和布置在曲线的哪一侧,真的很难弄清楚

点评

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

使用道具 举报

发表于 2014-9-13 10:56:56 | 显示全部楼层
lucas3 发表于 2014-9-13 10:01
谢谢大师继续跟进,
测试的结果如下:
1.直线能点对点布置,但整线布置出错,

整线加了方向提示和是否反向选择
  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 (/             IsClosed             GetArcPoints    slbname slst
  10.              params  str     fn             id             e             sp             ep
  11.              lst     n             nl             pts     ptl     dist    cspam
  12.              cepam   spam    epam    tpam    e0             key
  13.             )
  14.   (defun DrawDirct (e / sp v an p1 p2 p3 d1)
  15.     (setq sp (vlax-curve-getstartpoint e)
  16.           v  (vlax-curve-getfirstderiv e (vlax-curve-getstartparam e))
  17.           d  (distance '(0. 0. 0.) v)
  18.           d1 (if (equal        d
  19.                         (vlax-curve-getdistatparam
  20.                           e
  21.                           (vlax-curve-getendparam e)
  22.                         )
  23.                         1e-3
  24.                  )
  25.                (setq d1 (/ d 2.))
  26.                (setq d1 d)
  27.              )
  28.           an (angle '(0. 0. 0.) v)
  29.           p1 (polar sp an d1)
  30.           p2 (polar p1 (+ an (* 1.25 pi)) (/ (distance sp p1) 6.))
  31.           p3 (polar p1 (- an (* 1.25 pi)) (/ (distance sp p1) 6.))
  32.     )
  33.     (grvecs (list 1 sp p1 1 p1 p2 1 p1 p3))
  34.     t
  35.   )
  36.   (defun IsClosed (e)
  37.     (or        (vlax-curve-isclosed e)
  38.         (equal (vlax-curve-getstartpoint e)
  39.                (vlax-curve-getendpoint e)
  40.                1e-3
  41.         )
  42.     )
  43.   )
  44.   ;;返回点对应 ARC 三点参数
  45.   (defun GetArcPoints (e p v / w2 w4 an an1 tp p1 p2)
  46.     (setq an  (angle '(0. 0. 0.) v)
  47.           an1 (+ an (/ pi 2))
  48.           w4  (/ $globle_wid 4.)
  49.           w2  (/ $globle_wid 2)
  50.     )
  51.     (cond
  52.       ((= $globle_mode "fup")
  53.        (setq p2        (polar p an1 $globle_wid)
  54.              p1        (polar (fy:midp p p2) an w4)
  55.        )
  56.        (list p p1 p2)
  57.       )
  58.       ((= $globle_mode "fmid")
  59.        (setq tp        (polar p (+ pi an) w4)
  60.              p1        (polar tp an1 w2)
  61.              p2        (polar tp (+ pi an1) w2)
  62.        )
  63.        (list p1 p p2)
  64.       )
  65.       ((= $globle_mode "fdn")
  66.        (setq p2        (polar p (+ an1 pi) $globle_wid)
  67.              p1        (polar (fy:midp p p2) an w4)
  68.        )
  69.        (list p p1 p2)
  70.       )
  71.       ((= $globle_mode "bup")
  72.        (setq p2        (polar p an1 $globle_wid)
  73.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  74.        )
  75.        (list p p1 p2)
  76.       )
  77.       ((= $globle_mode "bmid")
  78.        (setq tp        (polar p (+ pi an) w4)
  79.              p1        (polar tp an1 w2)
  80.              p2        (polar tp (+ an1 pi) w2)
  81.        )
  82.        (list p1 p p2)
  83.       )
  84.       ((= $globle_mode "bdn")
  85.        (setq p2        (polar p (+ pi an1) $globle_wid)
  86.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  87.        )
  88.        (list p p1 p2)
  89.       )
  90.       (t)
  91.     )
  92.   )
  93.   (if (and (setq e (car (entsel "\n拾取曲线: ")))
  94.            (wcmatch (cdr (assoc 0 (entget e)))
  95.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  96.            )
  97.            (if (= $globle_totle "1")
  98.              (DrawDirct e)
  99.              t
  100.            )
  101.       )
  102.     (progn
  103.       (setq slbname (findfile "sldlib.slb")
  104.             slst    (list
  105.                       (list "fup"
  106.                             (strcat slbname "(hanroufup)")
  107.                             "左上正向"
  108.                       )
  109.                       (list "fmid"
  110.                             (strcat slbname "(hanroufmid)")
  111.                             "居中正向"
  112.                       )
  113.                       (list "fdn"
  114.                             (strcat slbname "(hanroufdn)")
  115.                             "右下正向"
  116.                       )
  117.                       (list "bup"
  118.                             (strcat slbname "(hanroubup)")
  119.                             "左上反向"
  120.                       )
  121.                       (list "bmid"
  122.                             (strcat slbname "(hanroubmid)")
  123.                             "居中反向"
  124.                       )
  125.                       (list "bdn"
  126.                             (strcat slbname "(hanroubdn)")
  127.                             "右下反向"
  128.                       )
  129.                     )
  130.             params  '("wid" "dis")
  131.             str            '("temp:dialog {"
  132.                       "label = \"焊肉符号\" ;"
  133.                       ": column {"
  134.                       "  : row {"
  135.                       "    : image_button { height = 6; key = \"fup\";}"
  136.                       "    : image_button { height = 6; key = \"fmid\";}"
  137.                       "    : image_button { height = 6; key = \"fdn\";}"
  138.                       "    }"
  139.                       "  : row {"
  140.                       "    : image_button { height = 6; key = \"bup\";}"
  141.                       "    : image_button { height = 6; key = \"bmid\";}"
  142.                       "    : image_button { height = 6; key = \"bdn\";}"
  143.                       "    }"
  144.                       "  : boxed_row {"
  145.                       "    label = \"参数\";"
  146.                       "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  147.                       "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  148.                       "    : toggle {key = \"tol\"; label = \"整线\";}"
  149.                       "    }"
  150.                       "  ok_cancel;"
  151.                       "  errtile;"
  152.                       "  }"
  153.                       "}"
  154.                      )
  155.       )
  156.       (setq fn (dcl:make str) ;_写出临时 dcl
  157.             id (dcl:load fn "temp") ;_加载 DCL 文件
  158.       )
  159.       ;;set_tile  
  160.       (dcl:settile
  161.         '("wid" "dis" "tol")
  162.         (mapcar        'vl-princ-to-string
  163.                 (list $globle_wid $globle_dis $globle_totle)
  164.         )
  165.       ) ;_设置 string 格式按钮默认值
  166.       (set_tile $globle_mode "1")
  167.       (Dcl:SetError (last (assoc $globle_mode slst)))
  168.       (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  169.       (DCL:ImageButton 'slst '$globle_mode)
  170.       (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  171.       ;;(DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态,全局变量
  172.       (action_tile
  173.         "tol"
  174.         "(setq $globle_totle $value) (DrawDirct e)"
  175.       )
  176.       (DCL:Accept) ;_定义 accept and cancel
  177.       ;;Main program
  178.       (if (= (dcl:start id fn) 1) ;_ok
  179.         (progn
  180.           (if (= $globle_totle "1")
  181.             (progn
  182.               (DrawDirct e)
  183.               (setq cspam (vlax-curve-getstartparam e)
  184.                     cepam (vlax-curve-getendparam e)
  185.               )
  186.               (initget "Y N")
  187.               (setq key (getkword "\n是否反向[Yes(Y)/No(N)]<N>: "))
  188.               (if (or (not key) (= key ""))
  189.                 (setq nl
  190.                        (XD::Geom:NumDiv
  191.                          (vlax-curve-getdistatparam e cepam)
  192.                          0.0
  193.                          (float $globle_dis)
  194.                        )
  195.                 )
  196.                 (setq nl
  197.                        (XD::Geom:NumDiv
  198.                          0.0
  199.                          (vlax-curve-getdistatparam e cepam)
  200.                          (float $globle_dis)
  201.                        )
  202.                 ) ;_正向
  203.               )
  204.             )
  205.             (if        (and (setq sp (getpoint "\nStart Point: "))
  206.                      (setq ep (getpoint sp "\nEnd Point: "))
  207.                 )
  208.               (progn
  209.                 (setq spam (vlax-curve-getparamatpoint
  210.                              e
  211.                              (vlax-curve-getclosestpointto e sp)
  212.                            )
  213.                       epam (vlax-curve-getparamatpoint
  214.                              e
  215.                              (vlax-curve-getclosestpointto e ep)
  216.                            )
  217.                 )
  218.                 (if (and (isclosed e)
  219.                          (progn
  220.                            (grdraw sp ep 1 -1)
  221.                            t
  222.                          )
  223.                          (setq e0 (entsel "\n选择标注方向边: "))
  224.                          (setq tpam
  225.                                 (vlax-curve-getparamatpoint
  226.                                   (car e0)
  227.                                   (apply 'vlax-curve-getclosestpointto e0)
  228.                                 )
  229.                          )
  230.                     )
  231.                   (if (or (< spam tpam epam) ;_正向
  232.                           (> spam tpam epam)
  233.                       ) ;_逆向
  234.                     (setq nl (XD::Geom:NumDiv
  235.                                (vlax-curve-getdistatparam e spam)
  236.                                (vlax-curve-getdistatparam e epam)
  237.                                (float $globle_dis)
  238.                              )
  239.                     )
  240.                     (setq nl
  241.                            (XD::Geom:NumDiv
  242.                              (vlax-curve-getdistatparam e spam)
  243.                              (vlax-curve-getdistatparam e epam)
  244.                              (list (vlax-curve-getdistatparam
  245.                                      e
  246.                                      (vlax-curve-getendparam e)
  247.                                    )
  248.                                    $globle_dis
  249.                              )
  250.                            )
  251.                     )
  252.                   )
  253.                   (setq
  254.                     nl
  255.                      (XD::Geom:NumDiv epam spam (float $globle_dis))
  256.                   )
  257.                 )
  258.               )
  259.             )
  260.           )
  261.           (fy:begin)
  262.           ;;绘制主程序
  263.           (if nl
  264.             (progn (setq tf  (> spam epam)
  265.                          pts (mapcar '(lambda (x / v)
  266.                                         (setq v        (vlax-curve-getfirstderiv
  267.                                                   e
  268.                                                   (vlax-curve-getparamatdist e x)
  269.                                                 )
  270.                                         )
  271.                                         (list (vlax-curve-getpointatdist e x)
  272.                                               (if tf
  273.                                                 (mapcar '- v)
  274.                                                 v
  275.                                               )
  276.                                         )
  277.                                       )
  278.                                      nl
  279.                              )
  280.                          ptl (mapcar '(lambda (x)
  281.                                         (apply 'GetArcPoints (cons e x))
  282.                                       )
  283.                                      pts
  284.                              )
  285.                    )
  286.                    (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  287.                            ptl
  288.                    )
  289.             )
  290.           )
  291.           (fy:end)
  292.         )
  293.       )
  294.     )
  295.   )
  296.   (princ)
  297. )

点评

大师,测试结果如下: 1.未封闭曲线的点对点用不了 2. 对于从右往左画的直线,选择是否反向,输Y或输N 都是一样的,不反向,而对于从左往右画的直线就可以反向 3.对于整线布置,选择的,圆,矩形,圆弧,椭圆弧,  详情 回复 发表于 2014-9-13 11:32
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-13 11:32:10 | 显示全部楼层
Free-Lancer 发表于 2014-9-13 10:56
整线加了方向提示和是否反向选择

大师,测试结果如下:
1.未封闭曲线的点对点用不了
2. 对于从右往左画的直线,选择是否反向,输Y或输N 都是一样的,不反向,而对于从左往右画的直线就可以反向
3.对于整线布置,选择的,圆,矩形,圆弧,椭圆弧,样条曲线,选择是否反向,都不能改变。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-13 11:55:49 来自手机 | 显示全部楼层
后面判断不对,spam epam只是对两点时有效,既然是dist前面构造 nl 时先排好,后面用 (> (car nl) (cadr nl))判断是否取反向切向量
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-13 12:55:12 来自手机 | 显示全部楼层
lucas3 发表于 2014-9-13 12:08
另外,从现在的方法来讲,不用6个slide来选择了,


6是和前进方向有关,整段的在选择时一般不知道方向,Lisp语句运行和屏幕显示往往不同步,比如grdraw运行中没有延迟的话,是不能及时反映到屏幕的

点评

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

使用道具 举报

发表于 2014-9-13 13:50:45 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-13 13:52 编辑
st788796 发表于 2014-9-13 12:55
6是和前进方向有关,整段的在选择时一般不知道方向,Lisp语句运行和屏幕显示往往不同步,比如grdraw运 ...


整理整理
  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 (/              GetDistAtPoint        DrawDirct          Curve:Length
  10.              IsClosed GetArcPoints        slbname         slst          params
  11.              str      fn       id        e         sp          ep
  12.              lst      n               nl        pts         ptl          dist
  13.              cedis    sdis     edis        tdis         e0          key
  14.              $dis
  15.             )
  16.   (defun GetDistAtPoint        (e p)
  17.     (vlax-curve-getdistatpoint
  18.       e
  19.       (vlax-curve-getclosestpointto e p)
  20.     )
  21.   )
  22.   (defun Curve:Length (e)
  23.     (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  24.   )
  25.   (defun DrawDirct (e / sp v an p1 p2 p3 d1 d)
  26.     (setq sp (vlax-curve-getstartpoint e)
  27.           v  (vlax-curve-getfirstderiv e (vlax-curve-getstartparam e))
  28.           d  (distance '(0. 0. 0.) v)
  29.           d1 (if (equal        d
  30.                         (vlax-curve-getdistatparam
  31.                           e
  32.                           (vlax-curve-getendparam e)
  33.                         )
  34.                         1e-3
  35.                  )
  36.                (setq d1 (/ d 2.))
  37.                (setq d1 d)
  38.              )
  39.           an (angle '(0. 0. 0.) v)
  40.           p1 (polar sp an d1)
  41.           p2 (polar p1 (+ an (* 1.25 pi)) (/ (distance sp p1) 6.))
  42.           p3 (polar p1 (- an (* 1.25 pi)) (/ (distance sp p1) 6.))
  43.     )
  44.     (grvecs (list 1 sp p1 1 p1 p2 1 p1 p3))
  45.     t
  46.   )
  47.   (defun IsClosed (e)
  48.     (or        (vlax-curve-isclosed e)
  49.         (equal (vlax-curve-getstartpoint e)
  50.                (vlax-curve-getendpoint e)
  51.                1e-3
  52.         )
  53.     )
  54.   )
  55.   (defun GetArcPoints (e p v / w2 w4 an an1 tp p1 p2)
  56.     (setq an  (angle '(0. 0. 0.) v)
  57.           an1 (+ an (/ pi 2))
  58.           w4  (/ $globle_wid 4.)
  59.           w2  (/ $globle_wid 2)
  60.     )
  61.     (cond
  62.       ((= $globle_mode "fup")
  63.        (setq p2        (polar p an1 $globle_wid)
  64.              p1        (polar (fy:midp p p2) an w4)
  65.        )
  66.        (list p p1 p2)
  67.       )
  68.       ((= $globle_mode "fmid")
  69.        (setq tp        (polar p (+ pi an) w4)
  70.              p1        (polar tp an1 w2)
  71.              p2        (polar tp (+ pi an1) w2)
  72.        )
  73.        (list p1 p p2)
  74.       )
  75.       ((= $globle_mode "fdn")
  76.        (setq p2        (polar p (+ an1 pi) $globle_wid)
  77.              p1        (polar (fy:midp p p2) an w4)
  78.        )
  79.        (list p p1 p2)
  80.       )
  81.       ((= $globle_mode "bup")
  82.        (setq p2        (polar p an1 $globle_wid)
  83.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  84.        )
  85.        (list p p1 p2)
  86.       )
  87.       ((= $globle_mode "bmid")
  88.        (setq tp        (polar p (+ pi an) w4)
  89.              p1        (polar tp an1 w2)
  90.              p2        (polar tp (+ an1 pi) w2)
  91.        )
  92.        (list p1 p p2)
  93.       )
  94.       ((= $globle_mode "bdn")
  95.        (setq p2        (polar p (+ pi an1) $globle_wid)
  96.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  97.        )
  98.        (list p p1 p2)
  99.       )
  100.       (t)
  101.     )
  102.   )
  103.   (if (and (setq e (car (entsel "\n拾取曲线: ")))
  104.            (wcmatch (cdr (assoc 0 (entget e)))
  105.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  106.            )
  107.       )
  108.     (progn
  109.       (setq slbname (findfile "sldlib.slb")
  110.             slst    (list
  111.                       (list "fup"
  112.                             (strcat slbname "(hanroufup)")
  113.                             "左上正向"
  114.                       )
  115.                       (list "fmid"
  116.                             (strcat slbname "(hanroufmid)")
  117.                             "居中正向"
  118.                       )
  119.                       (list "fdn"
  120.                             (strcat slbname "(hanroufdn)")
  121.                             "右下正向"
  122.                       )
  123.                       (list "bup"
  124.                             (strcat slbname "(hanroubup)")
  125.                             "左上反向"
  126.                       )
  127.                       (list "bmid"
  128.                             (strcat slbname "(hanroubmid)")
  129.                             "居中反向"
  130.                       )
  131.                       (list "bdn"
  132.                             (strcat slbname "(hanroubdn)")
  133.                             "右下反向"
  134.                       )
  135.                     )
  136.             params  '("wid" "dis")
  137.             str            '("temp:dialog {"
  138.                       "label = \"焊肉符号\" ;"
  139.                       ": column {"
  140.                       "  : row {"
  141.                       "    : image_button { height = 6; key = \"fup\";}"
  142.                       "    : image_button { height = 6; key = \"fmid\";}"
  143.                       "    : image_button { height = 6; key = \"fdn\";}"
  144.                       "    }"
  145.                       "  : row {"
  146.                       "    : image_button { height = 6; key = \"bup\";}"
  147.                       "    : image_button { height = 6; key = \"bmid\";}"
  148.                       "    : image_button { height = 6; key = \"bdn\";}"
  149.                       "    }"
  150.                       "  : boxed_row {"
  151.                       "    label = \"参数\";"
  152.                       "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  153.                       "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  154.                       "    : toggle {key = \"tol\"; label = \"整线\";}"
  155.                       "    }"
  156.                       "  ok_cancel;"
  157.                       "  errtile;"
  158.                       "  }"
  159.                       "}"
  160.                      )
  161.       )
  162.       (setq fn (dcl:make str)
  163.             id (dcl:load fn "temp")
  164.       )
  165.       (dcl:settile
  166.         '("wid" "dis" "tol")
  167.         (mapcar        'vl-princ-to-string
  168.                 (list $globle_wid $globle_dis $globle_totle)
  169.         )
  170.       )
  171.       (Dcl:SetError (last (assoc $globle_mode slst)))
  172.       (DCL:ChkNumIn params)
  173.       (DCL:ImageButton 'slst '$globle_mode)
  174.       (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  175.       (DCL:ToggleAction "tol" '$globle_totle)
  176.       (DCL:Accept)
  177.       (if (= (dcl:start id fn) 1)
  178.         (progn
  179.           (setq $dis (float $globle_dis))
  180.           (if (= $globle_totle "1")
  181.             (progn
  182.               (DrawDirct e)
  183.               (setq cedis (Curve:Length e))
  184.               (initget "Y N")
  185.               (setq key (getkword "\n是否反向[Yes(Y)/No(N)]<N>: "))
  186.               (if (= key "Y")
  187.                 (setq nl (XD::Geom:NumDiv cedis 0.0 $dis))
  188.                 (setq nl (XD::Geom:NumDiv 0.0 cedis $dis))
  189.               )
  190.             )
  191.             (if        (and (setq sp (getpoint "\nStart Point: "))
  192.                      (setq ep (getpoint sp "\nEnd Point: "))
  193.                 )
  194.               (progn
  195.                 (setq sdis  (GetDistAtPoint e sp)
  196.                       edis  (GetDistAtPoint e ep)
  197.                       cedis (Curve:Length e)
  198.                 )
  199.                 (if (and (isclosed e)
  200.                          (progn
  201.                            (DrawDirct e)
  202.                            (grdraw sp ep 1 -1)
  203.                            t
  204.                          )
  205.                          (setq e0 (entsel "\n选择标注方向边: "))
  206.                          (setq tdis (apply 'GetDistAtPoint e0))
  207.                     )
  208.                   (if (or (< sdis tdis edis)
  209.                           (> sdis tdis edis)
  210.                       )
  211.                     (setq nl (XD::Geom:NumDiv edis sdis $dis))
  212.                     (setq nl (XD::Geom:NumDiv edis sdis (list cedis $dis)))
  213.                   )
  214.                   (setq nl (XD::Geom:NumDiv edis sdis $dis))
  215.                 )
  216.               )
  217.             )
  218.           )
  219.           (fy:begin)
  220.           (if nl
  221.             (progn
  222.               (setq tf        (> (car nl) (cadr nl))
  223.                     pts        (mapcar        '(lambda (x / v)
  224.                                    (setq v (vlax-curve-getfirstderiv
  225.                                              e
  226.                                              (vlax-curve-getparamatdist e x)
  227.                                            )
  228.                                    )
  229.                                    (list (vlax-curve-getpointatdist e x)
  230.                                          (if tf
  231.                                            (mapcar '- v)
  232.                                            v
  233.                                          )
  234.                                    )
  235.                                  )
  236.                                 nl
  237.                         )
  238.                     ptl        (mapcar        '(lambda (x)
  239.                                    (apply 'GetArcPoints (cons e x))
  240.                                  )
  241.                                 pts
  242.                         )
  243.               )
  244.               (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  245.                       ptl
  246.               )
  247.             )
  248.           )
  249.           (fy:end)
  250.         )
  251.       )
  252.     )
  253.   )
  254.   (princ)
  255. )

点评

谢谢!辛苦了! 下面两个问题解决了 强烈请求 Free-Lancer大师考虑一下更换对话框,在曲线的哪一侧还是容易搞反, 比如,一条从右往左绘制的直线,选择最后一种模式“右下反向”,选择  详情 回复 发表于 2014-9-13 16:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3199个

财富等级: 富可敌国

 楼主| 发表于 2014-9-13 16:10:28 | 显示全部楼层
本帖最后由 lucas3 于 2014-9-13 16:11 编辑

谢谢!辛苦了!{:soso_e160:}
下面两个问题解决了{:soso_e179:}
  1. 2. 对于从右往左画的直线,选择是否反向,输Y或输N 都是一样的,不反向,而对于从左往右画的直线就可以反向
  2. 3.对于整线布置,选择的,圆,矩形,圆弧,椭圆弧,样条曲线,选择是否反向,都不能改变。
复制代码
强烈请求 Free-Lancer大师考虑一下更换对话框,在曲线的哪一侧还是容易搞反,
比如,一条从右往左绘制的直线,选择最后一种模式“右下反向”,选择整线布置,
选择“是否反向” ,选是,则圆弧布置上曲线上方,选否,则圆弧布置在曲线下方, 这是否合理呢? 幻灯片所示,无论怎么操作圆弧应在曲线下方才对,反向只是改圆弧方向,是吧。

真的,这个对话框太不友好!太容易搞晕的了,现在可以由起点到终点的方式来确定方向了,(整线布置有专门针对的选项选择)所以建议只用两个幻灯片,一个就是:
圆弧在曲上中间:这样,可以通过起点到终点的方式来确定方向(整线布置有专门针对的选项选择)
圆弧在曲线两侧:跟上条一样确定圆弧的方向,至于是在曲线哪一侧,可以鼠标指定
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 05:59 , Processed in 0.549339 second(s), 64 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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