internal ScheduleSortGroupField AppendSortField(ViewSchedule _viewSchedule, ScheduleField field) { ScheduleSortGroupField _sortGroupField = new ScheduleSortGroupField(field.FieldId); _viewSchedule.Definition.AddSortGroupField(_sortGroupField); return(_sortGroupField); }
internal ScheduleSortGroupField AppendGroupField(ViewSchedule _viewSchedule, ScheduleField field) { ScheduleSortGroupField _sortGroupField = new ScheduleSortGroupField(field.FieldId); _sortGroupField.ShowHeader = false; _sortGroupField.SortOrder = ScheduleSortOrder.Descending; _sortGroupField.ShowBlankLine = false; _viewSchedule.Definition.AddSortGroupField(_sortGroupField); return(_sortGroupField); }
public static void CreateWallsSchedule(UIDocument uidoc) { Document doc = uidoc.Document; using (Transaction t = new Transaction(doc, "Create Schedule")) { t.Start(); // Создание спецификации для стен ViewSchedule wallsSchedule = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_Walls)); // Добавление полей в спецификацию foreach (SchedulableField schedulableFields in GetSchedulableFields(doc)) { wallsSchedule.Definition.AddField(schedulableFields); } // Назначение стадии SetPhaseByName(wallsSchedule, "KR-3"); // Для каждого экземпляра = false wallsSchedule.Definition.IsItemized = false; // Вычесление итогов wallsSchedule.Definition.GetField(0).DisplayType = ScheduleFieldDisplayType.Totals; wallsSchedule.Definition.GetField(1).DisplayType = ScheduleFieldDisplayType.Totals; // Назначение ширины столбцам wallsSchedule.Definition.GetField(0).GridColumnWidth = 30 * mmToft; wallsSchedule.Definition.GetField(1).GridColumnWidth = 30 * mmToft; wallsSchedule.Definition.GetField(2).GridColumnWidth = 55 * mmToft; // Назначение выравнивания wallsSchedule.Definition.GetField(1).HorizontalAlignment = ScheduleHorizontalAlignment.Right; wallsSchedule.Definition.GetField(2).HorizontalAlignment = ScheduleHorizontalAlignment.Center; // Установка сортировки/групировки ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField( wallsSchedule.Definition.GetField(2).FieldId, ScheduleSortOrder.Ascending); wallsSchedule.Definition.AddSortGroupField(sortGroupField); t.Commit(); uidoc.ActiveView = wallsSchedule; } }
public void createMaterialTakeOffSchedule(String name, ElementId elementId) { //Get UIDocument UIDocument uidoc = _cachedCmdData.Application.ActiveUIDocument; //Get Document Document doc = uidoc.Document; ViewSchedule schedule = new FilteredElementCollector(CachedDoc).OfClass(typeof(ViewSchedule)).Where(x => x.Name == name + " Schedule").FirstOrDefault() as ViewSchedule; if (schedule == null) { Transaction tSchedule = new Transaction(CachedDoc, "Create Schedule"); tSchedule.Start(); //Create an empty view schedule for doors. schedule = ViewSchedule.CreateMaterialTakeoff(CachedDoc, elementId); schedule.Name = name + " Schedule"; ElementId volumeId = new ElementId(BuiltInParameter.MATERIAL_VOLUME); ElementId areaId = new ElementId(BuiltInParameter.MATERIAL_AREA); //Iterate all the schedulable fields gotten from the doors view schedule. foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields()) { //See if the FieldType is ScheduleFieldType.Instance. if (schedulableField.ParameterId == volumeId || schedulableField.ParameterId == areaId || schedulableField.GetName(doc).Equals("Material: Keynote")) { //Get ParameterId of SchedulableField. ElementId parameterId = schedulableField.ParameterId; //Add a new schedule field to the view schedule by using the SchedulableField as argument of AddField method of Autodesk.Revit.DB.ScheduleDefinition class. ScheduleField field = schedule.Definition.AddField(schedulableField); //See if the parameterId is a BuiltInParameter. if (Enum.IsDefined(typeof(BuiltInParameter), parameterId.IntegerValue)) { BuiltInParameter bip = (BuiltInParameter)parameterId.IntegerValue; //Get the StorageType of BuiltInParameter. Autodesk.Revit.DB.StorageType st = CachedDoc.get_TypeOfStorage(bip); //if StorageType is String or ElementId, set GridColumnWidth of schedule field to three times of current GridColumnWidth. //And set HorizontalAlignment property to left. if (st == Autodesk.Revit.DB.StorageType.String || st == Autodesk.Revit.DB.StorageType.ElementId) { field.GridColumnWidth = 3 * field.GridColumnWidth; field.HorizontalAlignment = ScheduleHorizontalAlignment.Left; } //For other StorageTypes, set HorizontalAlignment property to center. else { field.HorizontalAlignment = ScheduleHorizontalAlignment.Center; } } if (schedulableField.GetName(doc).Equals("Material: Keynote")) { ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedule.Definition.AddSortGroupField(sortGroupField); schedule.Definition.IsItemized = false; } if (field.ParameterId == volumeId) { FormatOptions formatOpt = new FormatOptions(DisplayUnitType.DUT_CUBIC_FEET, UnitSymbolType.UST_CF, 0.01); formatOpt.UseDefault = false; field.SetFormatOptions(formatOpt); field.DisplayType = ScheduleFieldDisplayType.Totals; } if (field.ParameterId == areaId) { FormatOptions formatOpt = new FormatOptions(DisplayUnitType.DUT_SQUARE_FEET, UnitSymbolType.UST_SF, 0.01); formatOpt.UseDefault = false; field.SetFormatOptions(formatOpt); field.DisplayType = ScheduleFieldDisplayType.Totals; } } } tSchedule.Commit(); tSchedule.Dispose(); } else { schedule.RefreshData(); } ViewScheduleExportOptions opt = new ViewScheduleExportOptions(); opt.FieldDelimiter = ","; opt.Title = false; string path = _export_folder_name; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string file = System.IO.Path.GetFileNameWithoutExtension(name) + ".csv"; schedule.Export(path, file, opt); }
public void createCountSchedule(String name, ElementId elementId) { ViewSchedule schedule = new FilteredElementCollector(CachedDoc).OfClass(typeof(ViewSchedule)).Where(x => x.Name == name + " Schedule").FirstOrDefault() as ViewSchedule; if (schedule == null) { Transaction tSchedule = new Transaction(CachedDoc, "Create Schedule"); tSchedule.Start(); //Create an empty view schedule for doors. //schedule = ViewSchedule.CreateSchedule(CachedDoc, new ElementId(BuiltInCategory.INVALID), ElementId.InvalidElementId); schedule = ViewSchedule.CreateSchedule(CachedDoc, elementId, ElementId.InvalidElementId); schedule.Name = name + " Schedule"; ElementId keynoteId = new ElementId(BuiltInParameter.KEYNOTE_PARAM); //Iterate all the schedulable fields gotten from the doors view schedule. foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields()) { //See if the FieldType is ScheduleFieldType.Instance. if (schedulableField.FieldType == ScheduleFieldType.Count || schedulableField.ParameterId == keynoteId) { //Get ParameterId of SchedulableField. ElementId parameterId = schedulableField.ParameterId; //Add a new schedule field to the view schedule by using the SchedulableField as argument of AddField method of Autodesk.Revit.DB.ScheduleDefinition class. ScheduleField field = schedule.Definition.AddField(schedulableField); //See if the parameterId is a BuiltInParameter. if (Enum.IsDefined(typeof(BuiltInParameter), parameterId.IntegerValue)) { BuiltInParameter bip = (BuiltInParameter)parameterId.IntegerValue; //Get the StorageType of BuiltInParameter. Autodesk.Revit.DB.StorageType st = CachedDoc.get_TypeOfStorage(bip); //if StorageType is String or ElementId, set GridColumnWidth of schedule field to three times of current GridColumnWidth. //And set HorizontalAlignment property to left. if (st == Autodesk.Revit.DB.StorageType.String || st == Autodesk.Revit.DB.StorageType.ElementId) { field.GridColumnWidth = 3 * field.GridColumnWidth; field.HorizontalAlignment = ScheduleHorizontalAlignment.Left; } //For other StorageTypes, set HorizontalAlignment property to center. else { field.HorizontalAlignment = ScheduleHorizontalAlignment.Center; } } if (field.ParameterId == keynoteId) { ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedule.Definition.AddSortGroupField(sortGroupField); schedule.Definition.IsItemized = false; } if (schedulableField.FieldType == ScheduleFieldType.Count) { } } } tSchedule.Commit(); tSchedule.Dispose(); } else { schedule.RefreshData(); } ViewScheduleExportOptions opt = new ViewScheduleExportOptions(); opt.FieldDelimiter = ","; opt.Title = false; string path = _export_folder_name; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string file = System.IO.Path.GetFileNameWithoutExtension(name) + ".csv"; schedule.Export(path, file, opt); }
/// <summary> /// Create a view schedule of wall category and add schedule field, filter and sorting/grouping field to it. /// </summary> /// <param name="uiDocument">UIdocument of revit file.</param> /// <returns>ICollection of created view schedule(s).</returns> private ICollection <ViewSchedule> CreateSchedules(UIDocument uiDocument) { Document document = uiDocument.Document; Transaction t = new Transaction(document, "Create Schedules"); t.Start(); List <ViewSchedule> schedules = new List <ViewSchedule>(); //Create an empty view schedule of wall category. ViewSchedule schedule = ViewSchedule.CreateSchedule(document, new ElementId(BuiltInCategory.OST_Walls), ElementId.InvalidElementId); schedule.Name = "Wall Schedule 1"; schedules.Add(schedule); //Iterate all the schedulable field gotten from the walls view schedule. foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields()) { //Judge if the FieldType is ScheduleFieldType.Instance. if (schedulableField.FieldType == ScheduleFieldType.Instance) { //Get ParameterId of SchedulableField. ElementId parameterId = schedulableField.ParameterId; //If the ParameterId is id of BuiltInParameter.ALL_MODEL_MARK then ignore next operation. if (ShouldSkip(parameterId)) { continue; } //Add a new schedule field to the view schedule by using the SchedulableField as argument of AddField method of Autodesk.Revit.DB.ScheduleDefinition class. ScheduleField field = schedule.Definition.AddField(schedulableField); //Judge if the parameterId is a BuiltInParameter. if (Enum.IsDefined(typeof(BuiltInParameter), parameterId.IntegerValue)) { BuiltInParameter bip = (BuiltInParameter)parameterId.IntegerValue; //Get the StorageType of BuiltInParameter. StorageType st = document.get_TypeOfStorage(bip); //if StorageType is String or ElementId, set GridColumnWidth of schedule field to three times of current GridColumnWidth. //And set HorizontalAlignment property to left. if (st == StorageType.String || st == StorageType.ElementId) { field.GridColumnWidth = 3 * field.GridColumnWidth; field.HorizontalAlignment = ScheduleHorizontalAlignment.Left; } //For other StorageTypes, set HorizontalAlignment property to center. else { field.HorizontalAlignment = ScheduleHorizontalAlignment.Center; } } //Filter the view schedule by volume if (field.ParameterId == new ElementId(BuiltInParameter.HOST_VOLUME_COMPUTED)) { double volumeFilterInCubicFt = 0.8 * Math.Pow(3.2808399, 3.0); ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.GreaterThan, volumeFilterInCubicFt); schedule.Definition.AddFilter(filter); } //Group and sort the view schedule by type if (field.ParameterId == new ElementId(BuiltInParameter.ELEM_TYPE_PARAM)) { ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); sortGroupField.ShowHeader = true; schedule.Definition.AddSortGroupField(sortGroupField); } } } t.Commit(); uiDocument.ActiveView = schedule; return(schedules); }
private static void AddGroupingToSchedule(ViewSchedule schedule, IEnumerable<Parameter> parameters, string paramName) { var field = FindField(schedule, parameters.FirstOrDefault(p => p.Definition.Name == paramName)); if (field == null) throw new Exception("Unable to find field."); var sortGroupField = new ScheduleSortGroupField(field.FieldId, ScheduleSortOrder.Ascending); schedule.Definition.AddSortGroupField(sortGroupField); schedule.Definition.IsItemized = false; }
//private UIDocument _uiDoc; public Result CreateAllItemsSchedule(UIDocument uiDoc) { try { Document doc = uiDoc.Document; FilteredElementCollector sharedParameters = new FilteredElementCollector(doc); sharedParameters.OfClass(typeof(SharedParameterElement)); #region Debug ////Debug //StringBuilder sbDev = new StringBuilder(); //var list = new ParameterDefinition().ElementParametersAll; //int i = 0; //foreach (SharedParameterElement sp in sharedParameters) //{ // sbDev.Append(sp.GuidValue + "\n"); // sbDev.Append(list[i].Guid.ToString() + "\n"); // i++; // if (i == list.Count) break; //} ////sbDev.Append( + "\n"); //// Clear the output file //File.WriteAllBytes(InputVars.OutputDirectoryFilePath + "\\Dev.pcf", new byte[0]); //// Write to output file //using (StreamWriter w = File.AppendText(InputVars.OutputDirectoryFilePath + "\\Dev.pcf")) //{ // w.Write(sbDev); // w.Close(); //} #endregion Transaction t = new Transaction(doc, "Create items schedules"); t.Start(); #region Schedule ALL elements ViewSchedule schedAll = ViewSchedule.CreateSchedule(doc, ElementId.InvalidElementId, ElementId.InvalidElementId); schedAll.Name = "PCF - ALL Elements"; schedAll.Definition.IsItemized = false; IList <SchedulableField> schFields = schedAll.Definition.GetSchedulableFields(); foreach (SchedulableField schField in schFields) { if (schField.GetName(doc) != "Family and Type") { continue; } ScheduleField field = schedAll.Definition.AddField(schField); ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedAll.Definition.AddSortGroupField(sortGroupField); } string curUsage = "U"; string curDomain = "ELEM"; var query = from p in new plst().LPAll where p.Usage == curUsage && p.Domain == curDomain select p; foreach (pdef pDef in query.ToList()) { SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters where param.GuidValue.CompareTo(pDef.Guid) == 0 select param).First(); SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First(); ScheduleField field = schedAll.Definition.AddField(queryField); if (pDef.Name != "PCF_ELEM_TYPE") { continue; } ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.HasParameter); schedAll.Definition.AddFilter(filter); } #endregion #region Schedule FILTERED elements ViewSchedule schedFilter = ViewSchedule.CreateSchedule(doc, ElementId.InvalidElementId, ElementId.InvalidElementId); schedFilter.Name = "PCF - Filtered Elements"; schedFilter.Definition.IsItemized = false; schFields = schedFilter.Definition.GetSchedulableFields(); foreach (SchedulableField schField in schFields) { if (schField.GetName(doc) != "Family and Type") { continue; } ScheduleField field = schedFilter.Definition.AddField(schField); ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedFilter.Definition.AddSortGroupField(sortGroupField); } foreach (pdef pDef in query.ToList()) { SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters where param.GuidValue.CompareTo(pDef.Guid) == 0 select param).First(); SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First(); ScheduleField field = schedFilter.Definition.AddField(queryField); if (pDef.Name != "PCF_ELEM_TYPE") { continue; } ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.HasParameter); schedFilter.Definition.AddFilter(filter); filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.NotEqual, ""); schedFilter.Definition.AddFilter(filter); } #endregion #region Schedule Pipelines ViewSchedule schedPipeline = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.OST_PipingSystem), ElementId.InvalidElementId); schedPipeline.Name = "PCF - Pipelines"; schedPipeline.Definition.IsItemized = false; schFields = schedPipeline.Definition.GetSchedulableFields(); foreach (SchedulableField schField in schFields) { if (schField.GetName(doc) != "Family and Type") { continue; } ScheduleField field = schedPipeline.Definition.AddField(schField); ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId); schedPipeline.Definition.AddSortGroupField(sortGroupField); } curDomain = "PIPL"; foreach (pdef pDef in query.ToList()) { SharedParameterElement parameter = (from SharedParameterElement param in sharedParameters where param.GuidValue.CompareTo(pDef.Guid) == 0 select param).First(); SchedulableField queryField = (from fld in schFields where fld.ParameterId.IntegerValue == parameter.Id.IntegerValue select fld).First(); schedPipeline.Definition.AddField(queryField); } #endregion t.Commit(); sharedParameters.Dispose(); return(Result.Succeeded); } catch (Exception e) { BuildingCoderUtilities.InfoMsg(e.Message); return(Result.Failed); } }
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { // Add an EventLogTraceListener object System.Diagnostics.Trace.Listeners.Add( new System.Diagnostics.EventLogTraceListener("Application")); // Lay the hands on the active document UIDocument uidoc = commandData.Application.ActiveUIDocument; Document doc = uidoc.Document; // Set up a timer Timing myTimer = new Timing(); myTimer.StartTime(); StringBuilder strBld = new StringBuilder(); // Make some preparations List <ElementId> selectedElemIds = new List <ElementId>(); EnumValuesWnd wnd = null; try { if (doc.ActiveView.ViewType != ViewType.Schedule) { TaskDialog.Show("Exception", "Open a schedule view before running this command."); return(Result.Failed); } else if (uidoc.Selection.GetElementIds().Count == 0) { TaskDialog.Show("Exception", "No element has been picked out."); return(Result.Failed); } selectedElemIds = uidoc.Selection.GetElementIds().ToList(); ViewSchedule scheduleView = doc.ActiveView as ViewSchedule; ScheduleDefinition scheduleDefinition = scheduleView.Definition; bool sorted = scheduleDefinition.GetSortGroupFieldCount() > 0 ? true : false; List <TmpObject> tmpObjs = new List <TmpObject>(); for (int i = 0; i < selectedElemIds.Count; ++i) { Element elem = doc.GetElement(selectedElemIds[i]); TmpObject tmp = new TmpObject(elem.Id); for (int j = 0; j < scheduleDefinition.GetSortGroupFieldCount(); ++j) { ScheduleSortGroupField srtGrpField = scheduleDefinition.GetSortGroupField(j); ScheduleField schField = scheduleDefinition.GetField(srtGrpField.FieldId); Parameter p = GetScheduleFieldParameter(schField, elem); if (p != null) { tmp.AddParameter(p); } } tmpObjs.Add(tmp); } // Sort the elements by a series of parameters tmpObjs.Sort(); // Create the window and subscribe to its event IList <string> parameterNames = doc.GetElement(selectedElemIds[0]) .GetOrderedParameters() .Where(p => p.StorageType == StorageType.String && !p.IsReadOnly) .Select(p => p.Definition.Name) .ToList(); wnd = new EnumValuesWnd(parameterNames); wnd.OkClicked += (sender, args) => { using (Transaction t = new Transaction(doc)) { t.Start("Enumerate parameters"); // Deal with the first element TmpObject prevObj = tmpObjs[0]; doc.GetElement(prevObj.Id).LookupParameter(args.ParameterName).Set( string.Format("{0}{1}{2}", args.Prefix, args.Position, args.Suffix)); int position = args.Position; // See about the other elements in the list for (int i = 1; i < tmpObjs.Count; ++i) { TmpObject curObj = tmpObjs[i]; Element e = doc.GetElement(curObj.Id); if (curObj.CompareTo(prevObj) == 0 && sorted) { e.LookupParameter(args.ParameterName).Set( string.Format("{0}{1}{2}", args.Prefix, position, args.Suffix)); } else { ++position; e.LookupParameter(args.ParameterName).Set( string.Format("{0}{1}{2}", args.Prefix, position, args.Suffix)); } prevObj = curObj; } t.Commit(); } }; // Show the window wnd.ShowDialog(); return(Result.Succeeded); } catch (Autodesk.Revit.Exceptions.OperationCanceledException) { return(Result.Cancelled); } catch (Exception ex) { TaskDialog.Show("Exception", string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); System.Diagnostics.Trace.Write(string.Format("{0}\n{1}", ex.Message, ex.StackTrace)); return(Result.Failed); } finally { wnd.Close(); myTimer.StopTime(); System.Diagnostics.Trace .Write(string.Format("Time elapsed: {0}s", myTimer.Duration.TotalSeconds)); } }
/// <summary> /// sort schedule by selected field /// </summary> /// <param name="columnName">field name</param> /// <param name="isItemized">wether is itemized or not</param> /// <returns>viewSchedule</returns> public void sortBy(string columnName,Boolean isItemized) { if (Schedule != null) { int scheduleFieldsCount = Schedule.Definition.GetFieldCount(); for(int i=0;i<scheduleFieldsCount;i++){ ScheduleField schedulableField = Schedule.Definition.GetField(i); if (schedulableField.GetName().ToUpper() == columnName.ToUpper()) { ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(schedulableField.FieldId); sortGroupField.ShowHeader = false; Schedule.Definition.AddSortGroupField(sortGroupField); Schedule.Definition.IsItemized = isItemized; } } } else { System.Windows.Forms.MessageBox.Show("please generate schedule first"); } }