Revit API创建一个拷贝房间内对象布局命令
//复制房间
[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创建一个拷贝房间内对象布局命令的更多相关文章
- new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
new运算符 - JavaScript | MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operator ...
- HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象
HttpActionDescriptor,ASP.NET Web API又一个重要的描述对象 通过前面对“HttpController的激活”的介绍我们已经知道了ASP.NET Web API通过Ht ...
- jquery创建一个新的节点对象(自定义结构/内容)的好方法
jq创建一个新的节点对象,这对一些自定义功能很有帮助,而且可以随意控制对象的结构与内容,何乐而不为呢,看到这里,相信有些朋友已经按耐不住了,好记下来为大家介绍实现方法,感兴趣的朋友可以了解下哦 < ...
- 如何创建一个有System用户权限的命令行
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何创建一个有System用户权限的命令行.
- Revit API 判断一个构件在某个视图中的可见性
查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...
- IoC COntainer Create Javabeans 可以通过读取beans.xml 文件来创建一个应用程序上下文对象 依赖反转
Spring初学快速入门 - Spring教程™ https://www.yiibai.com/spring/spring-tutorial-for-beginners.html# pom <? ...
- elasticsearch _create api创建一个不存在的文档
https://www.elastic.co/guide/cn/elasticsearch/guide/current/create-doc.html当我们索引一个文档, 怎么确认我们正在创建一个完全 ...
- PS网页设计教程XXX——在PS中创建一个漫画书主题网页布局
作为编码者,美工基础是偏弱的.我们可以参考一些成熟的网页PS教程,提高自身的设计能力.套用一句话,“熟读唐诗三百首,不会作诗也会吟”. 本系列的教程来源于网上的PS教程,都是国外的,全英文的.本人尝试 ...
- [osgearth]通过API创建一个earth模型
通过API的方式大体需要以下几个步骤: 创建map对象—— 创建影像数据层—— 创建高程数据层—— 将影像数据层以及高程数据层加入到map对象—— 根据前面创建的map对象创建mapNode节点—— ...
随机推荐
- 配置apache使用https访问
准备 yum install mod_ssl openssl 生成一个自签名证书 cd /etc/pki/CA 1.生成2048位的加密私钥 openssl genrsa -out server.ke ...
- 【ARTS】01_04_左耳听风-20181203~1209
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- python3之模块io使用流的核心工具
1.io概叙 io模块提供了python用于处理各种类型I/O的主要工具,主要有三种类型的I/O:文本I/O,二进制I/O和原始I/O:这些都是通用类型,各种后备存储可使用其中的每一种类型,所以这些类 ...
- mysqldump只导出表结构或只导出数据的实现方法【转】
mysql mysqldump 只导出表结构 不导出数据 mysqldump --opt -d 数据库名 -u root -p > xxx.sql 备份数据库 #mysqldump 数据库名 & ...
- crontab机会任务监控
<1>如何查看自己的计划任务是否成功的执行? 昨天crontab中的同步任务没有执行,不知道是什么原因没有执行,貌似任务hang住了,想查询一下crontab到底问题出在哪里,或者hang ...
- yum安装软件报错:curl#6 - "Could not resolve host: mirrorlist.centos.org; Temporary failure in name resolut
# yum install -y epel-release Loaded plugins: fastestmirror Repository base is listed more than once ...
- PHPWeb开发相关知识
转载:https://blog.csdn.net/wj610671226/article/details/78426698 正则表达式 作用:分割.查找.匹配.替换字符串 分割符:正斜线(/).has ...
- Babel(抽象语法树,又称AST)
文章:https://juejin.im/post/5a9315e46fb9a0633a711f25 https://github.com/jamiebuilds/babel-handbook/blo ...
- 记一些使用PyQt的问题
本文自用,日常记录,不断更新 环境 1.使用 PyCharm IDE 2.PyQt5 3. 扩展配置 PyUIC转换后的代码处理 PyUIC 用于 将 QtDesigner 生成的 .ui 文件转换为 ...
- Java编程的逻辑 (15) - 初识继承和多态
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...