Revit在进行场地建模时,需要在场地平面上挖洞,则需要再场地平面上创建建筑地坪,根据查询API,得到BuildingPad.Create方法来进行生成。入参为类型ID和轮廓线。
public static BuildingPad Create(
Document document,
ElementId buildingPadTypeId,
ElementId levelId,
IList<CurveLoop> curveLoops
)
轮廓线我用的是闭合的模型线,直接框选即可,建筑地坪类型ID的用过滤器来过滤。
FilteredElementCollector levels = new FilteredElementCollector(doc);//创建收集器
ViewPlan viewPlan = levels.OfClass(typeof(ViewPlan)).FirstOrDefault<Element>(m => m.Name == "场地") as ViewPlan;//过滤得到标高1
if (null == viewPlan)
{
viewPlan = levels.OfClass(typeof(ViewPlan)).FirstOrDefault<Element>(m => m.Name == "标高 1") as ViewPlan;//过滤得到标高1
}
Level level = viewPlan.GenLevel;
Transaction transaction = new Transaction(doc, "1");
transaction.Start();
var eles = uidoc.Selection.PickObjects(ObjectType.Element, "请框选构件!");
List<CurveLoop> curves = new List<CurveLoop>();
CurveLoop curveLoop = new CurveLoop();
List<Curve> curs = new List<Curve>();
foreach (var tab in eles)
{
Element ele = doc.GetElement(tab);
if (ele != null && ele is ModelCurve)
{
ModelCurve modelCurve = ele as ModelCurve;
Curve curve = modelCurve.GeometryCurve;
curs.Add(curve);
}
}
curveLoop = CurveLoop.Create(curs);
curves.Add(curveLoop);
List<XYZ> newList = new List<XYZ>();
var famType = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_BuildingPad).OfClass(typeof(BuildingPadType)).FirstOrDefault(x => x.Name == "基坑地面");
var element = BuildingPad.Create(doc, famType.Id, level.Id, curves);
var para = element.LookupParameter("自标高的高度偏移");
if (para != null)
{
para.Set(-5000 / 304.8);
}
transaction.Commit();
最后运行代码,即可创建场地建筑地坪,在场地平面上挖坑,下面是效果图。