Files
SzmediTools/Szmedi.RvKits/Display/OverrideElementsCmd.cs
2025-09-16 16:06:41 +08:00

64 lines
2.4 KiB
C#

using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Nice3point.Revit.Toolkit.External;
using System;
using System.Linq;
namespace Szmedi.RvKits.DisplayTools
{
/// <summary>
/// 修改颜色
/// </summary>
[Transaction(TransactionMode.Manual)]
public class OverrideElementsCmd : ExternalCommand
{
public override void Execute()
{
try
{
var elems = UiDocument.Selection.PickElementsByRectangle(new GenericFilter<Element>(), "请选择元素");
var pat = new FilteredElementCollector(Document)
.OfClass(typeof(FillPatternElement))
.ToElements()
.Cast<FillPatternElement>()
.Where(pattern =>
{
var fill = pattern.GetFillPattern();
return fill.Target == FillPatternTarget.Drafting
&& fill.HostOrientation == FillPatternHostOrientation.ToView
&& fill.IsSolidFill;
})
.FirstOrDefault();
Document.Invoke(
ts =>
{
foreach (var elem in elems)
{
var overrideGraphicSettings = Document.ActiveView.GetElementOverrides(elem.Id);
overrideGraphicSettings.SetSurfaceTransparency(20);
#if REVIT2018
overrideGraphicSettings.SetProjectionFillColor(new Color(24, 100, 24));
overrideGraphicSettings.SetProjectionFillPatternId(pat.Id); //实体填充
#elif REVIT2020 || REVIT2019
overrideGraphicSettings.SetSurfaceForegroundPatternColor(new Color(24, 100, 24));
overrideGraphicSettings.SetSurfaceForegroundPatternId(pat.Id); //实体填充
#endif
Document.ActiveView.SetElementOverrides(elem.Id, overrideGraphicSettings);
}
//var elemIds = elems.Select(e => e.Id).ToList();
//uidoc.doc.ActiveView.HideElements(elemIds);
},
"修改外观颜色"
);
}
catch (Autodesk.Revit.Exceptions.OperationCanceledException) { }
catch (Exception) { }
}
}
}