diff --git a/src/RevitOpeningPlacement/Services/CableTrayOffsetFinder.cs b/src/RevitOpeningPlacement/Services/CableTrayOffsetFinder.cs index 4833a825..cd253a05 100644 --- a/src/RevitOpeningPlacement/Services/CableTrayOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/CableTrayOffsetFinder.cs @@ -6,10 +6,9 @@ using RevitClashDetective.Models.Extensions; using RevitOpeningPlacement.Models.Configs; -using RevitOpeningPlacement.OpeningModels; namespace RevitOpeningPlacement.Services { - internal class CableTrayOffsetFinder : OutcomingTaskOffsetFinder, IOutcomingTaskOffsetFinder { + internal class CableTrayOffsetFinder : OutcomingTaskOffsetFinder { private MepCategory _category; public CableTrayOffsetFinder( @@ -51,29 +50,5 @@ protected override Solid GetMepSolid(CableTray cableTray) { .ToList(); return ElementExtensions.UniteSolids(solids); } - - public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindHorizontalOffsetsSum(opening, mepElement as CableTray); - } - - public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindHorizontalOffsetsSum(opening, mepElement as CableTray); - } - - public double GetMinHorizontalOffsetSum(Element mepElement) { - return base.GetMinHorizontalOffsetSum(mepElement as CableTray); - } - - public double GetMaxHorizontalOffsetSum(Element mepElement) { - return base.GetMaxHorizontalOffsetSum(mepElement as CableTray); - } - - public double GetMinVerticalOffsetSum(Element mepElement) { - return base.GetMinVerticalOffsetSum(mepElement as CableTray); - } - - public double GetMaxVerticalOffsetSum(Element mepElement) { - return base.GetMaxVerticalOffsetSum(mepElement as CableTray); - } } } diff --git a/src/RevitOpeningPlacement/Services/ConduitOffsetFinder.cs b/src/RevitOpeningPlacement/Services/ConduitOffsetFinder.cs index 5f655019..e7afde21 100644 --- a/src/RevitOpeningPlacement/Services/ConduitOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/ConduitOffsetFinder.cs @@ -4,10 +4,9 @@ using RevitClashDetective.Models.Extensions; using RevitOpeningPlacement.Models.Configs; -using RevitOpeningPlacement.OpeningModels; namespace RevitOpeningPlacement.Services { - internal class ConduitOffsetFinder : OutcomingTaskOffsetFinder, IOutcomingTaskOffsetFinder { + internal class ConduitOffsetFinder : OutcomingTaskOffsetFinder { private MepCategory _category; public ConduitOffsetFinder( @@ -39,29 +38,5 @@ protected override MepCategory GetCategory(Conduit mepElement) { protected override Solid GetMepSolid(Conduit mepElement) { return mepElement.GetSolid(); } - - public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindHorizontalOffsetsSum(opening, mepElement as Conduit); - } - - public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindVerticalOffsetsSum(opening, mepElement as Conduit); - } - - public double GetMinHorizontalOffsetSum(Element mepElement) { - return base.GetMinHorizontalOffsetSum(mepElement as Conduit); - } - - public double GetMaxHorizontalOffsetSum(Element mepElement) { - return base.GetMaxHorizontalOffsetSum(mepElement as Conduit); - } - - public double GetMinVerticalOffsetSum(Element mepElement) { - return base.GetMinVerticalOffsetSum(mepElement as Conduit); - } - - public double GetMaxVerticalOffsetSum(Element mepElement) { - return base.GetMaxVerticalOffsetSum(mepElement as Conduit); - } } } diff --git a/src/RevitOpeningPlacement/Services/DuctOffsetFinder.cs b/src/RevitOpeningPlacement/Services/DuctOffsetFinder.cs index 053fdff4..e21b3896 100644 --- a/src/RevitOpeningPlacement/Services/DuctOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/DuctOffsetFinder.cs @@ -4,10 +4,9 @@ using RevitClashDetective.Models.Extensions; using RevitOpeningPlacement.Models.Configs; -using RevitOpeningPlacement.OpeningModels; namespace RevitOpeningPlacement.Services { - internal class DuctOffsetFinder : OutcomingTaskOffsetFinder, IOutcomingTaskOffsetFinder { + internal class DuctOffsetFinder : OutcomingTaskOffsetFinder { private MepCategory _roundCategory; private MepCategory _rectangleCategory; @@ -26,10 +25,12 @@ public DuctOffsetFinder( protected override MepCategory GetCategory(Duct mepElement) { if(mepElement.DuctType.Shape == ConnectorProfileType.Round) { - _roundCategory = _roundCategory ?? OpeningConfig.Categories[Models.MepCategoryEnum.RoundDuct]; + _roundCategory = _roundCategory + ?? OpeningConfig.Categories[Models.MepCategoryEnum.RoundDuct]; return _roundCategory; } else { - _rectangleCategory = _rectangleCategory ?? OpeningConfig.Categories[Models.MepCategoryEnum.RectangleDuct]; + _rectangleCategory = _rectangleCategory + ?? OpeningConfig.Categories[Models.MepCategoryEnum.RectangleDuct]; return _rectangleCategory; } } @@ -53,29 +54,5 @@ protected override double GetWidth(Duct mepElement) { protected override Solid GetMepSolid(Duct mepElement) { return mepElement.GetSolid(); } - - public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindHorizontalOffsetsSum(opening, mepElement as Duct); - } - - public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindVerticalOffsetsSum(opening, mepElement as Duct); - } - - public double GetMinHorizontalOffsetSum(Element mepElement) { - return base.GetMinHorizontalOffsetSum(mepElement as Duct); - } - - public double GetMaxHorizontalOffsetSum(Element mepElement) { - return base.GetMaxHorizontalOffsetSum(mepElement as Duct); - } - - public double GetMinVerticalOffsetSum(Element mepElement) { - return base.GetMinVerticalOffsetSum(mepElement as Duct); - } - - public double GetMaxVerticalOffsetSum(Element mepElement) { - return base.GetMaxVerticalOffsetSum(mepElement as Duct); - } } } diff --git a/src/RevitOpeningPlacement/Services/FamilyInstanceOffsetFinder.cs b/src/RevitOpeningPlacement/Services/FamilyInstanceOffsetFinder.cs index 850832aa..0365df81 100644 --- a/src/RevitOpeningPlacement/Services/FamilyInstanceOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/FamilyInstanceOffsetFinder.cs @@ -8,10 +8,9 @@ using RevitClashDetective.Models.Extensions; using RevitOpeningPlacement.Models.Configs; -using RevitOpeningPlacement.OpeningModels; namespace RevitOpeningPlacement.Services { - internal class FamilyInstanceOffsetFinder : OutcomingTaskOffsetFinder, IOutcomingTaskOffsetFinder { + internal class FamilyInstanceOffsetFinder : OutcomingTaskOffsetFinder { public FamilyInstanceOffsetFinder( OpeningConfig openingConfig, OutcomingTaskGeometryProvider geometryProvider, @@ -61,29 +60,5 @@ protected override double GetWidth(FamilyInstance mepElement) { protected override Solid GetMepSolid(FamilyInstance mepElement) { return mepElement.GetSolid(); } - - public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindHorizontalOffsetsSum(opening, mepElement as FamilyInstance); - } - - public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindVerticalOffsetsSum(opening, mepElement as FamilyInstance); - } - - public double GetMinHorizontalOffsetSum(Element mepElement) { - return base.GetMinHorizontalOffsetSum(mepElement as FamilyInstance); - } - - public double GetMaxHorizontalOffsetSum(Element mepElement) { - return base.GetMaxHorizontalOffsetSum(mepElement as FamilyInstance); - } - - public double GetMinVerticalOffsetSum(Element mepElement) { - return base.GetMinVerticalOffsetSum(mepElement as FamilyInstance); - } - - public double GetMaxVerticalOffsetSum(Element mepElement) { - return base.GetMaxVerticalOffsetSum(mepElement as FamilyInstance); - } } } diff --git a/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.T.cs b/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.T.cs deleted file mode 100644 index fc1aa852..00000000 --- a/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.T.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Autodesk.Revit.DB; - -using RevitOpeningPlacement.OpeningModels; - -namespace RevitOpeningPlacement.Services { - /// - /// Интерфейс, предоставляющий методы для определения отступа от элемента ВИС из активного файла
- /// до граней исходящего задания на отверстие из активного файла.
- /// Ожидается, что элемент ВИС пересекается с заданием на отверстие, но не выходит за габариты этого задания. - ///
- /// Тип элемента ВИС, проходящего через задание на отверстие - internal interface IOutcomingTaskOffsetFinder where T : Element { - /// - /// Находит сумму горизонтальных отступов от элемента ВИС до граней задания на отверстие - /// - /// Задание на отверстие из активного файла - /// Элемент ВИС из активного файла, проходящий через задание - /// Значение суммы горизонтальных отступов в единицах Revit (футах) от элемента ВИС - /// до граней задания на отверстие. - double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, T mepElement); - - /// - /// Находит сумму вертикальных отступов от элемента ВИС до граней задания на отверстие - /// - /// Задание на отверстие из активного файла - /// Элемент ВИС из активного файла, проходящий через задание - /// Значение суммы вертикальных отступов в единицах Revit (футах) от элемента ВИС - /// до граней задания на отверстие. - double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, T mepElement); - - /// - /// Определяет минимальное допустимое значение суммы горизонтальных отступов от элемента ВИС - /// до граней задания на отверстие - /// - /// Элемент ВИС из активного файла - /// Минимальное допустимое значение суммы горизонтальных отступов в единицах Revit (футах) - double GetMinHorizontalOffsetSum(T mepElement); - - /// - /// Определяет максимальное допустимое значение суммы горизонтальных отступов от элемента ВИС - /// до граней задания на отверстие - /// - /// Элемент ВИС из активного файла - /// Максимальное допустимое значение суммы горизонтальных отступов в единицах Revit (футах) - double GetMaxHorizontalOffsetSum(T mepElement); - - /// - /// Определяет минимальное допустимое значение суммы вертикальных отступов от элемента ВИС - /// до граней задания на отверстие - /// - /// Элемент ВИС из активного файла - /// Минимальное допустимое значение суммы вертикальных отступов в единицах Revit (футах) - double GetMinVerticalOffsetSum(T mepElement); - - /// - /// Определяет максимальное допустимое значение суммы вертикальных отступов от элемента ВИС - /// до граней задания на отверстие - /// - /// Элемент ВИС из активного файла - /// Максимальное допустимое значение суммы вертикальных отступов в единицах Revit (футах) - double GetMaxVerticalOffsetSum(T mepElement); - } -} diff --git a/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.cs b/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.cs index 22ad3734..46fc7824 100644 --- a/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/IOutcomingTaskOffsetFinder.cs @@ -1,11 +1,62 @@ using Autodesk.Revit.DB; +using RevitOpeningPlacement.OpeningModels; + namespace RevitOpeningPlacement.Services { /// /// Интерфейс, предоставляющий методы для определения отступа от элемента ВИС из активного файла
/// до граней исходящего задания на отверстие из активного файла.
/// Ожидается, что элемент ВИС пересекается с заданием на отверстие, но не выходит за габариты этого задания. ///
- internal interface IOutcomingTaskOffsetFinder : IOutcomingTaskOffsetFinder { + internal interface IOutcomingTaskOffsetFinder { + /// + /// Находит сумму горизонтальных отступов от элемента ВИС до граней задания на отверстие + /// + /// Задание на отверстие из активного файла + /// Элемент ВИС из активного файла, проходящий через задание + /// Значение суммы горизонтальных отступов в единицах Revit (футах) от элемента ВИС + /// до граней задания на отверстие. + double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement); + + /// + /// Находит сумму вертикальных отступов от элемента ВИС до граней задания на отверстие + /// + /// Задание на отверстие из активного файла + /// Элемент ВИС из активного файла, проходящий через задание + /// Значение суммы вертикальных отступов в единицах Revit (футах) от элемента ВИС + /// до граней задания на отверстие. + double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement); + + /// + /// Определяет минимальное допустимое значение суммы горизонтальных отступов от элемента ВИС + /// до граней задания на отверстие + /// + /// Элемент ВИС из активного файла + /// Минимальное допустимое значение суммы горизонтальных отступов в единицах Revit (футах) + double GetMinHorizontalOffsetSum(Element mepElement); + + /// + /// Определяет максимальное допустимое значение суммы горизонтальных отступов от элемента ВИС + /// до граней задания на отверстие + /// + /// Элемент ВИС из активного файла + /// Максимальное допустимое значение суммы горизонтальных отступов в единицах Revit (футах) + double GetMaxHorizontalOffsetSum(Element mepElement); + + /// + /// Определяет минимальное допустимое значение суммы вертикальных отступов от элемента ВИС + /// до граней задания на отверстие + /// + /// Элемент ВИС из активного файла + /// Минимальное допустимое значение суммы вертикальных отступов в единицах Revit (футах) + double GetMinVerticalOffsetSum(Element mepElement); + + /// + /// Определяет максимальное допустимое значение суммы вертикальных отступов от элемента ВИС + /// до граней задания на отверстие + /// + /// Элемент ВИС из активного файла + /// Максимальное допустимое значение суммы вертикальных отступов в единицах Revit (футах) + double GetMaxVerticalOffsetSum(Element mepElement); } } diff --git a/src/RevitOpeningPlacement/Services/OutcomingTaskOffsetFinder.cs b/src/RevitOpeningPlacement/Services/OutcomingTaskOffsetFinder.cs index 3f5f4bfe..6f147a9c 100644 --- a/src/RevitOpeningPlacement/Services/OutcomingTaskOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/OutcomingTaskOffsetFinder.cs @@ -4,7 +4,7 @@ using RevitOpeningPlacement.OpeningModels; namespace RevitOpeningPlacement.Services { - internal abstract class OutcomingTaskOffsetFinder : IOutcomingTaskOffsetFinder where T : Element { + internal abstract class OutcomingTaskOffsetFinder : IOutcomingTaskOffsetFinder where T : Element { protected OutcomingTaskOffsetFinder( OpeningConfig openingConfig, OutcomingTaskGeometryProvider geometryProvider, @@ -32,7 +32,7 @@ protected OutcomingTaskOffsetFinder( protected abstract int TessellationCount { get; } - public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, T mepElement) { + public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { if(IsSpecialOrthogonalCase(opening, mepElement)) { return FindHorizontalOffsetsSumOrthogonal(opening, mepElement); } else { @@ -48,7 +48,7 @@ public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, T mepEle } } - public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, T mepElement) { + public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { if(IsSpecialOrthogonalCase(opening, mepElement)) { return FindVerticalOffsetsSumOrthogonal(opening, mepElement); } else { @@ -64,26 +64,30 @@ public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, T mepEleme } } - public double GetMinHorizontalOffsetSum(T mepElement) { - var offset = GetOffset(mepElement, GetWidth(mepElement)); + public double GetMinHorizontalOffsetSum(Element mepElement) { + var element = GetMepElement(mepElement); + var offset = GetOffset(mepElement, GetWidth(element)); var tolerance = GetTolerance(mepElement); return offset > tolerance ? offset - tolerance : 0; } - public double GetMaxHorizontalOffsetSum(T mepElement) { - var offset = GetOffset(mepElement, GetWidth(mepElement)); + public double GetMaxHorizontalOffsetSum(Element mepElement) { + var element = GetMepElement(mepElement); + var offset = GetOffset(mepElement, GetWidth(element)); var tolerance = GetTolerance(mepElement); return offset + tolerance; } - public double GetMinVerticalOffsetSum(T mepElement) { - var offset = GetOffset(mepElement, GetHeight(mepElement)); + public double GetMinVerticalOffsetSum(Element mepElement) { + var element = GetMepElement(mepElement); + var offset = GetOffset(mepElement, GetHeight(element)); var tolerance = GetTolerance(mepElement); return offset > tolerance ? offset - tolerance : 0; } - public double GetMaxVerticalOffsetSum(T mepElement) { - var offset = GetOffset(mepElement, GetHeight(mepElement)); + public double GetMaxVerticalOffsetSum(Element mepElement) { + var element = GetMepElement(mepElement); + var offset = GetOffset(mepElement, GetHeight(element)); var tolerance = GetTolerance(mepElement); return offset + tolerance; } @@ -94,8 +98,9 @@ public double GetMaxVerticalOffsetSum(T mepElement) { /// Задание на отверстие /// Элемент ВИС /// Солид, образованный пересечением тел - protected Solid GetIntersectionSolid(OpeningMepTaskOutcoming opening, T mepElement) { - var intersection = GetMepSolid(mepElement); + protected Solid GetIntersectionSolid(OpeningMepTaskOutcoming opening, Element mepElement) { + var element = GetMepElement(mepElement); + var intersection = GetMepSolid(element); var frontFace = GeometryProvider.GetFrontPlane(opening); var backFace = GeometryProvider.GetBackPlane(opening); @@ -109,8 +114,9 @@ protected Solid GetIntersectionSolid(OpeningMepTaskOutcoming opening, T mepEleme /// /// Элемент ВИС /// Точность в единицах Revit - protected double GetTolerance(T mepElement) { - return LengthConverter.ConvertToInternal(GetCategory(mepElement).Rounding); + protected double GetTolerance(Element mepElement) { + var element = GetMepElement(mepElement); + return LengthConverter.ConvertToInternal(GetCategory(element).Rounding); } /// @@ -119,8 +125,9 @@ protected double GetTolerance(T mepElement) { /// Элемент ВИС /// Размер элемента ВИС единицах Revit (футах) /// Требуемый отступ суммарно с двух сторон от элемента ВИС единицах Revit (футах) - protected double GetOffset(T mepElement, double size) { - return GetCategory(mepElement).GetOffsetValue(size); + protected double GetOffset(Element mepElement, double size) { + var element = GetMepElement(mepElement); + return GetCategory(element).GetOffsetValue(size); } /// @@ -146,15 +153,20 @@ protected double GetOffset(T mepElement, double size) { protected abstract MepCategory GetCategory(T mepElement); + private T GetMepElement(Element mepElement) { + return mepElement as T; + } + /// /// Находит сумму отступов по горизонтали от элемента ВИС до габаритов задания в частном ортогональном случае /// /// Задание на отверстие /// Элемент ВИС /// Сумма отступов по горизонтали в единицах Revit - private double FindHorizontalOffsetsSumOrthogonal(OpeningMepTaskOutcoming opening, T mepElement) { + private double FindHorizontalOffsetsSumOrthogonal(OpeningMepTaskOutcoming opening, Element mepElement) { var openingWidth = GeometryProvider.GetWidth(opening); - var mepWidth = GetWidth(mepElement); + var element = GetMepElement(mepElement); + var mepWidth = GetWidth(element); return openingWidth - mepWidth; } @@ -164,9 +176,10 @@ private double FindHorizontalOffsetsSumOrthogonal(OpeningMepTaskOutcoming openin /// Задание на отверстие /// Элемент ВИС /// Сумма отступов по вертикали в единицах Revit - private double FindVerticalOffsetsSumOrthogonal(OpeningMepTaskOutcoming opening, T mepElement) { + private double FindVerticalOffsetsSumOrthogonal(OpeningMepTaskOutcoming opening, Element mepElement) { var openingHeight = GeometryProvider.GetHeight(opening); - var mepHeight = GetHeight(mepElement); + var element = GetMepElement(mepElement); + var mepHeight = GetHeight(element); return openingHeight - mepHeight; } @@ -176,7 +189,7 @@ private double FindVerticalOffsetsSumOrthogonal(OpeningMepTaskOutcoming opening, /// Задание на отверстие /// Элемент ВИС /// True, если элемент ВИС пересекает задание на отверстие под прямым углом, иначе false - private bool IsSpecialOrthogonalCase(OpeningMepTaskOutcoming opening, T mepElement) { + private bool IsSpecialOrthogonalCase(OpeningMepTaskOutcoming opening, Element mepElement) { if(mepElement is MEPCurve mepCurve) { var frontPlane = GeometryProvider.GetRotationAsVector(opening); var mepDirection = ((Line) ((LocationCurve) mepCurve.Location).Curve).Direction; diff --git a/src/RevitOpeningPlacement/Services/PipeOffsetFinder.cs b/src/RevitOpeningPlacement/Services/PipeOffsetFinder.cs index 4c1db70b..e13abfbe 100644 --- a/src/RevitOpeningPlacement/Services/PipeOffsetFinder.cs +++ b/src/RevitOpeningPlacement/Services/PipeOffsetFinder.cs @@ -4,10 +4,9 @@ using RevitClashDetective.Models.Extensions; using RevitOpeningPlacement.Models.Configs; -using RevitOpeningPlacement.OpeningModels; namespace RevitOpeningPlacement.Services { - internal class PipeOffsetFinder : OutcomingTaskOffsetFinder, IOutcomingTaskOffsetFinder { + internal class PipeOffsetFinder : OutcomingTaskOffsetFinder { private MepCategory _category; public PipeOffsetFinder( @@ -37,29 +36,5 @@ protected override double GetWidth(Pipe mepElement) { protected override Solid GetMepSolid(Pipe mepElement) { return mepElement.GetSolid(); } - - public double FindHorizontalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindHorizontalOffsetsSum(opening, mepElement as Pipe); - } - - public double FindVerticalOffsetsSum(OpeningMepTaskOutcoming opening, Element mepElement) { - return base.FindVerticalOffsetsSum(opening, mepElement as Pipe); - } - - public double GetMinHorizontalOffsetSum(Element mepElement) { - return base.GetMinHorizontalOffsetSum(mepElement as Pipe); - } - - public double GetMaxHorizontalOffsetSum(Element mepElement) { - return base.GetMaxHorizontalOffsetSum(mepElement as Pipe); - } - - public double GetMinVerticalOffsetSum(Element mepElement) { - return base.GetMinVerticalOffsetSum(mepElement as Pipe); - } - - public double GetMaxVerticalOffsetSum(Element mepElement) { - return base.GetMaxVerticalOffsetSum(mepElement as Pipe); - } } }