構建某個距離範圍內與其他構建由碰撞,則修改其顏色
Element elem = doc.GetElement(uiDoc.Selection.PickObject(ObjectType.Element, "Select element"));
try
{
Solid solid = GetElementSolid(elem);
List<Face> faces = GetFacesFromSolid(solid);
foreach (Face face in faces)
{
PlanarFace planarFace = face as PlanarFace;
//忽略掉頂面和底面
if (planarFace.FaceNormal.IsAlmostEqualTo(new XYZ(0, 0, 1))
|| planarFace.FaceNormal.IsAlmostEqualTo(new XYZ(0, 0, -1)))
{
continue;
}
IList<CurveLoop> proiles = planarFace.GetEdgesAsCurveLoops();//由face轉變爲拉伸所需要的截面profile
Solid solidNew = GeometryCreationUtilities.CreateExtrusionGeometry(proiles, planarFace.FaceNormal, 20/304.8);//生成拉伸體Solid
using (Transaction trans = new Transaction(doc,"Create"))
{
trans.Start();
//DirectShape ds = DirectShape.CreateElement(doc, new ElementId(BuiltInCategory.OST_GenericModel));
//ds.SetShape(new GeometryObject[] { solidNew });//生成形狀
FilteredElementCollector collector = new FilteredElementCollector(doc).OfClass(typeof(Wall));
ElementIntersectsSolidFilter solidFilter = new ElementIntersectsSolidFilter(solidNew);
collector.WherePasses(solidFilter);
foreach (Element elemInter in collector)
{
ChangeColor(elemInter);//碰撞改變顏色
}
trans.Commit();
}
}
return Result.Succeeded;
}
catch (Exception exc)
{
message = exc.Message;
return Result.Failed;
}
整體代碼參照:
https://download.csdn.net/download/qq_43026206/12493104