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

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

一、标高

标高是有限水平平面,大多数元素都是基于标高来定位,如墙、地 板、天花板、屋顶等。对应的类是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抛出。


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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值