不知道你们有多少人和小编一样天天加班4-5小时还走不了的加班狗。。。。。。最主要是。。。。。。。
好了,言归正传,进入我们这期的主题——利用Revit二次开发如何创建楼板
创建楼板的第一种方法:NewFloor(CurveArray profile, bool structural)这个方法比较简单就不说了,我们来说第二种方法:NewFloor(CurveArray profile, floorType, level, bool structural)和前几期类似,我们需要去把这四个条件集齐这样就可以创建出我们想要的楼板了:
1.CurveArray profile。这是曲线的一个组合,和墙的集合有所不同要用Append来添加而不是add了,具体如下:
代码语言:javascript复制 CurveArray cu = new CurveArray();
cu.Append(Line.CreateBound(new XYZ(0, 0, 0), new XYZ(100, 0, 0)));
cu.Append(Line.CreateBound(new XYZ(100, 0, 0), new XYZ(0, 100,0)));
cu.Append(Line.CreateBound(new XYZ(0, 100, 0), new XYZ(0, 0, 0)));
2.floorType。我们需要创建楼板的类型:
代码语言:javascript复制 if (wa.GetParameters("默认的厚度")[0].AsValueString()=="225")//找到板厚为225的板
{
fl = wa;
}
3.level。要创建楼板所在的标高,和墙一样小编在这就不重复了。
4. bool structural。是否是结构,这回我们选个true,也和墙类似小伙伴可以去看前面几期哦。
我们来组合比较一下和创建墙的方法不同
(1)在于创建墙时我们需要的是墙类型和标高的ID而楼板则要的不是ID而是类型,本质上是一样的;
(2)创建轴线、标高、墙create一下就好而板则需要doc.create。
下边上代码:
代码语言:javascript复制 FilteredElementCollector fil = new FilteredElementCollector(doc);
fil.OfClass(typeof(Level));
FilteredElementCollector fill = new FilteredElementCollector(doc);
fill.OfClass(typeof(FloorType));
FloorType fl = null;
Level le= null;
foreach (FloorType wa in fill)//查找板的类型
{
if (wa.GetParameters("默认的厚度")[0].AsValueString() == "225")//找到板厚为225的板
{
fl= wa;
}
}
CurveArray cu = new CurveArray();
cu.Append(Line.CreateBound(new XYZ(0, 0, 0), new XYZ(100, 0, 0)));//线条
cu.Append(Line.CreateBound(new XYZ(100, 0, 0), new XYZ(0, 100, 0)));
cu.Append(Line.CreateBound(new XYZ(0, 100, 0), new XYZ(0, 0, 0)));
foreach (Level ll in fil)//找标高
{
if (ll.Name.Contains("一层"))//找到一层标高
{
le = ll;
}
}
Floor fll = doc.Create.NewFloor(cu, fl, le, true);
效果:
看到我们写true后结构和启用分析模型就会被勾选(当然一般情况我们是false,因为分析模型会使得模型比较卡)