=========【更多高级应用请关注公众号】========
===================================
创建Room的方法是Document.Create.NewRoom,它有很多重载,下面作简要介绍。
① Room NewRoom(Phase phase):给定Phase,创建一个未放置的房间。
② NewRooms2(Phase,int count):在给定的Phase上创建多个房间,count代表房间 的个数。
•如果在该放置点有闭合回路(Plan Circuit),那么创建的房间会自动绑定该回路。
•如果在该放置点没有房间边界可以绑定,会有警告框弹出:房间不在完全闭合的区
域中。
•如果room为空,则创建一个房间。
•如果room代表的房间没有被放置,首先检查该房间的Phase是不是和PlanCircuit一致。 一致的话则在制定的PlanCircuit放置该房间,不一致的话会有异常ArgumentException抛出。
Level level; // 此处省略获取Level的代码
Phase phase; //此处省略获取Phase的代码
void CreatRoom(Autodesk.Revit.DB.Document document)
{
var defaultView = new FilteredElementCollector(document)
.WherePasses(new ElementClassFilter(typeof(View)))
.Cast<View>()
.Where(v => v.GenLevel != null && v.GenLevel.Id == level.Id)
.FirstOrDefault();
// 确保视图不为空
if (defaultView != null)
{
var defaultPhase = defaultView.get_Parameter(BuiltInParameter.VIEW_PHASE);
if (defaultPhase != null && defaultPhase.AsElementId() == phase.Id)
{
using (Transaction transaction = new Transaction(document))
{
transaction.Start("get_PlanTopology");
var circuits = document.get_PlanTopology(level, phase).Circuits;
transaction.Commit();
foreach (PlanCircuit planCircuit in circuits)
{
document.Create.NewRoom(null, planCircuit);
}
}
}
}
}
⑤ NewRooms2(Level):给定标高,在所有可用的闭合区域创建房间,Phase为当前默认的 Phase。等同于调用 NewRooms2(Level,theDefaultPhase),其中 theDefaultPhase是当前默认的Phase。
注意:Level的项目阶段(Level对应的默认的视图的项目阶段)必须和给定的Phase保持一致,否则就会有异常抛出。
(SketchPlane sketchPlane,CurveArray curves,View view)。给定—个草图视图,一个曲 线列表和一个平面视圈,创建一组房间边界曲线(ModelCurveAiray)。调用该方法(或多次 调用)形成一个闭合区域之后,取该区域的一个点,再调用NewRoom就可以创建房间。