找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: lucas3

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

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-13 16:23:49 来自手机 | 显示全部楼层
lucas3 发表于 2014-9-13 16:10
谢谢!辛苦了!
下面两个问题解决了
强烈请求 Free-Lancer大师考虑一下更换 ...

对话框可仅保留正反、及居中, 左右在程序中点取

点评

正反不好区分吧,像圆这种封闭图形,能不能在程序中做到就像选择方向那样根据箭头选择是哪一侧?  详情 回复 发表于 2014-9-13 16:29
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-13 16:29:36 | 显示全部楼层
st788796 发表于 2014-9-13 16:23
对话框可仅保留正反、及居中, 左右在程序中点取

正反不好区分吧,像圆这种封闭图形,能不能在程序中做到就像选择方向那样根据箭头选择是哪一侧?

点评

正反指圆弧按前进方向是向前凸还是向后凹,既然不好理解左右,那就简化成这样  详情 回复 发表于 2014-9-13 17:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-13 17:19:24 | 显示全部楼层
lucas3 发表于 2014-9-13 16:29
正反不好区分吧,像圆这种封闭图形,能不能在程序中做到就像选择方向那样根据箭头选择是哪一侧?

正反指圆弧按前进方向是向前凸还是向后凹,既然不好理解左右,那就简化成这样
20140913171230.jpg

点评

Free-Lancer 大师,圆弧的方向是靠起点至终点的决点的吗?具体怎么好弄,还是以您的为准,只要好分辨,一次都能够画准。  详情 回复 发表于 2014-9-13 20:11
圆弧还是用 逆时针 还是 顺时针 方便。  详情 回复 发表于 2014-9-13 17:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2014-9-13 17:38:04 | 显示全部楼层
Free-Lancer 发表于 2014-9-13 17:19
正反指圆弧按前进方向是向前凸还是向后凹,既然不好理解左右,那就简化成这样

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-13 20:11:43 | 显示全部楼层
Free-Lancer 发表于 2014-9-13 17:19
正反指圆弧按前进方向是向前凸还是向后凹,既然不好理解左右,那就简化成这样

Free-Lancer 大师,圆弧的方向是靠起点至终点的决点的吗?具体怎么好弄,还是以您的为准,只要好分辨,一次都能够画准。

点评

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

使用道具 举报

发表于 2014-9-14 11:32:53 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-14 11:35 编辑
lucas3 发表于 2014-9-13 20:11
Free-Lancer 大师,圆弧的方向是靠起点至终点的决点的吗?具体怎么好弄,还是以您的为准,只要好分辨,一 ...


大体这样,还有几处关系没有搞对, lib.vlx 已更新
  1. ;; fron --- 2 back --- 4
  2. ;; left --- 8 mid  --- 16  right 32
  3. (mapcar        '(lambda (x y)
  4.            (if (not (eval x))
  5.              (set x y)
  6.            )
  7.          )
  8.         '($globle_wid $globle_dis $globle_mode $globle_totle)
  9.         '(2.0 1.0 "bmid" "0" "0")
  10. )
  11. (defun c:tt (/             IsClosed             GetArcPoints    slbname slst
  12.              params  str     fn             id             e             sp             ep
  13.              lst     n             nl             pts     ptl     dist    cedis
  14.              csdis   sdis    edis    tdis    tp             key     mod
  15.              $dis    result
  16.             )
  17.   (defun pnt:drawcrosshair (p col /)
  18.     (grvecs
  19.       (list col
  20.             (polar p (/ pi 4) (* (getvar "viewsize") 0.05))
  21.             (polar p (* pi 1.25) (* (getvar "viewsize") 0.05))
  22.             col
  23.             (polar p (* pi 0.75) (* (getvar "viewsize") 0.05))
  24.             (polar p (* pi -0.25) (* (getvar "viewsize") 0.05))
  25.       )
  26.     )
  27.     t
  28.   )
  29.   (defun GetDrawSide (bp v / bp)
  30.     (if        (setq p (getpoint bp "\n在绘制一侧点击: "))
  31.       (car (trans (mapcar '- p bp) 0 v))
  32.     )
  33.   )
  34.   (defun GetDistAtPoint        (e p)
  35.     (vlax-curve-getdistatpoint
  36.       e
  37.       (vlax-curve-getclosestpointto e p)
  38.     )
  39.   )
  40.   (defun Curve:Length (e)
  41.     (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  42.   )
  43.   (defun DrawDirct (e p tf / v an p1 p2 p3 d1)
  44.     (setq v (vlax-curve-getfirstderiv
  45.               e
  46.               (vlax-curve-getparamatpoint
  47.                 e
  48.                 (vlax-curve-getclosestpointto e p)
  49.               )
  50.             )
  51.     )
  52.     (if        tf
  53.       t
  54.       (setq v (mapcar '- v))
  55.     )
  56.     (setq an (angle '(0. 0. 0.) v)
  57.           p1 (polar p an (* 0.25 (getvar "viewsize")))
  58.           p2 (polar p1 (+ an (* 1.25 pi)) (/ (distance p p1) 6.))
  59.           p3 (polar p1 (- an (* 1.25 pi)) (/ (distance p p1) 6.))
  60.     )
  61.     (grvecs (list 1 sp p1 1 p1 p2 1 p1 p3))
  62.     t
  63.   )
  64.   (defun IsClosed (e)
  65.     (or        (vlax-curve-isclosed e)
  66.         (equal (vlax-curve-getstartpoint e)
  67.                (vlax-curve-getendpoint e)
  68.                1e-3
  69.         )
  70.     )
  71.   )
  72.   ;;返回点对应 ARC 三点参数
  73.   (defun GetArcPoints (e p v / w2 w4 an an1 tp p1 p2)
  74.     (setq an  (angle '(0. 0. 0.) v)
  75.           an1 (+ an (/ pi 2))
  76.           w4  (/ $globle_wid 4.)
  77.           w2  (/ $globle_wid 2)
  78.     )
  79.     (cond
  80.       ((= mod 10) ;_ 2 + 8
  81.        (setq p2        (polar p an1 $globle_wid)
  82.              p1        (polar (fy:midp p p2) an w4)
  83.        )
  84.        (list p p1 p2)
  85.       )
  86.       ((= mod 18) ;_2 + 16
  87.        (setq tp        (polar p (+ pi an) w4)
  88.              p2        (polar tp an1 w2)
  89.              p1        (polar tp (+ pi an1) w2)
  90.        )
  91.        (list p1 p p2)
  92.       )
  93.       ((= mod 34) ;_ 2 + 32
  94.        (setq p2        (polar p an1 $globle_wid)
  95.              p1        (polar (fy:midp p p2) an w4)
  96.        )
  97.        (list p p1 p2)
  98.       )
  99.       ((= mod 12) ;_ 4 + 8
  100.        (setq p2        (polar p an1 $globle_wid)
  101.              p1        (polar (fy:midp p p2) (+ pi an) w4)
  102.        )
  103.        (list p p1 p2)
  104.       )
  105.       ((= mod 20) ;_ 4 + 16
  106.        (setq tp        (polar p (+ pi an) w4)
  107.              p1        (polar tp an1 w2)
  108.              p2        (polar tp (+ pi an1) w2)
  109.        )
  110.        (list p1 p p2)
  111.       )
  112.       ((= mod 36) ;_ 4 + 32
  113.        (setq p2        (polar p (+ pi an1) $globle_wid)
  114.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  115.        )
  116.        (list p p1 p2)
  117.       )
  118.       (t)
  119.     )
  120.   )
  121.   (if (and (setq e (car (entsel "\n拾取曲线: ")))
  122.            (wcmatch (cdr (assoc 0 (entget e)))
  123.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  124.            )
  125.       )
  126.     (progn
  127.       (setq slbname (findfile "sldlib.slb")
  128.             slst    (list
  129.                       (list "fmid"
  130.                             (strcat slbname "(hanroufmid)")
  131.                             "正向"
  132.                       )
  133.                       (list "bmid"
  134.                             (strcat slbname "(hanroubmid)")
  135.                             "反向"
  136.                       )
  137.                     )
  138.             params  '("wid" "dis")
  139.             str            '("temp:dialog {"
  140.                       "label = \"焊肉符号\" ;"
  141.                       ": column {"
  142.                       "  : row {"
  143.                       "    : image_button { height = 6;   key = \"fmid\";}"
  144.                       "    : image_button { height = 6;   key = \"bmid\";}"
  145.                       "    }"
  146.                       "  : boxed_row {"
  147.                       "    label = \"参数\";"
  148.                       "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  149.                       "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  150.                       "    }"
  151.                       "  : row {"
  152.                       "    : toggle {key = \"tol\"; label = \"整线\";}"
  153.                       "    ok_cancel;"
  154.                       "    }"
  155.                       "  }"
  156.                       "  errtile;"
  157.                       "}"
  158.                      )
  159.       )
  160.       (setq fn (dcl:make str) ;_写出临时 dcl
  161.             id (dcl:load fn "temp") ;_加载 DCL 文件
  162.       )
  163.       ;;set_tile  
  164.       (dcl:settile
  165.         '("wid" "dis" "tol")
  166.         (mapcar        'vl-princ-to-string
  167.                 (list $globle_wid $globle_dis $globle_totle)
  168.         )
  169.       ) ;_设置 string 格式按钮默认值
  170.       (DCL:ChkNumIn params) ;_  检查数字格式的 edit_box
  171.       (DCL:ImageButton 'slst '$globle_mode)
  172.       (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  173.       (DCL:ToggleAction "tol" '$globle_totle) ;_记录 toggle 按钮状态
  174.       (DCL:Accept) ;_定义 accept and cancel
  175.       (setq result (dcl:start id fn))
  176.       ;;Main program
  177.       (if (= result 1) ;_ok
  178.         (progn
  179.           (if (= $globle_mode "fmid")
  180.             (setq mod 2)
  181.             (setq mod 4)
  182.           )
  183.           (pnt:drawcrosshair (vlax-curve-getstartpoint e) 1)
  184.           (setq $dis (float $globle_dis))
  185.           (if (= $globle_totle "1")
  186.             (progn
  187.               (DrawDirct e)
  188.               (setq cedis (Curve:Length e))
  189.               (initget "Y N")
  190.               (setq key (getkword "\n是否反向[Yes(Y)/No(N)]<N>: "))
  191.               (if (or (not key) (= key ""))
  192.                 (setq nl (XD::Geom:NumDiv cedis 0.0 $dis))
  193.                 (setq nl (XD::Geom:NumDiv 0.0 cedis $dis)) ;_正向
  194.               )
  195.             )
  196.             (if
  197.               (and
  198.                 (setq sp (getpoint "\n起点: "))
  199.                 (pnt:drawcrosshair sp 3)
  200.                 (setq ep (getpoint sp "\n终点: "))
  201.                 (pnt:drawcrosshair ep 3)
  202.                 (setq sdis (GetDistAtPoint e sp)
  203.                       edis (GetDistAtPoint e ep)
  204.                 )
  205.                 (progn
  206.                   (and (isclosed e)
  207.                        (progn
  208.                          (grdraw sp ep 1 -1)
  209.                          t
  210.                        )
  211.                   )
  212.                   t
  213.                 )
  214.                 (DrawDirct e
  215.                            sp
  216.                            (if (> sdis edis)
  217.                              nil
  218.                              t
  219.                            )
  220.                 )
  221.                 (setq dp (getpoint sp "\n点击标注一侧<以切线为基准>: "))
  222.                 (setq tdis (GetDistAtPoint e dp))
  223.                 (setq vec (vlax-curve-getfirstderiv
  224.                             e
  225.                             (vlax-curve-getparamatpoint
  226.                               e
  227.                               (vlax-curve-getclosestpointto e sp)
  228.                             )
  229.                           )
  230.                       d          (car (trans (mapcar '- dp sp) 0 vec))
  231.                 )
  232.                 (cond
  233.                   ((equal d 0.0 1e-3) (setq mod (+ mod 16)))
  234.                   ((> d 0.0) (setq mod (+ mod 8))) ;_left
  235.                   (t (setq mod (+ mod 32))) ;_right
  236.                 ) ;_middle
  237.                 (if (isclosed e)
  238.                   (if (or (< sdis tdis edis) ;_正向
  239.                           (> sdis tdis edis)
  240.                       ) ;_逆向
  241.                     (setq nl (XD::Geom:NumDiv edis sdis $dis))
  242.                     (setq nl (XD::Geom:NumDiv
  243.                                edis
  244.                                sdis
  245.                                (list (curve:length e) $dis)
  246.                              )
  247.                     )
  248.                   )
  249.                   (if (or (< sdis tdis edis) ;_正向
  250.                           (> sdis tdis edis) ;_逆向
  251.                       )
  252.                     (setq nl (XD::Geom:NumDiv edis sdis $dis))
  253.                   )
  254.                 )
  255.               )
  256.                (progn
  257.                                         ;(fy:begin)
  258.                  ;;绘制主程序
  259.                  (setq tf  (> (car nl) (cadr nl))
  260.                        pts (mapcar '(lambda (x / v)
  261.                                       (setq v (vlax-curve-getfirstderiv
  262.                                                 e
  263.                                                 (vlax-curve-getparamatdist e x)
  264.                                               )
  265.                                       )
  266.                                       (list (vlax-curve-getpointatdist e x)
  267.                                             (if        tf
  268.                                               (mapcar '- v)
  269.                                               v
  270.                                             )
  271.                                       )
  272.                                     )
  273.                                    nl
  274.                            )
  275.                        ptl (mapcar '(lambda (x)
  276.                                       (apply 'GetArcPoints (cons e x))
  277.                                     )
  278.                                    pts
  279.                            )
  280.                  )
  281.                  (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  282.                          ptl
  283.                  )
  284.                  (redraw)
  285.                                         ;(fy:end)
  286.                )
  287.             )
  288.           )
  289.         )
  290.       )
  291.     )
  292.   )
  293.   (princ)
  294. )
20140914113401.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-14 12:16:08 来自手机 | 显示全部楼层
Free-Lancer 发表于 2014-9-14 11:32
大体这样,还有几处关系没有搞对, lib.vlx 已更新


当 sp ep获取先后与线起止方向反向时 vec 变量应为 负向量,闭合线判断不全
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-14 14:51:22 | 显示全部楼层

情况很多,就测试了几种
  1. ;; fron --- 2 back --- 4
  2. ;; left --- 8 mid  --- 16  right 32
  3. (mapcar        '(lambda (x y)
  4.            (if (not (eval x))
  5.              (set x y)
  6.            )
  7.          )
  8.         '($globle_wid $globle_dis $globle_mode $globle_totle)
  9.         '(2.0 1.0 "bmid" "0" "0")
  10. )
  11. (defun c:tt (/             GetArcPoints    slbname slst    params  str
  12.              fn             id             e             sp             ep             lst     n
  13.              nl             pts     ptl     dist    cedis   csdis   sdis
  14.              edis    tdis    key     mod     $dis    result  startpoint
  15.              tf             isclosed             vec     d             dp             len
  16.              v             x
  17.             )
  18.   ;;返回点对应 ARC 三点参数
  19.   (defun GetArcPoints (p v / w2 w4 an an1 tp p1 p2)
  20.     (setq an  (angle '(0. 0. 0.) v)
  21.           an1 (+ an (/ pi 2))
  22.           w4  (/ $globle_wid 4.)
  23.           w2  (/ $globle_wid 2)
  24.     )
  25.     (cond
  26.       ((= mod 10) ;_ 2 + 8
  27.        (setq p2        (polar p an1 $globle_wid)
  28.              p1        (polar (fy:midp p p2) an w4)
  29.        )
  30.        (list p p1 p2)
  31.       )
  32.       ((= mod 18) ;_2 + 16
  33.        (setq tp        (polar p (+ pi an) w4)
  34.              p2        (polar tp an1 w2)
  35.              p1        (polar tp (+ pi an1) w2)
  36.        )
  37.        (list p1 p p2)
  38.       )
  39.       ((= mod 34) ;_ 2 + 32
  40.        (setq p2        (polar p an1 $globle_wid)
  41.              p1        (polar (fy:midp p p2) an w4)
  42.        )
  43.        (list p p1 p2)
  44.       )
  45.       ((= mod 12) ;_ 4 + 8
  46.        (setq p2        (polar p an1 $globle_wid)
  47.              p1        (polar (fy:midp p p2) (+ pi an) w4)
  48.        )
  49.        (list p p1 p2)
  50.       )
  51.       ((= mod 20) ;_ 4 + 16
  52.        (setq tp        (polar p (+ pi an) w4)
  53.              p1        (polar tp an1 w2)
  54.              p2        (polar tp (+ pi an1) w2)
  55.        )
  56.        (list p1 p p2)
  57.       )
  58.       ((= mod 36) ;_ 4 + 32
  59.        (setq p2        (polar p (+ pi an1) $globle_wid)
  60.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  61.        )
  62.        (list p p1 p2)
  63.       )
  64.       (t)
  65.     )
  66.   )
  67.   (if (and (setq e (car (entsel "\n拾取曲线: ")))
  68.            (wcmatch (cdr (assoc 0 (entget e)))
  69.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  70.            )
  71.       )
  72.     (progn
  73.       (setq slbname (findfile "sldlib.slb")
  74.             slst    (list
  75.                       (list "fmid"
  76.                             (strcat slbname "(hanroufmid)")
  77.                             "前凸"
  78.                       )
  79.                       (list "bmid"
  80.                             (strcat slbname "(hanroubmid)")
  81.                             "后凹"
  82.                       )
  83.                     )
  84.             params  '("wid" "dis")
  85.             str            '("temp:dialog {"
  86.                       "label = \"焊肉符号\" ;"
  87.                       ": column {"
  88.                       "  : row {"
  89.                       "    : image_button { height = 6;   key = \"fmid\";}"
  90.                       "    : image_button { height = 6;   key = \"bmid\";}"
  91.                       "    }"
  92.                       "  : boxed_row {"
  93.                       "    label = \"参数\";"
  94.                       "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  95.                       "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  96.                       "    }"
  97.                       "  : row {"
  98.                       "    : toggle {key = \"tol\"; label = \"整线\";}"
  99.                       "    ok_cancel;"
  100.                       "    }"
  101.                       "  }"
  102.                       "  errtile;"
  103.                       "}"
  104.                      )
  105.       )
  106.       (setq fn (dcl:make str)
  107.             id (dcl:load fn "temp")
  108.       )
  109.       (dcl:settile
  110.         '("wid" "dis" "tol")
  111.         (mapcar        'vl-princ-to-string
  112.                 (list $globle_wid $globle_dis $globle_totle)
  113.         )
  114.       )
  115.       (DCL:ChkNumIn params)
  116.       (DCL:ImageButton 'slst '$globle_mode)
  117.       (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  118.       (DCL:ToggleAction "tol" '$globle_totle)
  119.       (DCL:Accept)
  120.       (setq result (dcl:start id fn))
  121.       (if (= result 1)
  122.         (progn
  123.           (setq        $dis           (float $globle_dis)
  124.                 isclosed   (Curve:IsClosed e)
  125.                 startpoint (vlax-curve-getstartpoint e)
  126.           )
  127.           (if (= $globle_totle "1")
  128.             (progn
  129.               (setq vec        (Curve:GetFirstDeriv e startpoint)
  130.                     len        (Curve:Length e)
  131.                     sp        startpoint
  132.               )
  133.               (Pnt:Mark (vlax-curve-getstartpoint e) 1)
  134.               (Pnt:DrawArrow startpoint vec)
  135.               (initget "Y N")
  136.               (setq key (getkword "\n是否反向[Yes(Y)/No(N)]<N>: "))
  137.               (if (/= key "Y")
  138.                 (setq sdis 0.0
  139.                       edis len
  140.                 )
  141.                 (progn
  142.                   (redraw)
  143.                   (setq ep (vlax-curve-getendpoint e))
  144.                   (Pnt:DrawArrow ep (mapcar '- vec))
  145.                   (setq        sdis len
  146.                         edis 0.0
  147.                         vec  (mapcar '- vec)
  148.                         sp   ep
  149.                   )
  150.                 )
  151.               )
  152.             )
  153.             (and (setq sp (getpoint "\n起点: "))
  154.                  (Pnt:Mark sp 1)
  155.                  (setq ep (getpoint sp "\n终点: "))
  156.                  (Pnt:DrawCrossHair ep 3)
  157.                  (setq sdis (Curve:GetDistAtPoint e sp)
  158.                        edis (Curve:GetDistAtPoint e ep)
  159.                        tf   (> sdis edis)
  160.                        vec  (Curve:GetFirstDeriv e sp)
  161.                  )
  162.                  (if tf
  163.                    (setq vec (mapcar '- vec))
  164.                    t
  165.                  )
  166.                  (Pnt:DrawArrow sp vec)
  167.                  (progn
  168.                    (and        isclosed
  169.                         (progn
  170.                           (grdraw sp ep 1 -1)
  171.                           t
  172.                         )
  173.                    )
  174.                    t
  175.                  )
  176.             )
  177.           )
  178.           (if
  179.             (and
  180.               sp
  181.               sdis
  182.               edis
  183.               (setq mod
  184.                      (if (not tf)
  185.                        (if (= $globle_mode "fmid")
  186.                          2
  187.                          4
  188.                        )
  189.                        (if (= $globle_mode "fmid")
  190.                          4
  191.                          2
  192.                        )
  193.                      )
  194.               )
  195.               (setq dp (getpoint sp "\n点击标注一侧<以切线为基准>: "))
  196.               (setq tdis (Curve:GetDistAtPoint e dp))
  197.               (setq d (car (trans (mapcar '- dp sp) 0 vec)))
  198.               (cond
  199.                 ((equal d 0.0 1e-3) (setq mod (+ mod 16)))
  200.                 ((> d 0.0) (setq mod (+ mod 8))) ;_left
  201.                 (t (setq mod (+ mod 32))) ;_right
  202.               ) ;_middle
  203.               (if isclosed
  204.                 (if (or        (< sdis tdis edis) ;_正向
  205.                         (> sdis tdis edis)
  206.                     ) ;_逆向
  207.                   (setq nl (XD::Geom:NumDiv edis sdis $dis))
  208.                   (setq        nl (XD::Geom:NumDiv
  209.                              edis
  210.                              sdis
  211.                              (list (curve:length e) $dis)
  212.                            )
  213.                   )
  214.                 )
  215.                 (if (or        (< sdis tdis edis) ;_正向
  216.                         (> sdis tdis edis) ;_逆向
  217.                     )
  218.                   (setq nl (XD::Geom:NumDiv edis sdis $dis))
  219.                 )
  220.               )
  221.             )
  222.              (progn
  223.                ;;(fy:begin)
  224.                ;;绘制主程序
  225.                (setq pts (mapcar '(lambda (x / v)
  226.                                     (setq v (vlax-curve-getfirstderiv
  227.                                               e
  228.                                               (vlax-curve-getparamatdist e x)
  229.                                             )
  230.                                     )
  231.                                     (list (vlax-curve-getpointatdist e x)
  232.                                           (if tf
  233.                                             (mapcar '- v)
  234.                                             v
  235.                                           )
  236.                                     )
  237.                                   )
  238.                                  nl
  239.                          )
  240.                      ptl (mapcar '(lambda (x)
  241.                                     (apply 'GetArcPoints x)
  242.                                   )
  243.                                  pts
  244.                          )
  245.                )
  246.                (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  247.                        ptl
  248.                )
  249.                (redraw)
  250.                ;;(fy:end)
  251.              )
  252.           )
  253.         )
  254.       )
  255.     )
  256.   )
  257.   (princ)
  258. )
  259. ;;====
  260. (defun Pnt:Mark        (p col / p1 p2 p3 p4)
  261.   (grvecs
  262.     (list col
  263.           (polar p (/ pi 4) (* (getvar "viewsize") 0.05))
  264.           (polar p (* pi 1.25) (* (getvar "viewsize") 0.05))
  265.           col
  266.           (polar p (* pi 0.75) (* (getvar "viewsize") 0.05))
  267.           (polar p (* pi -0.25) (* (getvar "viewsize") 0.05))
  268.           col
  269.           (setq p1 (polar p (* pi 0.75) (* (getvar "viewsize") 0.025)))
  270.           (setq p2 (polar p (/ pi 4) (* (getvar "viewsize") 0.025)))
  271.           col
  272.           p2
  273.           (setq p3 (polar p (* pi -0.25) (* (getvar "viewsize") 0.025)))
  274.           col
  275.           p3
  276.           (setq p4 (polar p (* pi 1.25) (* (getvar "viewsize") 0.025)))
  277.           col
  278.           p4
  279.           p1
  280.     )
  281.   )
  282.   t
  283. )
  284. (defun Pnt:DrawCrossHair (p col /)
  285.   (grvecs
  286.     (list col
  287.           (polar p (/ pi 4) (* (getvar "viewsize") 0.05))
  288.           (polar p (* pi 1.25) (* (getvar "viewsize") 0.05))
  289.           col
  290.           (polar p (* pi 0.75) (* (getvar "viewsize") 0.05))
  291.           (polar p (* pi -0.25) (* (getvar "viewsize") 0.05))
  292.     )
  293.   )
  294.   t
  295. )
  296. (defun Pnt:DrawArrow (p v / an p1 p2 p3)
  297.   (setq        an (angle '(0. 0. 0.) v)
  298.         p1 (polar p an (* 0.25 (getvar "viewsize")))
  299.         p2 (polar p1 (+ an (* 0.833333 pi)) (/ (distance p p1) 6.))
  300.         p3 (polar p1 (- an (* 0.833333 pi)) (/ (distance p p1) 6.))
  301.   )
  302.   (grvecs (list 1 p p1 1 p1 p2 1 p1 p3))
  303.   t
  304. )
  305. (defun Curve:GetDistAtPoint (e p)
  306.   (vlax-curve-getdistatpoint
  307.     e
  308.     (vlax-curve-getclosestpointto e p)
  309.   )
  310. )
  311. (defun Curve:GetParamAtPoint (e p)
  312.   (vlax-curve-getparamatpoint
  313.     e
  314.     (vlax-curve-getclosestpointto e p)
  315.   )
  316. )
  317. (defun Curve:GetFirstDeriv (e p)
  318.   (vlax-curve-getfirstderiv e (Curve:GetParamAtPoint e p))
  319. )
  320. (defun Curve:Length (e)
  321.   (vlax-curve-getdistatparam e (vlax-curve-getendparam e))
  322. )
  323. (defun Curve:IsClosed (e)
  324.   (or (vlax-curve-isclosed e)
  325.       (equal (vlax-curve-getstartpoint e)
  326.              (vlax-curve-getendpoint e)
  327.              1e-3
  328.       )
  329.   )
  330. )

点评

大师,就拿了一条直线测试都没成功,选择点对点绘制,左至右选点,方向为前凸,然后选择点取标注一侧,选择直线下方,它一样绘制在上方 同样的,选点对点绘制,左至右选点,选择后凹, 然后选择点取标注一侧,选点  详情 回复 发表于 2014-9-14 17:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-9-14 15:55:44 来自手机 | 显示全部楼层
Free-Lancer 发表于 2014-9-14 14:51
情况很多,就测试了几种

整线时反向不能直接 负,要取 endpoint  的 firstderiv , 后面的 mod 也不用 if if ....

点评

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

使用道具 举报

发表于 2014-9-14 16:50:18 | 显示全部楼层
st788796 发表于 2014-9-14 15:55
整线时反向不能直接 负,要取 endpoint  的 firstderiv , 后面的 mod 也不用 if if ....

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

点评

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-14 17:07:22 | 显示全部楼层
Free-Lancer 发表于 2014-9-14 14:51
情况很多,就测试了几种

大师,就拿了一条直线测试都没成功,选择点对点绘制,左至右选点,方向为前凸,然后选择点取标注一侧,选择直线下方,它一样绘制在上方
同样的,选点对点绘制,左至右选点,选择后凹, 然后选择点取标注一侧,选点在直线上,结果还是前凸



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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-14 17:08:44 | 显示全部楼层

谢谢,{:soso_e161:}待会再测试

点评

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

使用道具 举报

发表于 2014-9-14 17:53:34 | 显示全部楼层
lucas3 发表于 2014-9-14 17:08
谢谢,待会再测试

更新 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" "0")
  8. )
  9. (defun c:tt (/             GetArcPoints    slbname slst    params  str
  10.              fn             id             e             sp             ep             lst     n
  11.              nl             pts     ptl     dist    cedis   csdis   sdis
  12.              edis    tdis    key     mod     $dis    result  startpoint
  13.              tf             isclosed             vec     d             dp             len
  14.              v             x
  15.             )
  16.   (defun GetArcPoints (p v / w2 w4 an an1 tp p1 p2)
  17.     (setq an  (angle '(0. 0. 0.) v)
  18.           an1 (+ an (/ pi 2))
  19.           w4  (/ $globle_wid 4.)
  20.           w2  (/ $globle_wid 2)
  21.     )
  22.     (cond
  23.       ((= mod 10)
  24.        (setq p2        (polar p an1 $globle_wid)
  25.              p1        (polar (fy:midp p p2) an w4)
  26.        )
  27.        (list p p1 p2)
  28.       )
  29.       ((= mod 18)
  30.        (setq tp        (polar p (+ pi an) w4)
  31.              p2        (polar tp an1 w2)
  32.              p1        (polar tp (+ pi an1) w2)
  33.        )
  34.        (list p1 p p2)
  35.       )
  36.       ((= mod 34)
  37.        (setq p2        (polar p (+ pi an1) $globle_wid)
  38.              p1        (polar (fy:midp p p2) an w4)
  39.        )
  40.        (list p p1 p2)
  41.       )
  42.       ((= mod 12)
  43.        (setq p2        (polar p an1 $globle_wid)
  44.              p1        (polar (fy:midp p p2) (+ pi an) w4)
  45.        )
  46.        (list p p1 p2)
  47.       )
  48.       ((= mod 20)
  49.        (setq tp        (polar p (+ pi an) w4)
  50.              p1        (polar tp an1 w2)
  51.              p2        (polar tp (+ pi an1) w2)
  52.        )
  53.        (list p1 p p2)
  54.       )
  55.       ((= mod 36)
  56.        (setq p2        (polar p (+ pi an1) $globle_wid)
  57.              p1        (polar (fy:midp p p2) (+ an pi) w4)
  58.        )
  59.        (list p p1 p2)
  60.       )
  61.       (t)
  62.     )
  63.   )
  64.   (if (and (setq e (car (entsel "\n拾取曲线: ")))
  65.            (wcmatch (cdr (assoc 0 (entget e)))
  66.                     "*LINE,ARC,CIRCLE,ELLIPSE"
  67.            )
  68.       )
  69.     (progn
  70.       (setq slbname (findfile "sldlib.slb")
  71.             slst    (list
  72.                       (list "fmid"
  73.                             (strcat slbname "(hanroufmid)")
  74.                             "前凸"

  75.                       )
  76.                       (list "bmid"
  77.                             (strcat slbname "(hanroubmid)")
  78.                             "后凹"
  79.                       )
  80.                     )
  81.             params  '("wid" "dis")
  82.             str            '("temp:dialog {"
  83.                       "label = \"焊肉符号\" ;"
  84.                       ": column {"
  85.                       "  : row {"
  86.                       "    : image_button { height = 6;   key = \"fmid\";}"
  87.                       "    : image_button { height = 6;   key = \"bmid\";}"
  88.                       "    }"
  89.                       "  : boxed_row {"
  90.                       "    label = \"参数\";"
  91.                       "    : edit_box { key = \"wid\"; label = \"宽度\" ;}"
  92.                       "    : edit_box { key = \"dis\"; label = \"间距\" ;}"
  93.                       "    }"
  94.                       "  : row {"
  95.                       "    : toggle {key = \"tol\"; label = \"整线\";}"
  96.                       "    ok_cancel;"
  97.                       "    }"
  98.                       "  }"
  99.                       "  errtile;"
  100.                       "}"
  101.                      )
  102.       )
  103.       (setq fn (dcl:make str)
  104.             id (dcl:load fn "temp")
  105.       )
  106.       (dcl:settile
  107.         '("wid" "dis" "tol")
  108.         (mapcar        'vl-princ-to-string
  109.                 (list $globle_wid $globle_dis $globle_totle)
  110.         )
  111.       )
  112.       (DCL:ChkNumIn params)
  113.       (DCL:ImageButton 'slst '$globle_mode)
  114.       (DCL:EditboxNumAction params '($globle_wid $globle_dis))
  115.       (DCL:ToggleAction "tol" '$globle_totle)
  116.       (DCL:Accept)
  117.       (setq result (dcl:start id fn))
  118.       (if (= result 1)
  119.         (progn
  120.           (setq        $dis           (float $globle_dis)
  121.                 isclosed   (Curve:IsClosed e)
  122.                 startpoint (vlax-curve-getstartpoint e)
  123.                 mod           (if (= $globle_mode "fmid")
  124.                              2
  125.                              4
  126.                            )
  127.           )
  128.           (if (= $globle_totle "1")
  129.             (progn
  130.               (setq vec        (Curve:GetFirstDeriv e startpoint)
  131.                     len        (Curve:Length e)
  132.               )
  133.               (Pnt:Mark (vlax-curve-getstartpoint e) 1)
  134.               (Pnt:DrawArrow startpoint vec)
  135.               (initget "Y N")
  136.               (setq key (getkword "\n是否反向[Yes(Y)/No(N)]<N>: "))
  137.               (if (/= key "Y")
  138.                 (setq sdis 0.0
  139.                       tf   nil
  140.                       edis len
  141.                       sp   startpoint
  142.                 )
  143.                 (progn
  144.                   (redraw)
  145.                   (setq ep (vlax-curve-getendpoint e))
  146.                   (Pnt:DrawArrow ep (mapcar '- vec))
  147.                   (setq        sdis len
  148.                         edis 0.0
  149.                         tf   t
  150.                         vec  (mapcar '- v)
  151.                         sp   ep
  152.                   )
  153.                 )
  154.               )
  155.             )
  156.             (and (setq sp (getpoint "\n起点: "))
  157.                  (Pnt:Mark sp 1)
  158.                  (setq ep (getpoint sp "\n终点: "))
  159.                  (Pnt:DrawCrossHair ep 3)
  160.                  (setq sdis (Curve:GetDistAt e sp)
  161.                        edis (Curve:GetDistAt e ep)
  162.                        tf   (> sdis edis)
  163.                        vec  (Curve:GetFirstDeriv e sp)
  164.                  )
  165.                  (if tf
  166.                    (setq vec (mapcar '- vec))
  167.                    t
  168.                  )
  169.                  (Pnt:DrawArrow sp vec)
  170.                  (progn
  171.                    (and        isclosed
  172.                         (progn
  173.                           (grdraw sp ep 1 -1)
  174.                           t
  175.                         )
  176.                    )
  177.                    t
  178.                  )
  179.             )
  180.           )
  181.           (if
  182.             (and
  183.               sp
  184.               (setq dp (getpoint sp "\n点击标注一侧<以切线为基准>: "))
  185.               (setq tdis (Curve:GetDistAt e dp))
  186.               (setq d (car (trans (mapcar '- dp sp) 0 vec)))
  187.               (cond
  188.                 ((equal d 0.0 1e-3) (setq mod (+ mod 16)))
  189.                 ((> d 0.0) (setq mod (+ mod 8)))
  190.                 (t (setq mod (+ mod 32)))
  191.               )
  192.               (if isclosed
  193.                 (if (or        (< sdis tdis edis)
  194.                         (> sdis tdis edis)
  195.                     )
  196.                   (setq nl (XD::Geom:NumDiv edis sdis $dis))
  197.                   (setq        nl (XD::Geom:NumDiv
  198.                              edis
  199.                              sdis
  200.                              (list (curve:length e) $dis)
  201.                            )
  202.                   )
  203.                 )
  204.                 (if (or        (< sdis tdis edis)
  205.                         (> sdis tdis edis)
  206.                     )
  207.                   (setq nl (XD::Geom:NumDiv edis sdis $dis))
  208.                 )
  209.               )
  210.             )
  211.              (progn
  212.                (fy:begin)
  213.                (setq pts (mapcar '(lambda (x / v)
  214.                                     (setq v (Curve:GetFirstDeriv e x))
  215.                                     (list (vlax-curve-getpointatdist e x)
  216.                                           (if tf
  217.                                             (mapcar '- v)
  218.                                             v
  219.                                           )
  220.                                     )
  221.                                   )
  222.                                  nl
  223.                          )
  224.                      ptl (mapcar '(lambda (x)
  225.                                     (apply 'GetArcPoints x)
  226.                                   )
  227.                                  pts
  228.                          )
  229.                )
  230.                (mapcar '(lambda (x) (apply 'Arc:3pMake x))
  231.                        ptl
  232.                )
  233.                (redraw)
  234.                (fy:end)
  235.              )
  236.           )
  237.         )
  238.       )
  239.     )
  240.   )
  241.   (princ)
  242. )

点评

大师,又更新呢? 还是以直线测试,选择是否反向,选择“是”, 结果就是 错误: 参数类型错误: 坐标系定义: nil  详情 回复 发表于 2014-9-14 18:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-14 18:42:08 | 显示全部楼层
本帖最后由 lucas3 于 2014-9-14 18:53 编辑

大师,又更新呢?
还是以直线测试,整线布置,选择是否反向,选择“是”, 结果就是  错误: 参数类型错误: 坐标系定义: nil
  1. 点击标注一侧<以切线为基准>: ; 错误: 参数类型错误: 坐标系定义: nil
复制代码

直线测试,选择后凹,起点在左,终点在右,如果布置在直线两侧,弧的方向对了,如果布置在直线上,方向又错了!

点评

闭合反向有个笔误 vec 写成了 v , 后凹的 an 写成了 (+ pi an), 线上布置直接在线上点  详情 回复 发表于 2014-9-14 23:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-27 05:28 , Processed in 0.288580 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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