Revit 二次开发---空间过滤(空间查询)
来源:互联网 发布:谁用过淘宝上的处女血 编辑:程序博客网 时间:2024/06/06 02:39
第一种,通过选取一个要素,查询与之相交的要素,代码如下
public Autodesk.Revit.UI.Result Execute(ExternalCommandData revit, ref string message, ElementSet elements) { m_document = revit.Application.ActiveUIDocument; m_application = revit.Application; Selection sel = m_document.Selection; try { Reference eRe = m_document.Selection.PickObject(ObjectType.Element, "按ESC键取消该命令"); Element element= m_document.Document.GetElement(eRe); if (element != null) { //相交过滤 FilteredElementCollector collector = new FilteredElementCollector(m_document.Document); ElementIntersectsElementFilter eleIntersectFilter = new ElementIntersectsElementFilter(element, false); collector.WherePasses(eleIntersectFilter); ICollection<ElementId> intersectElementid = new List<ElementId>(); List<ElementId> excludes = new List<ElementId>(); excludes.Add(element.Id); collector.Excluding(excludes); //添加要素至选择集 string mes = ""; foreach (Element item in collector) { intersectElementid.Add(item.Id); mes += "\n\t" + "类型:" + item.Name; } sel.SetElementIds(intersectElementid); TaskDialog.Show("相交信息", mes); } return Result.Succeeded; } catch (Exception ex) { message = ex.Message; return Autodesk.Revit.UI.Result.Failed; } }
第二种,通过拾取建筑上的一个点,以改点为中心,创建一个指定边长的Solid,并查询与该Solid相交的要素,代码如下:
public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements) { UIApplication app = commandData.Application; Document doc = app.ActiveUIDocument.Document; //pick a point to draw solid Selection sel = app.ActiveUIDocument.Selection; XYZ pt = sel.PickPoint("Please pick a point to get the close walls"); // 以拾取的pt为中心点创建 solids GeoCreateClass geometryCreation = GeoCreateClass.getInstance(commandData.Application.Application); Solid solid = geometryCreation.CreateCenterbasedBox(pt,3); FilteredElementCollector collector = new FilteredElementCollector(doc); ElementIntersectsSolidFilter solidFilter = new ElementIntersectsSolidFilter(solid); collector.WherePasses(solidFilter); //添加至选择集 ICollection<ElementId> intersectElementid = new List<ElementId>(); string mes = ""; foreach (Element item in collector) { intersectElementid.Add(item.Id); mes += "\n\t" + "类型:" + item.Name; } sel.SetElementIds(intersectElementid); TaskDialog.Show("相交信息", mes); return Result.Succeeded; }
public Solid CreateCenterbasedBox(XYZ center, double edgelength) { double halfedgelength = edgelength / 2.0; List<CurveLoop> profileloops = new List<CurveLoop>(); CurveLoop profileloop = new CurveLoop(); profileloop.Append(Line.CreateBound( new XYZ(center.X - halfedgelength, center.Y - halfedgelength, center.Z - halfedgelength), new XYZ(center.X - halfedgelength, center.Y + halfedgelength, center.Z - halfedgelength))); profileloop.Append(Line.CreateBound( new XYZ(center.X - halfedgelength, center.Y + halfedgelength, center.Z - halfedgelength), new XYZ(center.X + halfedgelength, center.Y + halfedgelength, center.Z - halfedgelength))); profileloop.Append(Line.CreateBound( new XYZ(center.X + halfedgelength, center.Y + halfedgelength, center.Z - halfedgelength), new XYZ(center.X + halfedgelength, center.Y - halfedgelength, center.Z - halfedgelength))); profileloop.Append(Line.CreateBound( new XYZ(center.X + halfedgelength, center.Y - halfedgelength, center.Z - halfedgelength), new XYZ(center.X - halfedgelength, center.Y - halfedgelength, center.Z - halfedgelength))); profileloops.Add(profileloop); XYZ extrusiondir = new XYZ(0, 0, 1); // orthogonal double extrusiondist = edgelength; return GeometryCreationUtilities.CreateExtrusionGeometry(profileloops, extrusiondir, extrusiondist); }
0 0
- Revit 二次开发---空间过滤(空间查询)
- Revit二次开发——空间曲线
- Revit二次开发--过滤对象
- Revit二次开发之使用LINQ查询元素过滤集合里的元素【比目鱼原创】
- Revit二次开发(5):元素类型过滤
- Revit+对象空间的关系
- Revit二次开发之快速过滤与慢速过滤【比目鱼原创】
- Revit 二次开发
- 空间查询
- 空间查询
- 空间查询
- Revit 二次开发 获取明细表中的过滤条件信息
- Supermap iserver client 空间查询关联属性过滤示例
- rad 上传空间二次开发指导书
- Revit 二次开发现状(2009)
- Revit 二次开发前景
- Revit 二次开发 - 开发资源
- <Revit二次开发>HelloWorld
- XHTML
- 多线程
- delphi xe10 idhttp post 返回乱码解决方法
- 学习框架
- 【日语】动词的九种变形
- Revit 二次开发---空间过滤(空间查询)
- Android JSBridge的原理与实现
- 解决第三方静态库不适配ARM64问题
- 清除各类 缓存
- 51nod-【1347 旋转字符串】
- Echarts学习记录——如何给x轴文字标签添加事件
- Linux下(Ubuntu/Centos) golang Eclipse安装配置
- java 文件的导入导出
- 笔记