diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertiesDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertiesDescriptor.cs index 209b2fb5..3386e8d3 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertiesDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertiesDescriptor.cs @@ -25,7 +25,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class AssetPropertiesDescriptor(AssetProperties assetProperties) : Descriptor, IDescriptorResolver +public sealed class AssetPropertiesDescriptor(AssetProperties assetProperties) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertyDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertyDescriptor.cs index 787fd95f..9d0cd1af 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertyDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/AssetPropertyDescriptor.cs @@ -25,7 +25,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class AssetPropertyDescriptor(AssetProperty assetProperty) : Descriptor, IDescriptorResolver +public sealed class AssetPropertyDescriptor(AssetProperty assetProperty) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/BasePointDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/BasePointDescriptor.cs index b5bd331e..d123dcfd 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/BasePointDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/BasePointDescriptor.cs @@ -19,20 +19,27 @@ // (Rights in Technical Data and Computer Software), as applicable. using System.Reflection; -using Nice3point.Revit.Toolkit; using RevitLookup.Core.Contracts; using RevitLookup.Core.Objects; namespace RevitLookup.Core.ComponentModel.Descriptors; -public class BasePointDescriptor(BasePoint basePoint) : Descriptor, IDescriptorResolver +public sealed class BasePointDescriptor : Descriptor, IDescriptorResolver { + private readonly BasePoint _basePoint; + + public BasePointDescriptor(BasePoint basePoint) + { + _basePoint = basePoint; + Name = ElementDescriptor.CreateName(basePoint); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { - nameof(BasePoint.GetSurveyPoint) => ResolveSet.Append(BasePoint.GetSurveyPoint(basePoint.Document)), - nameof(BasePoint.GetProjectBasePoint) => ResolveSet.Append(BasePoint.GetProjectBasePoint(basePoint.Document)), + nameof(BasePoint.GetSurveyPoint) => ResolveSet.Append(BasePoint.GetSurveyPoint(_basePoint.Document)), + nameof(BasePoint.GetProjectBasePoint) => ResolveSet.Append(BasePoint.GetProjectBasePoint(_basePoint.Document)), _ => null }; } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/CategoryDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/CategoryDescriptor.cs index 10881528..c271b3d8 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/CategoryDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/CategoryDescriptor.cs @@ -36,10 +36,9 @@ public CategoryDescriptor(Category category) public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_category, extension => + manager.Register("GetElements", context => { - extension.Name = "GetElements"; - extension.Result = extension.Context + return context #if REVIT2023_OR_GREATER .GetInstances(_category.BuiltInCategory); #else @@ -47,10 +46,9 @@ public void RegisterExtensions(IExtensionManager manager) #endif }); #if !REVIT2023_OR_GREATER - manager.Register(_category, extension => + manager.Register("BuiltInCategory", context => { - extension.Name = "BuiltInCategory"; - extension.Result = (BuiltInCategory) extension.Value.Id.IntegerValue; + return (BuiltInCategory) extension.Value.Id.IntegerValue; }); #endif } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ColorDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ColorDescriptor.cs index 5cec958c..ebe0b2b3 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ColorDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ColorDescriptor.cs @@ -28,89 +28,29 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; public sealed class ColorDescriptor : Descriptor, IDescriptorExtension { private readonly Color _color; - + public ColorDescriptor(Color color) { _color = color; Name = color.IsValid ? $"RGB: {color.Red} {color.Green} {color.Blue}" : "The color represents uninitialized/invalid value"; } - + public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_color, extension => - { - extension.Name = "HEX"; - extension.Result = ColorRepresentationUtils.ColorToHex(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HEX int"; - extension.Result = ColorRepresentationUtils.ColorToHexInteger(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "RGB"; - extension.Result = ColorRepresentationUtils.ColorToRgb(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSL"; - extension.Result = ColorRepresentationUtils.ColorToHsl(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSV"; - extension.Result = ColorRepresentationUtils.ColorToHsv(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "CMYK"; - extension.Result = ColorRepresentationUtils.ColorToCmyk(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSB"; - extension.Result = ColorRepresentationUtils.ColorToHsb(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSI"; - extension.Result = ColorRepresentationUtils.ColorToHsi(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HWB"; - extension.Result = ColorRepresentationUtils.ColorToHwb(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "NCol"; - extension.Result = ColorRepresentationUtils.ColorToNCol(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "CIELAB"; - extension.Result = ColorRepresentationUtils.ColorToCielab(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "CIEXYZ"; - extension.Result = ColorRepresentationUtils.ColorToCieXyz(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "VEC4"; - extension.Result = ColorRepresentationUtils.ColorToFloat(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "Decimal"; - extension.Result = ColorRepresentationUtils.ColorToDecimal(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "Name"; - extension.Result = ColorRepresentationUtils.GetColorName(extension.Value.GetDrawingColor()); - }); + manager.Register("HEX", _ => ColorRepresentationUtils.ColorToHex(_color.GetDrawingColor())); + manager.Register("HEX int", _ => ColorRepresentationUtils.ColorToHexInteger(_color.GetDrawingColor())); + manager.Register("RGB", _ => ColorRepresentationUtils.ColorToRgb(_color.GetDrawingColor())); + manager.Register("HSL", _ => ColorRepresentationUtils.ColorToHsl(_color.GetDrawingColor())); + manager.Register("HSV", _ => ColorRepresentationUtils.ColorToHsv(_color.GetDrawingColor())); + manager.Register("CMYK", _ => ColorRepresentationUtils.ColorToCmyk(_color.GetDrawingColor())); + manager.Register("HSB", _ => ColorRepresentationUtils.ColorToHsb(_color.GetDrawingColor())); + manager.Register("HSI", _ => ColorRepresentationUtils.ColorToHsi(_color.GetDrawingColor())); + manager.Register("HWB", _ => ColorRepresentationUtils.ColorToHwb(_color.GetDrawingColor())); + manager.Register("NCol", _ => ColorRepresentationUtils.ColorToNCol(_color.GetDrawingColor())); + manager.Register("CIELAB", _ => ColorRepresentationUtils.ColorToCielab(_color.GetDrawingColor())); + manager.Register("CIEXYZ", _ => ColorRepresentationUtils.ColorToCieXyz(_color.GetDrawingColor())); + manager.Register("VEC4", _ => ColorRepresentationUtils.ColorToFloat(_color.GetDrawingColor())); + manager.Register("Decimal", _ => ColorRepresentationUtils.ColorToDecimal(_color.GetDrawingColor())); + manager.Register("Name", _ => ColorRepresentationUtils.GetColorName(_color.GetDrawingColor())); } } \ No newline at end of file diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ColorMediaDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ColorMediaDescriptor.cs index 25eaa021..1540bcf9 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ColorMediaDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ColorMediaDescriptor.cs @@ -28,89 +28,29 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; public sealed class ColorMediaDescriptor : Descriptor, IDescriptorExtension { private readonly Color _color; - + public ColorMediaDescriptor(Color color) { _color = color; Name = $"RGB: {color.R} {color.B} {color.B}"; } - + public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_color, extension => - { - extension.Name = "HEX"; - extension.Result = ColorRepresentationUtils.ColorToHex(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HEX int"; - extension.Result = ColorRepresentationUtils.ColorToHexInteger(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "RGB"; - extension.Result = ColorRepresentationUtils.ColorToRgb(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSL"; - extension.Result = ColorRepresentationUtils.ColorToHsl(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSV"; - extension.Result = ColorRepresentationUtils.ColorToHsv(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "CMYK"; - extension.Result = ColorRepresentationUtils.ColorToCmyk(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSB"; - extension.Result = ColorRepresentationUtils.ColorToHsb(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HSI"; - extension.Result = ColorRepresentationUtils.ColorToHsi(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "HWB"; - extension.Result = ColorRepresentationUtils.ColorToHwb(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "NCol"; - extension.Result = ColorRepresentationUtils.ColorToNCol(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "CIELAB"; - extension.Result = ColorRepresentationUtils.ColorToCielab(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "CIEXYZ"; - extension.Result = ColorRepresentationUtils.ColorToCieXyz(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "VEC4"; - extension.Result = ColorRepresentationUtils.ColorToFloat(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "Decimal"; - extension.Result = ColorRepresentationUtils.ColorToDecimal(extension.Value.GetDrawingColor()); - }); - manager.Register(_color, extension => - { - extension.Name = "Name"; - extension.Result = ColorRepresentationUtils.GetColorName(extension.Value.GetDrawingColor()); - }); + manager.Register("HEX", _ => ColorRepresentationUtils.ColorToHex(_color.GetDrawingColor())); + manager.Register("HEX int", _ => ColorRepresentationUtils.ColorToHexInteger(_color.GetDrawingColor())); + manager.Register("RGB", _ => ColorRepresentationUtils.ColorToRgb(_color.GetDrawingColor())); + manager.Register("HSL", _ => ColorRepresentationUtils.ColorToHsl(_color.GetDrawingColor())); + manager.Register("HSV", _ => ColorRepresentationUtils.ColorToHsv(_color.GetDrawingColor())); + manager.Register("CMYK", _ => ColorRepresentationUtils.ColorToCmyk(_color.GetDrawingColor())); + manager.Register("HSB", _ => ColorRepresentationUtils.ColorToHsb(_color.GetDrawingColor())); + manager.Register("HSI", _ => ColorRepresentationUtils.ColorToHsi(_color.GetDrawingColor())); + manager.Register("HWB", _ => ColorRepresentationUtils.ColorToHwb(_color.GetDrawingColor())); + manager.Register("NCol", _ => ColorRepresentationUtils.ColorToNCol(_color.GetDrawingColor())); + manager.Register("CIELAB", _ => ColorRepresentationUtils.ColorToCielab(_color.GetDrawingColor())); + manager.Register("CIEXYZ", _ => ColorRepresentationUtils.ColorToCieXyz(_color.GetDrawingColor())); + manager.Register("VEC4", _ => ColorRepresentationUtils.ColorToFloat(_color.GetDrawingColor())); + manager.Register("Decimal", _ => ColorRepresentationUtils.ColorToDecimal(_color.GetDrawingColor())); + manager.Register("Name", _ => ColorRepresentationUtils.GetColorName(_color.GetDrawingColor())); } } \ No newline at end of file diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ConnectorManagerDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ConnectorManagerDescriptor.cs index 3638b4ef..8dc9bf94 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ConnectorManagerDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ConnectorManagerDescriptor.cs @@ -24,7 +24,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class ConnectorManagerDescriptor(ConnectorManager connectorManager) : Descriptor, IDescriptorResolver +public sealed class ConnectorManagerDescriptor(ConnectorManager connectorManager) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/CurtainGridDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/CurtainGridDescriptor.cs index 05411642..832c02b2 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/CurtainGridDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/CurtainGridDescriptor.cs @@ -24,7 +24,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class CurtainGridDescriptor(CurtainGrid curtainGrid) : Descriptor, IDescriptorResolver +public sealed class CurtainGridDescriptor(CurtainGrid curtainGrid) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/CurveElementDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/CurveElementDescriptor.cs index 67e82340..d855109b 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/CurveElementDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/CurveElementDescriptor.cs @@ -24,8 +24,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class CurveElementDescriptor(CurveElement curveElement) : Descriptor, IDescriptorResolver +public sealed class CurveElementDescriptor : Descriptor, IDescriptorResolver { + private readonly CurveElement _curveElement; + + public CurveElementDescriptor(CurveElement curveElement) + { + _curveElement = curveElement; + Name = ElementDescriptor.CreateName(curveElement); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -41,8 +49,8 @@ public ResolveSet Resolve(Document context, string target, ParameterInfo[] param ResolveSet ResolveAdjoinedCurveElements() { var resolveSet = new ResolveSet(2); - var startCurveElements = curveElement.GetAdjoinedCurveElements(0); - var endCurveElements = curveElement.GetAdjoinedCurveElements(1); + var startCurveElements = _curveElement.GetAdjoinedCurveElements(0); + var endCurveElements = _curveElement.GetAdjoinedCurveElements(1); return resolveSet .AppendVariant(startCurveElements, "Point 0") @@ -52,8 +60,8 @@ ResolveSet ResolveAdjoinedCurveElements() ResolveSet ResolveHasTangentLocks() { var resolveSet = new ResolveSet(2); - var startHasTangentLocks = curveElement.HasTangentLocks(0); - var endHasTangentLocks = curveElement.HasTangentLocks(1); + var startHasTangentLocks = _curveElement.HasTangentLocks(0); + var endHasTangentLocks = _curveElement.HasTangentLocks(1); return resolveSet .AppendVariant(startHasTangentLocks, $"Point 0: {startHasTangentLocks}") @@ -62,23 +70,23 @@ ResolveSet ResolveHasTangentLocks() ResolveSet ResolveTangentLock() { - var startCurveElements = curveElement.GetAdjoinedCurveElements(0); - var endCurveElements = curveElement.GetAdjoinedCurveElements(1); + var startCurveElements = _curveElement.GetAdjoinedCurveElements(0); + var endCurveElements = _curveElement.GetAdjoinedCurveElements(1); var resolveSummary = new ResolveSet(startCurveElements.Count + endCurveElements.Count); foreach (var id in startCurveElements) { - if (!curveElement.HasTangentJoin(0, id)) continue; + if (!_curveElement.HasTangentJoin(0, id)) continue; - var result = curveElement.GetTangentLock(0, id); + var result = _curveElement.GetTangentLock(0, id); resolveSummary.AppendVariant(result, $"Point 0, {id}: {result}"); } foreach (var id in endCurveElements) { - if (!curveElement.HasTangentJoin(1, id)) continue; + if (!_curveElement.HasTangentJoin(1, id)) continue; - var result = curveElement.GetTangentLock(1, id); + var result = _curveElement.GetTangentLock(1, id); resolveSummary.AppendVariant(result, $"Point 1, {id}: {result}"); } @@ -87,19 +95,19 @@ ResolveSet ResolveTangentLock() ResolveSet ResolveTangentJoin() { - var startCurveElements = curveElement.GetAdjoinedCurveElements(0); - var endCurveElements = curveElement.GetAdjoinedCurveElements(1); + var startCurveElements = _curveElement.GetAdjoinedCurveElements(0); + var endCurveElements = _curveElement.GetAdjoinedCurveElements(1); var resolveSummary = new ResolveSet(startCurveElements.Count + endCurveElements.Count); foreach (var id in startCurveElements) { - var result = curveElement.HasTangentJoin(0, id); + var result = _curveElement.HasTangentJoin(0, id); resolveSummary.AppendVariant(result, $"Point 0, {id}: {result}"); } foreach (var id in endCurveElements) { - var result = curveElement.HasTangentJoin(1, id); + var result = _curveElement.HasTangentJoin(1, id); resolveSummary.AppendVariant(result, $"Point 1, {id}: {result}"); } @@ -108,19 +116,19 @@ ResolveSet ResolveTangentJoin() ResolveSet ResolveIsAdjoinedCurveElement() { - var startCurveElements = curveElement.GetAdjoinedCurveElements(0); - var endCurveElements = curveElement.GetAdjoinedCurveElements(1); + var startCurveElements = _curveElement.GetAdjoinedCurveElements(0); + var endCurveElements = _curveElement.GetAdjoinedCurveElements(1); var resolveSummary = new ResolveSet(startCurveElements.Count + endCurveElements.Count); foreach (var id in startCurveElements) { - var result = curveElement.IsAdjoinedCurveElement(0, id); + var result = _curveElement.IsAdjoinedCurveElement(0, id); resolveSummary.AppendVariant(result, $"Point 0, {id}: {result}"); } foreach (var id in endCurveElements) { - var result = curveElement.IsAdjoinedCurveElement(1, id); + var result = _curveElement.IsAdjoinedCurveElement(1, id); resolveSummary.AppendVariant(result, $"Point 1, {id}: {result}"); } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs index 93d04332..7a3cfba6 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs @@ -24,9 +24,17 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class DatumPlaneDescriptor(DatumPlane datumPlane) : ElementDescriptor(datumPlane), IDescriptorResolver +public sealed class DatumPlaneDescriptor : Descriptor, IDescriptorResolver { - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + private readonly DatumPlane _datumPlane; + + public DatumPlaneDescriptor(DatumPlane datumPlane) + { + _datumPlane = datumPlane; + Name = ElementDescriptor.CreateName(datumPlane); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { @@ -47,7 +55,7 @@ ResolveSet ResolveCanBeVisibleInView() foreach (var view in views) { - var result = datumPlane.CanBeVisibleInView(view); + var result = _datumPlane.CanBeVisibleInView(view); resolveSummary.AppendVariant(result, $"{view.Name}: {result}"); } @@ -58,8 +66,8 @@ ResolveSet ResolveDatumExtentTypeInView() { var resolveSummary = new ResolveSet(2); - var resultEnd0 = datumPlane.GetDatumExtentTypeInView(DatumEnds.End0, context.ActiveView); - var resultEnd1 = datumPlane.GetDatumExtentTypeInView(DatumEnds.End1, context.ActiveView); + var resultEnd0 = _datumPlane.GetDatumExtentTypeInView(DatumEnds.End0, context.ActiveView); + var resultEnd1 = _datumPlane.GetDatumExtentTypeInView(DatumEnds.End1, context.ActiveView); resolveSummary.AppendVariant(resultEnd0, $"End 0, Active view: {resultEnd0}"); resolveSummary.AppendVariant(resultEnd1, $"End 1, Active view: {resultEnd1}"); @@ -70,8 +78,8 @@ ResolveSet ResolveCurvesInView() { var resolveSummary = new ResolveSet(2); - resolveSummary.AppendVariant(datumPlane.GetCurvesInView(DatumExtentType.Model, context.ActiveView), "Model, Active view"); - resolveSummary.AppendVariant(datumPlane.GetCurvesInView(DatumExtentType.ViewSpecific, context.ActiveView), "ViewSpecific, Active view"); + resolveSummary.AppendVariant(_datumPlane.GetCurvesInView(DatumExtentType.Model, context.ActiveView), "Model, Active view"); + resolveSummary.AppendVariant(_datumPlane.GetCurvesInView(DatumExtentType.ViewSpecific, context.ActiveView), "ViewSpecific, Active view"); return resolveSummary; } @@ -80,8 +88,8 @@ ResolveSet ResolveLeader() { var resolveSummary = new ResolveSet(2); - resolveSummary.AppendVariant(datumPlane.GetLeader(DatumEnds.End0, context.ActiveView), "End 0, Active view"); - resolveSummary.AppendVariant(datumPlane.GetLeader(DatumEnds.End1, context.ActiveView), "End 1, Active view"); + resolveSummary.AppendVariant(_datumPlane.GetLeader(DatumEnds.End0, context.ActiveView), "End 0, Active view"); + resolveSummary.AppendVariant(_datumPlane.GetLeader(DatumEnds.End1, context.ActiveView), "End 1, Active view"); return resolveSummary; } @@ -93,9 +101,9 @@ ResolveSet ResolvePropagationViews() foreach (var view in views) { - if (!datumPlane.CanBeVisibleInView(view)) continue; + if (!_datumPlane.CanBeVisibleInView(view)) continue; - var result = datumPlane.GetPropagationViews(view); + var result = _datumPlane.GetPropagationViews(view); resolveSummary.AppendVariant(result, view.Name); } @@ -106,8 +114,8 @@ ResolveSet ResolveHasBubbleInView() { var resolveSummary = new ResolveSet(2); - var resultEnd0 = datumPlane.HasBubbleInView(DatumEnds.End0, context.ActiveView); - var resultEnd1 = datumPlane.HasBubbleInView(DatumEnds.End1, context.ActiveView); + var resultEnd0 = _datumPlane.HasBubbleInView(DatumEnds.End0, context.ActiveView); + var resultEnd1 = _datumPlane.HasBubbleInView(DatumEnds.End1, context.ActiveView); resolveSummary.AppendVariant(resultEnd0, $"End 0, Active view: {resultEnd0}"); resolveSummary.AppendVariant(resultEnd1, $"End 1, Active view: {resultEnd1}"); @@ -118,8 +126,8 @@ ResolveSet ResolveBubbleVisibleInView() { var resolveSummary = new ResolveSet(2); - var resultEnd0 = datumPlane.IsBubbleVisibleInView(DatumEnds.End0, context.ActiveView); - var resultEnd1 = datumPlane.IsBubbleVisibleInView(DatumEnds.End1, context.ActiveView); + var resultEnd0 = _datumPlane.IsBubbleVisibleInView(DatumEnds.End0, context.ActiveView); + var resultEnd1 = _datumPlane.IsBubbleVisibleInView(DatumEnds.End1, context.ActiveView); resolveSummary.AppendVariant(resultEnd0, $"End 0, Active view: {resultEnd0}"); resolveSummary.AppendVariant(resultEnd1, $"End 1, Active view: {resultEnd1}"); diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/DefinitionDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/DefinitionDescriptor.cs index a65b49d6..4b95f092 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/DefinitionDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/DefinitionDescriptor.cs @@ -27,13 +27,15 @@ public sealed class DefinitionDescriptor : Descriptor, IDescriptorCollector { public DefinitionDescriptor(Definition definition) { - if (definition is InternalDefinition internalDefinition) - if (internalDefinition.BuiltInParameter != BuiltInParameter.INVALID) - { - Name = internalDefinition.BuiltInParameter.ToString(); - return; - } - - Name = definition.Name; + Name = CreateName(definition); + } + + private static string CreateName(Definition definition) + { + return definition switch + { + InternalDefinition internalDefinition when internalDefinition.BuiltInParameter != BuiltInParameter.INVALID => internalDefinition.BuiltInParameter.ToString(), + _ => definition.Name + }; } } \ No newline at end of file diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ElementDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ElementDescriptor.cs index cd44442c..e4b398da 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ElementDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ElementDescriptor.cs @@ -31,30 +31,85 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class ElementDescriptor : Descriptor, IDescriptorResolver, IDescriptorConnector, IDescriptorExtension +public sealed class ElementDescriptor : Descriptor, IDescriptorResolver, IDescriptorConnector, IDescriptorExtension { private readonly Element _element; - + public ElementDescriptor(Element element) { _element = element; - Name = element.Name == string.Empty ? $"ID{element.Id}" : $"{element.Name}, ID{element.Id}"; + Name = CreateName(element); } - + + public void RegisterMenu(ContextMenu contextMenu) + { + if (_element is ElementType) return; + + contextMenu.AddMenuItem() + .SetHeader("Show element") + .SetCommand(_element, element => + { + Application.ActionEventHandler.Raise(_ => + { + if (Context.UiDocument is null) return; + if (!element.IsValidObject) return; + Context.UiDocument.ShowElements(element); + Context.UiDocument.Selection.SetElementIds([element.Id]); + }); + }) + .SetShortcut(ModifierKeys.Alt, Key.F7); + + contextMenu.AddMenuItem() + .SetHeader("Delete") + .SetCommand(_element, async element => + { + if (Context.UiDocument is null) return; + var context = (ISnoopViewModel) contextMenu.DataContext; + + try + { + await Application.AsyncEventHandler.RaiseAsync(_ => + { + var transaction = new Transaction(element.Document); + transaction.Start($"Delete {element.Name}"); + + try + { + element.Document.Delete(element.Id); + transaction.Commit(); + + if (transaction.GetStatus() == TransactionStatus.RolledBack) throw new OperationCanceledException("Element deletion cancelled by user"); + } + catch + { + if (!transaction.HasEnded()) transaction.RollBack(); + throw; + } + }); + + var placementTarget = (FrameworkElement) contextMenu.PlacementTarget; + context.RemoveObject(placementTarget.DataContext); + } + catch (OperationCanceledException exception) + { + var notificationService = context.ServiceProvider.GetService(); + notificationService.ShowWarning("Element deletion error", exception.Message); + } + catch (Exception exception) + { + var notificationService = context.ServiceProvider.GetService(); + notificationService.ShowError("Element deletion error", exception.Message); + } + }) + .SetShortcut(Key.Delete); + } + public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_element, extension => - { - extension.Name = nameof(ElementExtensions.CanBeMirrored); - extension.Result = extension.Value.CanBeMirrored(); - }); - manager.Register(_element, extension => - { - extension.Name = nameof(GeometryExtensions.GetJoinedElements); - extension.Result = extension.Value.GetJoinedElements(); - }); + manager.Register(nameof(ElementExtensions.CanBeMirrored), _ => _element.CanBeMirrored()); + manager.Register(nameof(GeometryExtensions.GetJoinedElements), _ => _element.GetJoinedElements()); } - + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -129,47 +184,47 @@ public ResolveSet Resolve(Document context, string target, ParameterInfo[] param nameof(Element.GetEntity) => ResolveGetEntity(), _ => null }; - + ResolveSet ResolveGetMaterialArea() { var geometryMaterials = _element.GetMaterialIds(false); var paintMaterials = _element.GetMaterialIds(true); - + var capacity = geometryMaterials.Count + paintMaterials.Count; var resolveSummary = new ResolveSet(capacity); if (capacity == 0) return resolveSummary; - + foreach (var materialId in geometryMaterials) { var area = _element.GetMaterialArea(materialId, false); resolveSummary.AppendVariant(new KeyValuePair(materialId, area)); } - + foreach (var materialId in paintMaterials) { var area = _element.GetMaterialArea(materialId, true); resolveSummary.AppendVariant(new KeyValuePair(materialId, area)); } - + return resolveSummary; } - + ResolveSet ResolveGetMaterialVolume() { var geometryMaterials = _element.GetMaterialIds(false); - + var resolveSummary = new ResolveSet(geometryMaterials.Count); if (geometryMaterials.Count == 0) return resolveSummary; - + foreach (var materialId in geometryMaterials) { var area = _element.GetMaterialVolume(materialId); resolveSummary.AppendVariant(new KeyValuePair(materialId, area)); } - + return resolveSummary; } - + ResolveSet ResolveGetEntity() { var resolveSummary = new ResolveSet(); @@ -179,74 +234,16 @@ ResolveSet ResolveGetEntity() if (!schema.ReadAccessGranted()) continue; var entity = _element.GetEntity(schema); if (!entity.IsValid()) continue; - + resolveSummary.AppendVariant(entity, schema.SchemaName); } - + return resolveSummary; } } - public void RegisterMenu(ContextMenu contextMenu) + public static string CreateName(Element element) { - if (_element is ElementType) return; - - contextMenu.AddMenuItem() - .SetHeader("Show element") - .SetCommand(_element, element => - { - Application.ActionEventHandler.Raise(_ => - { - if (Context.UiDocument is null) return; - if (!element.IsValidObject) return; - Context.UiDocument.ShowElements(element); - Context.UiDocument.Selection.SetElementIds([element.Id]); - }); - }) - .SetShortcut(ModifierKeys.Alt, Key.F7); - - contextMenu.AddMenuItem() - .SetHeader("Delete") - .SetCommand(_element, async element => - { - if (Context.UiDocument is null) return; - var context = (ISnoopViewModel) contextMenu.DataContext; - - try - { - await Application.AsyncEventHandler.RaiseAsync(_ => - { - var transaction = new Transaction(element.Document); - transaction.Start($"Delete {element.Name}"); - - try - { - element.Document.Delete(element.Id); - transaction.Commit(); - - if (transaction.GetStatus() == TransactionStatus.RolledBack) throw new OperationCanceledException("Element deletion cancelled by user"); - } - catch - { - if (!transaction.HasEnded()) transaction.RollBack(); - throw; - } - }); - - var placementTarget = (FrameworkElement) contextMenu.PlacementTarget; - context.RemoveObject(placementTarget.DataContext); - } - catch (OperationCanceledException exception) - { - var notificationService = context.ServiceProvider.GetService(); - notificationService.ShowWarning("Element deletion error", exception.Message); - } - catch (Exception exception) - { - var notificationService = context.ServiceProvider.GetService(); - notificationService.ShowError("Element deletion error", exception.Message); - } - }) - .SetShortcut(Key.Delete); + return element.Name == string.Empty ? $"ID{element.Id}" : $"{element.Name}, ID{element.Id}"; } } \ No newline at end of file diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ElevationMarkerDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ElevationMarkerDescriptor.cs index ed275a1f..d1ba2701 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ElevationMarkerDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ElevationMarkerDescriptor.cs @@ -24,8 +24,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class ElevationMarkerDescriptor(ElevationMarker elevationMarker) : Descriptor, IDescriptorResolver +public sealed class ElevationMarkerDescriptor : Descriptor, IDescriptorResolver { + private readonly ElevationMarker _elevationMarker; + + public ElevationMarkerDescriptor(ElevationMarker elevationMarker) + { + _elevationMarker = elevationMarker; + Name = ElementDescriptor.CreateName(elevationMarker); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -37,10 +45,10 @@ public ResolveSet Resolve(Document context, string target, ParameterInfo[] param ResolveSet ResolveIndex() { - var resolveSummary = new ResolveSet(elevationMarker.MaximumViewCount); - for (var i = 0; i < elevationMarker.MaximumViewCount; i++) + var resolveSummary = new ResolveSet(_elevationMarker.MaximumViewCount); + for (var i = 0; i < _elevationMarker.MaximumViewCount; i++) { - var result = elevationMarker.IsAvailableIndex(i); + var result = _elevationMarker.IsAvailableIndex(i); resolveSummary.AppendVariant(result, $"Index {i}: {result}"); } return resolveSummary; @@ -49,11 +57,11 @@ ResolveSet ResolveIndex() ResolveSet ResolveViewId() { var resolveSummary = new ResolveSet(); - for (var i = 0; i < elevationMarker.MaximumViewCount; i++) + for (var i = 0; i < _elevationMarker.MaximumViewCount; i++) { - if (!elevationMarker.IsAvailableIndex(i)) + if (!_elevationMarker.IsAvailableIndex(i)) { - var result = elevationMarker.GetViewId(i); + var result = _elevationMarker.GetViewId(i); var element = result.ToElement(context); var name = element!.Name == string.Empty ? $"ID{element.Id}" : $"{element.Name}, ID{element.Id}"; resolveSummary.AppendVariant(result, $"Index {i}: {name}"); diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/FamilyInstanceDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/FamilyInstanceDescriptor.cs index 98b3eea3..00fa7931 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/FamilyInstanceDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/FamilyInstanceDescriptor.cs @@ -25,25 +25,33 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public sealed class FamilyInstanceDescriptor(FamilyInstance familyInstance) : ElementDescriptor(familyInstance), IDescriptorResolver +public sealed class FamilyInstanceDescriptor : Descriptor, IDescriptorResolver { - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + private readonly FamilyInstance _familyInstance; + + public FamilyInstanceDescriptor(FamilyInstance familyInstance) + { + _familyInstance = familyInstance; + Name = ElementDescriptor.CreateName(familyInstance); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { nameof(FamilyInstance.GetReferences) => new ResolveSet(11) - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.Back), "Back") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.Bottom), "Bottom") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.StrongReference), "Strong reference") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.WeakReference), "Weak reference") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.Front), "Front") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.Left), "Left") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.Right), "Right") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.Top), "Top") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.CenterElevation), "Center elevation") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.CenterFrontBack), "Center front back") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.CenterLeftRight), "Center left right") - .AppendVariant(familyInstance.GetReferences(FamilyInstanceReferenceType.NotAReference), "Not a reference"), + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.Back), "Back") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.Bottom), "Bottom") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.StrongReference), "Strong reference") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.WeakReference), "Weak reference") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.Front), "Front") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.Left), "Left") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.Right), "Right") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.Top), "Top") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.CenterElevation), "Center elevation") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.CenterFrontBack), "Center front back") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.CenterLeftRight), "Center left right") + .AppendVariant(_familyInstance.GetReferences(FamilyInstanceReferenceType.NotAReference), "Not a reference"), "Room" when parameters.Length == 1 => ResolveGetRoom(), "FromRoom" when parameters.Length == 1 => ResolveFromRoom(), "ToRoom" when parameters.Length == 1 => ResolveToRoom(), @@ -53,10 +61,10 @@ public sealed class FamilyInstanceDescriptor(FamilyInstance familyInstance) : El ResolveSet ResolveGetRoom() { - var resolveSummary = new ResolveSet(familyInstance.Document.Phases.Size); - foreach (Phase phase in familyInstance.Document.Phases) + var resolveSummary = new ResolveSet(_familyInstance.Document.Phases.Size); + foreach (Phase phase in _familyInstance.Document.Phases) { - resolveSummary.AppendVariant(familyInstance.get_Room(phase), phase.Name); + resolveSummary.AppendVariant(_familyInstance.get_Room(phase), phase.Name); } return resolveSummary; @@ -64,10 +72,10 @@ ResolveSet ResolveGetRoom() ResolveSet ResolveFromRoom() { - var resolveSummary = new ResolveSet(familyInstance.Document.Phases.Size); - foreach (Phase phase in familyInstance.Document.Phases) + var resolveSummary = new ResolveSet(_familyInstance.Document.Phases.Size); + foreach (Phase phase in _familyInstance.Document.Phases) { - resolveSummary.AppendVariant(familyInstance.get_FromRoom(phase), phase.Name); + resolveSummary.AppendVariant(_familyInstance.get_FromRoom(phase), phase.Name); } return resolveSummary; @@ -75,10 +83,10 @@ ResolveSet ResolveFromRoom() ResolveSet ResolveToRoom() { - var resolveSummary = new ResolveSet(familyInstance.Document.Phases.Size); - foreach (Phase phase in familyInstance.Document.Phases) + var resolveSummary = new ResolveSet(_familyInstance.Document.Phases.Size); + foreach (Phase phase in _familyInstance.Document.Phases) { - resolveSummary.AppendVariant(familyInstance.get_ToRoom(phase), phase.Name); + resolveSummary.AppendVariant(_familyInstance.get_ToRoom(phase), phase.Name); } return resolveSummary; @@ -87,47 +95,47 @@ ResolveSet ResolveToRoom() ResolveSet ResolveOriginalGeometry() { return new ResolveSet(10) - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { View = Context.ActiveView, }), "Active view") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { View = Context.ActiveView, IncludeNonVisibleObjects = true, }), "Active view, including non-visible objects") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Coarse, }), "Model, coarse detail level") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Fine, }), "Model, fine detail level") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Medium, }), "Model, medium detail level") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Undefined, }), "Model, undefined detail level") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Coarse, IncludeNonVisibleObjects = true, }), "Model, coarse detail level, including non-visible objects") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Fine, IncludeNonVisibleObjects = true, }), "Model, fine detail level, including non-visible objects") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Medium, IncludeNonVisibleObjects = true, }), "Model, medium detail level, including non-visible objects") - .AppendVariant(familyInstance.GetOriginalGeometry(new Options + .AppendVariant(_familyInstance.GetOriginalGeometry(new Options { DetailLevel = ViewDetailLevel.Undefined, IncludeNonVisibleObjects = true, diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ForgeTypeIdDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ForgeTypeIdDescriptor.cs index 0526c2e7..e17eb9f6 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ForgeTypeIdDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ForgeTypeIdDescriptor.cs @@ -45,69 +45,21 @@ public ResolveSet Resolve(Document context, string target, ParameterInfo[] param public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_typeId, extension => - { - extension.Name = "ToUnitLabel"; - extension.Result = extension.Value.ToUnitLabel(); - }); - manager.Register(_typeId, extension => - { - extension.Name = "ToSpecLabel"; - extension.Result = extension.Value.ToSpecLabel(); - }); - manager.Register(_typeId, extension => - { - extension.Name = "ToSymbolLabel"; - extension.Result = extension.Value.ToSymbolLabel(); - }); + manager.Register("ToUnitLabel", _ => _typeId.ToUnitLabel()); + manager.Register("ToSpecLabel", _ => _typeId.ToSpecLabel()); + manager.Register("ToSymbolLabel", _ => _typeId.ToSymbolLabel()); #if REVIT2022_OR_GREATER - manager.Register(_typeId, extension => - { - extension.Name = "ToGroupLabel"; - extension.Result = extension.Value.ToGroupLabel(); - }); - manager.Register(_typeId, extension => - { - extension.Name = "ToDisciplineLabel"; - extension.Result = extension.Value.ToDisciplineLabel(); - }); - manager.Register(_typeId, extension => - { - extension.Name = "ToParameterLabel"; - extension.Result = extension.Value.ToParameterLabel(); - }); + manager.Register("ToGroupLabel", _ => _typeId.ToGroupLabel()); + manager.Register("ToDisciplineLabel", _ => _typeId.ToDisciplineLabel()); + manager.Register("ToParameterLabel", _ => _typeId.ToParameterLabel()); #endif - manager.Register(_typeId, extension => - { - extension.Name = "IsUnit"; - extension.Result = UnitUtils.IsUnit(extension.Value); - }); - manager.Register(_typeId, extension => - { - extension.Name = "IsSymbol"; - extension.Result = UnitUtils.IsSymbol(extension.Value); - }); + manager.Register("IsUnit", _ => UnitUtils.IsUnit(_typeId)); + manager.Register("IsSymbol", _ => UnitUtils.IsSymbol(_typeId)); #if REVIT2022_OR_GREATER - manager.Register(_typeId, extension => - { - extension.Name = "IsSpec"; - extension.Result = SpecUtils.IsSpec(extension.Value); - }); - manager.Register(_typeId, extension => - { - extension.Name = "IsMeasurableSpec"; - extension.Result = UnitUtils.IsMeasurableSpec(extension.Value); - }); - manager.Register(_typeId, extension => - { - extension.Name = "IsBuiltInParameter"; - extension.Result = ParameterUtils.IsBuiltInParameter(extension.Value); - }); - manager.Register(_typeId, extension => - { - extension.Name = "IsBuiltInGroup"; - extension.Result = ParameterUtils.IsBuiltInGroup(extension.Value); - }); + manager.Register("IsSpec", _ => SpecUtils.IsSpec(_typeId)); + manager.Register("IsMeasurableSpec", _ => UnitUtils.IsMeasurableSpec(_typeId)); + manager.Register("IsBuiltInParameter", _ => ParameterUtils.IsBuiltInParameter(_typeId)); + manager.Register("IsBuiltInGroup", _ => ParameterUtils.IsBuiltInGroup(_typeId)); #endif } } \ No newline at end of file diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/HostObjectDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/HostObjectDescriptor.cs index 22e17ad5..ede9888a 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/HostObjectDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/HostObjectDescriptor.cs @@ -24,34 +24,30 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public sealed class HostObjectDescriptor(HostObject hostObject) : ElementDescriptor(hostObject), IDescriptorExtension, IDescriptorResolver +public sealed class HostObjectDescriptor : Descriptor, IDescriptorExtension, IDescriptorResolver { - public new void RegisterExtensions(IExtensionManager manager) + private readonly HostObject _hostObject; + + public HostObjectDescriptor(HostObject hostObject) { - manager.Register(hostObject, extension => - { - extension.Name = nameof(HostExtensions.GetBottomFaces); - extension.Result = extension.Value.GetBottomFaces(); - }); - manager.Register(hostObject, extension => - { - extension.Name = nameof(HostExtensions.GetTopFaces); - extension.Result = extension.Value.GetTopFaces(); - }); - manager.Register(hostObject, extension => - { - extension.Name = nameof(HostExtensions.GetSideFaces); - extension.Result = new ResolveSet(2) - .AppendVariant(extension.Value.GetSideFaces(ShellLayerType.Interior), "Interior") - .AppendVariant(extension.Value.GetSideFaces(ShellLayerType.Exterior), "Exterior"); - }); + _hostObject = hostObject; + Name = ElementDescriptor.CreateName(hostObject); } - - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + + public void RegisterExtensions(IExtensionManager manager) + { + manager.Register(nameof(HostExtensions.GetBottomFaces), _ => _hostObject.GetBottomFaces()); + manager.Register(nameof(HostExtensions.GetTopFaces), _ => _hostObject.GetTopFaces()); + manager.Register(nameof(HostExtensions.GetSideFaces), _ => new ResolveSet(2) + .AppendVariant(_hostObject.GetSideFaces(ShellLayerType.Interior), "Interior") + .AppendVariant(_hostObject.GetSideFaces(ShellLayerType.Exterior), "Exterior")); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { - nameof(HostObject.FindInserts) => ResolveSet.Append(hostObject.FindInserts(true, true, true, true)), + nameof(HostObject.FindInserts) => ResolveSet.Append(_hostObject.FindInserts(true, true, true, true)), _ => null }; } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/IndependentTagDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/IndependentTagDescriptor.cs index c80764ae..7ec6267b 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/IndependentTagDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/IndependentTagDescriptor.cs @@ -27,9 +27,17 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public sealed class IndependentTagDescriptor(IndependentTag tag) : ElementDescriptor(tag), IDescriptorResolver +public sealed class IndependentTagDescriptor : Descriptor, IDescriptorResolver { - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + private readonly IndependentTag _tag; + + public IndependentTagDescriptor(IndependentTag tag) + { + _tag = tag; + Name = ElementDescriptor.CreateName(tag); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { @@ -56,7 +64,7 @@ ResolveSet ResolveLeaderEndCondition() foreach (LeaderEndCondition condition in conditions) { - var result = tag.CanLeaderEndConditionBeAssigned(condition); + var result = _tag.CanLeaderEndConditionBeAssigned(condition); resolveSummary.AppendVariant(result, $"{condition}: {result}"); } @@ -65,17 +73,17 @@ ResolveSet ResolveLeaderEndCondition() #if REVIT2022_OR_GREATER ResolveSet ResolveLeaderElbow() { - var references = tag.GetTaggedReferences(); + var references = _tag.GetTaggedReferences(); var resolveSummary = new ResolveSet(references.Count); foreach (var reference in references) { #if REVIT2023_OR_GREATER - if (!tag.IsLeaderVisible(reference)) continue; + if (!_tag.IsLeaderVisible(reference)) continue; #endif - if (!tag.HasLeaderElbow(reference)) continue; + if (!_tag.HasLeaderElbow(reference)) continue; - resolveSummary.AppendVariant(tag.GetLeaderElbow(reference)); + resolveSummary.AppendVariant(_tag.GetLeaderElbow(reference)); } return resolveSummary; @@ -83,21 +91,21 @@ ResolveSet ResolveLeaderElbow() ResolveSet ResolveLeaderEnd() { - if (tag.LeaderEndCondition == LeaderEndCondition.Attached) + if (_tag.LeaderEndCondition == LeaderEndCondition.Attached) { return new ResolveSet(); } - var references = tag.GetTaggedReferences(); + var references = _tag.GetTaggedReferences(); var resolveSummary = new ResolveSet(references.Count); foreach (var reference in references) { #if REVIT2023_OR_GREATER - if (!tag.IsLeaderVisible(reference)) continue; + if (!_tag.IsLeaderVisible(reference)) continue; #endif - resolveSummary.AppendVariant(tag.GetLeaderEnd(reference)); + resolveSummary.AppendVariant(_tag.GetLeaderEnd(reference)); } return resolveSummary; @@ -105,15 +113,15 @@ ResolveSet ResolveLeaderEnd() ResolveSet ResolveHasLeaderElbow() { - var references = tag.GetTaggedReferences(); + var references = _tag.GetTaggedReferences(); var resolveSummary = new ResolveSet(references.Count); foreach (var reference in references) { #if REVIT2023_OR_GREATER - if (!tag.IsLeaderVisible(reference)) continue; + if (!_tag.IsLeaderVisible(reference)) continue; #endif - resolveSummary.AppendVariant(tag.HasLeaderElbow(reference)); + resolveSummary.AppendVariant(_tag.HasLeaderElbow(reference)); } return resolveSummary; @@ -123,12 +131,12 @@ ResolveSet ResolveHasLeaderElbow() ResolveSet ResolveIsLeaderVisible() { - var references = tag.GetTaggedReferences(); + var references = _tag.GetTaggedReferences(); var resolveSummary = new ResolveSet(references.Count); foreach (var reference in references) { - resolveSummary.AppendVariant(tag.IsLeaderVisible(reference)); + resolveSummary.AppendVariant(_tag.IsLeaderVisible(reference)); } return resolveSummary; diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/InternalOriginDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/InternalOriginDescriptor.cs index e39ae791..ee10045e 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/InternalOriginDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/InternalOriginDescriptor.cs @@ -25,13 +25,21 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class InternalOriginDescriptor(InternalOrigin internalOrigin) : Descriptor, IDescriptorResolver +public sealed class InternalOriginDescriptor : Descriptor, IDescriptorResolver { + private readonly InternalOrigin _internalOrigin; + + public InternalOriginDescriptor(InternalOrigin internalOrigin) + { + _internalOrigin = internalOrigin; + Name = ElementDescriptor.CreateName(internalOrigin); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { - nameof(InternalOrigin.Get) => ResolveSet.Append(InternalOrigin.Get(internalOrigin.Document)), + nameof(InternalOrigin.Get) => ResolveSet.Append(InternalOrigin.Get(_internalOrigin.Document)), _ => null }; } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/LocationCurveDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/LocationCurveDescriptor.cs index 792a5f63..820ba4d0 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/LocationCurveDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/LocationCurveDescriptor.cs @@ -24,7 +24,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class LocationCurveDescriptor(LocationCurve locationCurve) : Descriptor, IDescriptorResolver +public sealed class LocationCurveDescriptor(LocationCurve locationCurve) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/MepSystemDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/MepSystemDescriptor.cs index 5278c799..6fbbc3a1 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/MepSystemDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/MepSystemDescriptor.cs @@ -24,9 +24,17 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public sealed class MepSystemDescriptor(MEPSystem mepSystem) : ElementDescriptor(mepSystem), IDescriptorResolver +public sealed class MepSystemDescriptor : Descriptor, IDescriptorResolver { - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + private readonly MEPSystem _mepSystem; + + public MepSystemDescriptor(MEPSystem mepSystem) + { + _mepSystem = mepSystem; + Name = ElementDescriptor.CreateName(mepSystem); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { @@ -37,11 +45,11 @@ public sealed class MepSystemDescriptor(MEPSystem mepSystem) : ElementDescriptor ResolveSet ResolveSectionByNumber() { - var capacity = mepSystem.SectionsCount; + var capacity = _mepSystem.SectionsCount; var resolveSummary = new ResolveSet(capacity); for (var i = 0; i < capacity; i++) { - var section = mepSystem.GetSectionByIndex(i); + var section = _mepSystem.GetSectionByIndex(i); resolveSummary.AppendVariant(section, $"Number {section.Number}"); } @@ -50,11 +58,11 @@ ResolveSet ResolveSectionByNumber() ResolveSet ResolveSectionByIndex() { - var capacity = mepSystem.SectionsCount; + var capacity = _mepSystem.SectionsCount; var resolveSummary = new ResolveSet(capacity); for (var i = 0; i < capacity; i++) { - var section = mepSystem.GetSectionByIndex(i); + var section = _mepSystem.GetSectionByIndex(i); resolveSummary.AppendVariant(section, $"Index {i}"); } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/PanelDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/PanelDescriptor.cs index 47e883ed..427d80e8 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/PanelDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/PanelDescriptor.cs @@ -24,8 +24,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class PanelDescriptor(Panel panel) : Descriptor, IDescriptorResolver +public sealed class PanelDescriptor : Descriptor, IDescriptorResolver { + private readonly Panel _panel; + + public PanelDescriptor(Panel panel) + { + _panel = panel; + Name = ElementDescriptor.CreateName(panel); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -38,7 +46,7 @@ ResolveSet ResolveGridLines() { ElementId uId = null; ElementId vId = null; - panel.GetRefGridLines(ref uId, ref vId); + _panel.GetRefGridLines(ref uId, ref vId); var resolveSummary = new ResolveSet(2); resolveSummary.AppendVariant(uId); diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ParameterDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ParameterDescriptor.cs index 382e88ec..208bce80 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ParameterDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ParameterDescriptor.cs @@ -41,25 +41,15 @@ public ParameterDescriptor(Parameter parameter) public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_parameter, extension => + if (_parameter.StorageType == StorageType.Integer) { - extension.Name = nameof(ParameterExtensions.AsBool); - extension.Result = extension.Value.AsBool(); - }); - - manager.Register(_parameter, extension => - { - extension.Name = nameof(ParameterExtensions.AsColor); - extension.Result = extension.Value.AsColor(); - }); + manager.Register(nameof(ParameterExtensions.AsBool), _ => _parameter.AsBool()); + manager.Register(nameof(ParameterExtensions.AsColor), _ => _parameter.AsColor()); + } if (manager.Context.IsFamilyDocument) { - manager.Register(_parameter, extension => - { - extension.Name = nameof(FamilyManager.GetAssociatedFamilyParameter); - extension.Result = extension.Context.FamilyManager.GetAssociatedFamilyParameter(extension.Value); - }); + manager.Register(nameof(FamilyManager.GetAssociatedFamilyParameter), context => context.FamilyManager.GetAssociatedFamilyParameter(_parameter)); } } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/RevitLinkTypeDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/RevitLinkTypeDescriptor.cs index 485071fb..9dae4923 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/RevitLinkTypeDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/RevitLinkTypeDescriptor.cs @@ -24,11 +24,17 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public sealed class RevitLinkTypeDescriptor(Element element) : ElementDescriptor(element), IDescriptorResolver +public sealed class RevitLinkTypeDescriptor : Descriptor, IDescriptorResolver { - private readonly Element _element = element; - - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + private readonly RevitLinkType _element; + + public RevitLinkTypeDescriptor(RevitLinkType element) + { + _element = element; + Name = ElementDescriptor.CreateName(element); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ScheduleDefinitionDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ScheduleDefinitionDescriptor.cs index c763ef64..a3cfc8d5 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ScheduleDefinitionDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ScheduleDefinitionDescriptor.cs @@ -24,7 +24,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class ScheduleDefinitionDescriptor(ScheduleDefinition scheduleDefinition) : Descriptor, IDescriptorResolver +public sealed class ScheduleDefinitionDescriptor(ScheduleDefinition scheduleDefinition) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/SchemaDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/SchemaDescriptor.cs index 31b7f95b..f2308318 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/SchemaDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/SchemaDescriptor.cs @@ -27,22 +27,18 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; public sealed class SchemaDescriptor : Descriptor, IDescriptorExtension { private readonly Schema _schema; - + public SchemaDescriptor(Schema schema) { _schema = schema; Name = schema.SchemaName; } - + public void RegisterExtensions(IExtensionManager manager) { - manager.Register(_schema, extension => - { - extension.Name = "GetElements"; - extension.Result = extension.Context - .GetElements() - .WherePasses(new ExtensibleStorageFilter(extension.Value.GUID)) - .ToElements(); - }); + manager.Register("GetElements", context => context + .GetElements() + .WherePasses(new ExtensibleStorageFilter(_schema.GUID)) + .ToElements()); } } \ No newline at end of file diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/SpatialElementDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/SpatialElementDescriptor.cs index a9f567f7..c723e1a4 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/SpatialElementDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/SpatialElementDescriptor.cs @@ -24,49 +24,57 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public sealed class SpatialElementDescriptor(SpatialElement spatialElement) : ElementDescriptor(spatialElement), IDescriptorResolver +public sealed class SpatialElementDescriptor : Descriptor, IDescriptorResolver { - public new ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + private readonly SpatialElement _spatialElement; + + public SpatialElementDescriptor(SpatialElement spatialElement) + { + _spatialElement = spatialElement; + Name = ElementDescriptor.CreateName(spatialElement); + } + + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch { nameof(SpatialElement.GetBoundarySegments) => new ResolveSet(8) - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Center, StoreFreeBoundaryFaces = true }), "Center, store free boundary faces") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.CoreBoundary, StoreFreeBoundaryFaces = true }), "Core boundary, store free boundary faces") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish, StoreFreeBoundaryFaces = true }), "Finish, store free boundary faces") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.CoreCenter, StoreFreeBoundaryFaces = true }), "Core center, store free boundary faces") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Center, StoreFreeBoundaryFaces = true }), "Center") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.CoreBoundary, StoreFreeBoundaryFaces = true }), "Core boundary") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.Finish, StoreFreeBoundaryFaces = true }), "Finish") - .AppendVariant(spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions + .AppendVariant(_spatialElement.GetBoundarySegments(new SpatialElementBoundaryOptions { SpatialElementBoundaryLocation = SpatialElementBoundaryLocation.CoreCenter, StoreFreeBoundaryFaces = true diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/TableDataDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/TableDataDescriptor.cs index ae6f1045..6332e4be 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/TableDataDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/TableDataDescriptor.cs @@ -24,7 +24,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class TableDataDescriptor(TableData tableData) : Descriptor, IDescriptorResolver +public sealed class TableDataDescriptor(TableData tableData) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/TableSectionDataDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/TableSectionDataDescriptor.cs index 7b47b025..44337aeb 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/TableSectionDataDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/TableSectionDataDescriptor.cs @@ -25,7 +25,7 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class TableSectionDataDescriptor(TableSectionData tableSectionData) : Descriptor, IDescriptorResolver +public sealed class TableSectionDataDescriptor(TableSectionData tableSectionData) : Descriptor, IDescriptorResolver { public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/TableViewDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/TableViewDescriptor.cs index d1f3ab1a..4c4f1085 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/TableViewDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/TableViewDescriptor.cs @@ -25,8 +25,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class TableViewDescriptor(TableView tableView) : Descriptor, IDescriptorResolver +public sealed class TableViewDescriptor : Descriptor, IDescriptorResolver { + private readonly TableView _tableView; + + public TableViewDescriptor(TableView tableView) + { + _tableView = tableView; + Name = ElementDescriptor.CreateName(tableView); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -55,11 +63,11 @@ ResolveSet ResolveAvailableParameters() ResolveSet ResolveCalculatedValueName() { - var tableData = tableView switch + var tableData = _tableView switch { ViewSchedule viewSchedule => viewSchedule.GetTableData(), PanelScheduleView panelScheduleView => panelScheduleView.GetTableData(), - _ => throw new NotSupportedException($"{tableView.GetType().FullName} is not supported in the current API version") + _ => throw new NotSupportedException($"{_tableView.GetType().FullName} is not supported in the current API version") }; var sectionTypes = Enum.GetValues(typeof(SectionType)); @@ -72,7 +80,7 @@ ResolveSet ResolveCalculatedValueName() for (var i = tableSectionData.FirstRowNumber; i < tableSectionData.LastRowNumber; i++) for (var j = tableSectionData.FirstColumnNumber; j < tableSectionData.LastColumnNumber; j++) { - var result = tableView.GetCalculatedValueName(sectionType, i, j); + var result = _tableView.GetCalculatedValueName(sectionType, i, j); resolveSummary.AppendVariant(result, $"{sectionType}, row {i}, column {j}: {result}"); } } @@ -82,11 +90,11 @@ ResolveSet ResolveCalculatedValueName() ResolveSet ResolveCalculatedValueText() { - var tableData = tableView switch + var tableData = _tableView switch { ViewSchedule viewSchedule => viewSchedule.GetTableData(), PanelScheduleView panelScheduleView => panelScheduleView.GetTableData(), - _ => throw new NotSupportedException($"{tableView.GetType().FullName} is not supported in the current API version") + _ => throw new NotSupportedException($"{_tableView.GetType().FullName} is not supported in the current API version") }; var sectionTypes = Enum.GetValues(typeof(SectionType)); @@ -99,7 +107,7 @@ ResolveSet ResolveCalculatedValueText() for (var i = tableSectionData.FirstRowNumber; i < tableSectionData.LastRowNumber; i++) for (var j = tableSectionData.FirstColumnNumber; j < tableSectionData.LastColumnNumber; j++) { - var result = tableView.GetCalculatedValueText(sectionType, i, j); + var result = _tableView.GetCalculatedValueText(sectionType, i, j); resolveSummary.AppendVariant(result, $"{sectionType}, row {i}, column {j}: {result}"); } } @@ -109,11 +117,11 @@ ResolveSet ResolveCalculatedValueText() ResolveSet ResolveCellText() { - var tableData = tableView switch + var tableData = _tableView switch { ViewSchedule viewSchedule => viewSchedule.GetTableData(), PanelScheduleView panelScheduleView => panelScheduleView.GetTableData(), - _ => throw new NotSupportedException($"{tableView.GetType().FullName} is not supported in the current API version") + _ => throw new NotSupportedException($"{_tableView.GetType().FullName} is not supported in the current API version") }; var sectionTypes = Enum.GetValues(typeof(SectionType)); @@ -125,7 +133,7 @@ ResolveSet ResolveCellText() for (var i = tableSectionData.FirstRowNumber; i < tableSectionData.LastRowNumber; i++) for (var j = tableSectionData.FirstColumnNumber; j < tableSectionData.LastColumnNumber; j++) { - var result = tableView.GetCellText(sectionType, i, j); + var result = _tableView.GetCellText(sectionType, i, j); resolveSummary.AppendVariant(result, $"{sectionType}, row {i}, column {j}: {result}"); } } @@ -139,7 +147,7 @@ ResolveSet ResolveIsValidSectionType() var resolveSummary = new ResolveSet(); foreach (SectionType sectionType in sectionTypes) { - var result = tableView.IsValidSectionType(sectionType); + var result = _tableView.IsValidSectionType(sectionType); resolveSummary.AppendVariant(result, $"{sectionType}: {result}"); } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ViewDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ViewDescriptor.cs index ec9063f0..af85876e 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ViewDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ViewDescriptor.cs @@ -24,8 +24,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class ViewDescriptor(View view) : Descriptor, IDescriptorResolver +public sealed class ViewDescriptor : Descriptor, IDescriptorResolver { + private readonly View _view; + + public ViewDescriptor(View view) + { + _view = view; + Name = ElementDescriptor.CreateName(view); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -57,7 +65,7 @@ ResolveSet ResolveCanCategoryBeHidden() var resolveSummary = new ResolveSet(categories.Size); foreach (Category category in categories) { - var result = view.CanCategoryBeHidden(category.Id); + var result = _view.CanCategoryBeHidden(category.Id); resolveSummary.AppendVariant(result, $"{category.Name}: {result}"); } @@ -70,7 +78,7 @@ ResolveSet ResolveCanCategoryBeHiddenTemporary() var resolveSummary = new ResolveSet(categories.Size); foreach (Category category in categories) { - var result = view.CanCategoryBeHiddenTemporary(category.Id); + var result = _view.CanCategoryBeHiddenTemporary(category.Id); resolveSummary.AppendVariant(result, $"{category.Name}: {result}"); } @@ -84,7 +92,7 @@ ResolveSet ResolveCanViewBeDuplicated() foreach (ViewDuplicateOption option in values) { - resolveSummary.AppendVariant(view.CanViewBeDuplicated(option), option.ToString()); + resolveSummary.AppendVariant(_view.CanViewBeDuplicated(option), option.ToString()); } return resolveSummary; @@ -96,7 +104,7 @@ ResolveSet ResolveCategoryHidden() var resolveSummary = new ResolveSet(categories.Size); foreach (Category category in categories) { - var result = view.GetCategoryHidden(category.Id); + var result = _view.GetCategoryHidden(category.Id); resolveSummary.AppendVariant(result, $"{category.Name}: {result}"); } @@ -109,7 +117,7 @@ ResolveSet ResolveCategoryOverrides() var resolveSummary = new ResolveSet(categories.Size); foreach (Category category in categories) { - var result = view.GetCategoryOverrides(category.Id); + var result = _view.GetCategoryOverrides(category.Id); resolveSummary.AppendVariant(result, category.Name); } @@ -122,7 +130,7 @@ ResolveSet ResolveIsCategoryOverridable() var resolveSummary = new ResolveSet(categories.Size); foreach (Category category in categories) { - var result = view.IsCategoryOverridable(category.Id); + var result = _view.IsCategoryOverridable(category.Id); resolveSummary.AppendVariant(result, category.Name); } @@ -131,12 +139,12 @@ ResolveSet ResolveIsCategoryOverridable() ResolveSet ResolveFilterOverrides() { - var filters = view.GetFilters(); + var filters = _view.GetFilters(); var resolveSummary = new ResolveSet(filters.Count); foreach (var filterId in filters) { var filter = filterId.ToElement(context)!; - var result = view.GetFilterOverrides(filterId); + var result = _view.GetFilterOverrides(filterId); resolveSummary.AppendVariant(result, filter.Name); } @@ -145,12 +153,12 @@ ResolveSet ResolveFilterOverrides() ResolveSet ResolveFilterVisibility() { - var filters = view.GetFilters(); + var filters = _view.GetFilters(); var resolveSummary = new ResolveSet(filters.Count); foreach (var filterId in filters) { var filter = filterId.ToElement(context)!; - var result = view.GetFilterVisibility(filterId); + var result = _view.GetFilterVisibility(filterId); resolveSummary.AppendVariant(result, $"{filter.Name}: {result}"); } @@ -159,12 +167,12 @@ ResolveSet ResolveFilterVisibility() ResolveSet ResolveFilterEnabled() { - var filters = view.GetFilters(); + var filters = _view.GetFilters(); var resolveSummary = new ResolveSet(filters.Count); foreach (var filterId in filters) { var filter = filterId.ToElement(context)!; - var result = view.GetIsFilterEnabled(filterId); + var result = _view.GetIsFilterEnabled(filterId); resolveSummary.AppendVariant(result, $"{filter.Name}: {result}"); } @@ -173,12 +181,12 @@ ResolveSet ResolveFilterEnabled() ResolveSet ResolveIsFilterApplied() { - var filters = view.GetFilters(); + var filters = _view.GetFilters(); var resolveSummary = new ResolveSet(filters.Count); foreach (var filterId in filters) { var filter = filterId.ToElement(context)!; - var result = view.IsFilterApplied(filterId); + var result = _view.IsFilterApplied(filterId); resolveSummary.AppendVariant(result, $"{filter.Name}: {result}"); } @@ -192,7 +200,7 @@ ResolveSet ResolveIsInTemporaryViewMode() foreach (TemporaryViewMode mode in values) { - resolveSummary.AppendVariant(view.IsInTemporaryViewMode(mode), mode.ToString()); + resolveSummary.AppendVariant(_view.IsInTemporaryViewMode(mode), mode.ToString()); } return resolveSummary; @@ -204,7 +212,7 @@ ResolveSet ResolveIsValidViewTemplate() var resolveSummary = new ResolveSet(templates.Length); foreach (var template in templates) { - var result = view.IsValidViewTemplate(template.Id); + var result = _view.IsValidViewTemplate(template.Id); resolveSummary.AppendVariant(result, $"{template.Name}: {result}"); } @@ -217,7 +225,7 @@ ResolveSet ResolveIsWorksetVisible() var resolveSummary = new ResolveSet(workSets.Count); foreach (var workSet in workSets) { - var result = view.IsWorksetVisible(workSet.Id); + var result = _view.IsWorksetVisible(workSet.Id); resolveSummary.AppendVariant(result, $"{workSet.Name}: {result}"); } @@ -230,7 +238,7 @@ ResolveSet ResolveWorksetVisibility() var resolveSummary = new ResolveSet(workSets.Count); foreach (var workSet in workSets) { - var result = view.GetWorksetVisibility(workSet.Id); + var result = _view.GetWorksetVisibility(workSet.Id); resolveSummary.AppendVariant(result, $"{workSet.Name}: {result}"); } @@ -244,7 +252,7 @@ ResolveSet ResolveSupportsWorksharingDisplayMode() foreach (WorksharingDisplayMode mode in values) { - resolveSummary.AppendVariant(view.SupportsWorksharingDisplayMode(mode), mode.ToString()); + resolveSummary.AppendVariant(_view.SupportsWorksharingDisplayMode(mode), mode.ToString()); } return resolveSummary; @@ -257,7 +265,7 @@ ResolveSet ResolveColorFillSchemeId() var resolveSummary = new ResolveSet(categories.Size); foreach (Category category in categories) { - var result = view.GetColorFillSchemeId(category.Id); + var result = _view.GetColorFillSchemeId(category.Id); resolveSummary.AppendVariant(result, category.Name); } diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/ViewScheduleDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/ViewScheduleDescriptor.cs index b3c71e13..47c41f49 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/ViewScheduleDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/ViewScheduleDescriptor.cs @@ -24,8 +24,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class ViewScheduleDescriptor(ViewSchedule viewSchedule) : Descriptor, IDescriptorResolver +public sealed class ViewScheduleDescriptor : Descriptor, IDescriptorResolver { + private readonly ViewSchedule _viewSchedule; + + public ViewScheduleDescriptor(ViewSchedule viewSchedule) + { + _viewSchedule = viewSchedule; + Name = ElementDescriptor.CreateName(viewSchedule); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -60,7 +68,7 @@ ResolveSet ResolveStripedRowsColor() foreach (StripedRowPattern pattern in patterns) { - resolveSummary.AppendVariant(viewSchedule.GetStripedRowsColor(pattern), pattern.ToString()); + resolveSummary.AppendVariant(_viewSchedule.GetStripedRowsColor(pattern), pattern.ToString()); } return resolveSummary; @@ -73,7 +81,7 @@ ResolveSet ResolveValidTextTypeId() foreach (var type in types) { - var result = viewSchedule.IsValidTextTypeId(type.Id); + var result = _viewSchedule.IsValidTextTypeId(type.Id); resolveSummary.AppendVariant(result, $"{type.Name}: {result}"); } @@ -184,12 +192,12 @@ ResolveSet ResolveIsValidCategoryForSchedule() #if REVIT2022_OR_GREATER ResolveSet ResolveScheduleInstances() { - var count = viewSchedule.GetSegmentCount(); + var count = _viewSchedule.GetSegmentCount(); var resolveSummary = new ResolveSet(count); for (var i = -1; i < count; i++) { - resolveSummary.AppendVariant(viewSchedule.GetScheduleInstances(i)); + resolveSummary.AppendVariant(_viewSchedule.GetScheduleInstances(i)); } return resolveSummary; @@ -197,12 +205,12 @@ ResolveSet ResolveScheduleInstances() ResolveSet ResolveSegmentHeight() { - var count = viewSchedule.GetSegmentCount(); + var count = _viewSchedule.GetSegmentCount(); var resolveSummary = new ResolveSet(count); for (var i = 0; i < count; i++) { - resolveSummary.AppendVariant(viewSchedule.GetSegmentHeight(i)); + resolveSummary.AppendVariant(_viewSchedule.GetSegmentHeight(i)); } return resolveSummary; diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/WireDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/WireDescriptor.cs index 4516bcd0..5da51baa 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/WireDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/WireDescriptor.cs @@ -25,8 +25,16 @@ namespace RevitLookup.Core.ComponentModel.Descriptors; -public class WireDescriptor(Wire wire) : Descriptor, IDescriptorResolver +public sealed class WireDescriptor : Descriptor, IDescriptorResolver { + private readonly Wire _wire; + + public WireDescriptor(Wire wire) + { + _wire = wire; + Name = ElementDescriptor.CreateName(wire); + } + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) { return target switch @@ -37,12 +45,12 @@ public ResolveSet Resolve(Document context, string target, ParameterInfo[] param ResolveSet ResolveVertex() { - var capacity = wire.NumberOfVertices; + var capacity = _wire.NumberOfVertices; var resolveSummary = new ResolveSet(capacity); for (var i = 0; i < capacity; i++) { - resolveSummary.AppendVariant(wire.GetVertex(i)); + resolveSummary.AppendVariant(_wire.GetVertex(i)); } return resolveSummary; diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/WorksetTableDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/WorksetTableDescriptor.cs index 49ddbd1f..3a2dba12 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/WorksetTableDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/WorksetTableDescriptor.cs @@ -30,9 +30,21 @@ public ResolveSet Resolve(Document context, string target, ParameterInfo[] param { return target switch { - nameof(WorksetTable.GetWorkset) when parameters.Length == 1 && parameters[0].ParameterType == typeof(WorksetId) => - ResolveSet.Append(new FilteredWorksetCollector(Context.Document).ToWorksets()), + nameof(WorksetTable.GetWorkset) when parameters.Length == 1 && parameters[0].ParameterType == typeof(WorksetId) => ResolveGetWorkset(), _ => null }; + + ResolveSet ResolveGetWorkset() + { + var worksets = new FilteredWorksetCollector(Context.Document).ToWorksets(); + var resolveSet = new ResolveSet(worksets.Count); + + foreach (var workset in worksets) + { + resolveSet.AppendVariant(workset); + } + + return resolveSet; + } } } \ No newline at end of file diff --git a/source/RevitLookup/Core/Contracts/IExtensionManager.cs b/source/RevitLookup/Core/Contracts/IExtensionManager.cs index 718b293f..f5ef913e 100644 --- a/source/RevitLookup/Core/Contracts/IExtensionManager.cs +++ b/source/RevitLookup/Core/Contracts/IExtensionManager.cs @@ -18,12 +18,10 @@ // Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) // (Rights in Technical Data and Computer Software), as applicable. -using RevitLookup.Core.Objects; - namespace RevitLookup.Core.Contracts; public interface IExtensionManager { Document Context { get; } - void Register(T value, Action> extension); + void Register(string methodName, Func context); } \ No newline at end of file diff --git a/source/RevitLookup/Core/Engine/DescriptorBuilder.Extensions.cs b/source/RevitLookup/Core/Engine/DescriptorBuilder.Extensions.cs index aacf6bce..3c027b0f 100644 --- a/source/RevitLookup/Core/Engine/DescriptorBuilder.Extensions.cs +++ b/source/RevitLookup/Core/Engine/DescriptorBuilder.Extensions.cs @@ -19,7 +19,6 @@ // (Rights in Technical Data and Computer Software), as applicable. using RevitLookup.Core.Contracts; -using RevitLookup.Core.Objects; namespace RevitLookup.Core.Engine; @@ -33,32 +32,26 @@ private void AddExtensions() extension.RegisterExtensions(this); } - public void Register(T value, Action> extension) + public void Register(string methodName, Func handler) { - var descriptorExtension = new DescriptorExtension - { - Value = value, - Context = Context - }; - try { - Evaluate(descriptorExtension, extension); - WriteDescriptor(descriptorExtension.Name, descriptorExtension.Result); + var result = Evaluate(handler); + WriteDescriptor(methodName, result); } catch (Exception exception) { - WriteDescriptor(descriptorExtension.Name, exception); + WriteDescriptor(methodName, exception); } } - private void Evaluate(DescriptorExtension descriptorExtension, Action> extension) + private object Evaluate(Func handler) { try { _clockDiagnoser.Start(); _memoryDiagnoser.Start(); - extension.Invoke(descriptorExtension); + return handler.Invoke(Context); } finally { diff --git a/source/RevitLookup/Core/Objects/DescriptorExtension.cs b/source/RevitLookup/Core/Objects/DescriptorExtension.cs deleted file mode 100644 index f73a4cc7..00000000 --- a/source/RevitLookup/Core/Objects/DescriptorExtension.cs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2003-2024 by Autodesk, Inc. -// -// Permission to use, copy, modify, and distribute this software in -// object code form for any purpose and without fee is hereby granted, -// provided that the above copyright notice appears in all copies and -// that both that copyright notice and the limited warranty and -// restricted rights notice below appear in all supporting -// documentation. -// -// AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS. -// AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF -// MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC. -// DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE -// UNINTERRUPTED OR ERROR FREE. -// -// Use, duplication, or disclosure by the U.S. Government is subject to -// restrictions set forth in FAR 52.227-19 (Commercial Computer -// Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii) -// (Rights in Technical Data and Computer Software), as applicable. - -namespace RevitLookup.Core.Objects; - -public sealed class DescriptorExtension -{ - public required Document Context { get; init; } - public required T Value { get; init; } - public object Result { get; set; } - public string Name { get; set; } -} \ No newline at end of file