Ошибка при получении геометрии арматуры

Автор Тема: Ошибка при получении геометрии арматуры  (Прочитано 5340 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Наверное, не только, по крайней мере, сценарий возникновения проблемы вполне ясный.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
То есть, если я правильно понял:
1) Я получаю объекты
2) Произвожу изменения в транзакции
3) Заново получаю объекты и беру их геометрию
Так?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Да. должно решить проблему

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Некоторые арматурные элементы представляют собой RebarInSystem.
Можно ли получать его геометрию или нужно как-то преобразовать в обычный Rebar предварительно?
По аналогии с RemoveAreaReinforcementSystem.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Посмотри RevitLookup-ом

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
Еще один момент.
При попытке сделать арматуру видимой или разбить AreaReinforcement
появляется сообщение с предупреждением(скрин прикладываю).
Я так понял это связано с тем, что файл отсоединен от еще каких-то(файлов) и я работаю с локальной копией?
То есть по сути я не могу его редактировать в транзакции?

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Эм, ну это как бы базовые вещи, чисто пользовательские. Работаешь с локальной копией, а центральный файл не доступен. Можешь открыть файл с опцией "отсоединить" например

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
  Если открыть данную Revit-модель с отсоединением от хранилища и при получении геометрии
арматуры указывать вид, где вся арматура вручную сделана видимой и отображенной как тело, то
всё хорошо. Но возникает другая проблема. Я не могу сделать её видимой как тело в рамках транзакции
на произвольном 3D-виде, хотя никаких исключений в коде, делающем это, нет...просто вид никак не меняется.
И соответственно, получить геометрию арматуры с этого вида я не могу...

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Создай свой собственный вид.

Оффлайн VladislavАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 210
  • Карма: 0
А можно пример его создания на c#?
Нужен обычный перспективный 3D вид, на котором
можно сделать видимой арматуру.
Заранее спасибо.

И еще вопрос сюда же.
Если в 3D виде нельзя управлять видимостью элементов,
можно ли это как-то отключить через API, чтобы было можно?
View3D.Unlock() не помогает...
Благодарю.

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Статические методы View3D.CreateIsometric / CreatePerspective, после создания поставить ViewTemplateId в ElementId.InvalidElementId, дальше настроить DisplayStyle, скрыть ненужные категории (хотя бы для того, чтобы просто быстрее отрабатывало). Если вдруг остались фильтры - удалить. Может ещё видимость рабочих наборов повлиять.

На C# под рукой нет сейчас, вот для Iron Python Shell-а, там по аналогии сообразишь что тебе нужно/не нужно из этого:
Код - Python [Выбрать]
  1. tx = Transaction(doc, "create 3d")
  2. tx.Start()
  3.  
  4. view = View3D.CreateIsometric(doc, doc.GetDefaultElementTypeId(ElementTypeGroup.ViewType3D))
  5.  
  6. view.AreImportCategoriesHidden = True
  7. view.ViewTemplateId = ElementId.InvalidElementId
  8. view.DisplayStyle = DisplayStyle.Wireframe
  9. view.AreAnalyticalModelCategoriesHidden = True
  10. view.AreAnnotationCategoriesHidden = False
  11. view.AreModelCategoriesHidden = False
  12. view.IsSectionBoxActive = False
  13.  
  14. filters = view.GetFilters()
  15.  
  16. for filter in filters:
  17.         view.RemoveFilter(filter)
  18.  
  19. collector = FilteredWorksetCollector(doc)
  20.  
  21. worksets = collector.OfKind(WorksetKind.UserWorkset)
  22.  
  23. for workset in worksets:
  24.         view.SetWorksetVisibility(workset.Id, WorksetVisibility.Visible)
  25.        
  26. view.SetCategoryHidden(ElementId(BuiltInCategory.OST_RvtLinks), True)
  27.  
  28. tx.Commit()


View3D.Unlock - для разблокировки вида, обратный метод SaveOrientationAndLock, по сигнатуре должна быть понятна его цель.