本课程演示创建一个拷贝房间内对象布局命令,完整演示步骤和代码。这个命令把选中房间内的对象复制到其它选中的一个或多个房间中,而且保持与源房间一致的相对位置。通过本讲座使听众知道创建一个二次开发程序很简单,创建一个实用的命令也很快。
  1. //复制房间
  2. [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
  3. public class cmdCopyRoom : IExternalCommand
  4. {
  5.     //房间过滤器
  6.     public class RoomFilter : ISelectionFilter
  7.     {
  8.         bool ISelectionFilter.AllowElement(Element elem)
  9.         {
  10.             return elem is Room;
  11.         }
  12.         bool ISelectionFilter.AllowReference(Reference reference, XYZ position)
  13.         {
  14.             return true;
  15.         }
  16.     }
  17.     public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
  18.     {
  19.         UIApplication app = commandData.Application;
  20.         Document doc = app.ActiveUIDocument.Document;
  21.         //1.选择房间
  22.         Selection sel = app.ActiveUIDocument.Selection;
  23.         RoomFilter filter = new RoomFilter();
  24.         Reference refRoom = sel.PickObject(ObjectType.Element, filter, "请选择房间");
  25.         //Reference refRoom = sel.PickObject(ObjectType.Element, "请选择房间");
  26.         Room room = doc.GetElement(refRoom) as Room;
  27.  
  28.         //2.获取目标房间的名称
  29.         string roomName = room.get_Parameter(BuiltInParameter.ROOM_NAME).AsString();
  30.         string roomDepartment = room.get_Parameter(BuiltInParameter.ROOM_DEPARTMENT).AsString();
  31.         string roomOccupancy = room.get_Parameter(BuiltInParameter.ROOM_OCCUPANCY).AsString();
  32.  
  33.         //循环创建房间
  34.         Boolean bContinue = true;
  35.         while (bContinue)
  36.         {
  37.             XYZ point;
  38.             try
  39.             {
  40.                 //3.获取用户输入的点
  41.                 point = sel.PickPoint("点击要创建的房间中的一点");
  42.             }
  43.             //捕获右击取消与esc
  44.             catch (Autodesk.Revit.Exceptions.InvalidOperationException ex)
  45.             {
  46.                 bContinue = false;
  47.                 break;
  48.             }
  49.             catch (Exception)
  50.             {
  51.                 bContinue = false;
  52.                 break;
  53.             }
  54.             //4.根据选中点,创建房间
  55.             Transaction trans = new Transaction(doc);
  56.             trans.Start("http://revit.5d6d.com");
  57.             Room newRoom = doc.Create.NewRoom(doc.ActiveView.GenLevel, new UV(point.X, point.Y));
  58.             if (newRoom == null)
  59.             {
  60.                 messages = "创建房间失败";
  61.                 return Result.Failed;
  62.             }
  63.             //5.读取房间的中心位置
  64.             GeometryObjectArray geomObjectArray = newRoom.ClosedShell.Objects;
  65.             GeometryObject geoObject = geomObjectArray.get_Item();
  66.             Solid roomSolid = geoObject as Solid;
  67.             XYZ centriod = roomSolid.ComputeCentroid();
  68.             XYZ roomCenter = new XYZ(centriod.X, centriod.Y, doc.ActiveView.GenLevel.Elevation);
  69.             //6.修改房间十字叉的位置
  70.             LocationPoint roomLocation = newRoom.Location as LocationPoint;
  71.             roomLocation.Point = roomCenter;
  72.             //7.创建标签,放在中心
  73.             RoomTag tag = doc.Create.NewRoomTag(newRoom, new UV(roomCenter.X, roomCenter.Y), doc.ActiveView);
  74.             //8.赋值三个参数值
  75.             newRoom.get_Parameter(BuiltInParameter.ROOM_NAME).Set(roomName);
  76.             newRoom.get_Parameter(BuiltInParameter.ROOM_DEPARTMENT).Set(roomDepartment);
  77.             newRoom.get_Parameter(BuiltInParameter.ROOM_OCCUPANCY).Set(roomOccupancy);
  78.  
  79.             trans.Commit();
  80.         }
  81.  
  82.         return Result.Succeeded;
  83.     }
  84. }

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. Saving Tang Monk II

    题目链接:http://hihocoder.com/contest/acmicpc2018beijingonline/problem/1 AC代码: #include<bits/stdc++.h ...

  2. inux系统用户名和全名有什么区别

    问:linux系统安装完毕,进入系统,创建用户的时候,要填入用户名和全名,请问用户名和全名有什么区别,登录的时候,是用户名还是全名? ================================= ...

  3. 云计算--MPI

    [root@localhost mpi]# mpicc -c base.c[root@localhost mpi]# mpicc -o base base.o[root@localhost mpi]# ...

  4. 【译】Asp.Net Identity与Owin,到底谁是谁?

    送给正在学习Asp.Net Identity的你 :-) 原文出自 trailmax 的博客AspNet Identity and Owin. Who is who. Recently I have ...

  5. 初识 Asp.Net数据验证控件

    在我们建立一个Asp.Net Web应用程序的时候我一般都会注意我们工具如图

  6. 点击超链接打开本地QQ

    2014年6月4日 10:20:18 张志斌 这个功能实际上是属于腾讯的推广项目"一键加群"功能: http://qun.qq.com/join.html 用户必须有自己的群,登录 ...

  7. Go语言规格说明书 之 词汇元素(Lexical elements)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,完整的介绍Go语 ...

  8. scrapy入门二(分页抓取文章入库)

    分页抓取博客园新闻,先从列表里分析下一页按钮 相关代码: # -*- coding: utf-8 -*- import scrapy from cnblogs.items import Article ...

  9. python基础-装饰器,生成器和迭代器

    学习内容 1.装饰器 2.生成器 3.迭代器 4.软件目录结构规范 一:装饰器(decorator) 1.装饰器定义:本质就是函数,用来装饰其他函数,即为其他函数添加附加功能. 2.装饰器原则:1)不 ...

  10. Vuejs 高仿饿了么外卖APP 百度云视频教程下载

    Vuejs 高仿饿了么外卖APP 百度云视频教程下载 链接:https://pan.baidu.com/s/1KPbKog0qJqXI-2ztQ19o7w 提取码: 关注公众号[GitHubCN]回复 ...