From 0a756f41d173ad795a53a20c3b7e8eef04d846e1 Mon Sep 17 00:00:00 2001 From: NeVeSpl Date: Sat, 18 May 2024 21:20:41 +0200 Subject: [PATCH] improve the generation of invocations for static methods --- sources/RevitDBExplorer/Application.cs | 2 +- .../DataModel/Members/Base/MemberOverride.cs | 6 +- .../DataModel/Members/Base/MemberTemplate.cs | 2 +- .../Application/Application.cs | 16 +++++ .../AssetProperty/AssetProperty.cs | 17 ++++++ .../MembersOverrides/Category/Categorys.cs | 22 +++++++ .../DataModel/MembersOverrides/XYZ/XYZ.cs | 17 ++++++ .../MembersTemplates/Application_Templates.cs | 18 ++++++ .../MembersTemplates/BoundingBox_Templates.cs | 2 +- .../MembersTemplates/Category_Templates.cs | 19 ++++++ .../MembersTemplates/Document_Templates.cs | 22 +++++-- .../MembersTemplates/Element_Templates.cs | 18 +++--- .../MembersTemplates/Face_Templates.cs | 17 ++++++ .../FamilyInstance_Templates.cs | 6 ++ .../FamilySymbol_Templates.cs | 17 ++++++ .../MembersTemplates/Family_Templates.cs | 5 +- .../MembersTemplates/ForgeTypeId_Templates.cs | 40 +++--------- .../MembersTemplates/Parameter_Templates.cs | 21 +++++++ .../RebarHostData_Templates.cs | 14 ++--- .../ReferencePoint_Templates.cs | 20 ++++++ .../MembersTemplates/Reference_Templates.cs | 18 ++++++ .../MembersTemplates/Solid_Templates.cs | 8 ++- .../MethodCallExpressionExtensions.cs | 61 ++++++++----------- .../UIComponents/List/ListView.xaml | 5 +- 24 files changed, 289 insertions(+), 104 deletions(-) create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Application/Application.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/AssetProperty/AssetProperty.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Category/Categorys.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/XYZ/XYZ.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Application_Templates.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Category_Templates.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Face_Templates.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilySymbol_Templates.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Parameter_Templates.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ReferencePoint_Templates.cs create mode 100644 sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Reference_Templates.cs diff --git a/sources/RevitDBExplorer/Application.cs b/sources/RevitDBExplorer/Application.cs index ab89b0f4..425e84f0 100644 --- a/sources/RevitDBExplorer/Application.cs +++ b/sources/RevitDBExplorer/Application.cs @@ -52,7 +52,7 @@ public Result OnStartup(UIControlledApplication application) var panel = application.CreateRibbonPanel("Explorer"); var cmdType = typeof(Command); - var pushButtonData = new PushButtonData(cmdType.FullName, "Revit DB\r\nExplorer", cmdType.Assembly.Location, cmdType.FullName); + var pushButtonData = new PushButtonData(cmdType.FullName, "Revit\r\nExplorer", cmdType.Assembly.Location, cmdType.FullName); pushButtonData.Image = new BitmapImage(new Uri("pack://application:,,,/RevitDBExplorer;component/Resources/RDBE.Icon.16.png", UriKind.RelativeOrAbsolute)); pushButtonData.LargeImage = new BitmapImage(new Uri("pack://application:,,,/RevitDBExplorer;component/Resources/RDBE.Icon.32.png", UriKind.RelativeOrAbsolute)); panel.AddItem(pushButtonData); diff --git a/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberOverride.cs b/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberOverride.cs index 64c96cc4..b8da9132 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberOverride.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberOverride.cs @@ -24,10 +24,8 @@ internal class MemberOverride : IMemberOverride public static IMemberOverride ByFunc(Expression> getter) { - var compiledGetter = getter.Compile(); - var methodCallExpression = getter.Body as MethodCallExpression; - - string syntax = methodCallExpression.ToCeSharp(); + var compiledGetter = getter.Compile(); + string syntax = getter.ToCeSharp(); var uniqueId = getter.GetUniqueId(); return new MemberOverride() diff --git a/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberTemplate.cs b/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberTemplate.cs index 2d830e42..a4fdedb9 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberTemplate.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/Members/Base/MemberTemplate.cs @@ -40,7 +40,7 @@ public static ISnoopableMemberTemplate Create(Expression(compiledGetter); memberAccessor.UniqueId = $"{typeof(TForType).Name}_{getter.GetUniqueId()}"; - memberAccessor.DefaultInvocation.Syntax = methodCallExpression.ToCeSharp(); + memberAccessor.DefaultInvocation.Syntax = getter.ToCeSharp(); return WithCustomAC(methodCallExpression.Method.DeclaringType, methodCallExpression.Method.Name, memberAccessor, canBeUsed, kind, () => RevitDocumentationReader.GetMethodComments(methodCallExpression.Method)); } diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Application/Application.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Application/Application.cs new file mode 100644 index 00000000..de2a1add --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Application/Application.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersOverrides +{ + internal class Application_Overrides : IHaveMembersOverrides + { + public IEnumerable GetOverrides() => + [ + MemberOverride.ByFunc((document, element) => Autodesk.Revit.ApplicationServices.Application.GetFailureDefinitionRegistry()), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/AssetProperty/AssetProperty.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/AssetProperty/AssetProperty.cs new file mode 100644 index 00000000..6c1d2d8b --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/AssetProperty/AssetProperty.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB.Visual; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersOverrides +{ + internal class AssetProperty_Overrides : IHaveMembersOverrides + { + public IEnumerable GetOverrides() => + [ + MemberOverride.ByFunc((document, target) => AssetProperty.GetTypeName(target.Type)), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Category/Categorys.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Category/Categorys.cs new file mode 100644 index 00000000..a3738ca5 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/Category/Categorys.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersOverrides +{ + internal class Category_Overrides : IHaveMembersOverrides + { + public IEnumerable GetOverrides() => + [ +#if R2022_MIN && R2022_MAX + MemberOverride.ByFunc((doc, category) => Category.GetBuiltInCategoryTypeId((BuiltInCategory)category.Id.IntegerValue)), +#endif +#if R2023_MIN + MemberOverride.ByFunc((doc, category) => Category.GetBuiltInCategoryTypeId(category.BuiltInCategory)), +#endif + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/XYZ/XYZ.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/XYZ/XYZ.cs new file mode 100644 index 00000000..20cb3ea2 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersOverrides/XYZ/XYZ.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersOverrides +{ + internal class XYZ_Overrides : IHaveMembersOverrides + { + public IEnumerable GetOverrides() => + [ + MemberOverride.ByFunc((doc, point) => XYZ.IsWithinLengthLimits(point)), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Application_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Application_Templates.cs new file mode 100644 index 00000000..3b6a6c6b --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Application_Templates.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class Application_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ + MemberTemplate.Create((doc, category) => FormulaManager.GetFunctions()), + MemberTemplate.Create((doc, category) => FormulaManager.GetOperators()), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/BoundingBox_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/BoundingBox_Templates.cs index adc0ae16..0fd84c7a 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/BoundingBox_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/BoundingBox_Templates.cs @@ -15,4 +15,4 @@ public IEnumerable GetTemplates() => MemberTemplate.WithCustomAC(typeof(BoundingBoxXYZ), "BoundingBoxIntersectsFilter", new BoundingBox_BoundingBoxIntersectsFilter(), kind: MemberKind.Extra, documentationFactoryMethod: () => new DocXml() { Summary ="TEST" }), ]; } -} +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Category_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Category_Templates.cs new file mode 100644 index 00000000..59fbff61 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Category_Templates.cs @@ -0,0 +1,19 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class Category_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ +#if R2022_MIN + MemberTemplate.Create((doc, category) => ParameterFilterUtilities.GetFilterableParametersInCommon(doc, new[] { category.Id } )), +#endif + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Document_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Document_Templates.cs index 05fb194d..b599bafb 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Document_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Document_Templates.cs @@ -1,6 +1,7 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using Autodesk.Revit.DB; +using Autodesk.Revit.DB.Lighting; +using Autodesk.Revit.DB.Structure; using RevitDBExplorer.Domain.DataModel.Members; using RevitDBExplorer.Domain.DataModel.Members.Base; @@ -9,14 +10,25 @@ namespace RevitDBExplorer.Domain.DataModel.MembersTemplates { internal class Document_Templates : IHaveMemberTemplates - { + { public IEnumerable GetTemplates() => [ MemberTemplate.Create((doc, target) => BasicFileInfo.Extract(target.PathName), kind: MemberKind.StaticMethod), - MemberTemplate.Create((doc, target) => BasePoint.GetSurveyPoint(doc), kind: MemberKind.StaticMethod), MemberTemplate.Create((doc, target) => BasePoint.GetProjectBasePoint(doc), kind: MemberKind.StaticMethod), MemberTemplate.Create((doc, target) => InternalOrigin.Get(doc), kind: MemberKind.StaticMethod), - ]; + + MemberTemplate.Create((doc, target) => GlobalParametersManager.AreGlobalParametersAllowed(doc)), + MemberTemplate.Create((doc, target) => GlobalParametersManager.GetAllGlobalParameters(doc)), + MemberTemplate.Create((doc, target) => GlobalParametersManager.GetGlobalParametersOrdered(doc)), + + MemberTemplate.Create((doc, target) => LightGroupManager.GetLightGroupManager(doc)), +#if R2022_MIN + MemberTemplate.Create((doc, target) => TemporaryGraphicsManager.GetTemporaryGraphicsManager(doc)), +#endif +#if R2023_MIN + MemberTemplate.Create((doc, target) => AnalyticalToPhysicalAssociationManager.GetAnalyticalToPhysicalAssociationManager(doc)), +#endif + ]; } } \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Element_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Element_Templates.cs index 5e4d7cf5..a615ad9a 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Element_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Element_Templates.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Structure; -using Autodesk.Revit.DB.Structure.StructuralSections; using RevitDBExplorer.Domain.DataModel.Members; using RevitDBExplorer.Domain.DataModel.Members.Base; using RevitDBExplorer.Domain.DataModel.MembersTemplates.Accessors; @@ -15,21 +14,24 @@ internal class Element_Templates : IHaveMemberTemplates public IEnumerable GetTemplates() => [ MemberTemplate.Create((doc, target) => doc.ActiveView.GetElementOverrides(target.Id), kind: MemberKind.AsArgument), - MemberTemplate.Create((doc, target) => doc.GetWorksetId(target.Id), kind: MemberKind.AsArgument), - MemberTemplate.Create((doc, target) => StructuralSectionUtils.GetStructuralSection(doc, target.Id), kind: MemberKind.StaticMethod), + MemberTemplate.Create((doc, target) => doc.GetWorksetId(target.Id), kind: MemberKind.AsArgument), - MemberTemplate.Create((doc, target) => doc.GetElement(target.ElementId).GetGeometryObjectFromReference(target), canBeUsed: x => x.ElementId != null, kind: MemberKind.AsArgument), - -#if R2023_MIN - MemberTemplate.Create((doc, target) => AnalyticalNodeData.GetAnalyticalNodeData(target), kind: MemberKind.StaticMethod, canBeUsed: x => x is ReferencePoint), +#if R2023_MIN MemberTemplate.WithCustomAC(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.HasAssociation), new AnalyticalToPhysicalAssociationManager_HasAssociation(), kind: MemberKind.AsArgument), MemberTemplate.WithCustomAC(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.GetAssociatedElementId), new AnalyticalToPhysicalAssociationManager_GetAssociatedElementId(), kind: MemberKind.AsArgument), #endif + #if R2024_MIN MemberTemplate.Create((doc, target) => AnalyticalToPhysicalAssociationManager.IsAnalyticalElement(doc, target.Id), kind: MemberKind.StaticMethod), MemberTemplate.Create((doc, target) => AnalyticalToPhysicalAssociationManager.IsPhysicalElement(doc, target.Id), kind: MemberKind.StaticMethod), MemberTemplate.WithCustomAC(typeof(AnalyticalToPhysicalAssociationManager), nameof(AnalyticalToPhysicalAssociationManager.GetAssociatedElementIds), new AnalyticalToPhysicalAssociationManager_GetAssociatedElementIds(), kind: MemberKind.AsArgument), #endif + + MemberTemplate.Create((document, target) => SolidSolidCutUtils.IsAllowedForSolidCut(target)), + MemberTemplate.Create((document, target) => SolidSolidCutUtils.GetCuttingSolids(target)), + MemberTemplate.Create((document, target) => SolidSolidCutUtils.GetSolidsBeingCut(target)), + + MemberTemplate.Create((document, target) => ElementTransformUtils.CanMirrorElement(document, target.Id)), ]; } -} +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Face_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Face_Templates.cs new file mode 100644 index 00000000..42085ee3 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Face_Templates.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class Face_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ + // MemberTemplate.Create((doc, target) => doc.fac, kind: MemberKind.StaticMethod), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilyInstance_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilyInstance_Templates.cs index 9ce763d8..129da796 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilyInstance_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilyInstance_Templates.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Autodesk.Revit.DB; +using Autodesk.Revit.DB.Structure.StructuralSections; using RevitDBExplorer.Domain.DataModel.Members; using RevitDBExplorer.Domain.DataModel.Members.Base; @@ -11,6 +12,11 @@ internal class FamilyInstance_Templates : IHaveMemberTemplates { public IEnumerable GetTemplates() => [ + + MemberTemplate.Create((doc, target) => StructuralSectionUtils.GetStructuralSection(doc, target.Id), kind: MemberKind.StaticMethod), + + + MemberTemplate.Create((doc, target) => AdaptiveComponentInstanceUtils.IsAdaptiveComponentInstance(target), kind: MemberKind.StaticMethod), MemberTemplate.Create((doc, target) => AdaptiveComponentInstanceUtils.GetInstancePlacementPointElementRefIds(target), canBeUsed: (x)=> AdaptiveComponentInstanceUtils.IsAdaptiveComponentInstance(x) , kind: MemberKind.StaticMethod), ]; } diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilySymbol_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilySymbol_Templates.cs new file mode 100644 index 00000000..e9554143 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/FamilySymbol_Templates.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class FamilySymbol_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ + MemberTemplate.Create((doc, target) => AdaptiveComponentInstanceUtils.IsAdaptiveFamilySymbol(target), kind: MemberKind.StaticMethod), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Family_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Family_Templates.cs index 3eb72431..278fb99c 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Family_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Family_Templates.cs @@ -12,8 +12,7 @@ internal class Family_Templates : IHaveMemberTemplates public IEnumerable GetTemplates() => [ MemberTemplate.Create((doc, target) => doc.EditFamily(target), kind: MemberKind.AsArgument), - MemberTemplate.Create((doc, target) => FamilySizeTableManager.GetFamilySizeTableManager(doc, target.Id), kind: MemberKind.StaticMethod), - + MemberTemplate.Create((doc, target) => FamilySizeTableManager.GetFamilySizeTableManager(doc, target.Id), kind: MemberKind.StaticMethod), ]; } -} +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ForgeTypeId_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ForgeTypeId_Templates.cs index e23be195..6c886161 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ForgeTypeId_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ForgeTypeId_Templates.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using System.Linq; using Autodesk.Revit.DB; using RevitDBExplorer.Domain.DataModel.Members; using RevitDBExplorer.Domain.DataModel.Members.Base; @@ -13,24 +12,19 @@ internal class ForgeTypeId_Templates : IHaveMemberTemplates #if R2022_MIN private static readonly HashSet AllDisciplines = new(UnitUtils.GetAllDisciplines()); #endif - private static readonly IEnumerable ForForgeTypeId = Enumerable.Empty(); - private static readonly IEnumerable ForCategory = Enumerable.Empty(); - private static readonly IEnumerable ForParameter = Enumerable.Empty(); + - - static ForgeTypeId_Templates() - { - ForForgeTypeId = new ISnoopableMemberTemplate[] - { + public IEnumerable GetTemplates() => + [ #if R2022_MIN MemberTemplate.Create((doc, forgeId) => Category.IsBuiltInCategory(forgeId)), MemberTemplate.Create((doc, forgeId) => Category.GetBuiltInCategory(forgeId), x => Category.IsBuiltInCategory(x)), - MemberTemplate.Create((doc, forgeId) => doc.GetTypeOfStorage(forgeId), x=> ParameterUtils.IsBuiltInParameter(x)), - MemberTemplate.Create((doc, forgeId) => doc.GetUnits().GetFormatOptions(forgeId), x => UnitUtils.IsMeasurableSpec(x), Members.Base.MemberKind.AsArgument), + MemberTemplate.Create((doc, forgeId) => doc.GetTypeOfStorage(forgeId), x=> ParameterUtils.IsBuiltInParameter(x), MemberKind.AsArgument), + MemberTemplate.Create((doc, forgeId) => doc.GetUnits().GetFormatOptions(forgeId), x => UnitUtils.IsMeasurableSpec(x), MemberKind.AsArgument), MemberTemplate.Create((doc, forgeId) => ParameterUtils.IsBuiltInParameter(forgeId)), MemberTemplate.Create((doc, forgeId) => ParameterUtils.GetBuiltInParameter(forgeId), x=> ParameterUtils.IsBuiltInParameter(x)), MemberTemplate.Create((doc, forgeId) => ParameterUtils.IsBuiltInGroup(forgeId), x => true), - + MemberTemplate.Create((doc, forgeId) => UnitUtils.IsMeasurableSpec(forgeId)), #endif @@ -67,26 +61,6 @@ static ForgeTypeId_Templates() MemberTemplate.Create((doc, forgeId) => FormatOptions.GetValidSymbols(forgeId), x => UnitUtils.IsUnit(x)), MemberTemplate.Create((doc, forgeId) => FormatOptions.CanHaveSymbol(forgeId), x => UnitUtils.IsUnit(x)), - }; - ForCategory = new ISnoopableMemberTemplate[] - { -#if R2022_MIN - MemberTemplate.Create((doc, category) => Category.GetBuiltInCategoryTypeId((BuiltInCategory)category.Id.Value())), - MemberTemplate.Create((doc, category) => ParameterFilterUtilities.GetFilterableParametersInCommon(doc, new[] { category.Id } )), -#endif - }; - ForParameter = new ISnoopableMemberTemplate[] - { -#if R2022_MIN - MemberTemplate.Create((doc, parameter) => UnitFormatUtils.Format(doc.GetUnits(), parameter.Definition.GetDataType(), parameter.AsDouble(), false), x => UnitUtils.IsMeasurableSpec(x.Definition?.GetDataType())), -#endif - }; - } - - - public IEnumerable GetTemplates() - { - return ForForgeTypeId.Concat(ForCategory).Concat(ForParameter); - } + ]; } } \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Parameter_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Parameter_Templates.cs new file mode 100644 index 00000000..05d03909 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Parameter_Templates.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class Parameter_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ +#if R2022_MIN + MemberTemplate.Create((doc, parameter) => UnitFormatUtils.Format(doc.GetUnits(), parameter.Definition.GetDataType(), parameter.AsDouble(), false), x => UnitUtils.IsMeasurableSpec(x.Definition?.GetDataType())), +#endif + MemberTemplate.Create((doc, target) => GlobalParametersManager.IsValidGlobalParameter(doc, target.Id)), + MemberTemplate.Create((doc, target) => doc.FamilyManager.GetAssociatedFamilyParameter(target)), + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/RebarHostData_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/RebarHostData_Templates.cs index 9293e947..9f9f5655 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/RebarHostData_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/RebarHostData_Templates.cs @@ -1,12 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Collections.Generic; using Autodesk.Revit.DB; -using RevitDBExplorer.Domain.DataModel.Members.Base; -using RevitDBExplorer.Domain.DataModel.Members; using Autodesk.Revit.DB.Structure; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md namespace RevitDBExplorer.Domain.DataModel.MembersTemplates { @@ -22,4 +20,4 @@ public IEnumerable GetTemplates() => #endif ]; } -} +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ReferencePoint_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ReferencePoint_Templates.cs new file mode 100644 index 00000000..9ee74490 --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/ReferencePoint_Templates.cs @@ -0,0 +1,20 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using Autodesk.Revit.DB.Structure; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class ReferencePoint_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ +#if R2023_MIN + MemberTemplate.Create((doc, target) => AnalyticalNodeData.GetAnalyticalNodeData(target), kind: MemberKind.StaticMethod), +#endif + ]; + } +} \ No newline at end of file diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Reference_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Reference_Templates.cs new file mode 100644 index 00000000..2d67392d --- /dev/null +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Reference_Templates.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Autodesk.Revit.DB; +using RevitDBExplorer.Domain.DataModel.Members; +using RevitDBExplorer.Domain.DataModel.Members.Base; + +// (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md + +namespace RevitDBExplorer.Domain.DataModel.MembersTemplates +{ + internal class Reference_Templates : IHaveMemberTemplates + { + public IEnumerable GetTemplates() => + [ + MemberTemplate.Create((doc, target) => doc.GetElement(target.ElementId).GetGeometryObjectFromReference(target), canBeUsed: x => x.ElementId != null, kind: MemberKind.AsArgument), + + ]; + } +} diff --git a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Solid_Templates.cs b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Solid_Templates.cs index 8e6e5387..bbcb600c 100644 --- a/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Solid_Templates.cs +++ b/sources/RevitDBExplorer/Domain/DataModel/MembersTemplates/Solid_Templates.cs @@ -11,7 +11,13 @@ internal class Solid_Templates : IHaveMemberTemplates { public IEnumerable GetTemplates() => [ - MemberTemplate.Create((document, target) => SolidUtils.SplitVolumes(target), kind: MemberKind.StaticMethod), + MemberTemplate.Create((document, target) => SolidUtils.SplitVolumes(target)), + + + MemberTemplate.Create((document, target) => SolidUtils.IsValidForTessellation(target)), + MemberTemplate.Create((document, target) => SolidUtils.TessellateSolidOrShell(target, new SolidOrShellTessellationControls()), canBeUsed: x => SolidUtils.IsValidForTessellation(x)), + + ]; } } \ No newline at end of file diff --git a/sources/RevitDBExplorer/Extensions/System/Linq.Expressions/MethodCallExpressionExtensions.cs b/sources/RevitDBExplorer/Extensions/System/Linq.Expressions/MethodCallExpressionExtensions.cs index 470391aa..a2e5fb49 100644 --- a/sources/RevitDBExplorer/Extensions/System/Linq.Expressions/MethodCallExpressionExtensions.cs +++ b/sources/RevitDBExplorer/Extensions/System/Linq.Expressions/MethodCallExpressionExtensions.cs @@ -1,50 +1,41 @@ -using System.Collections.Generic; -using System.Reflection; -using Autodesk.Revit.DB; +using Autodesk.Revit.DB; using ExpressionTreeToString; // (c) Revit Database Explorer https://github.com/NeVeSpl/RevitDBExplorer/blob/main/license.md namespace System.Linq.Expressions { - internal static class MethodCallExpressionExtensions + internal static class LambdaExpressionExtensions { - public static string ToCeSharp(this MethodCallExpression methodCallExpression) + public static string ToCeSharp(this LambdaExpression lambdaExpression) { - string syntax = null; - if (methodCallExpression.Object is ParameterExpression) - { - var uniformMethodCallExpression = methodCallExpression.Update(Expression.Parameter(methodCallExpression.Object.Type, "item"), methodCallExpression.Arguments); - syntax = uniformMethodCallExpression.ToString("C#"); - } - if (methodCallExpression.Object == null) - { - var arguments = new List(); - foreach (var arg in methodCallExpression.Arguments) - { - if (arg is ParameterExpression) - { - var isDocument = arg.Type == typeof(Document); - arguments.Add(Expression.Parameter(arg.Type, isDocument ? "document" : "item")); - continue; - - } - if (arg is MemberExpression member) - { - var isDocument = member.Expression.Type == typeof(Document); - arguments.Add(Expression.Property(Expression.Parameter(member.Expression.Type, isDocument ? "document" : "item"), member.Member as PropertyInfo)); - continue; - } - arguments.Add(arg); - } + var body = new ParameterReplacer(lambdaExpression.Parameters[0], Expression.Parameter(lambdaExpression.Parameters[0].Type, "document")).Visit(lambdaExpression.Body); + + var isDocument = lambdaExpression.Parameters[1].Type == typeof(Document); + var secondParamName = isDocument ? "document" : "item"; + body = new ParameterReplacer(lambdaExpression.Parameters[1], Expression.Parameter(lambdaExpression.Parameters[1].Type, secondParamName)).Visit(body); + + var methodCallExpression = body as MethodCallExpression; + var syntax = methodCallExpression.ToString("C#"); + + return syntax; + } + private class ParameterReplacer : ExpressionVisitor + { + private readonly ParameterExpression oldParameter; + private readonly ParameterExpression newParameter; + public ParameterReplacer(ParameterExpression oldParameter, ParameterExpression newParameter) + { + this.oldParameter = oldParameter; + this.newParameter = newParameter; + } - var uniformMethodCallExpression = methodCallExpression.Update(null, arguments); - //var syntaxb = methodCallExpression.ToString("C#"); - syntax = uniformMethodCallExpression.ToString("C#"); + protected override Expression VisitParameter(ParameterExpression node) + { + return node == oldParameter ? newParameter : node; } - return syntax; } } } \ No newline at end of file diff --git a/sources/RevitDBExplorer/UIComponents/List/ListView.xaml b/sources/RevitDBExplorer/UIComponents/List/ListView.xaml index 0bc68c1c..8bfec076 100644 --- a/sources/RevitDBExplorer/UIComponents/List/ListView.xaml +++ b/sources/RevitDBExplorer/UIComponents/List/ListView.xaml @@ -77,10 +77,7 @@ - - - - +