最近发现很多小伙伴还在关注我的公众号,忙里偷闲继续更新下去吧。
这期讲一个接触式过滤选择,什么是接触式过滤选择呢?又有什么作用呢?请继续往下看……
下面是一个例子,选出和拉伸实体有接触的柱子:
List<ElementId> beam = new List<ElementId>();
//根据柱子的截面来进行实体创建取得有交点的柱子
foreach (Element bttt in fil)
{
FamilyInstance bb = bttt as FamilyInstance;
double lenght = bb.Symbol.GetParameters("截面宽度")[0].AsDouble();//获得柱子的截面宽度
beam.Add(bttt.Id);
LocationPoint ppp = bttt.Location as LocationPoint;
XYZ pt = ppp.Point;
Level le = doc.GetElement(bb.LevelId) as Level;//柱子所在楼层的标高
//从柱子的中心点减去截面宽度来形成四个点
XYZ pt1 = new XYZ(pt.X - lenght, pt.Y - lenght, le.Elevation);
XYZ pt2 = new XYZ(pt.X + lenght, pt.Y - lenght, le.Elevation);
XYZ pt3 = new XYZ(pt.X + lenght, pt.Y + lenght, le.Elevation);
XYZ pt4 = new XYZ(pt.X - lenght, pt.Y + lenght, le.Elevation);
//把四个点连成一个曲线
CurveLoop profile = new CurveLoop();
profile.Append(Line.CreateBound(pt1, pt2));
profile.Append(Line.CreateBound(pt2, pt3));
profile.Append(Line.CreateBound(pt3, pt4));
profile.Append(Line.CreateBound(pt4, pt1));
//将曲线放入集合里
List<CurveLoop> loops = new List<CurveLoop>();
loops.Add(profile);
//拉伸方向
XYZ vector = new XYZ(0, 0, 1);
//创建实体
Solid solid = GeometryCreationUtilities.CreateExtrusionGeometry(loops, vector, 10);
//获得本视图中和所创建实体有碰撞的实体
FilteredElementCollector collector = new FilteredElementCollector(doc, doc.ActiveView.Id);
ElementIntersectsSolidFilter solidFilter = new ElementIntersectsSolidFilter(solid, false);
collector.WherePasses(solidFilter);
}
中间的注释都很清晰了,我在这就不具体的做过多的解释了,时间有限,下期见。。。。。。