Revit API: Pipe & Duct -管道和风管_pipesegment revit-程序员宅基地

技术标签: java  Revit API  开发语言  

前言

如何从整体上去分析 Revit 的管道和风管系统。

内容

在 Revit 中,水暖两个专业有极大的相似性。从API层面上来说,他们有共同的基类 MEPCurve
在这里插入图片描述

MEPCurve

MEPSystem 用来表示当前的 MEPCurve 是什么系统类型,水、暖、电。ConnectorManager 用来管理连接性。DiameterHeight Width 是互斥的,表示圆形或者矩形。

namespace Autodesk.Revit.DB
{
    
    public class MEPCurve : HostObject
    {
    
        public MEPSystem MEPSystem {
     get; }
        public Level ReferenceLevel {
     get; set; }
        public double LevelOffset {
     get; set; }
        public double Diameter {
     get; }
        public double Height {
     get; }
        public double Width {
     get; }
        public ConnectorManager ConnectorManager {
     get; }
    }
}

MEPSystem 的继承关系:
在这里插入图片描述
以下面这个机械送风系统为例,选中的是这个矩形风管,它是这个风管的一个属性。而 MEPSystem 是继承 Element,它更像是一组 Element 的集合,从概念上和 GroupAssembly 很接近。
在这里插入图片描述

布管系统配置

水、暖作为系统,在绘制的过程中,会涉及到管段、弯头、首选连接类型、连接、四通、过渡件、活接头、法兰、管帽。这些内容都附加给了管道,即管道表示了一个抽象的系统。下图实际上选中的是一个管段,布管系统设置是管段类型的一个参数。
管道系统:
在这里插入图片描述
风管系统:
在这里插入图片描述
如何获取布管系统配置:

  1. 过滤出管道类型 PipeType
  2. 从类型获取布管系统配置 RoutingPreferenceManager
  3. 从布管系统配置获取布管的规则 RoutingPreferenceRule
  4. 从规则中获取对应的管段 Segment
private List<double> GetAvailablePipeSegmentSizesFromDocument(Document document)
{
    
    System.Collections.Generic.HashSet<double> sizes = new HashSet<double>();

    FilteredElementCollector collectorPipeType = new FilteredElementCollector(document);
    collectorPipeType.OfClass(typeof(PipeType));

    IEnumerable<PipeType> pipeTypes = collectorPipeType.ToElements().Cast<PipeType>();
    foreach (PipeType pipeType in pipeTypes)
    {
    
        RoutingPreferenceManager rpm = pipeType.RoutingPreferenceManager;

        int segmentCount = rpm.GetNumberOfRules(RoutingPreferenceRuleGroupType.Segments);
        for (int index = 0; index != segmentCount; ++index)
        {
    
            RoutingPreferenceRule segmentRule = rpm.GetRule(RoutingPreferenceRuleGroupType.Segments, index);
            Segment segment = document.GetElement(segmentRule.MEPPartId) as Segment;
            foreach (MEPSize size in segment.GetSizes())
            {
    
                sizes.Add(size.NominalDiameter);  //Use a hash-set to remove duplicate sizes among Segments and PipeTypes.
            }
        }
    }

    List<double> sizesSorted = sizes.ToList();
    sizesSorted.Sort();
    return sizesSorted;
}

注:Segment 也是一个抽象的存在,文件中没有任何构件实例,依然可以在文件找到 PipeSegment,应该是从属于构件类型的。
在这里插入图片描述

ConnectorManager

ConnectorManager 维持和其它构件的连接关系。

namespace Autodesk.Revit.DB
{
    
    //
    // 摘要:
    //     Provides access to the Connector Manager
    public class ConnectorManager : IDisposable
    {
    
        public Element Owner {
     get; }
        public ConnectorSet UnusedConnectors {
     get; }
        public ConnectorSet Connectors {
     get; }
        public Connector Lookup(int index);
        
        ~ConnectorManager();
        public bool IsValidObject {
     get; }
        public sealed override void Dispose();
        [HandleProcessCorruptedStateExceptions]
        protected virtual void Dispose(bool A_0);
        protected virtual void ReleaseUnmanagedResources(bool disposing);
    }
}

Connector 管理了和连接所有相关的内容,接口比较丰富。下面如何从Connector获取对应的 Element

public void GetElementAtConnector(Autodesk.Revit.DB.Connector connector)
{
    
    MEPSystem mepSystem = connector.MEPSystem;
    if (null != mepSystem)
    {
    
        string message = "Connector is owned by: " + connector.Owner.Name;

        if (connector.IsConnected == true)
        {
    
            ConnectorSet connectorSet = connector.AllRefs;
            ConnectorSetIterator csi = connectorSet.ForwardIterator();
            while (csi.MoveNext())
            {
    
                Connector connected = csi.Current as Connector;
                if (null != connected)
                {
    
                    // look for physical connections
                    if (connected.ConnectorType == ConnectorType.End ||
                        connected.ConnectorType == ConnectorType.Curve ||
                        connected.ConnectorType == ConnectorType.Physical)
                    {
    
                        message += "\nConnector is connected to: " + connected.Owner.Name;
                        message += "\nConnection type is: " + connected.ConnectorType;
                    }
                }
            }
        }
        else
        {
    
            message += "\nConnector is not connected to anything.";
        }

        TaskDialog.Show("Revit", message);            
    }
}

总结

从设计思路上看,Pipe & Duct -管道和风管本身有对应的构件,但他们的类型分别作为管道系统和机械系统的入口。而结构中的梁系统则不同,是一个单独的可被选中的构件,且有独立的入口按钮。因此,可以认为 Revit 这里针对抽象的系统,有两种不同类型的实现。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44153630/article/details/126190149

智能推荐

java生成二维码 微信、支付宝、钉钉等等通用_java生成支付二维码-程序员宅基地

文章浏览阅读3.3k次,点赞6次,收藏13次。需要2个jar包 com.google.zxing 下的core.jar 和 javase.jar&lt;dependency&gt; &lt;groupId&gt;com.google.zxing&lt;/groupId&gt; &lt;artifactId&gt;core&lt;/artifactId&gt; &lt;version&gt;3.3.1&lt;/version&gt;&_java生成支付二维码

spring-boot获取form-data数据及json数据_springboot获取formdata参数-程序员宅基地

文章浏览阅读2.8w次,点赞2次,收藏5次。1. form-data参数获取 @RequestMapping("/isChartConfig") public Message isChartConfig(String tableName, String title, Message message) { if (StringUtils.isBlank(tableName) &amp;&amp; StringUt..._springboot获取formdata参数

Ubuntu常用的命令,及其总结_ubuntu命令使用实验总结-程序员宅基地

文章浏览阅读120次。update是更新软件列表,upgrade是更新软件。一般在update 之后会再加一句upgrade用pip安装文件,比如pip install tensorflow,如果这个软件包太大的话,可以先去网页上下载,得到一个.whl压缩包文件,打开文件所在的目录,执行pip install **.whl,即可执行安装。..._ubuntu命令使用实验总结

NUMA_--map-by numa:pe=3-程序员宅基地

文章浏览阅读123次。NUMANUMA简介NUMA的局限性Linux的NUMANUMA简介multi-processor systemmulti-processor & lockingNon-uniform memory accessNUMA的局限性NUMA架构的CPU – 你真的用好了么?Linux的NUMALinux的NUMA技术What is NUMA..._--map-by numa:pe=3

DataGrip 使用经验之谈_datagrip 占用cpu-程序员宅基地

文章浏览阅读3.1w次。总结JetBrains 出品,必属精品。简介DataGrip 出自JetBrains公司,是一款跨平台的数据库管理客户端工具,可在Windows,OS X 和 Linux上使用;同时支持多种数据库:SQL Server,Oracle,PostgreSQL,MySQL,DB2,Sybase,SQLite,Derby,HyperSQL和H2;方便连接到数据库服务器,执行sql、创建表、创建索引以..._datagrip 占用cpu

python colorbar xtick locator_python – matplotlib中colorbar tick标签的旋转-程序员宅基地

文章浏览阅读471次。我想旋转颜色条刻度标签,使它们垂直读取而不是水平读取.我已经尝试了很多变化,我可以想到使用cbar.ax.set_xticklabels和cbar.ax.ticklabel_format,依此类推,旋转=’垂直’,但还没有完全落地.我在下面提供了一个MWE:import numpy as npimport matplotlib.pyplot as plt#example functionx,y =..._x = np.linspace(-10, 10, 200)

随便推点

JVM加载class文件的原理机制_c++ 读取jvm class文件-程序员宅基地

文章浏览阅读227次。阅读目录1、JVM 简介2、JVM 的组成部分3、JVM加载class文件的原理机制 在面试java工程师的时候,这道题经常被问到,故需特别注意。回到顶部1、JVM 简介  JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从“Hello World ”开始的,然后会写个复杂点class ,然后再找一些开源框架,比如Spring ,H_c++ 读取jvm class文件

(P2)PALM软件的基本使用流程_palm软件使用 生物-程序员宅基地

文章浏览阅读1.9k次。上一篇介绍了PALM在Ubuntu系统上的下载安装及安装后的目录文件结构,这一篇以自带的案例介绍软件的基本操作流程。(请转至example_cbl项目)输入声明:官网均有各个变量的说明,以下代码来自软件自带案例palm的最小输入文件是p3d文件,以下是example_cbl_p3d的详细说明。(文件语言格式Fortran,请自行先学习下语言的基本语法。笔者也是新学者,有非常多的问题,很多参数也不能准确的说出是什么意思,还请不吝赐教,谢谢!!!)!几点说明 !1、该运行文件基本由三大块组成:1)in_palm软件使用 生物

电工电子学习笔记----1.电阻、电容、阻抗、容抗复习巩固_当电压足够小时,电阻是不是都可以视为电容器-程序员宅基地

文章浏览阅读666次。电容电容(Capacitance)亦称作“电容量”,是指在给定电位差下自由电荷的储藏量,记为C,国际单位是法拉(F)。一般来说,电荷在电场中会受力而移动,当导体之间有了介质,则阻碍了电荷移动而使得电荷累积在导体上,造成电荷的累积储存,储存的电荷量则称为电容。电容是指容纳电荷的能力。任何静电场都是由许多个电容组成,有静电场就有电容,电容是用静电场描述的。一般认为:孤立导体与无穷远处构成电容,导体接地等效于接到无穷远处,并与大地连接成整体。电容(或称电容量)是表现电容器容纳电荷本领的物理量。电容从物理学_当电压足够小时,电阻是不是都可以视为电容器

心灵感应:本质就是量子纠缠?_量子纠缠与心灵感应-程序员宅基地

文章浏览阅读2.7k次。心灵感应:本质就是量子纠缠?参考网址:http://m.sohu.com/a/125344821_505927/?pvid=000115_3w_a量子科学mp2016年8月16日01时40分,我国在酒泉卫星发射中心用长征二号丁运载火箭成功将世界首颗量子科学实验卫星(简称“量子卫星”)“墨子号”发射升空。此次发射任务的圆满成功,标志着我国空间科学研究又迈出重要一步。量子卫星是中国科学..._量子纠缠与心灵感应

什么是LoRaWAN-程序员宅基地

文章浏览阅读2w次,点赞14次,收藏76次。1 技术框图如图所示,LoRa是物理(PHY)层,即用于创建远程通信链路的无线调制。LoRaWAN是一种开放式网络协议,可提供由LoRa联盟标准化和维护的安全双向通信,移动性和本地化服务。2 LoRaWAN网络下图是端到端的典型LoRaWAN网络实现,主要包括4个部分:终端设备 LoRaWAN网关 网络服务器 应用服务器2.1 终端设备支持LoRaWAN的终端设备是使用LoRa调制通过RF连接到LoRaWAN网络的传感器或设备。 在大多数应用中,终端设备是._lorawan

highlight 动态加载代码,样式失效解决_import "highlight.js/styles/vs2015.css"; 报错-程序员宅基地

文章浏览阅读2.8k次。1.参考:使用highlight.js高亮你的代码 - Ermu丨 - 博客园 (cnblogs.com) highlight 动态添加代码,样式失效_万恩铭的博客-程序员宅基地官网:How to use highlight.js2.结果:highlight.js可以高亮代码,效果如下3.问题:看了参考的文章,静态数据渲染没有问题,但我在项目中动态加载数据,样式始终不出来,用了highlightBlock,highlightAuto依旧不行;在官网找到了原因,是..._import "highlight.js/styles/vs2015.css"; 报错