视图

  • 视图
    • 视图类型
  • 视图的方法
    • 新建视图
  • 参考

视图

视图是从Revit模型产生的图像,其对文件中存储的数据有特许访问权。它们可以是图形,如平面图;或文本,如明细表。每个项目文件都有一个或多个不同视图。最后一个焦点窗口是活动视图ActiveView。每个视图的生成都是从三维对象投影到二维投影面的过程。
Autodesk. Revit.DB. View类是Revit文件中所有视图类型的基类。Autodesk. Revit.Ul.UIView类表示在Revit用户界面中的窗口视图。

//获得当前视图id
ElementId viewId = uidoc.ActiveView.Id;

视图类型

Autodesk.Revit.DB.View类是Revit文件中所有视图类型的基类;Autodesk.Revit.UI.UIView类表示在Revit用户界面中的窗口视图。

常见视图类型

视图 视图类型 视图类
三维视图 ViewType.ThreeD View3D
天花板平面视图 ViewType.CeilingPlan ViewPlan
面积平面视图 ViewType.AreaPlan ViewPlan
剖面视图 ViewType.Section ViewSection
图纸视图 ViewType.DrawingSheet ViewSheet
明细表视图 ViewType.Schedule ViewSchedule
//获取视图类型
//Autodesk.Revit.DB.View view = GetView();
//两种判断视图类型的方法:
//第一种:
ViewType viewType = view.ViewType;
switch (viewType)
{case Autodesk.Revit.DB.ViewType.ThreeD:// 视图类型是三维视图break;// 其他类型
}// 第二种:
if (view is View3D)
{// view的类类型是三维视图
}
public void GetViewType(Autodesk.Revit.DB.View view)
{// Get the view type of the given view, and format the prompt stringString prompt = "The view is ";switch (view.ViewType){case ViewType.AreaPlan:prompt += "an area view.";break;case ViewType.CeilingPlan:prompt += "a reflected ceiling plan view.";break;case ViewType.ColumnSchedule:prompt += "a column schedule view.";break;case ViewType.CostReport:prompt += "a cost report view.";break;case ViewType.Detail:prompt += "a detail view.";break;case ViewType.DraftingView:prompt += "a drafting view.";break;case ViewType.DrawingSheet:prompt += "a drawing sheet view.";break;case ViewType.Elevation:prompt += "an elevation view.";break;case ViewType.EngineeringPlan:prompt += "an engineering view.";break;case ViewType.FloorPlan:prompt += "afloor plan view.";break;case ViewType.Internal:prompt += "Revit's internal view.";break;case ViewType.Legend:prompt += "a legend view.";break;case ViewType.LoadsReport:prompt += "a loads report view.";break;case ViewType.PanelSchedule:prompt += "a panel schedule view.";break;case ViewType.PresureLossReport:prompt += "a pressure loss report view.";break;case ViewType.Rendering:prompt += "a rendering view.";break;case ViewType.Report:prompt += "a report view.";break;case ViewType.Schedule:prompt += "a schedule view.";break;case ViewType.Section:prompt += "a cross section view.";break;case ViewType.ThreeD:prompt += "a 3-D view.";break;case ViewType.Undefined:prompt += "an undefined/unspecified view.";break;case ViewType.Walkthrough:prompt += "a walkthrough view.";break;default:break;}// Give the user some informationTaskDialog.Show("Revit",prompt);
}

视图的方法

新建视图

每个视图类都有相应的函数来创建视图对象

例如:

public static ViewPlan Create(Document document, ElementId viewFamilyTypeId, ElementId levelId);
public static ViewPlan CreateAreaPlan(Document document, ElementId areaSchemeId, ElementId levelId);
参数 类型 说明
document Type: Autodesk.Revit.DB.Document ViewPlan将被添加到其中的文档。
viewFamilyTypeId Type: Autodesk.Revit.DB.ElementId ViewFamilyType的id,它将被新的ViewPlan使用。类型需要是楼板平面FloorPlan, 天花板平面CeilingPlan,面积平面 AreaPlan,或结构平面StructuralPlan视图类型。
levelId Type: Autodesk.Revit.DB.ElementId 与新视图关联的标高id。
public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){try{Document doc = commandData.Application.ActiveUIDocument.Document;Transaction tran = new Transaction(doc);tran.Start("创建标高");CreateViewPlane(doc, GetAllLevels(doc).Last()).Name = "新建楼层平面";tran.Commit();return Autodesk.Revit.UI.Result.Succeeded;}catch (Exception ex){message = ex.Message;return Autodesk.Revit.UI.Result.Failed;}}private ViewPlan CreateViewPlane(Document doc, Level level){List<ViewPlan> allFloorPlanes = new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Views).OfClass(typeof(ViewPlan)).WhereElementIsNotElementType().OfType<ViewPlan>().ToList();foreach (ViewPlan view in allFloorPlanes){if (view.ViewType == ViewType.FloorPlan && view.GenLevel != null && view.GenLevel.Id == level.Id){doc.Delete(view.Id);break;}}doc.Regenerate();return ViewPlan.Create(doc, doc.GetDefaultElementTypeId(ElementTypeGroup.ViewTypeFloorPlan), level.Id);}private IList<Level> GetAllLevels(Document doc){return new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).OfClass(typeof(Level)).ToElements().OfType<Level>().ToList();}

要删除一个视图可以使用Document. Delete方法,传入一个视图的ID,doc.Delete(view.Id);。也可以通过删除该视图所依赖的对象来间接删除该视图,例如,删除标高,相应的平面视图也会被删除,或者删除相机,相应的三维视图也会被删除。

隐藏注释

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
namespace ViewBasicDemo
{[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]public class HiddenAnnotatoinCmd : IExternalCommand{public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){try{View activeView = commandData.Application.ActiveUIDocument.ActiveView;HiddenAnnotaionElements(activeView);return Autodesk.Revit.UI.Result.Succeeded;}catch (Exception ex){message = ex.Message;return Autodesk.Revit.UI.Result.Failed;}}private void HiddenAnnotaionElements(View view){Transaction tran = new Transaction(view.Document);tran.Start("隐藏注释");view.AreAnnotationCategoriesHidden = true;tran.Commit();}}
}
private void Getinfo_View(Autodesk.Revit.DB.View view)
{string message = "View: ";//get the name of the viewmessage += "\nView name: " + view.Name;//The crop box sets display bounds of the viewBoundingBoxXYZ cropBox = view.CropBox;XYZ max = cropBox.Max; //Maximum coordinates (upper-right-front corner of the box).XYZ min = cropBox.Min; //Minimum coordinates (lower-left-rear corner of the box).message += "\nCrop Box: ";message += "\nMaximum coordinates: (" + max.X + ", " + max.Y + ", " + max.Z + ")";message += "\nMinimum coordinates: (" + min.X + ", " + min.Y + ", " + min.Z + ")";//get the origin of the screenXYZ origin = view.Origin;message += "\nOrigin: (" + origin.X + ", " + origin.Y + ", " + origin.Z + ")";//The bounds of the view in paper space (in inches).BoundingBoxUV outline = view.Outline;UV maxUv = outline.Max; //Maximum coordinates (upper-right corner of the box).UV minUv = outline.Min; //Minimum coordinates (lower-left corner of the box).message += "\nOutline: ";message += "\nMaximum coordinates: (" + maxUv.U + ", " + maxUv.V + ")";message += "\nMinimum coordinates: (" + minUv.U + ", " + minUv.V + ")";//The direction towards the right side of the screenXYZ rightDirection = view.RightDirection;message += "\nRight direction: (" + rightDirection.X + ", " +rightDirection.Y + ", " + rightDirection.Z + ")";//The direction towards the top of the screenXYZ upDirection = view.UpDirection;message += "\nUp direction: (" + upDirection.X + ", " +upDirection.Y + ", " + upDirection.Z + ")";//The direction towards the viewerXYZ viewDirection = view.ViewDirection;message += "\nView direction: (" + viewDirection.X + ", " +viewDirection.Y + ", " + viewDirection.Z + ")";//The scale of the viewmessage += "\nScale: " + view.Scale;// Scale is meaningless for Schedulesif (view.ViewType != ViewType.Schedule){int testScale = 5;//set the scale of the viewview.Scale = testScale;message += "\nScale after set: " + view.Scale;}TaskDialog.Show("Revit",message);
}

参考

//============代码片段8-2:获取视图中可见的元素============
//找到视图中所有可见的元素
FilteredElementCollector elemCollector = new FilteredElementCollector(document, viewId);
foreach (Element elem in elemCollector)
{//操作元素elem
}//============代码片段8-3:创建一个正交三维视图============
private void CreateView3D(Autodesk.Revit.Document doc, ElementId viewTypeId)
{try{// Create a new View3DXYZ direction = new XYZ(1, 1, 1);View3D view3D = View3D.CreateIsometric(doc, viewTypeId);if (null == view3D)return;// The created View3D isn't perspective.Debug.Assert(false == view3D.IsPerspective);}catch (Exception e){Debug.WriteLine(e.ToString());}
}//============代码片段8-4:显示剖面框============
private void ShowHideSectionBox(View3D view3D)
{view3D.IsSectionBoxActive = true;
}//============代码片段8-5:创建楼层平面和天花板平面============
private void CreatePlanView(Autodesk.Revit.Document doc, ElementId viewTypeId)
{try{using(Transaction tr = new Transaction(doc)){tr.Start(“创建平面视图”);double elevation = 10.0;Level level1 = doc.Create.NewLevel(elevation);ViewPlan floorView = ViewPlan.Create(doc, viewTypeId, level1.Id);tr.Commit();}}catch (Exception exp){MessageBox.Show(exp.ToString());}
}//============代码片段8-6:创建和打印一个图纸视图============
private void CreateSheetView(Autodesk.Revit.Document doc)
{// Get an available title block from documentFamilySymbolSet fsSet = doc.TitleBlocks;if (fsSet.Size == 0){MessageBox.Show("No title blocks");return;}FamilySymbol fs = null;foreach (FamilySymbol f in fsSet){if (null != f){fs = f;break;}}try{// Create a sheet viewViewSheet viewSheet = ViewSheet.Create(doc, fs);if (null == viewSheet)return;// Add current view onto the center of the sheetUV location = new UV((viewSheet.Outline.Max.U - viewSheet.Outline.Min.U) / 2,(viewSheet.Outline.Max.V - viewSheet.Outline.Min.V) / 2);XYZ point = new XYZ(UV.U, UV.V, 0);Viewport.Create(doc, viewSheep.Id, doc.ActiveView.Id, point);// Print the sheet outif (viewSheet.CanBePrinted){if (MessageBox.Show("Print the sheet?", "Revit",
MessageBoxButtons.YesNo) == DialogResult.Yes)viewSheet.Print();}}catch (Exception e){MessageBox.Show(e.ToString());}
}

Revit二次开发——视图相关推荐

  1. Revit二次开发选择模型面生成新的三维视图

    觉得自己做的一些Revit二次开发的项目经验需要找个地方保存下来,不然以后碰到类似的又得去冲浪捞人家的结晶再整合,所以从今天起开始写CSDN博客啦 选择模型面生成新的三维视图 废话不多说,直接上代码! ...

  2. revit二次开发调整三维视图的视角方向

    revit二次开发调整三维视图的视角方向 1.找到或创建了三维视图之后,操作视图的orientto()属性.(前提是该视图为View3D类型 其中:参数为视角方向. 前视图:0,1,0: 后视图:0, ...

  3. Revit二次开发 获取模型截面线、截面轮廓

    描述 获取Revit模型的截面线.横切面线.截面轮廓. 用途 用于获取模型的截面线.横切面线.截面轮廓. 实现方式 创建视图平面: 从视图平面获取轮廓线: 获取平面标高处的截面线. 效果 示例 /// ...

  4. revit二次开发--异形柱翻模

    最近写了一个revit二次开发的异形柱翻模的功能,柱子翻模网上有很多插件可以用,我用的比较多的是红瓦,其中异形柱的翻模对于图纸的要求较高,有很多不准确的地方.很多异形柱,整体翻模出来是错误的,翻出来之 ...

  5. Revit二次开发从入门到精通学习之路, (含Revit二次开发教程下载)

    Revit二次开发从入门到精通学习之路 Autodesk Joe Ye叶雄进 2. 18 2014    yexiongjin@hotmail.com Revit在国内的应用越来越广泛, Revit ...

  6. C# Revit二次开发基础/核心编程---建筑建模-标高和轴网

    一.本节课程 C# Revit二次开发基础/核心编程---建筑建模-标高和轴网 二.本节要讲解的知识点 1.标高的高度.创建标高 2.轴网曲线.创建轴网 具体内容 1.标高 标高是有限水平平面,大多数 ...

  7. Revit二次开发_轴网快速标注

    通过Revit二次开发实现对平行轴网的快速标注.交互操作是框选轴网->点选尺寸标注出现的位置->生成两道尺寸标注. 要达到设想的结果一些地方需要特殊考虑: 框选操作容易误选轴网,起码要把与 ...

  8. Revit二次开发——Ribbon菜单的创建以及各种不同的button(按钮)的代码总结

    目录 一.创建普通的一个panel里面三个32px*32px的pushbutton,剩下两个写法一样 二.创建三个层叠按钮 层叠按钮图标需为16px*16px 层叠按钮最多为一列放三个,这个也要创建个 ...

  9. C# Revit二次开发基础/核心编程--- Application\Document\Transaction

    一.本节课程 C# Revit二次开发基础/核心编程--- Application\Document\Transaction 二.本节要讲解的知识点 Application\Document\Tran ...

  10. Revit二次开发学习笔记

    Revit二次开发学习笔记1 20220314: 概念:Application与Document 接口函数:IExternalCommand.ActiveView与Selection 20220316 ...

最新文章

  1. iOS应用内跳转系统设置相关界面的方法
  2. docker 安装 solr搜索引擎
  3. python中常见的流程结构-python常见对象的结构
  4. spoj Pattern Find(kmp)
  5. C# 3.0 New Language Features (Part 1)
  6. 在VM虚拟机Windows Server r2上部署安装Microsoft Dynamics CRM 2016 步骤详解(一)
  7. awk 里面添加单引号
  8. 不小心执行了rm-rf,除了跑路,如何恢复?
  9. c matlab 引擎调用,将C/C++回调传递给matlab引擎
  10. 51单片机外设篇:按键
  11. java的PrintWriter打印流详解
  12. 设计一个RC高通滤波器或低通滤波器
  13. 开发者头条(一):导航页
  14. python各城市对应的省_python实现城市和省份字典(根据城市判断属于哪个省份)...
  15. 数显之家快讯:「SHIO世硕心语」改变你的人生格局,2021年你应当做这三件事!
  16. Laravel Eloquent If Record Exists
  17. 路由器接口管理 控制端口 辅助端口 物理端口 逻辑端口 局域网
  18. 中美将改头换面融为一体----中美“一体化”
  19. scrapy爬虫之爬取百度手机助手app信息并保存至mongodb数据库(附源码)
  20. 资料搜集-JAVA系统的梳理知识

热门文章

  1. 查看电脑的admin的密码
  2. sniffer与网络执法官,p2p终结者的简单对比
  3. 声音均衡器怎么调好听_完美音效就靠它了!最详细均衡器调整方法
  4. linux某用户 计划任务,Linux计划任务管理
  5. Windows Server 2008 R2 免费使用900天的方法
  6. 【优亿 Android前线快报】 第76期
  7. SQLServer 启动问题,服务器错误代码126 解决办法
  8. 单词发音网页 (文本处理 python)
  9. 来几个有趣的Linux指令 (转自Chinaitlab)
  10. SharePoint2010向2013升级排错