添加项目文件。
This commit is contained in:
157
RevitKits/ParameterManager/AddProjectFileFamilyParamsHandler.cs
Normal file
157
RevitKits/ParameterManager/AddProjectFileFamilyParamsHandler.cs
Normal file
@@ -0,0 +1,157 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Autodesk.Revit.DB;
|
||||
using Autodesk.Revit.UI;
|
||||
using Sai.RvWrapper.Shared;
|
||||
|
||||
namespace SZBIM.StandardTools.ParameterManager
|
||||
{
|
||||
/// <summary>
|
||||
/// 添加项目文件中的族的族参数
|
||||
/// </summary>
|
||||
public class AddProjectFileFamilyParamsHandler : IExternalEventHandler
|
||||
{
|
||||
private string transName;
|
||||
|
||||
/// <summary>
|
||||
/// 要添加的参数合集
|
||||
/// </summary>
|
||||
public List<ParamModel> ParameterList { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 所有共享参数的合集(要添加的参数合集中的参数若能在这里找到,则添加这里的共享参数)
|
||||
/// </summary>
|
||||
public List<SharedParamModel> SharedParameters { get; set; }
|
||||
|
||||
public List<FamilyInstance> Instances { get; set; }
|
||||
public bool IsFamilyParam { get; set; } //是:族参数,否:族共享参数
|
||||
|
||||
public void Execute(UIApplication uiapp)
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
UIDocument uidoc = uiapp.ActiveUIDocument;
|
||||
var app = uiapp.Application;
|
||||
Document doc = uidoc.Document;
|
||||
|
||||
|
||||
List<FamilyInstance> instancesSelected = uidoc.Selection.PickElementsByRectangle(new TypesSelectionFilter(typeof(FamilyInstance)), "请框选需要添加共享参数作为族参数的族实例").Cast<FamilyInstance>().ToList();
|
||||
|
||||
if (!instancesSelected.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
//根据族实例,去重得到族
|
||||
var families = instancesSelected.GroupBy(ins => ins.Symbol.Family.Id.IntegerValue)
|
||||
.Select(g => g.FirstOrDefault()?.Symbol.Family)
|
||||
.ToList();
|
||||
|
||||
SharedParamsUtil util = new SharedParamsUtil();
|
||||
transName = IsFamilyParam ? "添加族参数" : "添加族参数(共享参数)";
|
||||
using (var group = new TransactionGroup(doc, transName))
|
||||
{
|
||||
group.Start();
|
||||
var originSharedParametersFile = uiapp.Application.SharedParametersFilename.Clone();
|
||||
var tempFile = util.CreateTempSharedParameterFile(app, "TempSharedParameters");
|
||||
var g = tempFile.Groups.Create("TempGroup");
|
||||
foreach (var family in families)
|
||||
{
|
||||
if (!family.IsEditable)
|
||||
{
|
||||
sb.AppendLine($"族:{family.Name},无法编辑。");
|
||||
continue;
|
||||
}
|
||||
|
||||
var paramDatas = ParameterList.Where(data => data.IsChecked == true);
|
||||
var famdoc = doc.EditFamily(family);
|
||||
famdoc.Invoke(ts =>
|
||||
{
|
||||
if (IsFamilyParam)
|
||||
{
|
||||
foreach (var paramData in paramDatas)
|
||||
{
|
||||
famdoc.FamilyManager.AddParameter(paramData.FullProperty,
|
||||
BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES, ParameterType.MultilineText,
|
||||
true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var paramData in paramDatas)
|
||||
{
|
||||
var familyParam = famdoc.FamilyManager.get_Parameter(paramData.FullProperty);
|
||||
//族参数已经存在时
|
||||
if (familyParam != null)
|
||||
{
|
||||
sb.AppendLine($"{famdoc.Title}的{paramData.FullProperty}参数已存在,不进行添加。");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
var sharedParamFinded = SharedParameters.FirstOrDefault(p =>
|
||||
p.FullParamName == paramData.FullProperty);
|
||||
try
|
||||
{
|
||||
if (sharedParamFinded != null)
|
||||
{
|
||||
var options =
|
||||
new ExternalDefinitionCreationOptions(sharedParamFinded.FullParamName,
|
||||
ParameterType.MultilineText)
|
||||
{
|
||||
GUID = new Guid(sharedParamFinded.Guid)
|
||||
};
|
||||
var definition = g.Definitions.get_Item(sharedParamFinded.FullParamName) ?? g.Definitions.Create(options);
|
||||
famdoc.FamilyManager.AddParameter((ExternalDefinition)definition,
|
||||
BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES, true);
|
||||
}
|
||||
else //找不到则添加为新的共享参数
|
||||
{
|
||||
var options = new ExternalDefinitionCreationOptions(paramData.FullProperty,
|
||||
ParameterType.MultilineText)
|
||||
{
|
||||
GUID = new Guid(paramData.Guid)
|
||||
};
|
||||
var definition = g.Definitions.get_Item(paramData.FullProperty) ??
|
||||
g.Definitions.Create(options);
|
||||
|
||||
famdoc.FamilyManager.AddParameter((ExternalDefinition)definition,
|
||||
BuiltInParameterGroup.PG_ADSK_MODEL_PROPERTIES, true);
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
famdoc.LoadFamily(doc, new LoadFamilyOptions());
|
||||
famdoc.Close(false);
|
||||
}
|
||||
|
||||
File.Delete(tempFile.Filename);
|
||||
uiapp.Application.SharedParametersFilename = originSharedParametersFile.ToString();
|
||||
|
||||
group.Assimilate();
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(sb.ToString()))
|
||||
{
|
||||
TaskDialog.Show("提示", "添加完成!");
|
||||
}
|
||||
else
|
||||
{
|
||||
TaskDialog.Show("警告", sb.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
public string GetName()
|
||||
{
|
||||
return transName;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user