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

 

转载请复制以下信息:

 
原文链接: http://blog.csdn.net/joexiongjin/article/details/7564984

作者:  叶雄进 , Autodesk ADN

2012.5.14

 

创建明细表是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

 

        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;
        }


 

 

 

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Revit API 提供了创建图纸、图例、明细表的功能。下面我简单介绍一下: 1. 创建图纸 在 Revit 中,图纸是一个特殊的视图类型,它通常用于制作图集或者输出到 PDF 文件中。创建图纸的代码如下: ``` // 获取当前文档 Document doc = commandData.Application.ActiveUIDocument.Document; // 创建一个的图纸 ViewSheet viewSheet = ViewSheet.Create(doc, ElementId.InvalidElementId); viewSheet.Name = "New Sheet"; // 设置图纸的参数 ParameterSet parameters = viewSheet.Parameters; Parameter parameter = parameters.FirstOrDefault(p => p.Definition.Name == "Sheet Number"); if (parameter != null) { parameter.Set("A101"); } // 添加视图到图纸中 Viewport viewport = Viewport.Create(doc, viewSheet.Id, view.Id, new XYZ(0, 0, 0)); ``` 2. 创建图例 图例是一种特殊的视图,用于显示构件或族的符号和说明。创建图例的代码如下: ``` // 获取当前文档 Document doc = commandData.Application.ActiveUIDocument.Document; // 获取族文件中的图例族 Family symbolFamily = new FilteredElementCollector(doc) .OfClass(typeof(Family)) .FirstOrDefault(f => f.Name == "Legend"); // 创建一个的图例 Legend legend = Legend.Create(doc, symbolFamily.Id, new XYZ(0, 0, 0)); // 设置图例的参数 ParameterSet parameters = legend.Parameters; Parameter parameter = parameters.FirstOrDefault(p => p.Definition.Name == "Title"); if (parameter != null) { parameter.Set("Legend Title"); } // 添加图例项 ElementId symbolId = new ElementId(12345); LegendItem legendItem = LegendItem.Create(doc, legend.Id, symbolId, "Symbol Name", "Symbol Description"); ``` 3. 创建明细表 明细表是一种特殊的视图,用于显示构件或族的属性和参数。创建明细表的代码如下: ``` // 获取当前文档 Document doc = commandData.Application.ActiveUIDocument.Document; // 创建一个明细表 ScheduleDefinition scheduleDefinition = ScheduleDefinition.Create(doc, new ElementId(BuiltInCategory.OST_Doors)); scheduleDefinition.Name = "Door Schedule"; // 设置明细表的参数 ParameterSet parameters = scheduleDefinition.Parameters; Parameter parameter = parameters.FirstOrDefault(p => p.Definition.Name == "Title"); if (parameter != null) { parameter.Set("Door Schedule Title"); } // 添加明细表字段 Field field = scheduleDefinition.AddField(new ScheduleField("Door Number", BuiltInParameter.DOOR_NUMBER)); ``` 以上是创建图纸、图例、明细表的基本代码,你可以根据需要进行修改和扩展。注意,在创建这些视图时,需要指定它们所属的视图集合或者视图组。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值