Revit二次开发之俯视图缩放匹配

您所在的位置:网站首页 revit缩放图片 Revit二次开发之俯视图缩放匹配

Revit二次开发之俯视图缩放匹配

2023-10-14 11:57| 来源: 网络整理| 查看: 265

时隔多日偶有所得,来写自己的第二篇博客,和大家共同进步。 应用场景是在Revit二次开发中需要将当前视图切换成三维视图,并且切换成俯视图,从而可以在平面上选点布置族实例。步骤如下:

第一步:找到Revit项目文档中的三维视图,并将其设为活动视图(ActiveView)第二步:判断活动视图是否为俯视图第三步:将视图切换为俯视图第四步:切换成功的视图往往位置不对,需要进行缩放匹配(Zoom To Fit)第五步:激活族类型,并布置族实例 示例代码如下: public void LayOutPointInstance(UIApplication app) { UIDocument uidoc = app.ActiveUIDocument; //取得文档 Document doc = uidoc.Document; Selection selection = uidoc.Selection; Transaction transaction = new Transaction(doc); try { // 第一步,找到Revit项目文档中的三维视图,并将其设为活动视图 View3D view = Get3dView(doc); if (null == view) { MessageBox.Show("没有找到合适的三维视图", "提示信息"); } else { //Attention: 必须在开启事务之前设置视图,否则会报错 uidoc.ActiveView = view; //第二步:先判断是不是俯视图,如果不是再调整视图 if (!view.UpDirection.IsAlmostEqualTo(new XYZ(0, 1, 0))) { //要在事件响应中修改文档,必须显式地启动一个事务,在该事务中修改文档。 transaction.Start("切换成三维视图"); //用0-6的整数值代表不同的视觉样式 //6代表真实、4代表着色、2代表隐藏线线框、1代表线框 view.get_Parameter(BuiltInParameter.VIEW_DETAIL_LEVEL).Set(3); view.get_Parameter(BuiltInParameter.MODEL_GRAPHICS_STYLE).Set(6); view.SetOrientation(new ViewOrientation3D(new XYZ(), new XYZ(0, 1, 0), new XYZ(0, 0, -1))); //进行缩放匹配操作 IList uIViews = uidoc.GetOpenUIViews(); foreach (UIView uIView in uIViews) { if(uIView.ViewId==doc.ActiveView.Id) uIView.ZoomToFit(); } transaction.Commit(); } } //第二步,选择点进行测点布设 var reference = selection.PickObject(ObjectType.PointOnElement, "请选择面上的点"); XYZ point = reference.GlobalPoint;//选中的点 transaction.Start("激活族类型并放置族实例"); FamilySymbol pointFamilySymbol = null; FilteredElementCollector colletion = new FilteredElementCollector(doc); colletion.OfClass(typeof(FamilySymbol)); foreach (FamilySymbol item in colletion) { if (item.Name == "竖向位移") { pointFamilySymbol = item; if (!item.IsActive) item.Activate(); } } FamilyInstance familyInstance = doc.Create.NewFamilyInstance(point, pointFamilySymbol, Autodesk.Revit.DB.Structure.StructuralType.NonStructural); transaction.Commit(); } catch (Exception ex) { MessageBox.Show(ex.ToString()); } } /// /// Retrieve a suitable 3D view from document. /// View3D Get3dView(Document doc) { FilteredElementCollector collector = new FilteredElementCollector(doc).OfClass(typeof(View3D)); foreach (View3D v in collector) { Debug.Assert(null != v,"never expected a null view to be returned" + " from filtered element collector"); // Skip view template here because view // templates are invisible in project // browser if (!v.IsTemplate) { return v; } } return null; }

示例代码到此为止,下面分享一下学习心得。这也是一个Revit二次开发的小技巧,相信不少人已经掌握了。我们因为语言和使用习惯,往往Revit使用的都是中文版,并且开发人员或多或少对Revit软件的应用都比较熟悉,但是对Revit API往往不会那么熟悉,这个就显示出了RevitAPI.chm(开发人员帮助文档)的重要作用。而RevitAPI.chm是英文的,因此我们需要知道我们采用的API的英文名。下面举例说明,用的就是上面的缩放匹配功能。 在Revit面板中右键即可找到“缩放匹配(F)”这个功能,然后记住相应位置,关闭Revit,将其切换到英文版重新打开,同样操作后发现该操作名称为“Zoom To Fit”,依据该英文名称去帮助文档RevitAPI.chm检索,找到ZoomToFit Method,依据文档操作方法即可。 在这里插入图片描述在这里插入图片描述备注:Revit快捷方式右键->属性->快捷方式->目标,将后缀CHS改成ENU,注意其他不要更改; 浅薄之谈,有错误或者改进之处欢迎大家指正,当然有不懂的地方大家也可以一起交流,努力!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3