using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace chaunggaidong
{
[Transaction(TransactionMode.Manual)]
public class Class1 : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uiDoc = commandData.Application.ActiveUIDocument;
Document doc = uiDoc.Document;
//根据楼层选择门窗;
//做一个标高收集器,收集标高后将某一项作为案例的标高,再做门窗的过滤器收集门窗,并根据标高过滤器筛选特定的标高
//下面开始做标高收集器
FilteredElementCollector levelcollector = new FilteredElementCollector(doc);
IList<ElementId> levelID = levelcollector.OfClass(typeof(Level)).ToElementIds().ToList();
Level level = doc.GetElement(levelID[0]) as Level;
//创建一个标高过滤器
ElementLevelFilter levelFilter = new ElementLevelFilter(level.Id);
//做一个过滤器收集门窗
FilteredElementCollector eleFilter = new FilteredElementCollector(doc);
//做一个门窗过滤器
ElementCategoryFilter windowsFilter = new ElementCategoryFilter(BuiltInCategory.OST_Windows);
ElementCategoryFilter doorFilter = new ElementCategoryFilter(BuiltInCategory.OST_Doors);
LogicalOrFilter logicalOrFilter = new LogicalOrFilter(windowsFilter, doorFilter);
//收集门窗,并用族实例来剔除上面过滤器里面族类型的内容
List<Element> col = eleFilter.WherePasses(logicalOrFilter).OfClass(typeof(FamilyInstance)).ToList();
//获得门窗的几何数据
Options options = new Options();
Transaction transaction = new Transaction(doc, "创建洞口");
transaction.Start();
foreach (Element element in col)
{
GeometryElement geometry = element.get_Geometry(options);
BoundingBoxXYZ boundingBoxXYZ = geometry.GetBoundingBox();
FamilyInstance familyInstance = element as FamilyInstance;
Wall wall = familyInstance.Host as Wall;
Opening opening = doc.Create.NewOpening(wall, boundingBoxXYZ.Min, boundingBoxXYZ.Max);
doc.Delete(element.Id);
}
transaction.Commit();
return Result.Succeeded;
}
}
}
删除门窗改洞口
最新推荐文章于 2021-07-25 10:42:05 发布