Получение всех объектов вокруг Room

Автор Тема: Получение всех объектов вокруг Room  (Прочитано 8872 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Получение всех объектов вокруг Room
« Ответ #15 : 01-02-2020, 21:38:33 »
Я в шоке от ревита :)
Если дверь открывается наружу, то она не определяется (null), а если внутрь, то Room возвращается...
---
Дверь справа не обрабатывается, слева все ОК. Тоже самое и с окном, если его отзеркалить маркером...
---

---
Вижу два решения для себя:
1. если Family возвращается null отзеркалить его и снова взять Room.
2.искать пренадлежность двери через Face...
« Последнее редактирование: 01-02-2020, 22:26:22 от Agens »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Получение всех объектов вокруг Room
« Ответ #16 : 05-02-2020, 10:04:43 »
Попробуй по аналогии:

Код - C# [Выбрать]
  1. door.get_FromRoom(phase)
и
Код - C# [Выбрать]
  1. door.get_ToRoom(phase)

А вообще тут всё сильно зависит от аккуратности моделирования. Попробуй ещё с SpatialElementGeometryCalculator поковыряться, получая все граничные элементы по конкретному помещению

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Получение всех объектов вокруг Room
« Ответ #17 : 05-02-2020, 11:31:06 »
Код - C# [Выбрать]
  1. door.get_FromRoom(phase);
- выдает Room в обоих случая, пока подходит больше всего...
Код - C# [Выбрать]
  1. .flipFacing()
- менять не нужно...
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Получение всех объектов вокруг Room
« Ответ #18 : 05-02-2020, 11:36:48 »
А вообще тут всё сильно зависит от аккуратности моделирования. Попробуй ещё с SpatialElementGeometryCalculator поковыряться, получая все граничные элементы по конкретному помещению
Да, "ковыряю"... Можно вопрос тут задам:
Код - C# [Выбрать]
  1.         private IList<SpatialElementBoundarySubface> GetAllSubfacefSpase(Space space)
  2.         {
  3.             Room room = space.Room;
  4.             List<SpatialElementBoundarySubface> allsubfacelist = new List<SpatialElementBoundarySubface>();
  5.  
  6.             SpatialElementGeometryCalculator calc = new SpatialElementGeometryCalculator(m_doc, new SpatialElementBoundaryOptions());
  7.             SpatialElementGeometryResults results = calc.CalculateSpatialElementGeometry(room);
  8.  
  9.             Solid roomSolid = results.GetGeometry(); // Получаем солиды
  10.  
  11.             foreach (Face face in roomSolid.Faces) // Перебираем поверхности
  12.             {
  13.                 IList<SpatialElementBoundarySubface> subfaceList = results.GetBoundaryFaceInfo(face); // Перебираем субповерхности
  14.                 foreach (SpatialElementBoundarySubface subface in subfaceList)
  15.                 {
  16.                     allsubfacelist.Add(subface);
  17.                 }
  18.             }
  19.             return allsubfacelist;
  20.         }
Room состоит из Solid, Solid состоит из Face (+ Edge), зачем мы лезем в subFace? Почему не достаточно работать с Face?
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Получение всех объектов вокруг Room
« Ответ #19 : 05-02-2020, 11:42:26 »
одна поверхность solid-а помещения может быть фактически ограничена несколькими элементами

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Получение всех объектов вокруг Room
« Ответ #20 : 05-02-2020, 11:53:32 »
а где про Face почитать? Face состоит из SpatialElementBoundarySubface? Что-то я в этом месте не понимаю :) Природу/геометрию SpatialElementBoundarySubface.
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Получение всех объектов вокруг Room
« Ответ #21 : 05-02-2020, 12:11:26 »
Как всегда, в SDK.

Во-первых, собственно, в описаниях классов и методов, во-вторых, есть Samples\RoofsRooms - пример использования, в третьих собственные исследования с помощью, например, Revit pyhon shell + RevitLookup

Оффлайн Agens

  • ADN OPEN
  • ***
  • Сообщений: 223
  • Карма: 0
Re: Получение всех объектов вокруг Room
« Ответ #22 : 05-02-2020, 12:25:07 »
Вроде разобрался...
Как получить наружный Face стены?
Как получить стены, имеющие общую поверхность к стене?
---
тема: https://adn-cis.org/forum/index.php?topic=3006.msg11532#quickreply
---
День добрый! то есть из файла не понятно, что некая точка А - это одна поверхность стены, а точка Б - это другая поверхность той же стены?
А что если сделать так:
для каждой стены берем LocationCurve, делаем её копию (метод Clone), затем вызываем MakeUnbound() - получили бесконечную прямую.
Затем попарно их пересекаем метод Intersect(), если пересечений нет (метод возвращает SetComparisonResult.Disjoint - There is no intersection found between the two curves), значит стенки параллельны, мы можем у LocationCurve второй стены взять GetEndPoint(0), вызвать curve(первой стены).Project() - в результате определить расстояние между двумя параллельными стенами, точнее между их осевыми, а дальше можно уже просто сравнить значения и сделать нужные телодвижения
У двух стен Edge будет одинковый, как их сравнить? По точкам?
« Последнее редактирование: 05-02-2020, 16:07:40 от Agens »
VS2019, VBA 7.1, VB.NET, C#, ACAD2019, Revit 2020