找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1767|回复: 12

[编程申请] 求闭合PL线倒R角程序 查了资料,自己折腾了老半天,怒删了没完成的作品

[复制链接]

已领礼包: 685个

财富等级: 财运亨通

发表于 2013-12-18 17:41:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
求闭合PL线倒R角程序   查了资料,自己折腾了老半天,怒删了没完成的作品


搞得我头都大了。。。真心投降了。。。看来还是得请求各位大师出马了。。

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

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-18 17:48:45 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-12-18 17:50 编辑

API应用中贴过这个算法了,后面就是写成程序,以为没人对这个有兴趣呢!
API应用 Pline中直线与弧段倒角算法

点评

谢谢你的回答。。。问题是我一直都没用过XD的API 我现在才刚学到子函数。。还有是用不来API来写程序啊。。 可怜啊。。。。  详情 回复 发表于 2013-12-18 17:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-12-18 17:52:28 | 显示全部楼层
st788796 发表于 2013-12-18 17:48
API应用中贴过这个算法了,后面就是写成程序,以为没人对这个有兴趣呢!
API应用 Pline中直线与弧段倒角算 ...

谢谢你的回答。。。问题是我一直都没用过XD的API     我现在才刚学到子函数。。还有是用不来API来写程序啊。。
可怜啊。。。。

点评

用v/alisp也可以,只是太浪费时间  详情 回复 发表于 2013-12-18 17:54
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-18 17:54:45 来自手机 | 显示全部楼层
ysq101 发表于 2013-12-18 17:52
谢谢你的回答。。。问题是我一直都没用过XD的API     我现在才刚学到子函数。。还有是用不来API来写程序 ...

用v/alisp也可以,只是太浪费时间

点评

我之前就用v/alisp 试着写了一下,,,太难搞了。。。。搞得我头大投降了。。。 没办法只有请高手出手了  详情 回复 发表于 2013-12-18 18:00
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-12-18 18:00:19 | 显示全部楼层
st788796 发表于 2013-12-18 17:54
用v/alisp也可以,只是太浪费时间

我之前就用v/alisp 试着写了一下,,,太难搞了。。。。搞得我头大投降了。。。
没办法只有请高手出手了

点评

先贴一个倒外尖角的,还没有优化  详情 回复 发表于 2013-12-19 03:02
那个算法还有个bug,还需要增加个判断  详情 回复 发表于 2013-12-18 18:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-18 18:13:14 来自手机 | 显示全部楼层
ysq101 发表于 2013-12-18 18:00
我之前就用v/alisp 试着写了一下,,,太难搞了。。。。搞得我头大投降了。。。
没办法只有请高手出手了 ...

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-19 03:02:24 | 显示全部楼层
本帖最后由 st788796 于 2013-12-19 07:07 编辑
ysq101 发表于 2013-12-18 18:00
我之前就用v/alisp 试着写了一下,,,太难搞了。。。。搞得我头大投降了。。。
没办法只有请高手出手了 ...

先贴一个倒外尖角的,还没有优化(需同一条Pline且任一段不为闭合线的末段)
  1. (defun c:tt (/            GetSegInfo          GetInput        e1     e2     lst1
  2.              lst2   pl           lsp          lep         pcen        rad    an     pint
  3.              dis    d           p1          p2         p3        csp    cep    pmid
  4.              pint0  mod           mod1          arc         tf        cpmid  pp     npl
  5.              van    _pi2   r          area
  6.             )
  7.   (defun GetSegInfo (e / pam arcinfo)
  8.     (if        (and (setq pam (fix (apply 'xdrx_curve_getparamatpoint e)))
  9.              (zerop (xdrx_polyline_getbulgeat (car e) pam))
  10.         )
  11.       (list (car e)
  12.             pam
  13.             (xdrx_polyline_getlinesegat (car e) pam)
  14.       )
  15.       (progn (setq arcinfo (xdrx_polyline_getarcsegat (car e) pam))
  16.              (list (car e)
  17.                    pam
  18.                    (cadr arcinfo)
  19.                    (caddr arcinfo)
  20.                    (nth 3 arcinfo)
  21.                    (last arcinfo)
  22.              )
  23.       )
  24.     )
  25.   )
  26.   (defun GetInput (msg / e)
  27.     (and (setq e (xdrx_entsel msg '((0 . "LWPOLYLINE"))))
  28.          (eq (xdrx_getpropertyvalue (car e) "IsA") "AcDbPolyline")
  29.     )
  30.     e
  31.   )
  32.   (setq _pi2 (* pi 0.5))
  33.   (if
  34.     (and (setq e1 (getinput "\n选择第一段: "))
  35.          (setq lst1 (getseginfo e1))
  36.          (setq e2 (getinput (if        (= (length lst1) 3)
  37.                               "\n选择相邻弧线段: "
  38.                               "\n选择相邻直线段: "
  39.                             )
  40.                   )
  41.          )
  42.          (setq lst2 (getseginfo e2))
  43.          (= (abs (- (cadr lst1) (cadr lst2))) 1)
  44.          (setq pl (car lst1))
  45.          (eq pl (car lst2))
  46.          (if (= (length lst1) 3)
  47.            (setq lsp  (car (last lst1))
  48.                  lep  (cadr (last lst1))
  49.                  pcen (caddr lst2)
  50.                  rad  (nth 3 lst2)
  51.                  csp  (polar pcen (nth 4 lst2) rad)
  52.                  cep  (polar pcen (last lst2) rad)
  53.            )
  54.            (setq lsp  (car (last lst2))
  55.                  lep  (cadr (last lst2))
  56.                  pcen (caddr lst1)
  57.                  rad  (nth 3 lst1)
  58.                  csp  (polar pcen (nth 4 lst1) rad)
  59.                  cep  (polar pcen (last lst1) rad)
  60.            )
  61.          )
  62.          (> (abs (xdrx_points_area lsp lep csp cep)) 0.)
  63.          (setq cpmid (xdrx_curve_getpointatparam
  64.                        pl
  65.                        (* 0.5
  66.                           (+ (xdrx_curve_getparamatpoint pl csp)
  67.                              (xdrx_curve_getparamatpoint pl cep)
  68.                           )
  69.                        )
  70.                      )
  71.          )
  72.          (if (equal lep csp 1e-3)
  73.            (setq pint0 lep
  74.                  pp lsp
  75.            )
  76.            (setq pint0 lsp
  77.                  pp lep
  78.            )
  79.          )
  80.          (setq cpmid (xdrx_curve_getpointatparam
  81.                        pl
  82.                        (/ (+ (xdrx_curve_getparamatpoint pl csp)
  83.                              (xdrx_curve_getparamatpoint pl cep)
  84.                           )
  85.                           2
  86.                        )
  87.                      )
  88.          )
  89.          (> (* (xdrx_point_dist2line pp csp cep)
  90.                (xdrx_point_dist2line cpmid csp cep)
  91.             )
  92.             0.
  93.          )
  94.          (setq an (angle lsp lep))
  95.          (if (zerop (setq area (xdrx_points_area lsp lep pcen)))
  96.            (setq pint pcen)
  97.            (setq
  98.              pint (inters lsp lep pcen (polar pcen (+ an _pi2) 10.) nil)
  99.            )
  100.          )
  101.          (setq r (getdist "\n半径: "))
  102.     )
  103.      (progn
  104.        (setq dis (distance pcen pint)
  105.              d         (sqrt (- (expt (+ rad r) 2) (expt (- dis r) 2)))
  106.                  ;;d          (sqrt (- (expt (- rad r) 2) (expt (- dis r) 2)))
  107.        )
  108.        (or (xdrx_point_ison (setq p1 (polar pint (+ an pi) d)) pl) ;_直线段切点
  109.            (setq p1 (polar pint an d))
  110.        )
  111.        (setq p2         (polar p1 (angle pint pcen) r) ;_center
  112.              p3         (polar pcen (angle pcen p2) rad) ;_弧上起点
  113.              van (- (angle p2 p3) (angle p2 p1))
  114.        )
  115.        (setq npl (xdrx_polyline_make p1 p3))
  116.        (if (> van pi)
  117.          (setq van (- (+ pi pi) van))
  118.        )
  119.        (xdrx_polyline_setbulgeat npl 0 (xdrx_math_tan (/ van 4.)))
  120.        (setq pmid (cadr (xdrx_curve_getpoint npl))
  121.              mod  (xdrx_point_dist2line pmid p1 p3)
  122.              mod1 (xdrx_point_dist2line pint0 p1 p3)
  123.        )
  124.        (if (minusp (* mod mod1))
  125.          (xdrx_entity_mirror npl (list p1 p3) t)
  126.        )
  127.        (xdrx_entity_setpropertiesfrom npl pl)
  128.        (mapcar '(lambda        (x)
  129.                   (if (xdrx_point_ison pint0 x)
  130.                     (progn
  131.                       (xdrx_entity_delete x)
  132.                       (setq tf t)
  133.                     )
  134.                   )
  135.                 )
  136.                (xdrx_pickset->ents (xdrx_curve_getsplitcurves pl p1 p3))
  137.        )
  138.        (if (not tf)
  139.          (xdrx_entity_delete pl)
  140.        )
  141.      )
  142.      (princ "\n非同一Pline或非直线接圆弧!")
  143.   )
  144.   (princ)
  145. )

点评

刚试了一下......不是直接选取PL线就可以了吗??? 要选两条相邻的线...那跟F命令没什么区别啊  详情 回复 发表于 2013-12-23 16:30
感谢你的回答。。。。期待完善一下。。。有需要我再自己修改一下  详情 回复 发表于 2013-12-19 15:22
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-12-19 15:22:33 | 显示全部楼层
st788796 发表于 2013-12-19 03:02
先贴一个倒外尖角的,还没有优化(需同一条Pline且任一段不为闭合线的末段)

感谢你的回答。。。。期待完善一下。。。有需要我再自己修改一下

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-19 17:03:29 | 显示全部楼层
ysq101 发表于 2013-12-19 15:22
感谢你的回答。。。。期待完善一下。。。有需要我再自己修改一下

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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-12-23 16:30:05 | 显示全部楼层
st788796 发表于 2013-12-19 03:02
先贴一个倒外尖角的,还没有优化(需同一条Pline且任一段不为闭合线的末段)

刚试了一下......不是直接选取PL线就可以了吗???
要选两条相邻的线...那跟F命令没什么区别啊

点评

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-23 18:13:00 来自手机 | 显示全部楼层
ysq101 发表于 2013-12-23 16:30
刚试了一下......不是直接选取PL线就可以了吗???
要选两条相邻的线...那跟F命令没什么区别啊

F 是倒不了直线段接圆弧段的,只能倒直线段接直线段

点评

这个还真没试过呢。。。能不能帮我完善一下啊??  详情 回复 发表于 2013-12-23 20:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

 楼主| 发表于 2013-12-23 20:17:03 | 显示全部楼层
st788796 发表于 2013-12-23 18:13
F 是倒不了直线段接圆弧段的,只能倒直线段接直线段

这个还真没试过呢。。。能不能帮我完善一下啊??

点评

已经贴 API 应用了, 再完善就是用 AddVertex 了, 不是不可以, 要看时间了, 目前的也可以用  详情 回复 发表于 2013-12-23 21:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-12-23 21:55:58 | 显示全部楼层
本帖最后由 st788796 于 2013-12-23 21:57 编辑
ysq101 发表于 2013-12-23 20:17
这个还真没试过呢。。。能不能帮我完善一下啊??

已经贴 API 应用了, 再完善就是用 AddVertex 了, 不是不可以, 要看时间了, 目前的也可以用
有算法, 有源码, 你自己也可以改改, 遇到难点共同探讨
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-11 09:20 , Processed in 0.505787 second(s), 71 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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