/// <summary> /// Create project parameters. /// </summary> public static void CreateProjectParameter(bool isAddShared) { DefinitionFile sharedParameterFile; try { sharedParameterFile = revitDocument.Application.OpenSharedParameterFile(); } catch { throw new ArgumentException("Проблема в файле общих параметров. Пожалуйста, выберите другой файл или создайте новый"); } if (isAddShared && ((sharedParameterFile == null) || (sharedParameterFile.Filename == string.Empty))) { throw new ArgumentException("Выбранный файл общих параметров не существует. Пожалуйста, выберите другой файл или создайте новый"); } try { List <RevitParameter> dataList = ParamsHelper.LoadExcel(); if (dataList == null) { return; } AddFamilyParametersResult familyParametersResult; using (var t = new Transaction(revitDocument)) { t.Start($"Adding Parameters from Excel"); if (revitDocument.IsFamilyDocument) { familyParametersResult = new AddFamilyParametersResult(revitDocument.OwnerFamily); AddFamilyParameters.VM.FamilyListViewModel.AddFamilyParameters(revitDocument, dataList, familyParametersResult, isAddShared, false); } else { familyParametersResult = new AddFamilyParametersResult(revitDocument); AddDocumentParameters(dataList, sharedParameterFile, familyParametersResult); } t.Commit(); } AddFamilyParametersResult.ShowResultsDialog(new List <AddFamilyParametersResult> { familyParametersResult }); } catch (Exception e) { TaskDialog.Show("Adding Project Parameters", e.Message); } }
/// <summary> /// The add family parameters. /// </summary> /// <param name="families"> /// The families. /// </param> /// <param name="isAddShared"></param> /// <param name="checkProject"></param> /// <exception cref="ArgumentException">Throws when no families are checked /// </exception> public static void AddFamilyParameters(ObservableCollection <FamilyCategory> families, bool isAddShared, bool checkProject) { List <Family> fam = (from familyCategory in families from item in familyCategory.Members where ItemHelper.GetIsChecked(item) == true select item.Family).ToList(); if (fam.Count == 0) { throw new ArgumentException("Пожалуйста, выберите семейства, в которые вы хотите добавить параметры"); } if (isAddShared && ((SharedParameterFile == null) || (SharedParameterFile.Filename == string.Empty))) { throw new ArgumentException("Выбранный файл общих параметров не существует. Пожалуйста, выберите другой файл или создайте новый"); } var results = new List <AddFamilyParametersResult>(); List <RevitParameter> dataList = ParamsHelper.LoadExcel(); if (dataList != null) { foreach (Family family in fam) { var familyParametersResult = new AddFamilyParametersResult(family); Document familyDoc; if (family.IsEditable) { familyParametersResult.FamilyDocument = familyDoc = revitDocument.EditFamily(family); } else { familyParametersResult.Skipped = true; results.Add(familyParametersResult); continue; } using (var t = new Transaction(familyDoc)) { t.Start($"editing {family.Name}"); try { AddFamilyParameters(familyDoc, dataList, familyParametersResult, isAddShared, checkProject); } catch (Exception e) { TaskDialog.Show("Add Family Parameters", e.Message); break; } t.Commit(); } results.Add(familyParametersResult); } if (results.Count != 0) { var opt = new FamilyLoadingOptions(); foreach (var r in results) { if (r.FamilyDocument != null) { r.FamilyDocument.LoadFamily(revitDocument, opt); r.FamilyDocument.Close(false); } } AddFamilyParametersResult.ShowResultsDialog(results); } } }
private static void AddDocumentParameters(List <RevitParameter> dataList, DefinitionFile sharedParameterFile, AddFamilyParametersResult results) { CategorySet categorySet = revitDocument.Application.Create.NewCategorySet(); foreach (var item in dataList) { DefinitionGroup dg = ParamsHelper.GetOrCreateSharedParamsGroup(sharedParameterFile, item.GroupName); ExternalDefinition externalDefinition = ParamsHelper.GetOrCreateSharedParamDefinition(dg, item.ParamType, item.ParamName, item.IsVisible); Category category = revitDocument.Settings.Categories.get_Item(item.Category); categorySet.Insert(category); Binding newIb; if (item.IsInstance) { newIb = revitDocument.Application.Create.NewInstanceBinding(categorySet); } else { newIb = revitDocument.Application.Create.NewTypeBinding(categorySet); } revitDocument.ParameterBindings.Insert(externalDefinition, newIb, item.ParamGroup); if (revitDocument.ParameterBindings.Contains(externalDefinition)) { revitDocument.ParameterBindings.ReInsert(externalDefinition, newIb); } results.AddFamilyParameterNote(item); } }
public static void AddFamilyParameters(Document familyDoc, List <RevitParameter> dataList, AddFamilyParametersResult results, bool isAddShared, bool checkProject) { foreach (var item in dataList) { bool nameIsInUseInFamilyManager = familyDoc.FamilyManager.Parameters.Cast <FamilyParameter>() .Any(parameter => parameter.Definition.Name == item.ParamName); bool nameIsInProject = false; if (checkProject) { var iter = revitDocument.ParameterBindings.ForwardIterator(); while (iter.MoveNext()) { if (iter.Key.Name == item.ParamName) { nameIsInProject = true; break; } } } bool badCategory = item.Category != (BuiltInCategory)familyDoc.OwnerFamily.FamilyCategory.Id.IntegerValue; if (item.Category != (BuiltInCategory)familyDoc.OwnerFamily.FamilyCategory.Id.IntegerValue) { throw new ArgumentException("В файле Excel параметру назначена неверная категория семейства. Проверьте корректность файла Excel"); } if (nameIsInUseInFamilyManager || badCategory || nameIsInProject) { continue; } if (isAddShared) { if ((familyDoc.Application.OpenSharedParameterFile() == null) || (familyDoc.Application.OpenSharedParameterFile().Filename == string.Empty)) { throw new ArgumentException("Выбранный файл общих параметров не существует. Пожалуйста, выберите другой файл или создайте новый"); } DefinitionGroup dg = ParamsHelper.GetOrCreateSharedParamsGroup(familyDoc.Application.OpenSharedParameterFile(), item.GroupName); ExternalDefinition externalDefinition = ParamsHelper.GetOrCreateSharedParamDefinition(dg, item.ParamType, item.ParamName, item.IsVisible); results.AddFamilyParameterNote(familyDoc.FamilyManager.AddParameter(externalDefinition, item.ParamGroup, item.IsInstance)); } else { results.AddFamilyParameterNote(familyDoc.FamilyManager.AddParameter(item.ParamName, item.ParamGroup, item.ParamType, item.IsInstance)); } } }