前言
市场上把 DWG 翻模成 Revit 的软件有很多,主要还是有很大的需求。Revit 相比与 CAD, 门槛还是要高很多。那么 DWG 翻模的基本原理是什么?如何自己也简单的翻个模呢?
DWG 在Revit
把一个 DWG 导入 Revit,在Revit 中选中它,显示的是一个 ImportInstance
。DWG的图层都哪里去了呢?打开VG。
DWG 图层或者说不同类型的线都可以在这里看到。而它们都存储在哪里呢?
ImportInstance
的 Category
,有很多的 SubCategory
。而每一个 SubCategory
可以控制对应的内容的显示样式。
隐藏图层
导入的 DWG 整体是一个 ImportInstance
, 就是一个 element:
- Revit API 提供了选择 element 一部分的功能,
uidoc.Selection.PickObject(ObjectType.PointOnElement)
。 - 返回的是一个
Reference
,通过它可以得到对应的几何图形,GeometryObject geoObj = elem.GetGeometryObjectFromReference(refer)
。 - 通过
GeometryObject
可以得到GraphicsStyle
,从而得到对应的Category
。 - 视图可以按照
Category
设置显示或者隐藏。
public void GetDWGObject()
{
UIDocument uidoc = Application.ActiveUIDocument;
Reference refer = uidoc.Selection.PickObject(ObjectType.PointOnElement);
Element elem = Document.GetElement(refer);
GeometryElement geoElem = elem.get_Geometry(new Options());
GeometryObject geoObj = elem.GetGeometryObjectFromReference(refer);
Category targetCategory = null;
ElementId graphicsStyleId = null;
if(geoObj.GraphicsStyleId != ElementId.InvalidElementId)
{
graphicsStyleId = geoObj.GraphicsStyleId;
GraphicsStyle gs = Document.GetElement(geoObj.GraphicsStyleId) as GraphicsStyle;
if(gs != null)
{
targetCategory = gs.GraphicsStyleCategory;
var name = targetCategory.Name;
}
Transaction trans = new Transaction(Document, "隐藏图层");
trans.Start();
this.Document.ActiveView.SetCategoryHidden(targetCategory.Id, true);
trans.Commit();
}
}
参考:在Revit中读取、隐藏并绘制CAD线
原文中,doc.ActiveView.SetVisibility(targetCategory, false);
应该已经 obsolete 了。
绘制模型线
直接参考:在Revit中读取、隐藏并绘制CAD线
这一部分主要是为了告诉你确实可以拿到几何图形。
总结
可以从 DWG 中拿到对应的几何图形,并且通过图层或者其它标记,识别出几何图形的功能。比如某些线代表的是墙、柱子或者梁,那么就可以写规则在 Revit 中创建出来。于是翻模就完成了。
翻模本身不难,不过那么多需要翻模的物体,都有自己的逻辑,基本上没什么特别通用的方法,毕竟机器是不能自己看图纸的,需要人工编写规则,工作量还是挺大的。