Геометрия воздуховода

Автор Тема: Геометрия воздуховода  (Прочитано 7559 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Сергей ОдеговАвтор темы

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Геометрия воздуховода
« : 19-05-2015, 16:02:26 »
Здравствуйте!
Подскажите как добраться до "геометрии" воздуховода. Т.е. координаты первой точки (начало) построения и координат второй точки (конец) построения.
Как добраться до направления отрисовки, наверное это будет тройка векторов, так мне видится, если ошибаюсь поправьте....
Заранее спасибо!

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Геометрия воздуховода
« Ответ #1 : 19-05-2015, 16:32:58 »
Сергей,
Геометрию любого элемента можно получить при помощи метода Element.get_Geometry.
Ну а дальше уже извлекаете все нужные вам свойства из геометрии.

Оффлайн Сергей ОдеговАвтор темы

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Re: Геометрия воздуховода
« Ответ #2 : 19-05-2015, 16:42:00 »
Это я догадался, что get_Geometry но что да как дальше писать... меня сама запись на С# интересует. Подскажите пожалуйста.

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Геометрия воздуховода
« Ответ #3 : 19-05-2015, 16:56:24 »
Например, так:
Код - C# [Выбрать]
  1. var go = new GeometryOptions();
  2. var geometry = element.get_Geometry(go);
  3. // класс GeometryElement реализует интерфейс IEnumerable<GeometryObject>, а также сам является дочерним класса GeometryObject.
  4. // таким образом, в зависимости от того, каким геометрическим объектом является GeometryElement
  5. // а также от того какие элементы в нем содержатся, можно получить нужную информацию
  6. // Воздуховод содержит Line, Points и Solid.
  7. foreach (GeometryObject o in geometry)
  8. {
  9.    if (o is Line)
  10.     // извлекаем информацию из линии
  11.    if (p is Point)
  12.    // извлекаем информацию из точки
  13.  
  14. }

Поиграйтесь с  GeometryOptions. В зависимости от опций возвращаются различная геометрия.
Вообще рекомендую воспользваться RevitLookup. Там легко можно посмотреть что находится в геометрии.

P.S. Хотя если нужны только координаты начала конца и направление, то тут вообще без геометрии можно обойтись. Element.Location является LocationCurve. Оттуда можете извлечь и координаты и направление. Направление естественно только для прямого воздуховода.

Оффлайн Сергей ОдеговАвтор темы

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Re: Геометрия воздуховода
« Ответ #4 : 20-05-2015, 09:49:03 »
var go = new GeometryOptions();
А что GeometryOptions() должна возвращать?  Где посмотреть пример записи на С# этих самых опций?
Можете пример привести записи опций и где их вообще брать?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Re: Геометрия воздуховода
« Ответ #5 : 20-05-2015, 09:59:49 »
Сергей, упс. Ошибся. Класса называется не GeometryOptions, а просто Options. На память вчера писал.

Options ничего не должны возвращать. При извлечении геометрии вы задаете параметры, каким образом извлекать геометрию. В качестве примера, посмотрите в интерфейс. Там есть качество детализации. В зависимости от выбранного качества детализации отображаются или не отображаются те или иные элементы геометрии.
С помощью параметра Options вы задаете какую геометрию вам нужно получить из объекта.
Найти их можно в файле справки класса Options.

Примеры:
Код - C# [Выбрать]
  1. var options = new Options();
  2. // параметры по умолчанию
  3. var geometry = element.get_Geometry(options);

Код - C# [Выбрать]
  1. var options = new Options();
  2. options.IncludeNonVisibleObjects = true;
  3. // включаяя невидимые объекты
  4. var geometry = element.get_Geometry(options);

Оффлайн Сергей ОдеговАвтор темы

  • ADN OPEN
  • Сообщений: 48
  • Карма: 0
  • Skype: sergey_mmt
Re: Геометрия воздуховода
« Ответ #6 : 20-05-2015, 10:06:03 »
Спасибо, буду разбираться....

Отмечено как Решение Сергей Одегов 03-07-2015, 15:36:08

Оффлайн Антон Останин

  • ADN OPEN
  • ***
  • Сообщений: 107
  • Карма: 6
Re: Геометрия воздуховода
« Ответ #7 : 26-06-2015, 15:50:11 »
Я получал так:
Код - C# [Выбрать]
  1.  LocationCurve locationCurve = duct.Location as LocationCurve;  
  2.   XYZ direction = (locationCurve.Curve as Line).Direction;
  3.   XYZ xYZStart = locationCurve.Curve.GetEndPoint(0);
  4.   XYZ xYZEnd = locationCurve.Curve.GetEndPoint(1);


НЕ ЗАБЫВАЕМ ФОРМАТИРОВАТЬ КОД
« Последнее редактирование: 26-06-2015, 15:59:31 от Виктор Чекалин »