From 3202041bd09f39a4edaa0f2df2e9d511b0568a57 Mon Sep 17 00:00:00 2001 From: Nice3point <nice3point@gmail.com> Date: Mon, 30 Dec 2024 22:40:22 +0300 Subject: [PATCH] Update context support for FamilyManager --- .../Descriptors/FamilyManagerDescriptor.cs | 60 +++++++++++-------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/source/RevitLookup/Core/Summary/Descriptors/FamilyManagerDescriptor.cs b/source/RevitLookup/Core/Summary/Descriptors/FamilyManagerDescriptor.cs index 9a801aa5..c61d16d3 100644 --- a/source/RevitLookup/Core/Summary/Descriptors/FamilyManagerDescriptor.cs +++ b/source/RevitLookup/Core/Summary/Descriptors/FamilyManagerDescriptor.cs @@ -24,42 +24,17 @@ namespace RevitLookup.Core.Summary.Descriptors; -public sealed class FamilyManagerDescriptor(FamilyManager familyManager) : Descriptor, IDescriptorResolver +public sealed class FamilyManagerDescriptor(FamilyManager familyManager) : Descriptor, IDescriptorResolver, IDescriptorResolver<Document> { public Func<IVariant>? Resolve(string target, ParameterInfo[] parameters) { return target switch { - nameof(FamilyManager.GetAssociatedFamilyParameter) => ResolveGetAssociatedFamilyParameter, nameof(FamilyManager.IsParameterLockable) => ResolveIsParameterLockable, nameof(FamilyManager.IsParameterLocked) => ResolveIsParameterLocked, _ => null }; - IVariant ResolveGetAssociatedFamilyParameter() - { - var elementTypes = Context.ActiveDocument.GetElements().WhereElementIsElementType(); - var elementInstances = Context.ActiveDocument.GetElements().WhereElementIsNotElementType(); - var elements = elementTypes - .UnionWith(elementInstances) - .ToElements(); - - var variants = Variants.Values<KeyValuePair<Parameter, FamilyParameter>>(elements.Count); - foreach (var element in elements) - { - foreach (Parameter parameter in element.Parameters) - { - var familyParameter = familyManager.GetAssociatedFamilyParameter(parameter); - if (familyParameter is not null) - { - variants.Add(new KeyValuePair<Parameter, FamilyParameter>(parameter, familyParameter)); - } - } - } - - return variants.Consume(); - } - IVariant ResolveIsParameterLockable() { var familyParameters = familyManager.Parameters; @@ -86,4 +61,37 @@ IVariant ResolveIsParameterLocked() return variants.Consume(); } } + + Func<Document, IVariant>? IDescriptorResolver<Document>.Resolve(string target, ParameterInfo[] parameters) + { + return target switch + { + nameof(FamilyManager.GetAssociatedFamilyParameter) => ResolveGetAssociatedFamilyParameter, + _ => null + }; + + IVariant ResolveGetAssociatedFamilyParameter(Document context) + { + var elementTypes = context.GetElements().WhereElementIsElementType(); + var elementInstances = context.GetElements().WhereElementIsNotElementType(); + var elements = elementTypes + .UnionWith(elementInstances) + .ToElements(); + + var variants = Variants.Values<KeyValuePair<Parameter, FamilyParameter>>(elements.Count); + foreach (var element in elements) + { + foreach (Parameter parameter in element.Parameters) + { + var familyParameter = familyManager.GetAssociatedFamilyParameter(parameter); + if (familyParameter is not null) + { + variants.Add(new KeyValuePair<Parameter, FamilyParameter>(parameter, familyParameter)); + } + } + } + + return variants.Consume(); + } + } } \ No newline at end of file