Files
Shrlalgo.RvKits/ShrlAlgoToolkit.RevitAddins/RvView/PanelScheduleCmd.cs

144 lines
5.8 KiB
C#
Raw Normal View History

2024-09-22 11:05:41 +08:00
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
2025-04-24 20:56:44 +08:00
namespace ShrlAlgoToolkit.RevitAddins.RvView
2024-09-22 11:05:41 +08:00
{
[Transaction(TransactionMode.Manual)]
internal class PanelScheduleCmd : IExternalCommand
{
public Result Execute(
ExternalCommandData commandData,
ref string message,
ElementSet elements
)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
Document doc = uidoc.Document;
ViewSchedule schedule = null;
doc.Invoke(
_ =>
{
schedule = ViewSchedule.CreateSchedule(
doc,
Category.GetCategory(doc, BuiltInCategory.OST_CurtainWallPanels).Id
);
//得到可插入的参数字段
Dictionary<int, SchedulableField> dictionary =
new Dictionary<int, SchedulableField>();
//ErrorModels<SchedulableField> fields = new ErrorModels<SchedulableField>();
var availableFields = schedule.Definition.GetSchedulableFields();
//foreach (var field in avaliableFields)
//{
// var name = field.GetName(doc).ToLower();
// if (name == "count" || name == "合计")
// {
// TaskDialog.ShowAhead(name, field.ParameterId.IntegerValue.ToString());
// }
//}
foreach (SchedulableField field in availableFields)
{
//schedulableField.GetName(doc);
if (
field.ParameterId
== new ElementId(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM)
)
{
dictionary.Add(1, field);
}
else if (
field.ParameterId
== new ElementId(BuiltInParameter.CURTAIN_WALL_PANELS_WIDTH)
)
{
dictionary.Add(2, field);
}
else if (
field.ParameterId
== new ElementId(BuiltInParameter.CURTAIN_WALL_PANELS_HEIGHT)
)
{
dictionary.Add(3, field);
}
else if (
field.ParameterId == new ElementId(BuiltInParameter.HOST_AREA_COMPUTED)
)
{
dictionary.Add(4, field);
}
#if REVIT2018 || REVIT2020
else if (field.ParameterId.IntegerValue == -1152353)
#elif REVIT2025
else if (field.ParameterId.Value == -1152353)
#endif
{
dictionary.Add(5, field);
}
}
var fieldsOrdered = dictionary
.OrderBy(k => k.Key)
.Select(v => v.Value)
.ToList();
//得到插入后的字段
List<ScheduleFieldId> fieldIds = new List<ScheduleFieldId>();
foreach (SchedulableField field in fieldsOrdered)
{
var fieldId = schedule.Definition.AddField(field).FieldId;
fieldIds.Add(fieldId);
}
foreach (ScheduleFieldId scheduleFieldId in fieldIds)
{
//添加排序或成组
ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(
scheduleFieldId
);
sortGroupField.ShowHeader = false;
//schedule.Definition.GetFieldCount()
//schedule.Definition.GetField()
try
{
schedule.Definition.AddSortGroupField(sortGroupField);
//字段计算总数
ScheduleField field = schedule.Definition.GetField(scheduleFieldId);
if (
field.ParameterId
== new ElementId(BuiltInParameter.HOST_AREA_COMPUTED)
)
{
field.DisplayType = ScheduleFieldDisplayType.Totals;
}
}
catch
{
// ignored
}
}
//添加过滤器
//ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.Contains, str);
//schedule.Definition.AddFilter(filter);
schedule.Definition.ShowGrandTotal = true;
schedule.Definition.ShowGrandTotalTitle = true;
schedule.Definition.ShowGrandTotalCount = true;
schedule.Definition.GrandTotalTitle = "合计";
schedule.Definition.IsItemized = false;
//计算值
//schedule.GetCalculatedValueName()
},
"铺砖明细表"
);
if (schedule == null)
{
return Result.Failed;
}
uidoc.ActiveView = schedule;
return Result.Succeeded;
}
}
}