Revit二次开发知识分享(十八)管道的布管系统知识

这次主要分享的是Revit管线中的布管系统配置相关的API,案例讲解的是弯头的设置,其他的操作步骤是相似的。直接上代码,GoGoGo~~
在这里插入图片描述
获取数据

 //选择管道
            Reference selRef = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
            Pipe selPipe = doc.GetElement(selRef) as Pipe;
            PipeType selPipeType = selPipe.PipeType;
            //已知的一个弯头FamilySymbol Id是我直接用lookup取的。示例使用
            FamilySymbol nwElowsFS = doc.GetElement(new ElementId(211606)) as FamilySymbol;
            //得到布管系统信息
            RoutingPreferenceManager routing = selPipeType.RoutingPreferenceManager;

            #region 获取弯头族信息
            //示例得到弯头的族类型
            RoutingPreferenceRule routingRule = routing.GetRule(RoutingPreferenceRuleGroupType.Elbows, 0);
            //获取弯头设置的familysymbol
            FamilySymbol mid = doc.GetElement(routingRule.MEPPartId) as FamilySymbol;
            PrimarySizeCriterion primarySize = routingRule.GetCriterion(0) as PrimarySizeCriterion;//获取弯头的尺寸设置值
            double minSize = primarySize.MinimumSize;
            double maxSize = primarySize.MaximumSize;
            MessageBox.Show($"族名称{mid.FamilyName} 族类型名称{mid.Name}, 最小尺寸{minSize * 304.8} , 最大尺寸{maxSize * 304.8}");
            #endregion

其中RoutingPreferenceRuleGroupType是一个枚举值,对应参数的枚举值可以自己去试一下就知道了。每一个RoutingPreferenceRule参数代表着一行数据。
下面是添加一行自己定义的规则的代码

            Transaction createTrans = new Transaction(doc, "改变管道系统里面的数值");
            createTrans.Start();
            //设置尺寸
            PrimarySizeCriterion nwPriSize = new PrimarySizeCriterion(25 / 304.8, 150 / 304.8);
            //创建新的布管规则
            RoutingPreferenceRule nwRule = new RoutingPreferenceRule(nwElowsFS.Id, "新建");
            //添加尺寸信息
            nwRule.AddCriterion(nwPriSize);
            //添加新的布管规则
            routing.AddRule(RoutingPreferenceRuleGroupType.Elbows, nwRule, 0);
            createTrans.Commit();

下面是修改第一个规则的族为自己想要的族类型

			Transaction replaceTrans = new Transaction(doc, "替换");
            replaceTrans.Start();
            //创建新的布管规则
            RoutingPreferenceRule nwRule = new RoutingPreferenceRule(nwElowsFS.Id, "替换");
            //添加尺寸信息
            nwRule.AddCriterion(primarySize);
            //添加新的布管规则
            routing.AddRule(RoutingPreferenceRuleGroupType.Elbows, nwRule, 0);
            routing.RemoveRule(RoutingPreferenceRuleGroupType.Elbows, 1);
            replaceTrans.Commit();

这些是今天的所有分享,希望能够帮助到你。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Revit二次开发,如果需要过滤横向管道,可以使用Revit API的过滤器。过滤器是用来筛选Revit模型的对象,可以根据对象的属性、类型、位置等条件来对对象进行过滤。 下面是一个使用过滤器过滤横向管道的示例代码: ```csharp // 获取当前文档 Document doc = uidoc.Document; // 定义一个过滤器,过滤出所有的管道 ElementCategoryFilter filter = new ElementCategoryFilter(BuiltInCategory.OST_Pipe); // 获取所有符合条件的管道 List<Element> pipes = new FilteredElementCollector(doc) .WherePasses(filter) .Where(e => ((MEPSystem)e).SystemType == MEPSystemType.Hydronic) .ToList(); // 遍历管道,找出横向管道 foreach (Element pipe in pipes) { // 获取管道的位置信息 LocationCurve locationCurve = pipe.Location as LocationCurve; XYZ start = locationCurve.Curve.GetEndPoint(0); XYZ end = locationCurve.Curve.GetEndPoint(1); // 判断横向管道的条件 if (Math.Abs(end.Y - start.Y) < 0.1 && Math.Abs(end.Z - start.Z) < 0.1) { // 满足条件的管道 // do something... } } ``` 上述代码,我们首先定义了一个过滤器,过滤出所有的管道。然后,我们使用`WherePasses`方法和`Where`方法来获取所有符合条件的管道。最后,我们遍历管道,判断是否为横向管道,如果是,则进行相关操作。其,判断横向管道的条件为:管道的起点和终点在X轴上的距离小于0.1,且在Y轴和Z轴上的距离小于0.1。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

baobao熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值