From 670db56826d8c5e3ec96807402dbcea62defe2e0 Mon Sep 17 00:00:00 2001 From: SergeyNefyodov Date: Wed, 8 May 2024 17:31:27 +0200 Subject: [PATCH 1/2] Add DatumPlane support --- .../Core/ComponentModel/DescriptorMap.cs | 1 + .../Descriptors/DatumPlaneDescriptor.cs | 174 ++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs diff --git a/source/RevitLookup/Core/ComponentModel/DescriptorMap.cs b/source/RevitLookup/Core/ComponentModel/DescriptorMap.cs index f2894e4b..33b48ae0 100644 --- a/source/RevitLookup/Core/ComponentModel/DescriptorMap.cs +++ b/source/RevitLookup/Core/ComponentModel/DescriptorMap.cs @@ -99,6 +99,7 @@ public static Descriptor FindDescriptor(object obj, Type type) Document value when type is null || type == typeof(Document) => new DocumentDescriptor(value), PlanViewRange value when type is null || type == typeof(PlanViewRange) => new PlanViewRangeDescriptor(value), ElevationMarker value when type == typeof(ElevationMarker) => new ElevationMarkerDescriptor(value), + DatumPlane value when type == typeof(DatumPlane) => new DatumPlaneDescriptor(value), ForgeTypeId value when type is null || type == typeof(ForgeTypeId) => new ForgeTypeIdDescriptor(value), Entity value when type is null || type == typeof(Entity) => new EntityDescriptor(value), Field value when type is null || type == typeof(Field) => new FieldDescriptor(value), diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs new file mode 100644 index 00000000..fcff7fd4 --- /dev/null +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs @@ -0,0 +1,174 @@ +// 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. + +using System.Reflection; +using RevitLookup.Core.Contracts; +using RevitLookup.Core.Objects; + +namespace RevitLookup.Core.ComponentModel.Descriptors; + +public class DatumPlaneDescriptor(DatumPlane datumPlane) : Descriptor, IDescriptorResolver +{ + public ResolveSet Resolve(Document context, string target, ParameterInfo[] parameters) + { + return target switch + { + nameof(DatumPlane.CanBeVisibleInView) => ResolveCanBeVisibleInView(), + nameof(DatumPlane.GetCurvesInView) => ResolveCurvesInView(), + nameof(DatumPlane.GetDatumExtentTypeInView) => ResolveDatumExtentTypeInView(), + nameof(DatumPlane.GetLeader) => ResolveLeader(), + nameof(DatumPlane.GetPropagationViews) => ResolvePropagationViews(), + nameof(DatumPlane.HasBubbleInView) => ResolveHasBubbleInView(), + nameof(DatumPlane.IsBubbleVisibleInView) => ResolveBubbleVisibleInView(), + _ => null + }; + + ResolveSet ResolveCanBeVisibleInView() + { + var views = context.EnumerateInstances().ToArray(); + var resolveSummary = new ResolveSet(views.Length); + + foreach (var view in views) + { + var result = datumPlane.CanBeVisibleInView(view); + resolveSummary.AppendVariant(result, $"{view.Name}: {result}"); + } + + return resolveSummary; + } + + ResolveSet ResolveDatumExtentTypeInView() + { + var resolveSummary = new ResolveSet(2); + + if (datumPlane.CanBeVisibleInView(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}"); + } + else + { + resolveSummary.AppendVariant("Datum plane can not be visible on active view"); + } + + return resolveSummary; + } + + ResolveSet ResolveCurvesInView() + { + var resolveSummary = new ResolveSet(2); + + if (datumPlane.CanBeVisibleInView(context.ActiveView)) + { + resolveSummary.AppendVariant(datumPlane.GetCurvesInView(DatumExtentType.Model, context.ActiveView), $"Model, Active view"); + resolveSummary.AppendVariant(datumPlane.GetCurvesInView(DatumExtentType.ViewSpecific, context.ActiveView), $"ViewSpecific, Active view"); + } + else + { + resolveSummary.AppendVariant("Datum plane can not be visible on active view"); + } + + return resolveSummary; + } + + ResolveSet ResolveLeader() + { + if (datumPlane is ReferencePlane) + return new ResolveSet().AppendVariant("This datum plane has no leaders."); + + var resolveSummary = new ResolveSet(2); + + if (datumPlane.CanBeVisibleInView(context.ActiveView)) + { + resolveSummary.AppendVariant(datumPlane.GetLeader(DatumEnds.End0, context.ActiveView), $"End 0, Active view"); + resolveSummary.AppendVariant(datumPlane.GetLeader(DatumEnds.End1, context.ActiveView), $"End 1, Active view"); + } + else + { + resolveSummary.AppendVariant("Datum plane can not be visible on active view"); + } + + return resolveSummary; + } + + ResolveSet ResolvePropagationViews() + { + var views = context.EnumerateInstances().ToArray(); + var resolveSummary = new ResolveSet(views.Length); + + foreach (var view in views) + { + if (datumPlane.CanBeVisibleInView(view)) + { + var result = datumPlane.GetPropagationViews(view); + resolveSummary.AppendVariant(result, $"{view.Name}"); + } + } + + return resolveSummary; + } + + ResolveSet ResolveHasBubbleInView() + { + if (datumPlane is ReferencePlane) + return new ResolveSet().AppendVariant("This datum plane doesn't support bubble operations."); + + var resolveSummary = new ResolveSet(2); + + if (datumPlane.CanBeVisibleInView(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}"); + } + else + { + resolveSummary.AppendVariant("Datum plane can not be visible on active view"); + } + + return resolveSummary; + } + + ResolveSet ResolveBubbleVisibleInView() + { + if (datumPlane is ReferencePlane) + return new ResolveSet().AppendVariant("This datum plane doesn't support bubble operations."); + + var resolveSummary = new ResolveSet(2); + + if (datumPlane.CanBeVisibleInView(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}"); + } + else + { + resolveSummary.AppendVariant("Datum plane can not be visible on active view"); + } + + return resolveSummary; + } + } +} \ No newline at end of file From 5c4631c1d4ce0746d8f19061d9d090af64a73400 Mon Sep 17 00:00:00 2001 From: SergeyNefyodov Date: Wed, 8 May 2024 20:28:43 +0200 Subject: [PATCH 2/2] Cleanup code --- .../Descriptors/DatumPlaneDescriptor.cs | 85 +++++-------------- 1 file changed, 20 insertions(+), 65 deletions(-) diff --git a/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs b/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs index fcff7fd4..db9ebbcc 100644 --- a/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs +++ b/source/RevitLookup/Core/ComponentModel/Descriptors/DatumPlaneDescriptor.cs @@ -58,17 +58,10 @@ ResolveSet ResolveDatumExtentTypeInView() { var resolveSummary = new ResolveSet(2); - if (datumPlane.CanBeVisibleInView(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}"); - } - else - { - resolveSummary.AppendVariant("Datum plane can not be visible on active view"); - } + 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}"); return resolveSummary; } @@ -77,35 +70,18 @@ ResolveSet ResolveCurvesInView() { var resolveSummary = new ResolveSet(2); - if (datumPlane.CanBeVisibleInView(context.ActiveView)) - { - resolveSummary.AppendVariant(datumPlane.GetCurvesInView(DatumExtentType.Model, context.ActiveView), $"Model, Active view"); - resolveSummary.AppendVariant(datumPlane.GetCurvesInView(DatumExtentType.ViewSpecific, context.ActiveView), $"ViewSpecific, Active view"); - } - else - { - resolveSummary.AppendVariant("Datum plane can not be visible on 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; } ResolveSet ResolveLeader() { - if (datumPlane is ReferencePlane) - return new ResolveSet().AppendVariant("This datum plane has no leaders."); - var resolveSummary = new ResolveSet(2); - if (datumPlane.CanBeVisibleInView(context.ActiveView)) - { - resolveSummary.AppendVariant(datumPlane.GetLeader(DatumEnds.End0, context.ActiveView), $"End 0, Active view"); - resolveSummary.AppendVariant(datumPlane.GetLeader(DatumEnds.End1, context.ActiveView), $"End 1, Active view"); - } - else - { - resolveSummary.AppendVariant("Datum plane can not be visible on 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; } @@ -117,11 +93,10 @@ ResolveSet ResolvePropagationViews() foreach (var view in views) { - if (datumPlane.CanBeVisibleInView(view)) - { - var result = datumPlane.GetPropagationViews(view); - resolveSummary.AppendVariant(result, $"{view.Name}"); - } + if (!datumPlane.CanBeVisibleInView(view)) continue; + + var result = datumPlane.GetPropagationViews(view); + resolveSummary.AppendVariant(result, view.Name); } return resolveSummary; @@ -129,44 +104,24 @@ ResolveSet ResolvePropagationViews() ResolveSet ResolveHasBubbleInView() { - if (datumPlane is ReferencePlane) - return new ResolveSet().AppendVariant("This datum plane doesn't support bubble operations."); - var resolveSummary = new ResolveSet(2); - if (datumPlane.CanBeVisibleInView(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}"); - } - else - { - resolveSummary.AppendVariant("Datum plane can not be visible on active view"); - } + 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}"); return resolveSummary; } ResolveSet ResolveBubbleVisibleInView() { - if (datumPlane is ReferencePlane) - return new ResolveSet().AppendVariant("This datum plane doesn't support bubble operations."); - var resolveSummary = new ResolveSet(2); - if (datumPlane.CanBeVisibleInView(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}"); - } - else - { - resolveSummary.AppendVariant("Datum plane can not be visible on active view"); - } + 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}"); return resolveSummary; }