欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RevitAPI之标高和轴网(Level/Grid)

程序员文章站 2022-06-11 08:07:11
...

总所周知, 建筑和工程都是基于标高和轴网建立起来的。

一、标高

标高是有限水平平面,大多数元素都是基于标高来定位,如墙、地 板、天花板、屋顶等。对应的类是Level,它继承自Element类。

1) 标高的高度(Elevation and ProjectElevation) 通过 Level. Elevation 属性(对应的 BuiltInParameter 是 LEVEL_ELEV)可以获取标高的高度,它代表的是该标高相对于“基面 (Elevation Base)”的髙度,基面可以是“项目基点”,也可以是“测量点”,在Revit界面上,用户可以通过标高对应的标高的类型(LevelType)属性来确定基面。
注意:该操作将修改所有这一类型的标高的基面。

如何用API来修改 标高的基面

LevelType levelType = RevitDoc.GetElement(level.GetTypeId()) as LevelType; 
Parameter  relativeBaseType  = 
levelType.get_Parameter(BuiltInParameter.LEVEL_RELATIVE_BASE_TYPE); 
relativeBaseType.Set(1); //项目基点  = 0, 测量点  = 1  

而Level. ProjectElevation属性代表标高相对于项目基点的高度,等同于当基面是项目基点时 Level.Elevation 的值。


2) 创建标高
在Revit界面上,用户可以在立面视图或者剖而视图上来创建标髙。API中,用户可

以使用 NewLevel 方法来创建:Level Document.Create.NewLevel(double elevation) 

创建标高的例子。
using (Transaction transaction = new Transaction(RevitDoc)) 
{ 
   transaction.Start("Create Level"); 
   Level level = RevitDoc.Create.NewLevel(10.0); 
   transaction.Commit(); 
} 

注意:使用API创建标高之后,Revit不会自动创建对应的视图,这点有别于Revit界面,如果想要创建对应的视图,可以使用ViewPlan. Create函教:ViewPlan.Create
(document, viewFamilyTypeId, levelId ),其中 viewFamilyTypeId 代表—个 ViewFamilyType 的 ID。

代码片段4-3:创建标高对应的视图

//先找出所有属于FloorPlan或者CeilingPlan的视图类型,然后用 这些视图类型分别创建一个视图,基于一个已有的标高Level level; //已知的标高 
//过滤出所有的ViewFamilyType 
var classFilter = new ElementClassFilter(typeof(ViewFamilyType)); 
FilteredElementCollector filteredElements = new FilteredElementCollector(RevitDoc); 
filteredElements = filteredElements.WherePasses(classFilter); 
foreach (ViewFamilyType viewFamilyType in filteredElements) 
{ 
   //找到ViewFamily类型是FloorPlan或者CeilingPlan的ViewFamilyType 
   if (viewFamilyType.ViewFamily == ViewFamily.FloorPlan || 
      viewFamilyType.ViewFamily == ViewFamily.CeilingPlan) 
   { 
      transaction.Start("Create view of type " + viewFamilyType.ViewFamily); 
      //创建视图 
      ViewPlan view = ViewPlan.Create(RevitDoc, viewFamilyType.Id, level.Id); 
      transaction.Commit(); 
   } 
}

二、轴网
轴网对应的类是Grid,也继承自Element。
1) 轴网曲线(Curve)
通过Grid Curve属性能够拿到轴网的曲线,如果Grid.IsCurved 返回true,那么Curve将是一个弧形曲线Arc对象,否则就是Line对象。 
2)创建轴网
创建轴网的函数有两个重载,分别对应于直线和弧线轴网:
Document.Create.NewGrid(Arcarc)
Document.Create.NewGrid(Lineline)

using (Transaction transaction = new Transaction(RevitDoc)) 
{ 
   transaction.Start("Create Grid"); 
   Grid grid = RevitDoc.Create.NewGrid( 
      Line.CreateBound(new XYZ(0, 0, 0), new XYZ(10, 10, 0))); 
   grid.Name = "grid"; 
   transaction.Commit(); 
} 

传入参数对应的直线或弧线所在的平面必须是一个水平的。
创建的轴网将被自动按照上一次的规则递增命名,可以是数字或者字母,取决于上 一次命名的情况。例如,上一次创建的轴网名字为A,本次就自动为B;上一次为3,本次则为4;如果字母或者数字被占用,则跳过。

可以通过Grid. Name属性来设置轴网的名称。如果被设置的名字被占用,会有 ArgumentException抛出。


=========【更多高级应用请关注公众号】========

RevitAPI之标高和轴网(Level/Grid)

==================================


相关标签: RevitAPI api