1.获取房间
2.获取房间边界
3.创建楼板
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.ApplicationServices;
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB.Architecture;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Autodesk.Revit.UI.Selection;
using Autodesk.Revit.DB.Plumbing;
namespace Test
{
[Transaction(TransactionMode.Manual)]
public class TestCommand : IExternalCommand
{
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument Uidoc = commandData.Application.ActiveUIDocument;
Document Doc = Uidoc.Document;
List<Element> roomlist = GetList(Doc, BuiltInCategory.OST_Floors);
List<Element> floorlist = GetList(Doc,BuiltInCategory.OST_Floors);
if (roomlist.Count()>0)
{
Transaction transaction = new Transaction(Doc,"newfloor");
transaction.Start("newfloor");
TaskDialog.Show("TITLE",roomlist.Count().ToString());
Doc.Create.NewFloor(Roomboundry(roomlist),false);
transaction.Commit();
}
else
{
TaskDialog.Show("title","模型中没有创建房间");
}
return Result.Succeeded;
}
public List<Element> GetList(Document document,BuiltInCategory builtInCategory)
{
FilteredElementCollector floorcollector = new FilteredElementCollector(document);
floorcollector.OfCategory(builtInCategory);
List<Element> roomlist = floorcollector.ToList();
return roomlist;
}
public CurveArray Roomboundry(List<Element> roomlist)
{ List<CurveLoop> tempcurcearrays = new List<CurveLoop>();
foreach (Element room in roomlist)
{
IList<IList<BoundarySegment>> boundarySegments = (room as Room).GetBoundarySegments(new SpatialElementBoundaryOptions());
foreach (IList<BoundarySegment> boundaries in boundarySegments)
{
CurveLoop curveloop = new CurveLoop();
foreach (BoundarySegment boundary in boundaries)
{
curveloop.Append(boundary.GetCurve());
}
tempcurcearrays.Add(curveloop);
}
}
List<double> volumn = new List<double>();
foreach (CurveLoop curveloop in tempcurcearrays)
{ IList<CurveLoop> curves = new List<CurveLoop>();
curves.Add(curveloop);
volumn.Add(GeometryCreationUtilities.CreateExtrusionGeometry(curves,XYZ.BasisZ,1).Volume);
}
CurveArray array = new CurveArray();
foreach (Curve curve in tempcurcearrays.ElementAt(volumn.IndexOf(volumn.Max())))
{
array.Append(curve);
}
return array;
}
}
}