Revit二次開發——軟碰撞基本思路

構建某個距離範圍內與其他構建由碰撞,則修改其顏色

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章