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

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

获取墙的长宽高

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

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

积分
12404

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 13:31:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在一个Revit项目里面,如何读取这堵墙的详细信息(名字,长、宽、高等),并且修改它的信息

获取对象信息是Revit开发中最基本的步骤。从Revit获取对象信息有三种方式,一个从类的属性读取,另一个是读取对象的参数值,最后一种是读取墙的几何信息。

墙的名字可以通过Wall.Name 属性获取,
墙的长度可以从墙的Location 属性间接获取,或者读取wall的 ”长度“ 参数的值。
高度可以从墙的四个参数读取,
公式:(墙的上部连接到的楼层高度+ 上部偏移参数) -  (墙的上部连接到的楼层高度- 上部偏移参数)
若墙上部没有连接到楼层,可以直接用 未连接高度来计算墙的高度。
宽度可以从wall.Width 属性获得。

请看下面代码




  1. [c-sharp] view plaincopy
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Text;  
  5. using System.Windows.Forms;  
  6.   
  7. using  Autodesk.Revit .DB;  
  8. using Autodesk.Revit.UI;  
  9. using Autodesk.Revit.UI.Selection;  
  10. using Autodesk.Revit .ApplicationServices;  
  11. using Autodesk.Revit.Attributes ;  
  12.   
  13.   
  14.   
  15.   [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]  
  16.   [RegenerationAttribute(Autodesk.Revit.Attributes.RegenerationOption.Manual)]  
  17.   public class ReadWallData : IExternalCommand  
  18.   {  
  19.     public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)  
  20.     {  
  21.   
  22.       UIApplication app = commandData.Application;  
  23.       Document doc = app.ActiveUIDocument.Document;  
  24.       Transaction trans = new Transaction(doc, "ExComm");  
  25.       trans.Start();  
  26.   
  27.       //选择墙  
  28.       Selection sel = app.ActiveUIDocument.Selection;  
  29.       Reference ref1  = sel.PickObject(ObjectType.Element, "Please select a wall");  
  30.   
  31.       Wall wall = ref1.Element as Wall;  
  32.   
  33.       if(wall == null)  
  34.       {  
  35.         messages = "No wall was selected";  
  36.         return Result.Failed;  
  37.       }  
  38.   
  39.       Utility util = new Utility() ;  
  40.       XYZ wallDimension = util.GetWallDimensions(doc, wall);  
  41.   
  42.       TaskDialog.Show("Wall dimensions", "Length = " + wallDimension.X.ToString() + "/r/n"  
  43.         + "Width=" + wallDimension.Y.ToString() + "/r/n"  
  44.         + "Height" + wallDimension.Z.ToString());  
  45.   
  46.   
  47.       trans.Commit();  
  48.   
  49.       return Result.Succeeded;  
  50.     }  
  51.   
  52.   
  53.   }  
  54.   
  55.   
  56.   class Utility  
  57.   {  
  58.       
  59.     public XYZ GetWallDimensions(Document doc, Wall wall)  
  60.     {  
  61.   
  62.       //read the wall's name  
  63.       string wallName = wall.Name;  
  64.   
  65.       //read the wall's length by reading parameter.              
  66.       LocationCurve lc = wall.Location as LocationCurve;  
  67.       double dWallLength = lc.Curve.Length;  
  68.   
  69.       //get wall base absoutely height  
  70.       Parameter paramBottomLevel = wall.get_Parameter(BuiltInParameter.WALL_BASE_CONSTRAINT); //base level.  
  71.       //get the bottom level id  
  72.       ElementId idbottom = paramBottomLevel.AsElementId();  
  73.       Level levelBottom = doc.get_Element(idbottom) as Level;  
  74.       Parameter paramBotomOffset = wall.get_Parameter(BuiltInParameter.WALL_BASE_OFFSET); //base offset.  
  75.       double dBottomHeight = levelBottom.Elevation + paramBotomOffset.AsDouble();  
  76.   
  77.         
  78.       //get wall top absoutely height  
  79.       double dHeight = 0;  
  80.   
  81.   
  82.       Parameter paramTopLevel = wall.get_Parameter(BuiltInParameter.WALL_HEIGHT_TYPE); //top level.  
  83.       if(paramTopLevel != null)  
  84.       {  
  85.          
  86.         //get the bottom level id  
  87.         ElementId idTop = paramTopLevel.AsElementId();  
  88.         Level levelTop = doc.get_Element(idTop) as Level;  
  89.         if (levelTop != null)  
  90.         {  
  91.           Parameter paramTopOffset = wall.get_Parameter(BuiltInParameter.WALL_TOP_OFFSET); //upper offset.  
  92.           double dHeightTop = levelTop.Elevation + paramTopOffset.AsDouble();  
  93.   
  94.           //wall height  
  95.           dHeight = dHeightTop - dBottomHeight;  
  96.         }  
  97.         else  
  98.           dHeight = wall.get_Parameter(BuiltInParameter.WALL_USER_HEIGHT_PARAM).AsDouble();  
  99.       }  
  100.         
  101.       
  102.       //get wall width  
  103.       double dWidth = wall.Width;  
  104.   
  105.       return new XYZ(dWallLength, dWidth, dHeight);  
  106.     }  
  107.   
  108.   }  

复制代码


修改墙的长宽高方法:
修改墙的长度,只能通过修改墙的基线也就是修改LocationCurve中包含的线。
修改墙的高度:可以通过修改墙上下所在的楼层,偏移量等参数来修改。
墙的厚度在Revit2011中只能通过更换一种墙的方式来修改。
在Revit2012中可以直接修改墙类型的各层厚度,实现修改墙的厚度。

请大家好好看看我做过的讲座,领会如果获取和修改参数。其它逻辑一眼就可以知道。作者:叶雄进文章来源:http://blog.csdn.net/joexiongjin/article/category/782739

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

8

主题

792

帖子

1349

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1349
2F
发表于 2014-2-20 14:09:58 | 只看该作者
顶...... 楼下跟上.....
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 15:24

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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