using System; using System.Collections.Generic; using System.Linq; using System.Text; using Autodesk.Revit.Attributes; using Autodesk.Revit.DB; using Autodesk.Revit.UI; using Sai.RvWrapper.Shared; namespace SZBIM.StandardTools.ParameterManager { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] public class ModifyParamValuesHandler : IExternalEventHandler { public List ElementsSelected { get; set; } public Parameter ParameterSelected { get; set; } public string Value { get; set; } public void Execute(UIApplication uiapp) { UIDocument uidoc = uiapp.ActiveUIDocument; Document doc = uidoc.Document; StringBuilder sb = new StringBuilder(); doc.Invoke(ts => { foreach (var elem in ElementsSelected) { var param = elem.GetParameters(ParameterSelected.Definition.Name).FirstOrDefault(); if (param == null) { var symbolOrType = doc.GetElement(elem.GetTypeId()); param = symbolOrType.GetParameters(ParameterSelected.Definition.Name).FirstOrDefault(); } try { if (param != null) switch (param.StorageType) { case StorageType.None: break; case StorageType.Integer: param.Set(Convert.ToInt16(Value)); break; case StorageType.Double: param.Set(Convert.ToDouble(Value)); break; case StorageType.String: param.Set(Value); break; case StorageType.ElementId: param.Set(new ElementId(Convert.ToInt16(Value))); break; default: throw new ArgumentOutOfRangeException(); } } catch (Exception e) { if (!sb.ToString().Contains(e.Message)) { sb.AppendLine(e.Message); } } } }); if (!string.IsNullOrEmpty(sb.ToString())) { TaskDialog.Show("错误", sb.ToString()); } else { TaskDialog.Show("提示", "修改完成!"); } } public string GetName() { return "修改参数值"; } } }