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

问题来源:
用grasshopper自带的Soild Intersection电池总是有部分实体运算不出来。
解决方式:
去查了下Rhinocommom的布尔运算方法,发现带有个tolerance参数,允许我们自行调整布尔运算的容差,调用这个函数就把问题解决了。
简述下我写这个电池的思路。
采用的是Rhinocommom自带的CreateBooleanIntersection Method。

有两个需要注意的点:
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名就好
