1,创建共享参数
private void CreateShareInfo(Document revitDoc, BuiltInCategory builtInCategory, ParameterType paraType, ComponentData data, List<Element> eles)
{
try
{
Autodesk.Revit.ApplicationServices.Application revitApp = revitDoc.Application;
string groupName = "AssetsManagement";
string definitionName = data.ComponentName;
ParameterType parameterType = paraType;
Category floorCategory = revitDoc.Settings.Categories.get_Item(builtInCategory);
BuiltInParameterGroup parameterGroup = BuiltInParameterGroup.PG_DATA;
using (Transaction trans = new Transaction(revitDoc, "添加共享参数"))
{
var failure = new FailureHandler();
failure.BiddingTheWarmingDialog(trans);
trans.Start();
DefinitionFile definitionFile = revitApp.OpenSharedParameterFile();
if (definitionFile == null)
{
throw new Exception("Can not open shared parameter file");
}
DefinitionGroups groups = definitionFile.Groups;
DefinitionGroup group = groups.get_Item(groupName);
if (group == null) //创建组
{
group = groups.Create(groupName);
}
Definition definition = group.Definitions.get_Item(definitionName);
if (definition == null)//创建定义
{
definition = group.Definitions.Create(new ExternalDefinitionCreationOptions(definitionName, parameterType));
}
var instanceBinding = revitDoc.ParameterBindings.get_Item(definition) as InstanceBinding;
ElementBinding binding = null;
if (instanceBinding != null)
{
if (!instanceBinding.Categories.Contains(floorCategory))
{
instanceBinding.Categories.Insert(floorCategory);
}
revitDoc.ParameterBindings.ReInsert(definition, instanceBinding);
}
else
{
CategorySet categySet = revitApp.Create.NewCategorySet();
categySet.Insert(floorCategory);
instanceBinding = revitApp.Create.NewInstanceBinding(categySet);
revitDoc.ParameterBindings.Insert(definition, instanceBinding);
}
if (!revitDoc.ParameterBindings.Contains(definition))
{
bool insertSuccess = revitDoc.ParameterBindings.Insert(definition, binding, parameterGroup);
if (!insertSuccess)
{
throw new Exception("Failed to bind definition to category");
}
}
foreach (var ele in eles)
{
SetParamValue(parameterType, data, ele);
}
trans.Commit();
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
2,设置共享参数的值。
public void SetParamValue(ParameterType paraType, ComponentData data, Element element)
{
try
{
var param = element.LookupParameter(data.ComponentName);
if (param != null)
{
var isReadOnly = param.IsReadOnly;
if (isReadOnly) return;
switch (paraType)
{
case ParameterType.Integer:
{
if (!string.IsNullOrEmpty(data.ComponentContent))
{
int mi = int.Parse(data.ComponentContent);
element.LookupParameter(data.ComponentName).Set(mi);
}
}
break;
case ParameterType.Text:
{
element.LookupParameter(data.ComponentName).Set(data.ComponentContent);
}
break;
}
}
}
catch (Exception ex)
{
TaskDialog.Show("Set Parameter Value Error", ex.ToString());
return;
}
}