Skip to content

Commit

Permalink
Merge pull request #231 from SergeyNefyodov/dev-table-view-support
Browse files Browse the repository at this point in the history
Add TableView support
  • Loading branch information
Nice3point authored May 7, 2024
2 parents dfd27e5 + ac82da2 commit fd89c17
Show file tree
Hide file tree
Showing 2 changed files with 150 additions and 0 deletions.
1 change: 1 addition & 0 deletions source/RevitLookup/Core/ComponentModel/DescriptorMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ public static Descriptor FindDescriptor(object obj, Type type)
CurveElement value when type == typeof(CurveElement) => new CurveElementDescriptor(value),
ViewSchedule value when type == typeof(ViewSchedule) => new ViewScheduleDescriptor(value),
ScheduleDefinition value when type == typeof(ScheduleDefinition) => new ScheduleDefinitionDescriptor(value),
TableView value when type == typeof(TableView) => new TableViewDescriptor(value),
TableData value when type == typeof(TableData) => new TableDataDescriptor(value),
TableSectionData value when type == typeof(TableSectionData) => new TableSectionDataDescriptor(value),
#if REVIT2024_OR_GREATER
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
// Copyright 2003-2024 by Autodesk, Inc.
//
// Permission to use, copy, modify, and distribute this software in
// object code form for any purpose and without fee is hereby granted,
// provided that the above copyright notice appears in all copies and
// that both that copyright notice and the limited warranty and
// restricted rights notice below appear in all supporting
// documentation.
//
// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
// UNINTERRUPTED OR ERROR FREE.
//
// Use, duplication, or disclosure by the U.S. Government is subject to
// restrictions set forth in FAR 52.227-19 (Commercial Computer
// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
// (Rights in Technical Data and Computer Software), as applicable.

using System.Reflection;
using Autodesk.Revit.DB.Electrical;
using RevitLookup.Core.Contracts;
using RevitLookup.Core.Objects;

namespace RevitLookup.Core.ComponentModel.Descriptors;

public class TableViewDescriptor(TableView tableView) : Descriptor, IDescriptorResolver
{
public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters)
{
return target switch
{
// nameof(TableView.GetAvailableParameterCategories) => ResolveAvailableParameterCategories(), disabled, long computation time
nameof(TableView.GetAvailableParameters) => ResolveAvailableParameters(),
nameof(TableView.GetCalculatedValueName) => ResolveCalculatedValueName(),
nameof(TableView.GetCalculatedValueText) => ResolveCalculatedValueText(),
nameof(TableView.IsValidSectionType) => ResolveIsValidSectionType(),
nameof(TableView.GetCellText) => ResolveCellText(),
_ => null
};

ResolveSet ResolveAvailableParameters()
{
var categories = context.Settings.Categories;
var resolveSummary = new ResolveSet(categories.Size);
foreach (Category category in categories)
{
var result = TableView.GetAvailableParameters(context, category.Id);
resolveSummary.AppendVariant(result, $"{category.Name}");
}

return resolveSummary;
}

ResolveSet ResolveCalculatedValueName()
{
var tableData = tableView switch
{
ViewSchedule viewSchedule => viewSchedule.GetTableData(),
PanelScheduleView panelScheduleView => panelScheduleView.GetTableData(),
_ => throw new NotSupportedException($"{tableView.GetType().FullName} is not supported in the current API version")
};

var sectionTypes = Enum.GetValues(typeof(SectionType));
var resolveSummary = new ResolveSet();
foreach (SectionType sectionType in sectionTypes)
{
var tableSectionData = tableData!.GetSectionData(sectionType);
if (tableSectionData is null) continue;

for (var i = tableSectionData.FirstRowNumber; i < tableSectionData.LastRowNumber; i++)
for (var j = tableSectionData.FirstColumnNumber; j < tableSectionData.LastColumnNumber; j++)
{
var result = tableView.GetCalculatedValueName(sectionType, i, j);
resolveSummary.AppendVariant(result, $"{sectionType}, row {i}, column {j}: {result}");
}
}

return resolveSummary;
}

ResolveSet ResolveCalculatedValueText()
{
var tableData = tableView switch
{
ViewSchedule viewSchedule => viewSchedule.GetTableData(),
PanelScheduleView panelScheduleView => panelScheduleView.GetTableData(),
_ => throw new NotSupportedException($"{tableView.GetType().FullName} is not supported in the current API version")
};

var sectionTypes = Enum.GetValues(typeof(SectionType));
var resolveSummary = new ResolveSet();
foreach (SectionType sectionType in sectionTypes)
{
var tableSectionData = tableData!.GetSectionData(sectionType);
if (tableSectionData is null) continue;

for (var i = tableSectionData.FirstRowNumber; i < tableSectionData.LastRowNumber; i++)
for (var j = tableSectionData.FirstColumnNumber; j < tableSectionData.LastColumnNumber; j++)
{
var result = tableView.GetCalculatedValueText(sectionType, i, j);
resolveSummary.AppendVariant(result, $"{sectionType}, row {i}, column {j}: {result}");
}
}

return resolveSummary;
}

ResolveSet ResolveCellText()
{
var tableData = tableView switch
{
ViewSchedule viewSchedule => viewSchedule.GetTableData(),
PanelScheduleView panelScheduleView => panelScheduleView.GetTableData(),
_ => throw new NotSupportedException($"{tableView.GetType().FullName} is not supported in the current API version")
};

var sectionTypes = Enum.GetValues(typeof(SectionType));
var resolveSummary = new ResolveSet();
foreach (SectionType sectionType in sectionTypes)
{
var tableSectionData = tableData!.GetSectionData(sectionType);
if (tableSectionData is null) continue;
for (var i = tableSectionData.FirstRowNumber; i < tableSectionData.LastRowNumber; i++)
for (var j = tableSectionData.FirstColumnNumber; j < tableSectionData.LastColumnNumber; j++)
{
var result = tableView.GetCellText(sectionType, i, j);
resolveSummary.AppendVariant(result, $"{sectionType}, row {i}, column {j}: {result}");
}
}

return resolveSummary;
}

ResolveSet ResolveIsValidSectionType()
{
var sectionTypes = Enum.GetValues(typeof(SectionType));
var resolveSummary = new ResolveSet();
foreach (SectionType sectionType in sectionTypes)
{
var result = tableView.IsValidSectionType(sectionType);
resolveSummary.AppendVariant(result, $"{sectionType}: {result}");
}

return resolveSummary;
}
}
}

0 comments on commit fd89c17

Please sign in to comment.