Revit API: DWG翻模的基本原理

前言

市场上把 DWG 翻模成 Revit 的软件有很多,主要还是有很大的需求。Revit 相比与 CAD, 门槛还是要高很多。那么 DWG 翻模的基本原理是什么?如何自己也简单的翻个模呢?

DWG 在Revit

把一个 DWG 导入 Revit,在Revit 中选中它,显示的是一个 ImportInstance。DWG的图层都哪里去了呢?打开VG。
DWG 图层或者说不同类型的线都可以在这里看到。而它们都存储在哪里呢?
ImportInstanceCategory,有很多的 SubCategory。而每一个 SubCategory 可以控制对应的内容的显示样式。
Revit API: DWG翻模的基本原理_第1张图片

隐藏图层

导入的 DWG 整体是一个 ImportInstance, 就是一个 element:

  1. Revit API 提供了选择 element 一部分的功能,uidoc.Selection.PickObject(ObjectType.PointOnElement)
  2. 返回的是一个 Reference,通过它可以得到对应的几何图形,GeometryObject geoObj = elem.GetGeometryObjectFromReference(refer)
  3. 通过 GeometryObject 可以得到 GraphicsStyle,从而得到对应的 Category
  4. 视图可以按照 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 中创建出来。于是翻模就完成了。
翻模本身不难,不过那么多需要翻模的物体,都有自己的逻辑,基本上没什么特别通用的方法,毕竟机器是不能自己看图纸的,需要人工编写规则,工作量还是挺大的。

你可能感兴趣的:(Revit,API)