本课程演示创建一个拷贝房间内对象布局命令,完整演示步骤和代码。这个命令把选中房间内的对象复制到其它选中的一个或多个房间中,而且保持与源房间一致的相对位置。通过本讲座使听众知道创建一个二次开发程序很简单,创建一个实用的命令也很快。
//复制房间
[TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
public class cmdCopyRoom : IExternalCommand
{
    //房间过滤器
    public class RoomFilter : ISelectionFilter
    {
        bool ISelectionFilter.AllowElement(Element elem)
        {
            return elem is Room;
        }
        bool ISelectionFilter.AllowReference(Reference reference, XYZ position)
        {
            return true;
        }
    }
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
    {
        UIApplication app = commandData.Application;
        Document doc = app.ActiveUIDocument.Document;
        //1.选择房间
        Selection sel = app.ActiveUIDocument.Selection;
        RoomFilter filter = new RoomFilter();
        Reference refRoom = sel.PickObject(ObjectType.Element, filter, "请选择房间");
        //Reference refRoom = sel.PickObject(ObjectType.Element, "请选择房间");
        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();         //循环创建房间
        Boolean bContinue = true;
        while (bContinue)
        {
            XYZ point;
            try
            {
                //3.获取用户输入的点
                point = sel.PickPoint("点击要创建的房间中的一点");
            }
            //捕获右击取消与esc
            catch (Autodesk.Revit.Exceptions.InvalidOperationException ex)
            {
                bContinue = false;
                break;
            }
            catch (Exception)
            {
                bContinue = false;
                break;
            }
            //4.根据选中点,创建房间
            Transaction trans = new Transaction(doc);
            trans.Start("http://revit.5d6d.com");
            Room newRoom = doc.Create.NewRoom(doc.ActiveView.GenLevel, new UV(point.X, point.Y));
            if (newRoom == null)
            {
                messages = "创建房间失败";
                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);             trans.Commit();
        }         return Result.Succeeded;
    }
}

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

Revit API创建一个拷贝房间内对象布局命令的更多相关文章

  1. new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。

    new运算符 - JavaScript | MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operator ...

  2. HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象

    HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...

  3. jquery创建一个新的节点对象(自定义结构/内容)的好方法

    jq创建一个新的节点对象,这对一些自定义功能很有帮助,而且可以随意控制对象的结构与内容,何乐而不为呢,看到这里,相信有些朋友已经按耐不住了,好记下来为大家介绍实现方法,感兴趣的朋友可以了解下哦 < ...

  4. 如何创建一个有System用户权限的命令行

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.

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

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

  6. IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转

    Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...

  7. elasticsearch _create api创建一个不存在的文档

    https://www.elastic.co/guide/cn/elasticsearch/guide/current/create-doc.html当我们索引一个文档, 怎么确认我们正在创建一个完全 ...

  8. PS网页设计教程XXX——在PS中创建一个漫画书主题网页布局

    作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...

  9. [osgearth]通过API创建一个earth模型

    通过API的方式大体需要以下几个步骤: 创建map对象—— 创建影像数据层—— 创建高程数据层—— 将影像数据层以及高程数据层加入到map对象—— 根据前面创建的map对象创建mapNode节点—— ...

随机推荐

  1. 图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()

    https://blog.csdn.net/bigconvience/article/details/26697645 Android系统手机屏幕的左上角为坐标系,同时y轴方向与笛卡尔坐标系的y轴方向 ...

  2. PyCharm 2018实现远程调试代码

    pycharm是一个非常强大的python开发工具,现在很多代码最终在线上跑的环境都是linux,而开发环境可能还是windows下开发,这就需要经常在linux上进行调试,或者在linux对代码进行 ...

  3. python里面的引用

    1 对象及其引用 python中,引用是用命名空间来实现的,命名空间维护了变量和对象之间的引用关系. myInt = 27 yourInt = myInt #change the value of y ...

  4. zabbix3.0配置服务器流量告警

    zabbix配置流量告警 zabbix虽然已经对服务器的网卡流量进行了监控,但为了防止某台机器流量过高导致网络慢,或者因为中病毒或木马等原因,导致流量很高,可使用zabbix的流量告警功能来对流量进行 ...

  5. 如何在Axure中使用FontAwesome字体图标

    Font Awesome为您提供可缩放的矢量图标,您可以使用CSS所提供的所有特性对它们进行更改,包括:大小.颜色.阴影或者其它任何支持的效果. FontAwesome应用在web网页开发中非常方便, ...

  6. CSS渐变之CSS3 gradient在Firefox3.6下的使用

    一.引子 Firefox3.6包含了许多CSS的改进,本文将向您展示如果使用CSS渐变. 如果你正在运行的Firefox 3.6的最新测试版,你应该看看我们的互动演示,并查看相应的代码.使用单选按钮来 ...

  7. MVC的博客

    一个基于Asp.net MVC的博客类网站开源了!   背景说明: 大学时毕业设计作品,一直闲置在硬盘了,倒想着不如开源出来,也许会对一些人有帮助呢,而且个人觉得这个网站做得还是不错了,毕竟是花了不少 ...

  8. ld: -pie can only be used when targeting iOS 4.2 or later

    ld: -pie can only be used when targeting iOS 4.2 or later clang: error: linker command failed with e ...

  9. Netty---相关

    http://www.infoq.com/cn/articles/netty-million-level-push-service-design-points/ ChannelOption用到的soc ...

  10. 高能天气——团队Scrum冲刺阶段-Day 7 总结

    高能天气--团队Scrum冲刺阶段-Day 7 总结 今日完成任务 于欣月:修改项目说明书,帮助修改应用 余坤澎:进行应用整合的收尾工作 康皓越:进行应用整合的收尾工作 范雯琪:修改项目说明书,完成项 ...