using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; namespace ShrlAlgoToolkit.RevitAddins.RvView { [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 dictionary = new Dictionary(); //ErrorModels fields = new ErrorModels(); 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 fieldIds = new List(); 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; } } }