Revit SDK 介绍:MeasurePanelArea 统计分割表面中族的面积

这篇具有很好参考价值的文章主要介绍了Revit SDK 介绍:MeasurePanelArea 统计分割表面中族的面积。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这个例子介绍如果从分割表面中,获取内部Tile(或者Panel)的族里面的几何实体的面的面积。

内容

Revit SDK 介绍:MeasurePanelArea 统计分割表面中族的面积,Revit SDK 介绍,C#

本例子的逻辑相对来说比较简单,主要是对 DividedSurface 和 Element 的API接口要熟悉。

核心逻辑

  1. 设置单个面板Panel的面积上限和下限
  2. 获取所有分割表面
    1. 如果用户已经选择了分割表面,就使用当前选择
    2. 如果用户没有选择,就过滤出文件中的所有分割表面
  3. 对于每一个分割表面
    1. 查询获取它内部的 Panel Family Instance: ds.GetTileFamilyInstance(gn, 0);
    2. 遍历 Family Instance 的几何,得到所有的面
      1. 遍历输出面的面积到日志文件
      2. 记录最后一个面的面积(估计是因为是sample,代码写的比较随意)
    3. 根据Family Instance 最后一个面的面积,统计是符合要求、高于上限、低于下限

设置单个面板Panel的面积上限和下限

下图为启动界面:
Revit SDK 介绍:MeasurePanelArea 统计分割表面中族的面积,Revit SDK 介绍,C#

获取所有分割表面

用于获取特定类型 Element 的模板方法

protected List<T> GetElements<T>() where T : Element
{
   List<T> returns = new List<T>();
   FilteredElementCollector collector = new FilteredElementCollector(m_uiDoc.Document);
   ICollection<Element> founds = collector.OfClass(typeof(T)).ToElements();
   foreach (Element elem in founds)
   {
      returns.Add(elem as T);
   }
   return returns;
}

获取分割表面的逻辑:

private void GetDividedSurfaces(){
   // 获取所有的分割表面
   if (m_uiDoc.Selection.GetElementIds().Count == 0){
      m_dividedSurfaceList = GetElements<DividedSurface>();
      return;
   }

   // 后去用户选择的分割表面
   foreach (ElementId elementId in m_uiDoc.Selection.GetElementIds()){
      Element element = m_uiDoc.Document.GetElement(elementId);
      DividedSurface ds = element as DividedSurface;
      if (ds != null){
         m_dividedSurfaceList.Add(ds);
      }
   }
}

对于每一个分割表面

获取每一个分割表面中 Tile(或者Panel)的逻辑框架:

for (int u = 0; u < ds.NumberOfUGridlines; u++){
   for (int v = 0; v < ds.NumberOfVGridlines; v++){
      GridNode gn = new GridNode(u, v);
      if (false == ds.IsSeedNode(gn)){
         continue;
      }
      FamilyInstance familyinstance = ds.GetTileFamilyInstance(gn, 0);
      if (familyinstance != null){
         // 获取族实例的面积
         double panelArea = GetAreaOfTileInstance(familyinstance);
      }
   }
}

遍历获取族几何体面积的核心逻辑:文章来源地址https://www.toymoban.com/news/detail-703876.html

private double GetAreaOfTileInstance(FamilyInstance familyinstance)
{
   double panelArea = 0d;
   // 获取族实例的几何
   Autodesk.Revit.DB.Options opt = m_uiApp.Application.Create.NewGeometryOptions();
   opt.ComputeReferences = true;
   Autodesk.Revit.DB.GeometryElement geomElem = familyinstance.get_Geometry(opt);
   // 遍历几何
   IEnumerator<GeometryObject> Objects = geomElem.GetEnumerator();
   while (Objects.MoveNext()){
      GeometryObject geomObject1 = Objects.Current;
      // 获取实体,只支持族实例本身就是solid,或者是GeometryInstance,且其中包含 solid
      Solid solid = null;
      if (geomObject1 is Solid){
         solid = (Solid)geomObject1;
         if (null == solid){continue;}
      }
      else if (geomObject1 is GeometryInstance){
         GeometryInstance geomInst = geomObject1 as GeometryInstance;
         IEnumerator<GeometryObject> Objects1 = geomInst.SymbolGeometry.GetEnumerator();
         while (Objects1.MoveNext()){
            Object geomObj = Objects1.Current;
            solid = geomObj as Solid;
            if (solid != null) break;
         }
      }
      // 如果 solid 里没有 face,则跳过(未检查solid本身为null
      if (null == solid.Faces || 0 == solid.Faces.Size){ continue; }
      // 遍历输出面的面积到日志文件
      // 记录最后一个面的面积(估计是因为是sample,代码写的比较随意)
      foreach (Face face in solid.Faces) {
         panelArea = face.Area;
         m_writeFile.WriteLine(familyinstance.Id.IntegerValue + " : " + panelArea);
      }
   }
   return panelArea;
}

到了这里,关于Revit SDK 介绍:MeasurePanelArea 统计分割表面中族的面积的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Revit SDK:AutoParameter 添加参数

    这个例子介绍如果往族文件里添加参数。 Revit 的参数,参考官方文档: 这个例子的关键接口: 如果是共享参数,他的定义存储在外部文件,需要通过 Autodesk.Revit.ApplicationServices.Application 的 DefinitionFile OpenSharedParameterFile() 读取共享参数。从 DefinitionFile 获取 DefinitionGroups ,从

    2024年02月10日
    浏览(36)
  • Revit SDK:PointCurveCreation 创建点来拟合曲线

    这个例子通过留个例子来展示如何通过点来拟合曲线或者曲面。 生成抛物线的核心逻辑: 效果: 生成一条直线,然后在直线上创建点,核心逻辑: 效果: 从 Excel 读取点,核心逻辑: 效果: 从csv文件中读取文本,核心逻辑: 效果: 用点去模拟正弦曲线,核心逻辑: 效果

    2024年02月09日
    浏览(52)
  • Revit 3D高效处理:cad exchanger sdk 3.21 Crack

    3D 格式概述:Revit Revit 已成为寻求高效、准确的建筑信息建模的专业人士的首选解决方案。在这篇引人入胜的功能概述中了解 Revit 的特性和影响。 什么是Revit? Autodesk Revit 是一款流行的 CAD 软件,重点关注 BIM,被建筑师、工程师、设计师和承包商广泛使用。它最初由 Charle

    2024年02月11日
    浏览(48)
  • Revit SDK:SpatialFieldGradient 在面上显示渐变颜色(AVF)分析显示样式

    这个例子使用Revit显示样式功能将面显示成不同的颜色。分析显示样式参考官方文档。 效果: 核心逻辑: 得到一个 SpatialFieldManager 拾取一系列的面: uiDoc.Selection.PickObjects(ObjectType.Face) 计算面上的 UV 值,以及对应的颜色值 应用到对应的面: sfm.UpdateSpatialFieldPrimitive 核心代码

    2024年02月10日
    浏览(45)
  • 【表面缺陷检测】铝型材表面缺陷检测数据集介绍(含xml标签文件)

    铝型材是一种由铝合金材料制成的,具有固定截面形状和尺寸的条形建材。由于其优良的物理性能和广泛的应用领域,铝型材在现代工业和生活中发挥着重要的作用。 根据截面形状的不同,铝型材可分为角铝、槽铝、工字铝、方管铝等多种类型。每种类型的铝型材都有其独特

    2024年02月08日
    浏览(41)
  • 区间合并|LeetCode2963:统计好分割方案的数目

    【动态规划】【广度优先】LeetCode2258:逃离火灾 区间合并 给你一个下标从 0 开始、由 正整数 组成的数组 nums。 将数组分割成一个或多个 连续 子数组,如果不存在包含了相同数字的两个子数组,则认为是一种 好分割方案 。 返回 nums 的 好分割方案 的 数目。 由于答案可能很

    2024年02月03日
    浏览(43)
  • unity sdk -AppLovin MAX 广告聚合平台接入+Firebase统计

    unity版本:2019.4.40f1 Android Studio :4.2.1 sdk版本:5.4.6 max对应unity的官方文档: MAX Mediation Documentation https://dash.applovin.com/documentation/mediation/unity/getting-started/integration  a、集成max SDK 的更新  b、其他中介平台组加入(我这边加入了 google admob 和Mintegral和Pangle 三个中介平台)   c、

    2023年04月09日
    浏览(43)
  • 实现CenterNet图像分割算法模型的转换和量化(SDK0301-转ONNX编译)

    一、实现CenterNet图像分割算法模型的转换和量化(SDK0301-转ONNX编译) 1、模型转换 (1)下载CenterNet算法移植代码: 获取主干网的预训练模型,运行如下命令下载 dlav0 作为主干网的预训练模型: (2)将pth文件转换为ONNX格式模型 【SDK 230501版本后支持Torch模型权重直接转换】

    2024年02月09日
    浏览(37)
  • 【3D 图像分割】基于 Pytorch 的 3D 图像分割6(数据预处理之LIDC-IDRI 标签 xml 标签转储及标记次数统计 )

    由于之前哔站作者整理的 LUNA16 数据处理方式过于的繁琐,于是,本文就对 LUNA16 数据做一个新的整理,最终得到的数据和形式是差不多的。但是,主要不同的是代码逻辑比较的简单,便于理解。 对于 LUNA16 数据集的学习,可以去参考这里:【3D 图像分类】基于 Pytorch 的 3D 立

    2024年02月04日
    浏览(52)
  • 爬虫009_字符串高级_替换_去空格_分割_取长度_统计字符_间隔插入---python工作笔记028

    然后再来看字符串的高级操作 取长度  查找字符串下标位置  判断是否以某个字符,开头结尾   计算字符出现次数   替换

    2024年02月14日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包