EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 786|回复: 1
打印 上一主题 下一主题

编程如何在墙上开圆形洞口

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12406

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 12:56:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Revit 的自带功能以及API的功能都只能在墙上开矩形洞口。有许多的时候需要在墙上开圆形洞口。比如为暖气管道,开圆形洞口。那么有什么办法可以实现呢?

我们有一个变通的办法,就是在墙上插入一个圆形的Generic Model族实例,这个族只有一个Opening cut,放在墙上后,效果上讲与洞口一模一样,因为窗户本身并没有添加任何对象。 在Revit architecture自带族中就有一个这个族,可以直接使用。在我的win7系统中,该族位于这个目录下:  C:\ProgramData\Autodesk\RAC 2012\Libraries\US Imperial\Windows\Opening.rfa
编程时,只要向墙上插入这个Generic Model实例即可(调用NewFamilyInstance 函数)。也可修改圆形窗户的半径,达到修改洞口大小。

请看下面代码演示如何创建洞口。请修改你的洞口的插入位置,以及合适的Generic Model 类型名称。



  1. [csharp] view plaincopy
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Text;  
  5. using System.Windows.Forms;  
  6. using System.Linq;  
  7.   
  8. using  Autodesk.Revit .DB;  
  9. using Autodesk.Revit.UI;  
  10. using Autodesk.Revit.UI.Selection;  
  11. using Autodesk.Revit .ApplicationServices;  
  12. using Autodesk.Revit.Attributes ;  
  13.   
  14.   
  15.   
  16.   [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]  
  17. public class RevitCommand : IExternalCommand  
  18. {  
  19.     public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)  
  20.     {  
  21.       UIApplication app = commandData.Application;  
  22.       Document doc = app.ActiveUIDocument.Document;        
  23.       //获取一个圆形洞口类型  
  24.       FilteredElementCollector collector = new FilteredElementCollector(doc);  
  25.       collector.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericModel);  
  26.   
  27.       var types = from elem in collector  
  28.                   where elem.Name.Equals("JoeTest")  
  29.                   select elem;  
  30.       Element elemtype = types.First();  
  31.       FamilySymbol symbol = elemtype as FamilySymbol;  
  32.   
  33.       //获得墙  
  34.       Selection sel = app.ActiveUIDocument.Selection;  
  35.       Reference ref1 = sel.PickObject(ObjectType.Element, "please pick a wall");  
  36.       Wall wall = doc.GetElement(ref1) as Wall;  
  37.       if (wall != null)  
  38.       {  
  39.   
  40.         Transaction trans = new Transaction(doc, "ExComm");  
  41.         trans.Start();  
  42.   
  43.         XYZ insertPt = new XYZ(-9.04985104228567, 21.6724350178627, 2.93498579446767); //请按照你的坐标,修改这里的坐标  
  44.         FamilyInstance instance = doc.Create.NewFamilyInstance(insertPt, symbol, wall, Autodesk.Revit.DB.Structure.StructuralType.NonStructural);  
  45.         trans.Commit();  
  46.       }  
  47.         return Result.Succeeded ;  
  48.     }  
  49. }  
复制代码
作者:叶雄进文章来源:http://blog.csdn.net/joexiongjin/article/category/782739

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-11-28 13:20

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表