话不多说,直接上代码!有疑问的随时评论留言交流!
public static void CreateSchedules(Document doc, double clashELemsCount, string scheduleName, string problemDescription)
{
FilteredElementCollector coll = new FilteredElementCollector(doc);
ElementClassFilter instanceFitler = new ElementClassFilter(typeof(ViewSchedule));//获取项目载入族的过滤器
coll.WherePasses(instanceFitler);
var schNameList = new List<string>();
foreach (var c in coll)
{
schNameList.Add(c.Name);
}
if (schNameList.Contains(scheduleName))
{
Transaction tra = new Transaction(doc);
tra.Start("删除明细表");
TaskDialog.Show("温馨提示", "项目中【已存在同名明细表】,请【重命名或删除】已有明细表后再运行程序");
tra.Commit();
}
else
{
if (clashELemsCount == 0)
{
TaskDialog.Show("温馨提示", "无此类问题存在,不生成明细表");
}
if (clashELemsCount > 0)
{
Transaction tr = new Transaction(doc);
tr.Start("创建明细表");
string str = problemDescription;
List<ViewSchedule> schedules = new List<ViewSchedule>();
ViewSchedule schedule = ViewSchedule.CreateSchedule(doc, new ElementId(BuiltInCategory.INVALID));//多类别明细表
schedule.Name = scheduleName;
schedules.Add(schedule);
foreach (SchedulableField schedulableField in schedule.Definition.GetSchedulableFields())
{
{
if (schedulableField.GetName(doc).ToString() == "族与类型" || schedulableField.GetName(doc).ToString() == "标记")//加载需要的明细表参数
{
ScheduleField field = schedule.Definition.AddField(schedulableField);
if (field.ParameterId == new ElementId(BuiltInParameter.ALL_MODEL_MARK))//设置明细表过滤器条件
{
ScheduleFilter filter = new ScheduleFilter(field.FieldId, ScheduleFilterType.Contains, str);
schedule.Definition.AddFilter(filter);
}
if (field.ParameterId == new ElementId(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM))//设置明细表排序
{
ScheduleSortGroupField sortGroupField = new ScheduleSortGroupField(field.FieldId);
sortGroupField.ShowHeader = false;
schedule.Definition.AddSortGroupField(sortGroupField);
}
}
}
}
tr.Commit();
}
}
}