本文演示Revit文件中的碰撞检测。

1.用Revit绘制模型

2.碰撞检测

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using System.Linq;
using System.Windows.Forms;

namespace RevitAddin4
{
    [TransactionAttribute(TransactionMode.Manual)]
    public class RevitAddin : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            UIDocument uiDoc = commandData.Application.ActiveUIDocument;
            Document doc = uiDoc.Document;
            //当前视图下的结构梁
            FilteredElementCollector collector = new FilteredElementCollector(doc,doc.ActiveView.Id);
            collector.OfCategory(BuiltInCategory.OST_StructuralFraming).OfClass(typeof(FamilyInstance));
                       
            FilteredElementCollector col = new FilteredElementCollector(doc);
            foreach (FamilyInstance item in collector)
            {
                string str = "Host element: \n" + item.Name + "\n";
                //碰撞检测,检测与结构梁碰撞的构件
                ElementIntersectsElementFilter filter = new ElementIntersectsElementFilter(item);
                col.WherePasses(filter);
                if (col.Count() == 0)
                    continue;

                 str += "Sub element: " + "\n";
                foreach (var c in col)
                {
                    FamilyInstance curve = c as FamilyInstance;
                    if (curve == null)
                        continue;
                    str += c.Name + "\n";
                }
                MessageBox.Show(str, "信息");
            }          
            return Result.Succeeded;
        }
    }
}

    运行结果:

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐