Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RevitOpeningPlacement: Рефакторинг структуры команды "Навигатор" #99

Merged
merged 7 commits into from
Oct 21, 2024
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
Loading