Revit SDK 介绍:PanelSchedule 配电盘明细表

前言

这个例子介绍 Revit 的配电盘明细表,PanelSchedule。Revit 的电器专业在国内用的并不是十分广泛,但从功能上来说还是比较完整的。

内容

这个例子里有三个命令:

  1. PanelScheduleExport - 导出配电盘明细表
  2. InstanceViewCreation - 创建配电盘明细表
  3. SheetImport - 在图纸中导入配电盘明细表

PanelScheduleExport

用于导出的配电盘明细表:
Revit SDK 介绍:PanelSchedule 配电盘明细表_第1张图片
导出到 Excel:
Revit SDK 介绍:PanelSchedule 配电盘明细表_第2张图片
主要用到的 Revit API:
通过 GetSectionData 可以获取配电盘明细表里各个分区的内容

// public class PanelScheduleView : TableView
public TableSectionData GetSectionData(SectionType sectionType);

一个配电盘明细表可以有的分区类型:
头Header、体Body、总结Symmary、尾Footer

namespace Autodesk.Revit.DB
{
    public enum SectionType
    {
        None = -1,
        Header = 0,
        Body = 1,
        Summary = 2,
        Footer = 3
    }
}

TableSectionData 可以获取对应的行列:

TableSectionData sectionData = psView.GetSectionData(sectionType);
nRows = sectionData.NumberOfRows;
nCols = sectionData.NumberOfColumns;

通过 GetCellText 可以获取对应的配电盘明细表的内容:

// public class TableView : View
public string GetCellText(SectionType sectionType, int row, int column);

InstanceViewCreation

选中一个配电盘 Panel,通过 CreateInstanceView 创建一个配电盘明细表:

// public class PanelScheduleView : TableView
public static PanelScheduleView CreateInstanceView(Document ADoc, ElementId panelId);

Revit SDK 介绍:PanelSchedule 配电盘明细表_第3张图片

SheetImport

通过 PanelScheduleSheetInstance::Create 在图纸上放置配电盘明细表:

// public class PanelScheduleSheetInstance : Element
public static PanelScheduleSheetInstance Create(Document ADoc, ElementId scheduleId, View DBView);

Revit SDK 介绍:PanelSchedule 配电盘明细表_第4张图片
为了将多个明细表放在同一行,计算了各个表的起始位置:

XYZ nextOrigin = new XYZ(0.0, 0.0, 0.0);
foreach (Element element in psViews)
{
   PanelScheduleView psView = element as PanelScheduleView;
   if (psView.IsPanelScheduleTemplate())
   {
      // ignore the PanelScheduleView instance which is a template.
      continue;
   }

   PanelScheduleSheetInstance onSheet = PanelScheduleSheetInstance.Create(doc, psView.Id, sheet);
   onSheet.Origin = nextOrigin;
   BoundingBoxXYZ bbox = onSheet.get_BoundingBox(doc.ActiveView);
   double width = bbox.Max.X - bbox.Min.X;
   nextOrigin = new XYZ(onSheet.Origin.X + width, onSheet.Origin.Y, onSheet.Origin.Z);
}

你可能感兴趣的:(C#)