在我们的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中,如何编程创建新类型(如窗户或墙)相关推荐

  1. python程序启动其他python程序_python中使用fork创建新的进程

    python中如果要创建新进程的话,可以使用os模块中的fork方法.为了了解其中工作原理,笔者结合linux的查看进程ps命令,对这个方法做了一些测试. python运行时进程 python一开始运 ...

  2. python中使用fork创建新的进程

    fork知识入门 python的os module中有fork()函数用于生成子进程,生成的子进程是父进程的镜像,但是它们有各自的地址空间,子进程复制一份父进程内存给自己,两个进程之间的执行是相互独立 ...

  3. python type创建类_Python基于内置函数type创建新类型

    英文文档: class type(object) class type(name, bases, dict) With one argument, return the type of an obje ...

  4. 关于windows安装过程中“我们无法创建新的分区,也找不到现有的分区”问题解决办法

    最近在安装电脑系统过程中碰到了这个问题,首先说明下我电脑bios已经设置了uefi引导启动,硬盘分区格式也是GPT格式,还是出现这个问题有点纳闷,后面折腾了好久才找到解决办法: 即在对磁盘进行分区的时 ...

  5. Eclipse中设置在创建新类时自动生成注释的方法

     windows–>preference Java–>Code Style–>Code Templates code–>new Java files 编辑它 ${filecom ...

  6. Revit中如何编程实现窗口缩放视图

    从Revit2013开始,提供了UIView类用于控制视图,也可以用于读取视图的信息. UIView.GetWindowRectangle:获取绘图区的范围,坐标值是屏幕坐标 UIView.GetZo ...

  7. 创建新的管道类型,并且修改管道的弯头类型和T形连接弯头类型

    这是一个典型的增加新类型(Duplicate()来实现),并且修改类型的参数值.这里一个特殊的情况是这里的两个参数值都是Revit的接头类型对象.实际上保存在这两个参数中的是ElementId类型的值 ...

  8. 如何在 SAP 电商云 Spartacus UI 中创建新的页面

    Spartacus 中的页面基于使用相关 API 从 SAP Commerce 后端获取的 CMS 页面.来自 SAP Commerce 端的数据定义了元数据,如 url.标题等,以及页面的结构.结构 ...

  9. Revit中如何创建曲面嵌板及一键成板

    一.Revit中如何创建曲面嵌板 在我们的绘图过程中可能会遇见一些曲面形状,而我们的常规嵌板没办法满足我们绘制的要求,我们今天学习如何在revit中绘制曲面嵌板. 1.新建"自适应公制常规模 ...

最新文章

  1. 个人阅读作业Week7
  2. DNS 漏洞发现者 Dan Kaminsky 访谈录
  3. OpenStack从入门到放弃
  4. Apache Spark:更改架构之前必须解决的5个陷阱
  5. 性能测试 Performance Test
  6. Windows下用vs2017编译和配置libcurl库(手把手教,适合新人)
  7. 【不建议阅读】电脑上腾讯会议录屏:OBS
  8. 【Codeforces Global Round 2】A-E题解 【Frets On Fire、Pavel and Triangles】
  9. android项目设计实验报告模板,Android实验报告模板_实验一.doc
  10. 线性和EWMA指数加权移动平均模型
  11. JAVA企业面试题精选 数据库31-40
  12. 【时间管理】柳比歇夫之奇特的一生
  13. 黑马程序员——JAVA集合
  14. PAT A1066 Root of AVL Tree ——春水碧于天,画船听雨眠
  15. Android设备虚拟摄像头技术实现
  16. Qt QVector 详解:从底层原理到高级用法
  17. IT人员必学最基础知识(四)——补充总结
  18. 汇编语言rep movsd 的使用
  19. Linux:VSS、RSS、PSS和USS的图解说明
  20. 实训计算机硬盘分区的心得体会,计算机实训报告

热门文章

  1. 程序调用winrar自动压缩文件
  2. 大讲堂:Oracle DataGuard备份恢复最佳实践(同时在线730人)
  3. 内推 | 字节提前批快开始了。。。。
  4. [周榜单]极乐小程序榜单(第十二期)
  5. 数据库oracle数据导入导出命令,数据库oracle数据导入导出命令
  6. 什么是.msh 文件?
  7. ISO20000培训课
  8. 体积小速度快,这3款小众浏览器比夸克还好用,你用过吗
  9. 用光盘镜像创建本地yum源
  10. Zeal下载文档慢无响应问题(详细操作流程-告别龟速下载)