I'm having difficulty trying to filter out walls by the WALL_BASE_CONSTRAINT. This is the code I currently have. The Build is successful but when I execute the plugin. I come up with the exception: The filter value is not valid for the field and filter type. Parameter name: filter
I have successfully tried this code on other BuiltInParameters like 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;
}
Where does FindField
come from and what does it do?
Have you looked at the ScheduleCreation
Revit SDK sample?