前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Revit二次开发——接触式过滤(第十七期)

Revit二次开发——接触式过滤(第十七期)

作者头像
一席青衣卧龙城
发布2022-04-21 12:23:50
4610
发布2022-04-21 12:23:50
举报
文章被收录于专栏:Revit二次开发Revit二次开发

最近发现很多小伙伴还在关注我的公众号,忙里偷闲继续更新下去吧。


这期讲一个接触式过滤选择,什么是接触式过滤选择呢?又有什么作用呢?请继续往下看……

  1. 什么是接触式过滤? 接触式过滤也是过滤选择的一种,原理是自建一个拉伸实体来选择出与之相接触的构件。
  2. 有什么作用? 利用这种过滤方式可以清楚相同构件,也可以选择自建实体范围内的构件,例如用板的范围选梁或者墙等。

下面是一个例子,选出和拉伸实体有接触的柱子:

代码语言:javascript
复制
 List<ElementId> beam = new List<ElementId>();
            //根据柱子的截面来进行实体创建取得有交点的柱子
            foreach (Element bttt in fil)
            {
                FamilyInstance bb = bttt as FamilyInstance;
                double lenght = bb.Symbol.GetParameters("截面宽度")[0].AsDouble();//获得柱子的截面宽度
                beam.Add(bttt.Id);
                LocationPoint ppp = bttt.Location as LocationPoint;
                XYZ pt = ppp.Point;
                Level le = doc.GetElement(bb.LevelId) as Level;//柱子所在楼层的标高
                //从柱子的中心点减去截面宽度来形成四个点
                XYZ pt1 = new XYZ(pt.X - lenght, pt.Y - lenght, le.Elevation);
                XYZ pt2 = new XYZ(pt.X + lenght, pt.Y - lenght, le.Elevation);
                XYZ pt3 = new XYZ(pt.X + lenght, pt.Y + lenght, le.Elevation);
                XYZ pt4 = new XYZ(pt.X - lenght, pt.Y + lenght, le.Elevation);
                //把四个点连成一个曲线
                CurveLoop profile = new CurveLoop();
                profile.Append(Line.CreateBound(pt1, pt2));
                profile.Append(Line.CreateBound(pt2, pt3));
                profile.Append(Line.CreateBound(pt3, pt4));
                profile.Append(Line.CreateBound(pt4, pt1));
                //将曲线放入集合里
                List<CurveLoop> loops = new List<CurveLoop>();
                loops.Add(profile);
                //拉伸方向
                XYZ vector = new XYZ(0, 0, 1);
                //创建实体
                Solid solid = GeometryCreationUtilities.CreateExtrusionGeometry(loops, vector, 10);
                //获得本视图中和所创建实体有碰撞的实体
                FilteredElementCollector collector = new FilteredElementCollector(doc, doc.ActiveView.Id);
                ElementIntersectsSolidFilter solidFilter = new ElementIntersectsSolidFilter(solid, false);
                collector.WherePasses(solidFilter);
            }

中间的注释都很清晰了,我在这就不具体的做过多的解释了,时间有限,下期见。。。。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 精讲Revit二次开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档