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全部取到。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值