Revit:处理闭合回路中Curve方向的过程中出现的循环问题

首先看一段代码:

Autodesk.Revit.DB.XYZ temp = lines.get_Item(0).GetEndPoint(1);Curve temCurve = lines.get_Item(0);Profile.Append(temCurve);while (Profile.Size != lines.Size){temCurve = GetNext(lines, temp, temCurve);if (Math.Abs(temp.X - temCurve.GetEndPoint(0).X) < PRECISION&& Math.Abs(temp.Y - temCurve.GetEndPoint(0).Y) < PRECISION){temp = temCurve.GetEndPoint(1);}else{temp = temCurve.GetEndPoint(0);}Profile.Append(temCurve);}

稍微解释一下,获取到的Curve集合lines,对其进行排序,使curve首尾相连,且方向一致(即下一条线的起点与上一条线的终点重合),按顺序添加到profile中。

之前碰巧做过这个功能,倒是也实现了,但是中间的逻辑相对复杂:先将随便一条线添加到一个新的newlist中,然后对其中的第一条线:newlist.last进行判断,找到与其有重合点的第二条线,然后添加到newlist中,然后再对newlist.last进行判断。。。。同时,原有的oldlist中已经筛选出来的元素,还必须得删除掉,不然循环进行不下去。过程中的逻辑毕竟繁琐,且需对list进行删除操作(倒序)。

而上面这段贴出来的代码则极大的简化了我之前的代码逻辑:首先取到第一条曲线temp,然后GETnext,就是与之相连的曲线;

然后取到以后呢,将与之相连的曲线赋值给变量temp。这样的话,每次循环,操作对象都是最新的那条曲线,免去了取最后一条。

绝妙的是这个while循环,我第一遍是没看懂,为什么没有内部变量i,i++这样的东西?这就对了,看似只有一层循环,其实执行的是两层循环的功能。全有Bool表达式来控制,一直到PROFILE全部取到。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部