Revit二次开发 视图与图纸
一、视图的分类
Revit所有的元素都通过视图来呈现,我们经常看到的三维、平面、立面都是各种不同的视图呈现的,对于一个Document来说,其可以包含各种各样的视图对象,根据视图的类型,我可以将视图分为5个类别:
1、ViewPlan:代表平面视图
平面视图是Revit用于呈现平面投影的视图,其主要包含以下类型:
面积平面:ViewType.AreaPlan
天花板平面:ViewType.CeilingPlan
结构平面:ViewType.EngineeringPlan
楼层平面:ViewType.FloorPlan
2、View3D:三维视图
三维视图:ViewType.ThreeD
漫游视图:ViewType.Walkthrough
3、ViewDrafting:草图视图
绘制视图:ViewType.DraftingView
渲染视图:ViewType.Rendering
4、ViewSection:详图视图
剖切视图:ViewType.Section
5、ViewSheet:图纸视图
图纸:ViewType.DrawingSheet
6、ViewSchedule 数据表视图
明细表和数量:ViewType.Schedule
7、还有其他视图类型直接来自View的
如立面ViewType.Elevation、报告ViewType.CostReport、内部View.Internal、图列:ViewType.Legend、报告ViewType.LoadsReport\ViewType.PanelSchedule\ViewType.PresureLossReport、项目浏览器ViewType.ProjectBrowser、报告ViewType.Report、系统浏览器ViewType.SystemBrowser
二、视图的创建:
1、三维视图View3D
//创建透视视图 public static View3D CreatePerspective( Document document, ElementId viewFamilyTypeId ) //创建正交视图 public static View3D CreateIsometric( Document document, ElementId viewFamilyTypeId )
viewFamilyTypeId代表视图对应的族类别,可以通过以下代码获取,三维视图的类别主要为以下三种:
IEnumerable<ViewFamilyType> viewFamilyTypes = from elem in new FilteredElementCollector(doc).OfClass(typeof(ViewFamilyType)) let type = elem as ViewFamilyType where type.ViewFamily == ViewFamily.ThreeDimensional select type;
三维视图可以通过通过设置EyePosition\Origin\ForwardDirection\UpDirection等设置观察者的信息,同时可以设置CropBox设置剪切盒子的大小。
2、平面视图ViewPlan
平面视图,主要包含楼层、结构、天花板、面积平面等,在创建的时候,也需要指定ViewFamilyType的信息,其创建方法如下:
public static ViewPlan Create( Document document, ElementId viewFamilyTypeId, 视图族类型 ElementId levelId 平面视图对应的标高 )
平面视图比较简单,传入指定的类别和标高,即可创建
3、绘制视图viewDrafting
绘制视图是一个专门用于绘制图形的视图,其本身和模型无关,其可以通过二维绘制工具进行绘制,得到需要的图纸,其创建过程如下:
public static ViewDrafting Create( Document document, ElementId viewFamilyTypeId )
草图视图也有一个子类,可以从图片加载创建一个视图,常常用来给指定图纸指定固定图集元素
其创建方法如下:
public static ImageView Create( Document document, string imageFileName )
4、剖切视图ViewSection
剖切视图是通过剪切模型来显示指定类别的结构,其创建方法如下:
public static ViewSection CreateSection( Document document, ElementId viewFamilyTypeId, BoundingBoxXYZ sectionBox 指定的剖切范围 )
同时也可以通过剖切视图来创建索引视图和详图视图,其创建方法分别如下:
ublic static View CreateCallout( Document document, ElementId parentViewId, ElementId viewFamilyTypeId, XYZ point1, XYZ point2 )
public static ViewSection CreateDetail( Document document, ElementId viewFamilyTypeId, BoundingBoxXYZ sectionBox )
5、图纸视图(ViewSheet)
图纸视图是独立的页面,其不需要关联任何模型元素,但是其他各种视图和明细表都可以放置在图纸视图之内,创建图纸视图的时候,需要指定一个图框,其创建方法如下:
public static ViewSheet Create( Document document, ElementId titleBlockTypeId )
public static ViewSheet CreatePlaceholder( Document aDoc )
创建一个占位符的图纸对象
我们可以通过viewprot对象的静态方法,将指定的视图添加到图纸之上,其方法如下:
public static Viewport Create( Document document, ElementId viewSheetId, ElementId viewId, XYZ point )
通过传入图纸的ID,视图的ID,和位置信息,可以将指定的视图添加到图纸之上。
6 明细表ViewSchedule
可以通过明细表,形成表格的方式,将项目中的信息提取到表格之中的呈现方式。
其可以分为:
明细表(或数量)
关键字明细表
材质提取
注释明细表
修订明细表
视图列表
图纸列表
配电盘明细表
其创建方法如下:
6.1 普通明细表
通过传入指定的类别信息,创建明细表
public static ViewSchedule CreateSchedule( Document document, ElementId categoryId )
得到明细表后,需要指定明细表的字段信息。其他明细表的信息,下一个博客见