在Revit中,如何编程创建新类型(如窗户或墙)
在我们的ADN中,有许多人都问这个问题。这里与大家分享下。
Revit的对象基本上都是基于类型的,把具有相同属性放在类型中保存,不熟悉类型这个概念的请看看帮助,我就不再多啰嗦了 :)。在Revit中创建对象用Autodesk.Revit.Creation.Document 和 Autodesk.Revit.Creation.Application类中的New***()方法来创建对象。比如创建墙用Autodesk.Revit.Creation.Document.NewWall() 方法。可是我们确无法从Creation命名空间中的Document类中找到方法来创建墙类型。那能用编程方式创建新类型吗?
Revit是没有提供方法来直接创建一个类型。因为类型的属性和参数很多,是吧? 如果有一个方法来创建,那参数列表得十分长才能清楚定义出这个类型。所以Revit API不直接创建一个新类型,而是从一个已有类型中复制一个类型,所有的属性和参数都从原类型中获得,然后你根据需要修改一些属性、参数的值,实现想要的类型。
Revit所有的类型类都从ElementType类派生。ElementType类提供了Duplicate() 方法来复制类型。调用此函数,在当前模型文件中添加一个指定名称的类型,就会创建指定名称的类型。从ElementType派生的类都实现了Duplicate() 方法,所以所有的类型都可以用Duplicate()来创建,然后修改类型的属性、参数即可。
所以可以从WallType类型的Duplicate()方法创建一个墙类型,从FamilySymbol.Duplicate() 方法创建一个窗户类型。
请看下面代码示例创建一个标注样式类型:
public class RevitCommand : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIApplication app = commandData.Application; Document doc = app.ActiveUIDocument.Document; //get an exising dimension type. FilteredElementCollector collector = new FilteredElementCollector(doc); collector.OfClass (typeof(DimensionType)); DimensionType dimType = null; foreach(Element elem in collector) { if(elem.Name == "Linear Dimension Style") { dimType = elem as DimensionType ; break; } } DimensionType newType = dimType.Duplicate("NewType"); if(newType != null) { Transaction trans = new Transaction(doc, "ExComm"); trans.Start(); newType.get_Parameter(BuiltInParameter.LINE_PEN).Set(2); //you can change more here. doc.Regenerate(); trans.Commit(); } return Result.Succeeded ; } }
在Revit中,如何编程创建新类型(如窗户或墙)相关推荐
- python程序启动其他python程序_python中使用fork创建新的进程
python中如果要创建新进程的话,可以使用os模块中的fork方法.为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试. python运行时进程 python一开始运 ...
- python中使用fork创建新的进程
fork知识入门 python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之间的执行是相互独立 ...
- python type创建类_Python基于内置函数type创建新类型
英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...
- 关于windows安装过程中“我们无法创建新的分区,也找不到现有的分区”问题解决办法
最近在安装电脑系统过程中碰到了这个问题,首先说明下我电脑bios已经设置了uefi引导启动,硬盘分区格式也是GPT格式,还是出现这个问题有点纳闷,后面折腾了好久才找到解决办法: 即在对磁盘进行分区的时 ...
- Eclipse中设置在创建新类时自动生成注释的方法
windows–>preference Java–>Code Style–>Code Templates code–>new Java files 编辑它 ${filecom ...
- Revit中如何编程实现窗口缩放视图
从Revit2013开始,提供了UIView类用于控制视图,也可以用于读取视图的信息. UIView.GetWindowRectangle:获取绘图区的范围,坐标值是屏幕坐标 UIView.GetZo ...
- 创建新的管道类型,并且修改管道的弯头类型和T形连接弯头类型
这是一个典型的增加新类型(Duplicate()来实现),并且修改类型的参数值.这里一个特殊的情况是这里的两个参数值都是Revit的接头类型对象.实际上保存在这两个参数中的是ElementId类型的值 ...
- 如何在 SAP 电商云 Spartacus UI 中创建新的页面
Spartacus 中的页面基于使用相关 API 从 SAP Commerce 后端获取的 CMS 页面.来自 SAP Commerce 端的数据定义了元数据,如 url.标题等,以及页面的结构.结构 ...
- Revit中如何创建曲面嵌板及一键成板
一.Revit中如何创建曲面嵌板 在我们的绘图过程中可能会遇见一些曲面形状,而我们的常规嵌板没办法满足我们绘制的要求,我们今天学习如何在revit中绘制曲面嵌板. 1.新建"自适应公制常规模 ...
最新文章
- 个人阅读作业Week7
- DNS 漏洞发现者 Dan Kaminsky 访谈录
- OpenStack从入门到放弃
- Apache Spark:更改架构之前必须解决的5个陷阱
- 性能测试 Performance Test
- Windows下用vs2017编译和配置libcurl库(手把手教,适合新人)
- 【不建议阅读】电脑上腾讯会议录屏:OBS
- 【Codeforces Global Round 2】A-E题解 【Frets On Fire、Pavel and Triangles】
- android项目设计实验报告模板,Android实验报告模板_实验一.doc
- 线性和EWMA指数加权移动平均模型
- JAVA企业面试题精选 数据库31-40
- 【时间管理】柳比歇夫之奇特的一生
- 黑马程序员——JAVA集合
- PAT A1066 Root of AVL Tree ——春水碧于天,画船听雨眠
- Android设备虚拟摄像头技术实现
- Qt QVector 详解:从底层原理到高级用法
- IT人员必学最基础知识(四)——补充总结
- 汇编语言rep movsd 的使用
- Linux:VSS、RSS、PSS和USS的图解说明
- 实训计算机硬盘分区的心得体会,计算机实训报告