设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1572|回复: 9

[多段线] (XD::Polyline:AddFillet)指定顶点索引处F,C倒角

[复制链接]

签到天数: 1142 天

连续签到: 1 天

[LV.10]以坛为家III

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-10-30 11:11:25 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Polyline:AddFillet
调用格式: (XD::Polyline:AddFillet e Index Oper dis1 dis2)
参数说明: e ---- LWPOLYLINE
index- 顶点索引
oper - "F" 圆角
"C" 倒角
dis1 - "F"下,半径,"C"下索引小段方向的C脚距离
dis2 - "F" 下无用,"C"下,索引大的方向的距离
返回值: 0 -- 成功
1 -- 倒角新顶点不在多段线上
2 -- 索引处有弧段
3 -- 不封闭曲线,索引在端点
4 -- 顶点索引超出合法范围
函数简介: 指定顶点索引处F,C倒角
函数来源: 原创
函数作者: newer
适用版本: XDRX API 
最后更新时间: 2013-10-30
备注: 第二版,2013.10.30.下午4点
第三版,2016.10.08
演示图片:

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

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

x
本帖最后由 newer 于 2016-10-8 14:23 编辑

该函数应用程序,非模式对话框批量倒角插件,见:http://bbs.xdcad.net/thread-671374-1-1.html

  1. ;|
  2. 指定顶点索引处F,C倒角
  3. 参数:
  4.   e ---- LWPOLYLINE
  5.   index- 顶点索引
  6.   oper - "F" 圆角
  7.          "C" 倒角
  8.   dis1 - "F"下,半径,"C"下索引小段方向的C脚距离
  9.   dis2 - "F" 下无用,"C"下,索引大的方向的距离

  10. 返回值:
  11.   0 -- 成功
  12.   1 -- 倒角新顶点不在多段线上
  13.   2 -- 索引处有弧段
  14.   3 -- 不封闭曲线,索引在端点
  15.   4 -- 顶点索引超出合法范围
  16. |;
  17. (defun XD::Polyline:addFillet (e index oper dis1 dis2 / an anc bulge dis eL1
  18.                                  eL2 int inx next num p_1 p_2 ret v1 v2 x
  19.                                  xdata xdata2 xreclist xrecLst
  20.                               )
  21.   (setq inx (XD::PolyLine:-Index+ e index)
  22.         num (xdrx_polyline_numVerts e)
  23.         oper (strcase oper)
  24.   )
  25.   (if (and
  26.         (> dis1 0)
  27.         (> dis2 0)
  28.         (setq ret 4)                       ; 顶点索引无效返回
  29.         (>= index 0)
  30.         (< index num)
  31.         (setq ret 3)                       ; 不封闭曲线,顶点索引在端点返回
  32.         (or
  33.           (xdrx_getpropertyvalue e "IsClosed")
  34.           (and
  35.             (/= (last inx) 0)               ; 不封闭线判断是否是两端点,是退出
  36.             (/= (car inx) (1- num))
  37.           )
  38.         )
  39.         (setq ret 2)                       ; 顶点在弧线段返回
  40.         (= (xdrx_polyline_segtype e index) "kLine")
  41.         (= (xdrx_polyline_segtype e (car inx)) "kLine")
  42.       )
  43.     (progn
  44.       (setq eL1 (xdrx_polyline_getLineSegAt e (car inx))
  45.             eL2 (xdrx_polyline_getLineSegAt e index)
  46.             int (car (xdrx_curve_getinters eL1 eL2 3))
  47.             v1 (xdrx_vector_normalize (mapcar
  48.                                         '-
  49.                                         (car eL1)
  50.                                         (cadr eL1)
  51.                                       )
  52.                )
  53.             v2 (xdrx_vector_normalize (mapcar
  54.                                         '-
  55.                                         (last eL2)
  56.                                         (car eL2)
  57.                                       )
  58.                )
  59.       )
  60.       (setq p_1 (mapcar
  61.                   '+
  62.                   int
  63.                   (xdrx_vector_product v1 dis1)
  64.                 )
  65.       )
  66.       (cond
  67.         ((= oper "C")
  68.           (setq p_2 (mapcar
  69.                       '+
  70.                       int
  71.                       (xdrx_vector_product v2 dis2)
  72.                     )
  73.           )
  74.         )
  75.         ((= oper "F")
  76.           (setq p_2 (mapcar
  77.                       '+
  78.                       int
  79.                       (xdrx_vector_product v2 dis1)
  80.                     )
  81.           )
  82.           (setq an (xdrx_math_acos (xdrx_vector_dotproduct v2 v1)))
  83.           (if (< an 0.0)
  84.             (setq an (+ (* 2 PI) an))
  85.           )
  86.           (if (> an pi)
  87.             (setq an (- (* 2 PI) an))
  88.           )
  89.           (setq anc (- pi an)
  90.                 dis (abs (* dis1 (xdrx_math_tan (/ anc 2.0))))
  91.                 dis1 dis
  92.                 dis2 dis
  93.                 bulge (xdrx_math_tan (/ anc 4.0))
  94.           )
  95.         )
  96.       )
  97.       (if (minusp (xdrx_points_area p_1 int p_2))
  98.         (setq bulge (- bulge))
  99.       )
  100.       (setq ret 1)                       ; 算点不在曲线上
  101.       (if (and
  102.             (xdrx_point_ison p_1 e)
  103.             (xdrx_point_ison p_2 e)
  104.           )
  105.         (progn
  106.           (setq next (cadr inx))
  107.           (xdrx_polyline_addVertexAt e index p_1)
  108.           (if (= next 0)
  109.             (progn
  110.               (xdrx_polyline_setPointAt e (1+ index) p_2)
  111.             )
  112.             (progn
  113.               (xdrx_polyline_setPointAt e (1+ index) p_2)
  114.             )
  115.           )
  116.           (if (= oper "F")
  117.             (xdrx_polyline_setBulgeAt e index bulge)
  118.           )
  119.           (setq xrecLst (xdrx_xdata_get e "XD_FILLET"))
  120.           (if (not (member index xreclist))
  121.             (setq xrecLst (cons index xrecLst))
  122.           )
  123.           (setq xrecLst (vl-sort xrecLst '<)
  124.                 xdata2 (member index xrecLst)
  125.                 xdata (append
  126.                         (reverse (member index (reverse xrecLst)))
  127.                         (mapcar
  128.                           '(lambda (x)
  129.                              (1+ x)
  130.                            )
  131.                           (cdr xdata2)
  132.                         )
  133.                       )
  134.           )
  135.           (apply
  136.             'xdrx_xdata_set
  137.             (cons e (cons "XD_FILLET" xdata))
  138.           )
  139.           (setq ret 0)                       ; 成功
  140.         )
  141.       )
  142.     )
  143.   )
  144.   ret
  145. )

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

签到天数: 616 天

连续签到: 1 天

[LV.9]以坛为家II

已领礼包: 1305个

财富等级: 财源广进

发表于 2013-10-30 13:09:08 | 显示全部楼层
DEAR SIR,

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

使用道具 举报

签到天数: 1388 天

连续签到: 13 天

[LV.10]以坛为家III

已领礼包: 604个

财富等级: 财运亨通

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

使用道具 举报

签到天数: 1012 天

连续签到: 1 天

[LV.10]以坛为家III

点击这里给我发消息

已领礼包: 1255个

财富等级: 财源广进

发表于 2013-11-2 16:13:45 来自手机 | 显示全部楼层
写了扩展数据才知道哪个是倒角线哪个是直线
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

发表于 2017-2-22 16:43:34 | 显示全部楼层

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

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

发表于 2017-2-22 16:47:48 | 显示全部楼层
请问加载这个应用程序以后是输入什么命令啊?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

签到天数: 346 天

连续签到: 1 天

[LV.8]以坛为家I

点击这里给我发消息

已领礼包: 96个

财富等级: 招财进宝

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

使用道具 举报

签到天数: 34 天

连续签到: 1 天

[LV.5]常住居民I

已领礼包: 63个

财富等级: 招财进宝

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

使用道具 举报

签到天数: 40 天

连续签到: 3 天

[LV.5]常住居民I

已领礼包: 15个

财富等级: 恭喜发财

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

使用道具 举报

签到天数: 1388 天

连续签到: 13 天

[LV.10]以坛为家III

已领礼包: 604个

财富等级: 财运亨通

发表于 2018-1-12 15:52:56 | 显示全部楼层
N版,为什么两条多段线(vl-cmdf "_.fillet" (entsel) (entsel))倒不了角,手工却可以?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2018-10-22 18:49 , Processed in 0.165338 second(s), 47 queries , Gzip On, WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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