EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-15 12:41:30

编程创建明细表(2013 新API用法)

创建明细表是Revit2013的一个比较重要的API功能增强点。可以用来创建明细表,

1。指定显示那个类别的对象;

2.可以定制一个表中有那些列,列的宽度。

3.也可以向明细表设置过滤器,选择那些对象可以在明细表中显示出来。

4.明细表排序和分组。



下面代码段显示了如何创建一个房间明细表。代码摘自Revit 2013 SDK 中的ScheduleCreation 例子。

顺便说句: 你可以在这个页面下载到最新的Revit 2013 SDK,包含这个例子。 随产品发布的SDK不包含这个例子。

http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=2484975


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

dgpeihua 发表于 2014-2-20 14:12:12

路过!!!
不发表意见……

页: [1]
查看完整版本: 编程创建明细表(2013 新API用法)