{
Document _doc;
UIDocument _uidoc;
public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
{
UIDocument uidoc = commandData.Application.ActiveUIDocument;
UIApplication uiapp = commandData.Application;
Autodesk.Revit.ApplicationServices.Application app = uiapp.Application;
Document doc = uidoc.Document;
this._doc = doc;
this._uidoc = uidoc;
IList<Element> elems = getElement();
foreach (Element elem in elems)
{
string ShareFileName = @"C:\Users\Administrator\Desktop\sharedParameters.txt";
this._doc.Application.SharedParametersFilename = ShareFileName;
Transaction transaction = new Transaction(doc, "CreateShareParameters");
transaction.Start();
CreateShareParam("MyParameter", ParameterType.Text, BuiltInParameterGroup.PG_TEXT, elem);
transaction.Commit();
}
return Result.Succeeded;
}
//获取当前视图所有构件
public IList<Element> getElement()
{
FilteredElementCollector collector = new FilteredElementCollector(this._doc, this._doc.ActiveView.Id);
ICollection<ElementId> elemIds = collector.ToElementIds();
IList<Element> elems = collector.ToElements();
return elems;
}
#region 创建共享参数
/// <summary>
/// 创建共享参数
/// </summary>
/// <param name="parameterName">共享参数名</param>
/// <param name="parameterType">共享参数类型</param>
/// <param name="canModify">是否可被修改</param>
/// <param name="parameterGroup">共享参数组</param>
/// <param name="element">构件</param>
/// <returns></returns>
public bool CreateShareParam(string parameterName, ParameterType parameterType, BuiltInParameterGroup parameterGroup, Element element)
{
if(element.Category == null)
{
return false;
}
try
{
Autodesk.Revit.ApplicationServices.Application app = this._doc.Application;
DefinitionFile definitionFile = app.OpenSharedParameterFile();
DefinitionGroup definitionGroup = null;
if (!element.Category.AllowsBoundParameters)
{
return false;
}
Category category = element.Category;
try
{
definitionGroup = definitionFile.Groups.Create("MyParameters");
}
catch (Exception)
{
definitionGroup = definitionFile.Groups.get_Item("MyParameters");
}
if (definitionGroup != null)
{
ExternalDefinitionCreationOptions edco = new ExternalDefinitionCreationOptions(parameterName, parameterType);
Definition definition = null;
try
{
definition = definitionGroup.Definitions.Create(edco);
}
catch (Exception)
{
definition = definitionGroup.Definitions.get_Item(edco.Name);
}
var instanceBinding = _doc.ParameterBindings.get_Item(definition) as InstanceBinding;
if (instanceBinding != null)
{
if (!instanceBinding.Categories.Contains(category))
{
instanceBinding.Categories.Insert(category);
}
else
{
_doc.ParameterBindings.ReInsert(definition, instanceBinding);
}
}
else
{
Autodesk.Revit.DB.CategorySet categorySet = app.Create.NewCategorySet();
categorySet.Insert(category);
instanceBinding = app.Create.NewInstanceBinding(categorySet);
_doc.ParameterBindings.Insert(definition, instanceBinding);
}
}
return true;
}
catch (Exception)
{
TaskDialog.Show("Error in creating parameters:", "name:" + parameterName + "\r\n" + "id:" + element.Id.ToString());
throw;
}
}
#endregion
}