选取劣弧,如何判断劣弧自身是凸面朝上还是凸面朝下
本帖最后由 Kye 于 2015-1-8 15:46 编辑这个问题考虑很长时间,找不到一点思路,特求助坛上的老师指点下,提供的思路,谢谢各位老师,情况是:一根直线和劣弧有共同点,在直线向上偏移后,劣弧也向上偏移,如何知道劣弧自身是凸面朝上还是凸面朝下以便在下面程序中(感谢smartstar老师的程序及程序的原作者)加个判断,如果凸面朝上,用大半径,如果凸面朝下,用小半经。劣弧出现位置:以绕共同点为圆心旋转360度任一位置(与直线交点的只有一个,不会出现直线穿过劣弧,多于两个交点这种情况),图片上劣弧凸面朝上,实际也会出现凸面朝下这个情况,但单个劣弧只会出现其中的一种情况;图片中第一个起始情况,最后一个是结果,红箭头表示变化方向,也不知道把问题说清楚没有,谢谢各位大侠耐心
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;★4★arcsx;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun arcsx (enamedist / bigarc entdata
entdata1newlayer rnew rnewlist roldlist
smallarc
)
(setq entdata (entget ename))
(setq roldlist (assoc 40 entdata)
rnew(cdr roldlist)
rnew(+ rnew (* dist 0.5))
rnewlist (cons 40 rnew)
newlayer (assoc 8 entdata)
entdata1 (subst rnewlist roldlist entdata)
entdata1 (subst newlayer (assoc 8 entdata1) entdata1)
)
(setq ss (entmake entdata1))
(setq bigarc (vlax-ename->vla-object (entlast)))(setq rnew(- rnew dist)
rnewlist (cons 40 rnew)
newlayer (assoc 8 entdata)
entdata1 (subst rnewlist roldlist entdata)
entdata1 (subst newlayer (assoc 8 entdata1) entdata1)
)
(entmake entdata1)
(setq smallarc (vlax-ename->vla-object (entlast)))
(list smallarc bigarc)
)
你这不是双边偏移吗????? ysq101 发表于 2015-1-8 15:55 static/image/common/back.gif
你这不是双边偏移吗?????
谢谢老师!smartstar老师的程序是双向偏移,实际情况是很多线共一个端点,所以需要先加个判断 串接再偏移如何 本帖最后由 llsheng_73 于 2015-1-8 16:58 编辑
你的问题不是要判断它向上还是向下,那向左或者向右呢?
建议考虑偏移后求交点,用交点和圆心改算起始(终止)角或者进行打断或者延伸(应该打断哪一边需要通过计算来确定)
如果只是直线和弧相接,可以先转为多线段,进行拼接后再偏移(如果必要再炸开)这样基本不涉及计算和DXF数据,可以全用command堆出来
如果可能还有其它线如spline,可以做成块进行缩放(如果必要再炸开)但是它的插入点不一定好计算
当然,如果真有需要判断弧向哪边,可以用弧中点和它的圆心计算方位角来确定
Andyhon 发表于 2015-1-8 16:20 static/image/common/back.gif
串接再偏移如何
看楼主的意思就是这样 本帖最后由 Kye 于 2015-1-9 22:35 编辑
llsheng_73 发表于 2015-1-8 16:41 http://bbs.mjtd.com/static/image/common/back.gif
你的问题不是要判断它向上还是向下,那向左或者向右呢?
建议考虑偏移后求交点,用交点和圆心改算起始(终止 ...
谢谢llsheng_73 老师,foreach 函数还是从您那里学到怎么用的。我说的不严谨,我的问题是判断劣弧朝向外还是朝向内,顶楼图片我假定为弧朝向外,公司电脑也没有CAD,用CAXA做的,没有图片真难说清楚,请见下面图片,我参考了smartstar老师的程序改的 http://bbs.mjtd.com/thread-93681-1-1.html,我的思路是先将直线按照角度排序,然后将相邻直线从第一条直线开始向上(以交点为圆心逆时针)偏移,然后与相邻的直线(以交点为圆心顺时针)偏移线用fillet 修整下 (command "fillet" enline1 enline2),enline1 第一条直线的偏移线图元,enline2 相邻直线的偏移线图元;一个循环后,再次从第二条开始前面类似循环,实现了将所有相邻的偏移线fillet一遍
现在我希望就是将图片中一条直线改为ARC线,进行类似偏移,ARC线利用角度(起始点与终点的角度)也可排序,顶楼程序可以实现圆弧双向偏移,因为是循环两次,所以需要判断弧朝向内外,请老师能否帮忙将您帖子中的最后一点讲细点
我自己理解判断条件似乎应该是终止角度减去起始角度绝对值大于或小于某个值,测试了好像没有什么规律
Andyhon 老师及您讲的转为多段线是一个意思吧?我开始也怎么想过,看过您有个帖子讲解过这个问题,难度有点太深,如果转为多段线,可能更好,但其他共点的线偏移也不好处理,这个问题等我水平上去再去想这个问题 Kye 发表于 2015-1-8 23:25 static/image/common/back.gif
谢谢llsheng_73 老师,foreach 函数还是从您那里学到怎么用的。我说的不严谨,我的问题是判断劣弧朝向外 ...
楼主哪个专业??用CAXA?? Kye 发表于 2015-1-8 23:25 static/image/common/back.gif
谢谢llsheng_73 老师,foreach 函数还是从您那里学到怎么用的。我说的不严谨,我的问题是判断劣弧朝向外 ...
用CAD画好调入CAXA不是更好?? 本帖最后由 Kye 于 2015-1-15 16:12 编辑
就llsheng_73 老师最后一句思路,起始点与结束点、起始点与圆弧中点(圆心点)的方位角,凸面朝上朝下这个问题算解决了
但最后生成的直线与圆弧fillet处理很乱,这个是新问题,把程序贴出,我也搞不定了,如有哪位热心的大侠可帮解答,在此谢谢了
对ysq101 大侠提出的建议表示谢谢,其实CAXA 我也不常用
程序也不知道什么原因,偶尔能贴上,大多数情况下贴不上,只好作为附件吧
页:
[1]