使用Revit出图时,往往会遇到项目地库标高不一致,在标注机电管线时,需要按照地库地面标高去标注,但地库地面标高又无法统一,需要手动取框选区域形成标高缩略图注明标高。
本文简单分享一下利用土建模型中的楼板实现缩略图的快速方法;
1、读取地库建筑面层的所有轮廓,筛选出建筑面层的范围线,利用范围线生成详图线;
2、新建常规注释类别的标高标记族,将建筑面层的标高赋值给常规注释族;
以下是所有代码:
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIApplication uiApp = commandData.Application;
UIDocument uiDoc = uiApp.ActiveUIDocument;
Document doc = uiDoc.Document;
Selection sel = uiDoc.Selection;
try {
Transaction trans = new Transaction(doc);
trans.Start("绘制详图线");
FilteredElementCollector col = new FilteredElementCollector(uiDoc.Document);
col.OfClass(typeof(FamilySymbol)).OfCategory(BuiltInCategory.OST_GenericAnnotation);
FamilySymbol familySymbol = col.FirstElement() as FamilySymbol;
FilteredElementCollector collector = new FilteredElementCollector(doc);
ICollection<Element> floorcol = collector.OfClass(typeof(Floor)).ToElements();
foreach (Element elem in floorcol) {
Floor floor = elem as Floor;
if (floor.Name.Contains("楼板"))
{
Level level = doc.GetElement(floor.LevelId) as Level;
if (level.Name.Contains("B1") && level.Name.Contains("ST"))
{
//获得楼板的相对标高;
double offset = floor.LookupParameter("自标高的高度偏移").AsDouble();
double levelHeigh = (level.Elevation + offset) * 304.8/1000;
string levelParam = levelHeigh.ToString("0.000");
XYZ point = (floor.get_BoundingBox(doc.ActiveView).Max+floor.get_BoundingBox(doc.ActiveView).Min)/2;
FamilyInstance instance = doc.Create.NewFamilyInstance(point, familySymbol, doc.ActiveView);
Parameter parm = instance.LookupParameter("标高1");
parm.Set(levelParam);
GeometryElement geometry = floor.get_Geometry(new Options());
foreach (GeometryObject geomObj in geometry)//获取到几何元素的边和面
{
Solid geomSolid = geomObj as Solid;
if (null != geomSolid)
{
foreach (Face geoFace in geomSolid.Faces)
{
if (geoFace is PlanarFace) {
PlanarFace plFace = geoFace as PlanarFace;
//得到楼板面
if (plFace.FaceNormal.Z == 1)
{
EdgeArray array = plFace.EdgeLoops.get_Item(0);
foreach (Edge ed in array)
{
Curve curve = ed.AsCurve();
doc.Create.NewDetailCurve(doc.ActiveView, curve);
}
}
}
}
}
}
}
}
}
trans.Commit();
}
catch (Autodesk.Revit.Exceptions.OperationCanceledException e) {
return Result.Cancelled;
}
catch (Exception ex) {
TaskDialog.Show("Revit",ex.Source+"n"+ex.Message+"n");
return Result.Failed;
}
return Result.Succeeded;
}
实际效果如下:
以上就是生成缩略图的简单方法,本方法对楼板的建模要求很高,如果土建模型楼板不完整或者重叠,需要手动取修改缩略图。
微信公众号:xuebim
关注建筑行业BIM发展、研究建筑新技术,汇集建筑前沿信息!
← 微信扫一扫,关注我们+
评论前必须登录!
注册