|
创建明细表是Revit2013的一个比较重要的API功能增强点。可以用来创建明细表,
1。指定显示那个类别的对象;
2. 可以定制一个表中有那些列,列的宽度。
3. 也可以向明细表设置过滤器,选择那些对象可以在明细表中显示出来。
4. 明细表排序和分组。
下面代码段显示了如何创建一个房间明细表。代码摘自Revit 2013 SDK 中的ScheduleCreation 例子。
顺便说句: 你可以在这个页面下载到最新的Revit 2013 SDK,包含这个例子。 随产品发布的SDK不包含这个例子。
http://usa.autodesk.com/adsk/ser ... 3112&id=2484975
-
- [csharp] view plaincopy
- 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;
- }
复制代码 作者:叶雄进文章来源:http://blog.csdn.net/joexiongjin/article/category/782739
|
|