You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Revit API实现自动放置房间?求相关示例

借助Revit API自动放置房间的实现方案

核心前提

Revit中创建房间的必要条件:存在闭合的边界环(可由墙体围合,或手动创建房间边界线生成),且需在指定的平面视图中创建(房间仅在平面视图中可见并可编辑)。

实现步骤与代码示例

以下是C#实现自动创建房间的核心代码,包含边界创建、事务处理等关键环节:

using Autodesk.Revit.DB;
using Autodesk.Revit.UI;

public void AutoCreateRooms(UIApplication uiApp)
{
    UIDocument uiDoc = uiApp.ActiveUIDocument;
    Document doc = uiDoc.Document;

    // 筛选目标平面视图(示例取第一个楼层平面,实际可按名称/ID筛选)
    ViewPlan targetFloorPlan = new FilteredElementCollector(doc)
        .OfClass(typeof(ViewPlan))
        .Cast<ViewPlan>()
        .FirstOrDefault(v => v.ViewType == ViewType.FloorPlan);

    if (targetFloorPlan == null)
    {
        TaskDialog.Show("提示", "未找到可用的楼层平面视图");
        return;
    }

    // 示例:手动构建闭合矩形边界(实际场景可从现有墙体提取曲线)
    XYZ[] points = new XYZ[]
    {
        new XYZ(0, 0, 0),
        new XYZ(12, 0, 0),
        new XYZ(12, 10, 0),
        new XYZ(0, 10, 0)
    };

    CurveLoop boundaryLoop = new CurveLoop();
    for (int i = 0; i < points.Length; i++)
    {
        int nextIndex = (i + 1) % points.Length;
        boundaryLoop.Append(Line.CreateBound(points[i], points[nextIndex]));
    }

    // 事务内执行创建操作(Revit API修改必须在事务中)
    using (Transaction trans = new Transaction(doc, "自动生成房间"))
    {
        trans.Start();
        Room createdRoom = Room.Create(doc, targetFloorPlan.Id, boundaryLoop);
        if (createdRoom != null)
        {
            // 设置房间属性
            createdRoom.Name = "办公区";
            createdRoom.Number = "R-001";
        }
        trans.Commit();
    }
}

关键注意事项

  • 事务强制要求:所有修改Revit文档的操作必须包裹在Transaction中,否则会抛出异常。
  • 边界有效性:CurveLoop必须完全闭合、无自交,且处于同一平面内,否则Room.Create会返回null。
  • 从墙体提取边界:如果需要基于现有墙体自动识别空间,可通过Wall.LocationCurve获取墙体曲线,组合成闭合环;或使用SpaceBoundaryUtils类提取已有的空间边界(需注意空间边界的类别设置)。
  • 视图与标高:房间的标高由目标平面视图的标高决定,创建后若需调整,可修改Room.LevelId属性。

内容的提问来源于stack exchange,提问作者user16918900

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:53:11