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抛出。
=========【更多高级应用请关注公众号】========
==================================