Revit二次开发小案例之喷头与管道自动链接

最近小编在使用某榄山翻喷淋的模型的时候,发现有不少的喷淋喷头和管道都没办法自动链接,并且喷淋的量比较大,所以写了一个自动喷头与管道链接的插件让其自动链接,分享一下方法和代码。
先看一下使用某榄山喷淋翻模后的效果,喷头和管道没有自动链接。 接下来本身写代码,简简单单全连上。

思路分享以下:javascript

  1. 使用鼠标框选须要链接的喷头,固然也能够不框选,这里框选是为了方便。java

 PTFamilyInstance f = new PTFamilyInstance(); IList<Element> ell = sel.PickElementsByRectangle(f,"请选择要链接的喷头");

这里是一个过滤筛选的写法,不会的小伙伴再看一下
微信

 public class PTFamilyInstance : ISelectionFilter { public bool AllowElement(Element element) {

if (element.Category.Name == "喷头") { return true; }
return false;


} public bool AllowReference(Reference refer, XYZ point) { return false; }

}

2.为了加快筛选的效率,小编使用了喷头的范围框进行筛选app

小编的这个喷淋有2种喷头,直立型和下垂型,所以范围框筛选有两种方式,代码以下:ui

 if (co.IsConnected == false) { conn1.Add(co);
BoundingBoxXYZ box = eel.get_BoundingBox(doc.ActiveView);//用喷头的范围框快速过滤
double Maxx = box.Max.X; double Maxy = box.Max.Y;
double Minx = box.Min.X; double Miny = box.Min.Y;
double MZz = box.Max.Z; Outline myOutLn = null; if (eel.GetParameters("族与类型")[0].AsValueString().Contains("直立型")) { myOutLn = new Outline(new XYZ(Minx, Miny, MZz - (50 / 304.8)), new XYZ(Maxx, Maxy, MZz - (50 / 304.8))); } else { myOutLn = new Outline(new XYZ(Minx, Miny, MZz + (50 / 304.8)), new XYZ(Maxx, Maxy, MZz + (50 / 304.8))); }
//用喷头的范围框过滤管道 BoundingBoxIntersectsFilter boxee = new BoundingBoxIntersectsFilter(myOutLn); FilteredElementCollector collector = new FilteredElementCollector(doc, doc.ActiveView.Id); collector.OfClass(typeof(Pipe)); pipe1 = collector.WherePasses(boxee).ToElements();//与喷头范围框相交的管道

   3. 获取链接器,将管道与喷头链接spa

 foreach (Element elp in pipe1) { Pipe pp = elp as Pipe; ConnectorSetIterator ppconn = pp.ConnectorManager.Connectors.ForwardIterator(); while (ppconn.MoveNext()) { Connector ppconn2 = ppconn.Current as Connector; if (ppconn2.IsConnected == false) {
ppconnlist.Add(ppconn2);

try { //doc.Create.NewUnionFitting(ppconn2, co); doc.Create.NewTransitionFitting(ppconn2, co);

} catch {
}



} }

}

  这里小编试了一下使用,以下这两种方法均可以实现链接。.net

doc.Create.NewUnionFitting(ppconn2, co); doc.Create.NewTransitionFitting(ppconn2, co);

             

虽然这个接头显示的是 Transition。
具体缘由能够参考另外一篇文章《 Re vit二 次开发之机电管道的各类管件Fitting的认识与区别
来看看效果:


完整代码以下:
Selection sel = uiDoc.Selection; List<ElementId> listt = new List<ElementId>();

PTFamilyInstance f = new PTFamilyInstance(); IList<Element> ell = sel.PickElementsByRectangle(f,"请选择要链接的喷头"); IList<Connector> conn1 = new List<Connector>(); IList<Connector> ppconnlist = new List<Connector>(); IList<Element> pipe1 = new List<Element>(); foreach (Element eel in ell) { FamilyInstance fa = eel as FamilyInstance; ConnectorSetIterator connector1 = fa.MEPModel.ConnectorManager.Connectors.ForwardIterator(); while (connector1.MoveNext()) { Connector co = connector1.Current as Connector; if (co.IsConnected == false) { conn1.Add(co);
BoundingBoxXYZ box = eel.get_BoundingBox(doc.ActiveView);//用喷头的范围框快速过滤
double Maxx = box.Max.X; double Maxy = box.Max.Y;
double Minx = box.Min.X; double Miny = box.Min.Y;
double MZz = box.Max.Z; Outline myOutLn = null; if (eel.GetParameters("族与类型")[0].AsValueString().Contains("直立型")) { myOutLn = new Outline(new XYZ(Minx, Miny, MZz - (50 / 304.8)), new XYZ(Maxx, Maxy, MZz - (50 / 304.8))); } else { myOutLn = new Outline(new XYZ(Minx, Miny, MZz + (50 / 304.8)), new XYZ(Maxx, Maxy, MZz + (50 / 304.8))); }
//用喷头的范围框过滤管道 BoundingBoxIntersectsFilter boxee = new BoundingBoxIntersectsFilter(myOutLn); FilteredElementCollector collector = new FilteredElementCollector(doc, doc.ActiveView.Id); collector.OfClass(typeof(Pipe)); pipe1 = collector.WherePasses(boxee).ToElements();//与喷头范围框相交的管道 foreach (Element elp in pipe1) { Pipe pp = elp as Pipe; ConnectorSetIterator ppconn = pp.ConnectorManager.Connectors.ForwardIterator(); while (ppconn.MoveNext()) { Connector ppconn2 = ppconn.Current as Connector; if (ppconn2.IsConnected == false) {
ppconnlist.Add(ppconn2);

try { //doc.Create.NewUnionFitting(ppconn2, co); doc.Create.NewTransitionFitting(ppconn2, co);

} catch {
}



} }
} }
} }
因为小编最近接了几篇宣传文案,要在头条发布,还请粉丝们多担待,感兴趣能够多点点多看看,不感兴趣请忽略, 多有打扰敬请谅解。

  

本文分享自微信公众号 - 精讲Revit二次开发(HelloRevit)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。插件

相关文章
相关标签/搜索