Files
RevitArchive/RevitKits/ParameterManager/ModifyParamValuesHandler.cs
2026-02-23 14:58:05 +08:00

83 lines
3.0 KiB
C#

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<Element> 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 "修改参数值";
}
}
}