[Revit二次开发] 创建剖面并将视图切换至剖面
前言
在Revit建模过程及后期出图的时候都有需要用到剖面,然而每次我们都通过手动去创建剖面再去对剖面视图进行调整就会显得很麻烦,工作量也是相当的大。
如果我们通过使用RevitAPI只需要简单的代码就可以实现一个选择构件自动生成剖面的功能。
Demo
下面演示如何通过使用代码在Revit中选择构件并生成构件的剖面视图,最后将当前显示视图设置为新生成的剖面视图。
namespace LjsGo.Example
{[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]public class CreateSection : IExternalCommand{public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements){var uiDoc = commandData.Application.ActiveUIDocument;var doc = commandData.Application.ActiveUIDocument.Document;var elem = commandData.Application.ActiveUIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Face);var instance = commandData.Application.ActiveUIDocument.Document.GetElement(elem) as FamilyInstance;var face = instance.GetGeometryObjectFromReference(elem) as Face;// 过滤视图类型var viewFamilyTypes = new FilteredElementCollector(doc).OfClass(typeof(ViewFamilyType)).Cast<ViewFamilyType>().ToList();var viewFamilyType = viewFamilyTypes.FirstOrDefault(o => o.ViewFamily == ViewFamily.Section);if (viewFamilyType == null){return Result.Failed;}Transaction transaction = new Transaction(doc, "Create Section");transaction.Start();// 创建剖面UV uvmax = face.GetBoundingBox().Max;UV uvmin = face.GetBoundingBox().Min;double width = uvmax.U - uvmin.U + 200 / 304.8;double height = uvmax.V - uvmin.V + 200 / 304.8;//生成剖面XYZ face_Y = face.ComputeDerivatives(new UV(0, 0)).BasisY;XYZ face_Z = -face.ComputeNormal(new UV(0, 0));XYZ face_X = -face_Z.CrossProduct(face_Y);XYZ center = face.Evaluate((uvmax + uvmin) / 2);Transform tf = null;tf = Transform.Identity;tf.Origin = center;tf.BasisX = face_X;tf.BasisY = face_Y;tf.BasisZ = face_Z;BoundingBoxXYZ box = new BoundingBoxXYZ();box.Transform = tf;box.Min = new XYZ(-width / 2, -height / 2, 0);box.Max = new XYZ(width / 2, height / 2, 500 / 304.8);var viewSection = ViewSection.CreateSection(doc, viewFamilyType.Id, box);viewSection.get_Parameter(BuiltInParameter.SECTION_COARSER_SCALE_PULLDOWN_IMPERIAL).Set(1000);viewSection.CropBoxActive = true;viewSection.DisplayStyle = DisplayStyle.ShadingWithEdges;viewSection.DetailLevel = ViewDetailLevel.Fine;viewSection.IsolateElementTemporary(instance.Id);transaction.Commit();// 跳转到改视图uiDoc.ActiveView = viewSection;return Result.Succeeded;}}
}
总结
- 通过以上代码就可以直接创建出剖面视图了。
- 注意:生成剖面的方向和BoundingBoxXYZ中的Transform有关。
以上内容希望对您有所帮助,谢谢关注!
[Revit二次开发] 创建剖面并将视图切换至剖面相关推荐
- revit二次开发 创建图纸图框,视图放到图框中心点位置
创建图纸 /// <summary>/// 创建图纸/// </summary>private void CreateViewSheet2(){FilteredElementC ...
- #Revit二次开发# 创建剖面视图
设置box的min和max只是设置box的范围大小.其中min和max的xyz方向的大小实际指的基于剖面视图坐标系.Box的原点和min,max可以确定位置关系:box的原点决定创建的剖面视图的原点. ...
- Revit二次开发-创建IURibbon中使用相对地址
目录 前言 一.创建DLL文件 二.按钮类编写(UIRibbon) 1.程序集的引用 2.代码编写 3.完整代码 三.dll文件和addin文件的使用 四.最终效果 前言 我们在进行二次开发的时候 ...
- [Revit二次开发] 创建一个柱的族
完整项目代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...
- revit二次开发-创建族
通过文件路径载入族 并点击任意一点创建实例 代码如下: using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk ...
- Revit二次开发“创建组遍历组Group”
group 就是吧一些有关系的对象放在一个组里面 [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manu ...
- revit二次开发 创建管道三通,管道四通。两根管、三根管、四根管
创建单跟水管 /// <summary>/// 创建水管Pipe/// </summary>/// <returns></returns>public ...
- revit二次开发创建桥架、线管
创建桥架.线管 创建桥架 通过过滤器获取桥架类型 选择点 得到活跃视图标高 创建桥架 修改宽.高 完整代码 创建线管 获取线管类型 获取标高 获取点 创建 修改直径 完整代码 创建桥架 /// < ...
- Revit二次开发-创建楼板钢筋
Transaction transaction = new Transaction(document);transaction.Start("创建楼板钢筋");BoundingBo ...
最新文章
- TCP/IP详解--第十三章
- java传输文件暂停_java – 在文件下载中实现暂停/恢复
- 使用Selenium定位鼠标悬浮出现的下拉菜单
- OSS客户端简单介绍和评测
- Oracle日期函数汇总
- Python数据字典处理Excel,并统计总数,画出饼图
- python如何制作地图热力图
- Java-微信授权and手机号授权
- spyder 更改默认工作目录的最优方法
- 那么一个数字字符串比如“111“,就可以转化为“AAA”、“KA”和“AK”。
- 公路路基路面回弹弯沉检测技术(转载)
- KingbaseES V8R6 集群运维系列 -- 命令行部署repmgr管理集群+switchover测试
- 牛客 F - 爬塔 (分组背包)
- linux下,代码阅读工具,understand
- SAP财务记账中的贸易伙伴Trading Partner简析
- 1.2.1 python中的函数
- Step7编程语言编程概述结构
- 你被Slashdot了吗?
- 安卓篇.将阿拉伯数字转化成罗马数字
- 织梦后台自带采集无法采集https站解决方法