千家信息网

Revit接触式过滤的方法

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,这篇文章主要介绍"Revit接触式过滤的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Revit接触式过滤的方法"文章能帮助大家解决问题。选出和拉伸实体有
千家信息网最后更新 2025年01月23日Revit接触式过滤的方法

这篇文章主要介绍"Revit接触式过滤的方法"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"Revit接触式过滤的方法"文章能帮助大家解决问题。

选出和拉伸实体有接触的柱子:

List beam = new List();

//根据柱子的截面来进行实体创建取得有交点的柱子

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 loops = new List();

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);

}

关于"Revit接触式过滤的方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0