Skip to content

Commit

Permalink
RevitOpeningPlacement: Рефакторинг структуры команды "Навигатор" (#99)
Browse files Browse the repository at this point in the history
  • Loading branch information
vlastroG authored Oct 21, 2024
1 parent 60cdcc7 commit 928bf2c
Show file tree
Hide file tree
Showing 21 changed files with 1,446 additions and 833 deletions.
410 changes: 82 additions & 328 deletions src/RevitOpeningPlacement/GetOpeningTasksCmd.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ internal static class ISolidProviderExtension {
/// <returns>True, если разница объемов текущего и поданного <see cref="ISolidProvider">ISolidProvider</see> меньше, либо равна 1 см3,
/// и если разница координат ограничивающих их <see cref="BoundingBoxXYZ"/> меньше, либо равна <paramref name="tolerance"/>;
/// Иначе False</returns>
#pragma warning disable 0618
[Obsolete("Use ISolidProviderUtils.EqualsSolid", error: false)]
internal static bool EqualsSolid(this ISolidProvider solidProvider, Solid otherSolid, double tolerance) {
var thisSolid = solidProvider.GetSolid();

Expand Down Expand Up @@ -86,6 +88,7 @@ internal static bool SolidsIntersect(Solid firstSolid, BoundingBoxXYZ firstBBox,
return false;
}

[Obsolete("Use ISolidProviderUtils.IntersectsSolid", error: false)]
internal static bool IntersectsSolid(this ISolidProvider thisSolidProvider, Solid otherSolid, BoundingBoxXYZ otherSolidBBox) {
var thisSolid = thisSolidProvider.GetSolid();
var thisBBox = thisSolidProvider.GetTransformedBBoxXYZ();
Expand Down Expand Up @@ -117,7 +120,7 @@ internal static bool IntersectsSolidProvider(this ISolidProvider thisSolidProvid
internal static bool EqualsSolid(this ISolidProvider solidProvider, Solid otherSolid) {
return EqualsSolid(solidProvider, otherSolid, _toleranceDistance);
}

#pragma warning restore 0618

/// <summary>
/// Проверяет на равенство текущего <see cref="Solid"/> и поданного <see cref="Solid"/>.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public RealOpeningArPlacer(RevitRepository revitRepository) {
/// <summary>
/// Размещение чистового отверстия по одному заданию на отверстие из связи в одном хосте
/// </summary>
#pragma warning disable 0618
public void PlaceSingleOpeningByOneTask() {
Element host = _revitRepository.PickHostForRealOpening();
OpeningMepTaskIncoming openingTask = _revitRepository.PickSingleOpeningMepTaskIncoming();
Expand All @@ -68,10 +69,12 @@ public void PlaceSingleOpeningByOneTask() {
transaction.Commit();
}
}
#pragma warning restore 0618

/// <summary>
/// Размещение объединенного чистового отверстия по одному или нескольким заданиям на отверстия из связи(ей) в одном хосте
/// </summary>
#pragma warning disable 0618
public void PlaceUnitedOpeningByManyTasks() {
Element host = _revitRepository.PickHostForRealOpening();
HashSet<OpeningMepTaskIncoming> openingTasks = _revitRepository.PickManyOpeningMepTasksIncoming().Where(opening => opening.IntersectsSolid(host.GetSolid(), host.GetBoundingBox())).ToHashSet();
Expand All @@ -92,10 +95,12 @@ public void PlaceUnitedOpeningByManyTasks() {
throw new OperationCanceledException();
}
}
#pragma warning restore 0618

/// <summary>
/// Размещение нескольких одиночных чистовых отверстий по нескольким заданиям на отверстия из связи(ей) без их объединения в одном хосте
/// </summary>
#pragma warning disable 0618
public void PlaceSingleOpeningsInOneHost() {
Element host = _revitRepository.PickHostForRealOpening();
HashSet<OpeningMepTaskIncoming> openingTasks = _revitRepository.PickManyOpeningMepTasksIncoming().Where(opening => opening.IntersectsSolid(host.GetSolid(), host.GetBoundingBox())).ToHashSet();
Expand All @@ -118,10 +123,12 @@ public void PlaceSingleOpeningsInOneHost() {
_revitRepository.ShowErrorMessage(sb.ToString());
}
}
#pragma warning restore 0618

/// <summary>
/// Размещение нескольких одиночных чистовых отверстий в выбранных хостах по всем заданиям на отверстия из связи(ей), которые пересекаются с этими хостами
/// </summary>
#pragma warning disable 0618
public void PlaceSingleOpeningsInManyHosts() {
ICollection<Element> hosts = _revitRepository.PickHostsForRealOpenings();
ICollection<OpeningMepTaskIncoming> allOpeningTasks = _revitRepository.GetOpeningsMepTasksIncoming();
Expand Down Expand Up @@ -166,6 +173,7 @@ public void PlaceSingleOpeningsInManyHosts() {
_revitRepository.ShowErrorMessage(sb.ToString());
}
}
#pragma warning restore 0618


/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public void PlaceSingleOpeningByOneTask() {
PlaceSingleOpeningByOneIncomingTask(host, openingTask);
}

#pragma warning disable 0618
public void PlaceUnitedOpeningByManyTasks() {
Element host = _revitRepository.PickHostForRealOpening();
ICollection<IOpeningTaskIncoming> openingTasks = PickOpeningsTaskIncoming(_config);
Expand All @@ -60,7 +61,9 @@ public void PlaceUnitedOpeningByManyTasks() {
openingTasks.Where(opening => opening.IntersectsSolid(host.GetSolid(), host.GetBoundingBox())).ToArray()
);
}
#pragma warning restore 0618

#pragma warning disable 0618
public void PlaceSingleOpeningsInOneHost() {
Element host = _revitRepository.PickHostForRealOpening();
ICollection<IOpeningTaskIncoming> openingTasks = PickOpeningsTaskIncoming(_config);
Expand All @@ -69,6 +72,7 @@ public void PlaceSingleOpeningsInOneHost() {
openingTasks.Where(opening => opening.IntersectsSolid(host.GetSolid(), host.GetBoundingBox())).ToArray()
);
}
#pragma warning restore 0618

public void PlaceSingleOpeningsInManyHosts() {
ICollection<Element> hosts = _revitRepository.PickHostsForRealOpenings();
Expand Down Expand Up @@ -125,6 +129,7 @@ private ICollection<IOpeningTaskIncoming> GetAllOpeningsTaskIncoming(OpeningReal
/// <summary>
/// Размещение чистового отверстия КР по одному заданию на отверстие из связи в одном хосте
/// </summary>
#pragma warning disable 0618
private void PlaceSingleOpeningByOneIncomingTask(Element host, IOpeningTaskIncoming openingTask) {
using(var transaction = _revitRepository.GetTransaction("Размещение одиночного отверстия")) {
try {
Expand All @@ -141,6 +146,7 @@ private void PlaceSingleOpeningByOneIncomingTask(Element host, IOpeningTaskIncom
transaction.Commit();
}
}
#pragma warning restore 0618

/// <summary>
/// Размещение объединенного чистового отверстия КР по одному или нескольким заданиям на отверстия из связи(ей) в одном хосте
Expand Down Expand Up @@ -188,6 +194,7 @@ private void PlaceSingleOpeningsInOneHostByIncomingTasks(Element host, ICollecti
/// <summary>
/// Размещение нескольких одиночных чистовых отверстий КР в выбранных хостах по всем заданиям на отверстия из связи(ей), которые пересекаются с этими хостами
/// </summary>
#pragma warning disable 0618
private void PlaceSingleOpeningsInManyHostsByIncomingTasks(ICollection<Element> hosts, ICollection<IOpeningTaskIncoming> allOpeningTasks) {
StringBuilder sb = new StringBuilder();
using(var transaction = _revitRepository.GetTransaction("Одиночные отверстия в нескольких хостах")) {
Expand Down Expand Up @@ -226,6 +233,7 @@ private void PlaceSingleOpeningsInManyHostsByIncomingTasks(ICollection<Element>
_revitRepository.ShowErrorMessage(sb.ToString());
}
}
#pragma warning restore 0618


/// <summary>
Expand Down
6 changes: 3 additions & 3 deletions src/RevitOpeningPlacement/Models/RevitRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -482,10 +482,10 @@ public FamilyInstance CreateInstance(XYZ point, FamilySymbol familySymbol, Eleme
}

public FamilyInstance CreateInstance(FamilySymbol type, XYZ point, Level level) {
if(!type.IsActive) {
type.Activate();
}
if(level != null) {
if(!type.IsActive) {
type.Activate();
}
point = point - XYZ.BasisZ * level.ProjectElevation;
return _document.Create.NewFamilyInstance(point, type, level, StructuralType.NonStructural);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,7 @@ private ICollection<ElementId> GetIntersectingStructureElementsIds(
/// Солид текущего задания на отверстие в координатах активного файла - получателя заданий</param>
/// <param name="thisOpeningBBox">
/// Бокс текущего задания на отверстие в координатах активного файла - получателя заданий</param>
#pragma warning disable 0618
private ICollection<ElementId> GetIntersectingOpeningsIds(
ICollection<OpeningRealKr> realOpenings,
Solid thisOpeningSolid,
Expand All @@ -223,5 +224,6 @@ private ICollection<ElementId> GetIntersectingOpeningsIds(
}
}
}
#pragma warning restore 0618
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ private ICollection<ElementId> GetIntersectingStructureElementsIds(Solid thisOpe
/// <param name="realOpenings">Коллекция чистовых отверстий из активного документа ревита</param>
/// <param name="thisOpeningSolid">Солид текущего задания на отверстие в координатах активного файла - получателя заданий</param>
/// <param name="thisOpeningBBox">Бокс текущего задания на отверстие в координатах активного файла - получателя заданий</param>
#pragma warning disable 0618
private ICollection<ElementId> GetIntersectingOpeningsIds(ICollection<IOpeningReal> realOpenings, Solid thisOpeningSolid, BoundingBoxXYZ thisOpeningBBox) {
if((thisOpeningSolid is null) || (thisOpeningSolid.Volume <= 0)) {
return Array.Empty<ElementId>();
Expand All @@ -349,6 +350,7 @@ private ICollection<ElementId> GetIntersectingOpeningsIds(ICollection<IOpeningRe
}
}
}
#pragma warning restore 0618

/// <summary>
/// Возвращает Id элемента конструкции, который наиболее похож на хост для задания на отверстие.
Expand Down
Loading

0 comments on commit 928bf2c

Please sign in to comment.