按基本约束过滤墙:过滤器值对于字段和过滤器类型无效

时间:2019-05-12 12:32:07

标签: c# revit-api revit

我很难用 WALL_BASE_CONSTRAINT 过滤掉墙壁。这是我目前拥有的代码。构建成功,但是当我执行插件时。我想到了一个例外:过滤器值对于字段和过滤器类型无效。 参数名称:过滤器

我已经在其他BuiltInParameters(例如Material_Name,ALL_MODEL_DESCRIPTION)上成功尝试了此代码。

private static void AddFilterToSchedule(Document doc, ViewSchedule 
schedule)
 {
        string value = "Foundation";

        using (Transaction transaction = new Transaction(schedule.Document, "Filter Material TakeOff"))
        {
            transaction.Start();

            ScheduleDefinition definition = schedule.Definition;
            ScheduleField scheduleField = FindField(schedule, BuiltInParameter.WALL_BASE_CONSTRAINT);

            ScheduleFilter filter = new ScheduleFilter(scheduleField.FieldId, ScheduleFilterType.NotEqual, value);
            definition.AddFilter(filter);

            transaction.Commit();
        }

    }

public static ScheduleField FindField(ViewSchedule schedule, 
BuiltInParameter paramEnum)
    {
        ScheduleDefinition definition = schedule.Definition;
        ScheduleField foundField = null;
        ElementId paramId = new ElementId(paramEnum);

        foreach (ScheduleFieldId fieldId in definition.GetFieldOrder())
        {
            foundField = definition.GetField(fieldId);
            if (foundField.ParameterId == paramId)
            {
                return foundField;
            }
        }
        return foundField;
    }

2 个答案:

答案 0 :(得分:0)

FindField的来源和作用是什么?

您看过ScheduleCreation Revit SDK sample吗?

答案 1 :(得分:0)

请确保将“在链接中包含元素”设置为False,否则请不要在创建的计划中选中它。

这导致无法按基本约束进行过滤。