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 >语言:中 ...
随机推荐
- 02 workerman之GatewayWorker简单的demo 实现两端发送消息
前端代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <t ...
- 【SVN】命令行忽略不必要的文件和文件夹
SVN命令参考: https://www.cnblogs.com/wlsxmhz/p/5775393.html 我们需要明白命令行设置忽略文件和文件夹是通过设置svn:ignore属性设置的,pr ...
- Longest Words
Given a dictionary, find all of the longest words in the dictionary. Example Given { "dog" ...
- vs中如何统计整个项目的代码行数
在一个大工程中有很多的源文件和头文件,如何快速统计总行数? ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shift ...
- [java笔记]JDK的安装和配置
1.JDK安装下载java JDK:点击下载(http://www.oracle.com/technetwork/java/javase/downloads/index.html )JDK(Java ...
- MediatR 中介模式
使用MediatR完成基于内存级别的消息发布订阅 在微服务架构中领域驱动模型中处理领域事件的相关操作 在区分好领域模型后,就拿代码中来说嘛,用户领域中添加用户操作可能或存在跟用户相关的一些领域事件,在 ...
- hdu 5038 (2014北京网络赛G 排序水题)
题意:有n个数字,带入10000 - (100 - ai) ^ 2公式得到n个数,输出n个数中频率最大的数,如果有并列就按值从小到大都输出输出,如果频率相同的数字是全部的n个数,就输出Bad....题 ...
- Oracle 11g R2 32位 & Oracle 11g R2 64位 -百度云下载
Oracle 11g R2 32位 & Oracle 11g R2 64位 -百度云下载 https://pan.baidu.com/s/1fuzy67Olfxzsy3WJMCrCnQ 提取码 ...
- [转]Javascript原型继承
真正意义上来说Javascript并不是一门面向对象的语言,没有提供传统的继承方式,但是它提供了一种原型继承的方式,利用自身提供的原型属性来实现继承.Javascript原型继承是一个被说烂掉了的话题 ...
- Python装饰器进阶
装饰器进阶 现在,我们已经明白了装饰器的原理.接下来,我们还有很多事情需要搞清楚.比如:装饰带参数的函数.多个装饰器同时装饰一个函数.带参数的装饰器和类装饰器. 装饰带参数函数 def foo(fun ...