设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 184|回复: 3

[多段线] (XD::POLYLINE:SetRadius)LWPOLYLINE 顶点设置倒角半径

[复制链接]

签到天数: 416 天

连续签到: 1 天

[LV.9]以坛为家II

已领礼包: 51个

财富等级: 招财进宝

发表于 2017-8-10 18:16:41 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::POLYLINE:SetRadius
调用格式: (XD::POLYLINE:SetRadius pl inx r)
参数说明: pl ------- 多段线实体名
inx ------ 顶点索引(-1圆角所有顶点)
r ------ 半径值
返回值: 成功返回T or NIL
函数简介: LWPOLYLINE 顶点设置倒角半径
函数来源: 原创
函数作者: Lispboy
适用版本: XDRX API 
最后更新时间: 2017-08-10(2017-09-14 第二次更新)
备注: 顶点处没弧线段,添加,有修改半径,半径0删除弧线段
演示图片: -

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

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

x
本帖最后由 Lispboy 于 2017-9-14 14:18 编辑

  1. (defun XD::POLYLINE:SetRadius (pl inx r / #bulge #endpoint #startpoint dist1
  2.                                   dist2 garc gNarc gNext gPrev int1 int2
  3.                                   inx-+ isclose numverts pint r1 ret
  4.                               )
  5.   (if (= inx -1)
  6.     (progn
  7.       (setq verts (xdrx_getpropertyvalue pl "vertices"))
  8.       (setq ret (mapcar
  9.                   '(lambda (y)
  10.                      (setq inx (xd::polyline:nearindex pl y))
  11.                      (xd::polyline:setradius pl inx r)
  12.                    )
  13.                   verts
  14.                 )
  15.       )
  16.       (apply
  17.         'or
  18.         ret
  19.       )
  20.     )
  21.     (progn
  22.       (setq inx (abs inx)
  23.             r (abs r)
  24.             inx-+ (xd::polyline:-index+ pl inx)
  25.             next (last inx-+)
  26.             prev (car inx-+)
  27.             isclose (xdrx_curve_isclosed pl)
  28.             numverts (xdrx_polyline_numverts pl)
  29.       )
  30.       (cond
  31.         ((and
  32.            (not isclose)
  33.            (or
  34.              (= inx 0)
  35.              (>= inx (1- numverts))
  36.            )
  37.          )
  38.           (setq ret NIL)
  39.         )
  40.         ((setq garc (xdrx_polyline_getarcsegat pl inx t))
  41.           (setq r1 (xdge::getpropertyvalue garc "radius"))
  42.           (if (and
  43.                 (setq gNext (xdrx_polyline_getlinesegat pl next t))
  44.                 (setq gPrev (xdrx_polyline_getlinesegat pl prev t))
  45.               )
  46.             (progn
  47.               (setq pint (car (xdrx_entity_intersectwith gPrev gNext 3)))
  48.               (if (equal r 0.0 1e-3)
  49.                 (progn
  50.                   (xdrx_polyline_removevertexat pl next)
  51.                   (xdrx_polyline_setbulgeat pl inx 0.0)
  52.                   (xdrx_polyline_setpointat pl inx pint)
  53.                   (setq ret t)
  54.                 )
  55.                 (progn
  56.                   (if (and
  57.                         (xdge::getpropertyvalue gPrev "startpoint"
  58.                                                 "endpoint"
  59.                         )
  60.                         (setq dist1 (distance #startpoint pint))
  61.                         (setq dist2 (* (/ r r1) (distance pint #endpoint)))
  62.                         (< dist2 dist1)
  63.                         (setq int1 (polar pint (angle #endpoint #startpoint)
  64.                                           dist2
  65.                                    )
  66.                         )
  67.                         (xdge::getpropertyvalue gNext "startpoint"
  68.                                                 "endpoint"
  69.                         )
  70.                         (setq dist1 (distance #endpoint pint))
  71.                         (setq dist2 (* (/ r r1) (distance pint #startpoint)))
  72.                         (< dist2 dist1)
  73.                         (setq int2 (polar pint (angle #startpoint #endpoint)
  74.                                           dist2
  75.                                    )
  76.                         )
  77.                       )
  78.                     (progn
  79.                       (xdrx_polyline_setpointat pl inx int1)
  80.                       (xdrx_polyline_setpointat pl next int2)
  81.                       (setq ret t)
  82.                     )
  83.                   )
  84.                 )
  85.               )
  86.             )
  87.           )
  88.         )
  89.         ((and
  90.            (setq gNext (xdrx_polyline_getlinesegat pl inx t))
  91.            (setq gPrev (xdrx_polyline_getlinesegat pl prev t))
  92.          )
  93.           (if (and
  94.                 (setq gNarc (xdge::constructor "kCircArc2d"))
  95.                 (xdge::setpropertyvalue gNarc "set" gPrev gNext r 0.9 0.1)
  96.                 (xdge::getpropertyvalue gNarc "startpoint" "endpoint"
  97.                                         "bulge"
  98.                 )
  99.                 (xdge::getpropertyvalue gPrev "ison" #startpoint)
  100.                 (xdge::getpropertyvalue gnext "ison" #endpoint)
  101.               )
  102.             (progn
  103.               (if (< #bulge 0.0)
  104.                 (progn
  105.                   (xdrx_polyline_setpointat pl inx #endpoint)
  106.                   (xdrx_polyline_addVertexat pl inx #startpoint #bulge)
  107.                   (setq ret t)
  108.                 )
  109.                 (progn
  110.                   (xdrx_polyline_setpointat pl inx #startpoint)
  111.                   (if (and
  112.                         (= next 0)
  113.                         isclose
  114.                       )
  115.                     (progn
  116.                       (xdrx_setpropertyvalue pl "closed" nil)
  117.                       (xdrx_polyline_addVertexat pl (1+ inx) #endpoint)
  118.                       (xdrx_polyline_setbulgeat pl inx #bulge)
  119.                       (xdrx_setpropertyvalue pl "closed" t)
  120.                     )
  121.                     (progn
  122.                       (xdrx_polyline_addVertexat pl next #endpoint)
  123.                       (xdrx_polyline_setbulgeat pl inx #bulge)
  124.                     )
  125.                   )
  126.                   (setq ret t)
  127.                 )
  128.               )
  129.             )
  130.           )
  131.         )
  132.         (t
  133.           (setq ret NIL)
  134.         )
  135.       )
  136.       (xdge::free garc gprev gnext gnarc)
  137.       ret
  138.     )
  139.   )
  140. )


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

签到天数: 2041 天

连续签到: 139 天

[LV.Master]伴坛终老I

已领礼包: 6050个

财富等级: 富甲天下

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

使用道具 举报

签到天数: 95 天

连续签到: 7 天

[LV.6]常住居民II

已领礼包: 113个

财富等级: 日进斗金

发表于 2018-9-27 18:45:14 | 显示全部楼层
能告诉我这个如何用吗   哪个命令是   能不能做一个小视频呀   谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 191 天

连续签到: 3 天

[LV.7]常住居民III

已领礼包: 173个

财富等级: 日进斗金

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-12-12 11:45 , Processed in 0.133067 second(s), 28 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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