start

[Transaction(TransactionMode.Manual)]
[Regeneration(RegenerationOption.Manual)]
public class CreateRoomAndCopyProperties : IExternalCommand
{
    public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements)
    {
        UIDocument uiDoc = cmdData.Application.ActiveUIDocument;
        Document doc = uiDoc.Document;
        Selection sel = uiDoc.Selection;
        //1.选择房间
        RoomFilter filter = new RoomFilter();
        Reference refRoom = sel.PickObject(ObjectType.Element, filter, "选择房间:");
        Room room = doc.GetElement(refRoom) as Room;
        //2.获取目标房间属性
        string roomName = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString();
        string roomDepartment = room.get_Parameter(BuiltInParameter.ROOM_DEPARTMENT).AsString();
        string roomOccupancy = room.get_Parameter(BuiltInParameter.ROOM_OCCUPANCY).AsString();
        //循环创建房间
        bool bContinue = true;
        while (bContinue)
        {
            XYZ point;
            try
            {
                //3.获取用户输入的点
                point = sel.PickPoint("点击要创建的房间中的一点:");
            }
            catch (Autodesk.Revit.Exceptions.InvalidOperationException ex)
            {
                bContinue = false;
                break;
            }
            catch (Exception)
            {
                bContinue = false;
                break;
            }
            //4.根据选中点,创建房间
            Transaction ts = new Transaction(doc, "http://revit.5d6d.com");
            ts.Start();
            //当前视图的楼层doc.ActiveView.GenLevel
            Room newRoom = doc.Create.NewRoom(doc.ActiveView.GenLevel, new UV(point.X, point.Y));
            if (newRoom == null)
            {
                msg = "创建房间失败。";
                return Result.Failed;
            }
            //5.读取房间的中心位置
            //简单房间只有一个实体
            GeometryObjectArray geomObjectArray = newRoom.ClosedShell.Objects;//
            GeometryObject geoObject = geomObjectArray.get_Item();
            Solid roomSolid = geoObject as Solid;
            //计算质心
            XYZ centriod = roomSolid.ComputeCentroid();
            //下降
            XYZ roomCenter = new XYZ(centriod.X, centriod.Y, doc.ActiveView.GenLevel.Elevation);
            //6.修改房间十字叉的位置
            LocationPoint roomLocation = newRoom.Location as LocationPoint;
            roomLocation.Point = roomCenter;
            //7.创建房间标签,放在中心
            RoomTag tag = doc.Create.NewRoomTag(newRoom, new UV(roomCenter.X, roomCenter.Y), doc.ActiveView);
            //8.赋值三个参数值,名称,用途,部门
            newRoom.get_Parameter(BuiltInParameter.ROOM_NAME).Set(roomName);
            newRoom.get_Parameter(BuiltInParameter.ROOM_DEPARTMENT).Set(roomDepartment);
            newRoom.get_Parameter(BuiltInParameter.ROOM_OCCUPANCY).Set(roomOccupancy);             ts.Commit();
        }         return Result.Succeeded;
    }
    public class RoomFilter : ISelectionFilter
    {         public bool AllowElement(Element elem)
        {
            return elem is Room;
        }         public bool AllowReference(Reference reference, XYZ position)
        {
            return true;
        }
    }
}

url:http://greatverve.cnblogs.com/p/CreateRoomAndCopyProperties1.html

Revit API创建房间的更多相关文章

  1. 【Revit API】梁构件支座检查算法

    一.前言         应该是第二次写关于Revit API的博文了.虽然在BIM企业中工作,从事桌面BIM软件开发,但是我是不怎么喜欢写Revit API相关的代码.平时更多的是在写界面展示,架构 ...

  2. Revit API 判断一个构件在某个视图中的可见性

    查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...

  3. Revit API 操作共享参数和项目参数

    1.获取共享参数 private string GetSharInfo(Autodesk.Revit.ApplicationServices.Application revitApp) { Strin ...

  4. Revit API射线法读取空间中相交的元素

    Revit API提供根据射线来寻找经过的元素.方法是固定模式,没什么好说.关键代码:doc.FindReferencesWithContextByDirection(ptStart, (ptEnd  ...

  5. Revit API 加载族并生成实例图元

    在Revit API中加载族可以使用Doc.LoadFamily方法,传入要加载的族文件路径名,但是这种方式有一种缺点,就是如果族文件在当前工程中没有加载的话则返回成功,如果已经加载过,则返回失败,也 ...

  6. 【Revit API】调用Revit内部命令PostableCommand

    Revit内置了一些命令,直接调用Revit操作方式. 可以去API文档查询PostableCommand枚举,还是很多的. 话不多说,直接上代码 var commandId = RevitComma ...

  7. 【Revit API】创建相机视角

    在Revit中有一个相机功能可以以相机视角产生一个视图.一开始我在Revit2016的API文档中找关键词Camera,但是没什么收获. 其实这个相机功能的真正核心是创建透视视图:View3D.Cre ...

  8. Revit API创建一个拷贝房间内对象布局命令

    本课程演示创建一个拷贝房间内对象布局命令,完整演示步骤和代码.这个命令把选中房间内的对象复制到其它选中的一个或多个房间中,而且保持与源房间一致的相对位置.通过本讲座使听众知道创建一个二次开发程序很简单 ...

  9. Revit API判断是不是柱族模板

    OwnerFamily即族模板.获取类别的方法:Document.Settings.Categories.get_Item(BuiltInCategory.OST_Columns); //判断是不是柱 ...

随机推荐

  1. Android ImageView 的scaleType 属性图解

    ImageView 是 Android 中最常用的控件之一,而在使用ImageView时,必不可少的会使用到它的scaleType属性.该属性指定了你想让ImageView如何显示图片,包括是否进行缩 ...

  2. Annoy 近邻算法

    Annoy 随机选择两个点,以这两个节点为初始中心节点,执行聚类数为2的kmeans过程,最终产生收敛后两个聚类中心点 二叉树底层是叶子节点记录原始数据节点,其他中间节点记录的是分割超平面的信息 但是 ...

  3. ValueError: total size of new array must be unchanged

    在对数据增强后的faster rcnn中进行训练时,出现这个错误,原因是在lib/roi_data_layer/layer.py中,会出现 inds = np.reshape(inds, (-1,2) ...

  4. [转]Hadoop参数汇总

    出自:https://segmentfault.com/a/1190000000709725 Hadoop参数大全 主要配置文件: core hdfs yarn mapred 重要性表示如下: 重要 ...

  5. SQLite Manager插件安装与使用(firefox)

    下载与安装: FireFox 插件:SQLite Manager可以管理你电脑上的任何 SQLite数据库.一个直观的目录树状来展示数据库的对象.通过提示对话来管理表.索引.视图和触发器.你能浏览和搜 ...

  6. 步步为营-21-xml的增删改查

    1 增加(存在则添加,不存在则新建) //对xml的操作-- XmlDocument doc = new XmlDocument(); if (File.Exists("Person.xml ...

  7. 一个判断男女性别的JS脚本

    var xb= "男" if(xb=="男"){ document.write("你是男生") }else{ document.write( ...

  8. oracle表分区的,分区操作,分区查询,子分区查询

    一.摘要 有关表分区的一些维护性操作: 注:分区根据具体情况选择. 表分区有以下优点: 1.数据查询:数据被存储到多个文件上,减少了I/O负载,查询速度提高. 2.数据修剪:保存历史数据非常的理想. ...

  9. JDK和CGLIB生成动态代理类的区别

     关于动态代理和静态代理 当一个对象(客户端)不能或者不想直接引用另一个对象(目标对象),这时可以应用代理模式在这两者之间构建一个桥梁--代理对象. 按照代理对象的创建时期不同,可以分为两种: 静态代 ...

  10. 天天爱跑步&&弹球

    题解: 弹球题目地址:https://www.nowcoder.com/acm/contest/113/E 后面这题 应该是天天爱跑步的加强版本 原理都是查询子树中dep[x]+f[x]的值的个数 由 ...