Revit API找到风管穿过的墙(当前文档和链接文档)
start
[Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class cmdDuctWall : IExternalCommand { public Result Execute(ExternalCommandData cmdData, ref string msg, ElementSet elements) { UIApplication uiApp = cmdData.Application; UIDocument uiDoc = cmdData.Application.ActiveUIDocument; Document doc = uiDoc.Document; Selection sel = uiDoc.Selection; Transaction ts = new Transaction(uiDoc.Document, "delete"); ts.Start(); //加载链接文件 FilteredElementCollector collector = new FilteredElementCollector(doc);// collector.OfClass(typeof(Instance)).OfCategory(BuiltInCategory.OST_RvtLinks);//RevitLinkType List<string> listPath = GetLinkFilePaths(doc); Duct duct = doc.GetElement(sel.PickObject(ObjectType.Element, "duct")) as Duct; foreach (Element elDoc in collector) { Instance ins = elDoc as Instance; if (ins != null) { Transform transForm = ins.GetTransform(); string strKey = elDoc.Name.Substring(, elDoc.Name.IndexOf(".rvt"));//找到链接文件名称 string strPath = GetLinkPath(listPath, strKey); Document docLink = uiApp.Application.OpenDocumentFile(strPath); List<Wall> listWall = FindDuctWall(doc, duct, docLink, ins.GetTransform().Origin); TaskDialog.Show("count", listWall.Count.ToString()); List<Wall> listWall1 = FindDuctWall(doc, duct); TaskDialog.Show("count", listWall1.Count.ToString()); } } ts.Commit(); return Result.Succeeded; } /// <summary> /// 找到当前文档穿过的墙 /// </summary> /// <param name="doc"></param> /// <param name="duct"></param> /// <returns></returns> public List<Wall> FindDuctWall(Document doc, Duct duct) { List<Wall> listWall = new List<Wall>(); //找到outLine BoundingBoxXYZ bb = duct.get_BoundingBox(doc.ActiveView); Outline outline = new Outline(bb.Min, bb.Max); //WinFormTools.MsgBox(bb.Min + "|" + bb.Max); // FilteredElementCollector collector = new FilteredElementCollector(doc); BoundingBoxIntersectsFilter invertFilter = new BoundingBoxIntersectsFilter(outline, false); IList<Element> noIntersectWalls = collector.OfClass(typeof(Wall)).WherePasses(invertFilter).ToElements(); foreach (Element el in noIntersectWalls) { Wall wall = el as Wall; if (wall != null) listWall.Add(wall); } return listWall; } /// <summary> /// 找到穿过链接文件的墙 /// </summary> /// <param name="doc"></param> /// <param name="duct"></param> /// <param name="docLink"></param> /// <param name="xyz">依稀量</param> /// <returns></returns> public List<Wall> FindDuctWall(Document doc, Duct duct, Document docLink, XYZ xyz) { List<Wall> listWall = new List<Wall>(); //找到outLine BoundingBoxXYZ bb = duct.get_BoundingBox(doc.ActiveView); Outline outline = new Outline(bb.Min - xyz, bb.Max - xyz); // FilteredElementCollector collector = new FilteredElementCollector(docLink); BoundingBoxIntersectsFilter invertFilter = new BoundingBoxIntersectsFilter(outline, false); IList<Element> noIntersectWalls = collector.OfClass(typeof(Wall)).WherePasses(invertFilter).ToElements(); foreach (Element el in noIntersectWalls) { Wall wall = el as Wall; if (wall != null) listWall.Add(wall); } return listWall; } /// <summary> /// 取得链接文件路径 /// </summary> /// <param name="doc"></param> /// <returns></returns> public List<string> GetLinkFilePaths(Document doc) { List<string> listPath = new List<string>(); foreach (ElementId elId in ExternalFileUtils.GetAllExternalFileReferences(doc)) { if (doc.get_Element(elId).IsExternalFileReference()) { ExternalFileReference fileRef = doc.get_Element(elId).GetExternalFileReference(); if (ExternalFileReferenceType.RevitLink == fileRef.ExternalFileReferenceType) listPath.Add(ModelPathUtils.ConvertModelPathToUserVisiblePath(fileRef.GetAbsolutePath())); } } return listPath; } /// <summary> /// 根据链接文件名称找到对应链接路径,模糊匹配,待改进 /// </summary> /// <param name="listPath"></param> /// <param name="strKey"></param> /// <returns></returns> public string GetLinkPath(List<string> listPath, string strKey) { foreach (string strPath in listPath) { if (strPath.Contains(strKey)) return strPath; } return ""; } }
url:http://greatverve.cnblogs.com/p/revit-api-ductWall.html
Revit API找到风管穿过的墙(当前文档和链接文档)的更多相关文章
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- API接口文档中将Swagger文档转Word 文档
一般的开发工作,尤其是API接口的开发工作,首先要有开发文档,接口说明文档 ok,后来开发完毕了 和页面联调,或者是和第三方联调的时候, 这个时候,SA systeam admin 就会开始直接让开发 ...
- 一个非常适合IT团队的在线API文档、技术文档工具 (ShowDoc)
在逸橙呆了不到两年,开发时后端都有开发接口API,来到数库,好多后端开发和前端沟通是还是发doc文档,很不方便,我向cto反应,自己找到这个,老乡田雷(php,隔壁村的)也用过,可能某些原因选择其他的 ...
- [工具推荐]制作基于Dash的本地文档方便搜索文档api和内容
[版权声明]:本文章由danvid发布于http://danvid.cnblogs.com/,如需转载或部分使用请注明出处 最近在看es的文档,发现查起api来真的很麻烦,很多现在开源的文档都没有查询 ...
- Revit API改变风管及管件尺寸
start , , )) < , , -)) < , dHeight = ; ConnectorSetIterator csi = fi.MEPModel.Conn ...
- Revit API移动风管
移动风管曲线就可以移动风管 , , ));//向上移动3 ts.Commit(); return Result.Succeeded; } } url:http: ...
- C# : 操作Word文件的API - (将C# source中的xml注释转换成word文档)
这篇博客将要讨论的是关于: 如何从C#的source以及注释, 生成一份Word格式的关于各个类,函数以及成员变量的说明文档. 他的大背景如下...... 最近的一个项目使用C#, 分N个模块, 在项 ...
- Revit API根据链接文件开洞
开洞信息数据: ]); ; ; ; ; ...
- 关于Revit API修改元素参数的问题?
>ADN: DEVR3894 >ADN service level: Professional >产品:Revit MEP 2012 >版本:2012 >语言:中 ...
随机推荐
- 网页排版的时候不要忘了table标签
[概况] DIV+CSS是WEB设计标准,它是一种网页的布局方法.与传统中通过表格(table)布局定位的方式不同,它可以实现网页页面内容与表现相分离.但有时候在布局的时候,纯粹的用div感觉嵌套的太 ...
- Linux入侵问题排查
1.深入分析,查找入侵原因 1.1 检查隐藏账户及弱口令 1.1.1.检查服务器系统及应用账户是否存在弱口令 检查说明:检查管理员账户.数据库账户.MySQL账户.tomcat账户.网站后台管理员账户 ...
- Android sdk安装目录中没有platform-tools目录问题详解
sdk下载地址 http://tools.android-studio.org/index.php/sdk 安装步骤很简单,百度即可. 下面详细说一下,在安装中遇到android sdk下没有plat ...
- Apache+jboss群集优化
故障现象: 俩台服务器jboss做的Apache群集,之前优先访问A,造成大量session都在A上有报警. 调整 调整Apache 配置jboss集群参数,将Node2的worker.node2.l ...
- vistual studio 去除 git 源代码 绑定
第一次碰到这个问题,想将源代码签入TFS管理.添加到源码管理后,默认添加到Git源码管理. 研究过后,发现: 1)删除框内文件 2)Vs->工具->选项->源代码管理->插件管 ...
- 分析占用了大量CPU处理时间的是Java进程中哪个线程
下面是详细步骤: 1. 首先确定进程的 ID ,可以使用 jps -v 或者 top 命令直接查看 2. 查看该进程中哪个线程占用大量 CPU,执行 top -H -p [PID] 结果如下: 可以发 ...
- poj1292
prim,把每个墙看成一个节点,从起点用prim求最小生成树,直到覆盖到终点为止,输出最小生成树中的最大边 #include <cstdio> #include <cmath> ...
- Go 2 Draft Designs
Go 2 Draft Designs 28 August 2018 Yesterday, at our annual Go contributor summit, attendees got a sn ...
- java 组合接口时的名字冲突
重载方法仅通过返回类型是区分不开的,在打算组合的不同接口中,尽量使用不同的方法名,否则可能导致混乱 //: interfaces/InterfaceCollision.java package obj ...
- 如何将文本编辑器嵌入框架--以Umeditor&CodeIgniter框架为例
转:http://blog.csdn.net/u013332865/article/details/52066211 最近接到一个给某私立贵族(小,初,高 12年只是学费近200W)学校做一个网站,时 ...