欢迎光临散文网 会员登陆 & 注册

【Rhino建模】基于Grasshopper与Rhinocommmon用C#实现批量Closed Breps布尔的小实践。

2022-11-21 22:58 作者:SayLeftTurnRight  | 我要投稿

问题来源:

用grasshopper自带的Soild Intersection电池总是有部分实体运算不出来。

解决方式:

去查了下Rhinocommom的布尔运算方法,发现带有个tolerance参数,允许我们自行调整布尔运算的容差,调用这个函数就把问题解决了。


简述下我写这个电池的思路。

采用的是Rhinocommom自带的CreateBooleanIntersection Method。

Brep.CreateBooleanIntersection Method            https://developer.rhino3d.com/api/RhinoCommon/html/M_Rhino_Geometry_Brep_CreateBooleanIntersection.htm

有两个需要注意的点:

1·由于布尔运算有可能产生多个实体,所以返回的是一组值,return的是一个array,不是gh常用的List。

2·当两个Brep没有相交时或者运算错误时,return值是NULL。但要做的是批量运算,这可能会卡住其它Brep的运算。


Brep.CreateBooleanIntersection Method 的返回值

处理方式:

1·遍历一遍返回的Brep array的所有Brep,赋值给输出端的List。

2.增加判断语句,只有返回的Brep array为非NULL时,才会进行赋值。

 private void RunScript(Brep brep, List<Brep> breps, int t, ref object BREPS)

  {

   //声明一个BrepList,用来储存运算结果

    List <Brep> inters = new List<Brep>();

    //遍历输入的所有Brep

    foreach(Brep b in breps)

    {

      Brep[] inter1 = Brep.CreateBooleanIntersection(brep, b, t);

      //判断array为非NULL

      if(inter1 != null)

      {

        //遍历布尔返回的array中所有Brep

        foreach(Brep bb in inter1)

        {

          inters.Add(bb);

        }

      }

    }

    BREPS = inters;



调整了下tolerance,实现的很完美。

想换成其他布尔运算只需要改下Method名就好



【Rhino建模】基于Grasshopper与Rhinocommmon用C#实现批量Closed Breps布尔的小实践。的评论 (共 条)

分享到微博请遵守国家法律