使用API区分风管的子类型-圆形/椭圆形/矩形

描述:

项目中需要获取风管的数据,要按照类型来获取。用API把风管取出来,可是两种风管的DuctType.Name一样,无法判别一个风管类型是圆形还是方形,或椭圆。网上查了一些资料,现在做一个总结。


解决方案一:

可以使用Duct 类型的参数ALL_MODEL_FAMILY_NAME 来判断。

例如(C++版本):

Autodesk::Revit::DB::Mechanical::Duct^ pDuct=gcnew Autodesk::Revit::DB::Mechanical::Duct;

string namestr=pDuct->DuctType->Parameter[BuiltInParameter::ALL_MODEL_FAMILY_NAME]->AsString();//获取字符形式的风管类型

对于英文版:

圆型的风管类型的值是:Round Duct

方形的风管类型的值是:Rectangular Duct

椭圆的风管类型的值是:Oval Duct

 对于中文版:

圆型的风管类型的值是:圆形风管

方形的风管类型的值是:矩形风管

椭圆的风管类型的值是:椭圆形风管


解决方案二:

考虑获取风管的截面形状来判断。

从风管类型获取与风管类型关联的弯头族类型,然后打开这个弯头族,在从打开的族文档中获取连接件DuctConnector的截面形状。

详细参见:http://cleanbugs.com/item/413412/how-to-use-api-to-get-the-cross-section-shape-of-duct-type-from-duct-type.html

例如(C#版本):

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;


using  Autodesk.Revit .DB;
using Autodesk.Revit.UI;
using Autodesk.Revit .ApplicationServices;
using Autodesk.Revit.Attributes ;
using Autodesk.Revit.DB.Mechanical;


using Autodesk.Revit.UI.Selection;




  [TransactionAttribute(TransactionMode.Manual)]
public class RevitCommand : IExternalCommand
{
    public Result Execute(
      ExternalCommandData commandData, 
      ref string messages, 
      ElementSet elements)
    {


      UIApplication app = commandData.Application;
      Document doc = app.ActiveUIDocument.Document;


      Selection sel = app.ActiveUIDocument.Selection;
      Reference ref1 = sel.PickObject(
        ObjectType.Element, "please pick a duct");
      Duct duct = doc.GetElement(ref1) as Duct;
      if(duct == null)
      {
        messages = "You didn't select a duct";
        return Result.Failed;
      }
      DuctType ductType = duct.DuctType;


      //Get the duct type's elbow parameter value.
      Parameter param = ductType.get_Parameter(
        BuiltInParameter.RBS_CURVETYPE_DEFAULT_ELBOW_PARAM);


      FamilySymbol symbol = 
        doc.get_Element(param.AsElementId()) as FamilySymbol;
      Family family = symbol.Family;
      Document familyDoc = doc.EditFamily(family);


      FilteredElementCollector collector = 
        new FilteredElementCollector(familyDoc);
      collector.OfClass(typeof(ConnectorElement));


      Element firstConnector = collector.FirstElement();
      DuctConnector connector = firstConnector as DuctConnector;
      TaskDialog.Show("Duct Section Shape", connector.Shape.ToString());
      familyDoc.Close(false);


     return Result.Succeeded ;
    }
}

说明:只验证方案一,方案二未验证。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值