154 lines
6.4 KiB
C#
154 lines
6.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Autodesk.Revit.DB;
|
|
using Autodesk.Revit.UI;
|
|
using Microsoft.Win32;
|
|
using Sai.RvWrapper.Shared;
|
|
|
|
namespace SZBIM.StandardTools.ParameterManager
|
|
{
|
|
/// <summary>
|
|
/// 添加到族文件的族参数
|
|
/// </summary>
|
|
internal class AddFamilyFileFamilyParamsHandler : IExternalEventHandler
|
|
{
|
|
private string transName;
|
|
|
|
public List<ParamModel> ParameterList { get; set; }
|
|
|
|
public bool IsFamilyParam { get; set; }
|
|
public List<SharedParamModel> SharedParameters { get; set; }
|
|
|
|
public void Execute(UIApplication uiapp)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
UIDocument uidoc = uiapp.ActiveUIDocument;
|
|
var app = uiapp.Application;
|
|
Document doc = uidoc.Document;
|
|
|
|
|
|
string filter = "选择族文件(*.rfa)|*.rfa";
|
|
OpenFileDialog openDialog = new OpenFileDialog
|
|
{
|
|
AddExtension = false,
|
|
CheckFileExists = false,
|
|
CheckPathExists = false,
|
|
DereferenceLinks = false,
|
|
Filter = filter,
|
|
FilterIndex = 0,
|
|
RestoreDirectory = true,
|
|
Title = "选择族文件",
|
|
ValidateNames = false,
|
|
Multiselect = true
|
|
};
|
|
if (openDialog.ShowDialog() != true || openDialog.FileNames.Length == 0)
|
|
{
|
|
return;
|
|
}
|
|
|
|
string[] families = openDialog.FileNames;
|
|
|
|
|
|
SharedParamsUtil util = new SharedParamsUtil();
|
|
DefinitionFile tempFile;
|
|
transName = IsFamilyParam ? "添加族参数" : "添加族参数(共享参数)";
|
|
using (var group = new TransactionGroup(doc, transName))
|
|
{
|
|
group.Start();
|
|
var originSharedParametersFile = uiapp.Application.SharedParametersFilename.Clone();
|
|
tempFile = util.CreateTempSharedParameterFile(app, "TempSharedParameters");
|
|
var g = tempFile.Groups.Create("TempGroup");
|
|
foreach (var family in families)
|
|
{
|
|
var famdoc = app.OpenDocumentFile(family);
|
|
var paramDatas = ParameterList.Where(data => data.IsChecked == true);
|
|
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 "添加族文件参数";
|
|
}
|
|
}
|
|
} |