Сообщество программистов Autodesk в СНГ

ADN Club => Civil 3D API => Тема начата: Алексей Терно от 18-08-2016, 09:16:40

Название: Профили из вида профиля
Отправлено: Алексей Терно от 18-08-2016, 09:16:40
Существует ли какая-нибудь связь между объектами Profile и ProfileView? Как, имея ProfileView, получить все Profile, отрисованные на нем?
Название: Re: Профили из вида профиля
Отправлено: German от 18-08-2016, 10:50:04
Что-то вроде ProfileView.GraphOverrides
Название: Re: Профили из вида профиля
Отправлено: Алексей Терно от 18-08-2016, 11:10:04
Да! Спасибо! :)
Название: Re: Профили из вида профиля
Отправлено: Дмитрий Загорулькин от 18-08-2016, 12:49:31
Только надо учитывать, что в ProfileView.GraphOverrides могут быть данные не только для профилей. Я оттуда же брал, например, данные о переопределениях стилей элементов сети на виде профиля.
Название: Re: Профили из вида профиля
Отправлено: Алексей Терно от 18-08-2016, 13:06:47
Только надо учитывать, что в ProfileView.GraphOverrides могут быть данные не только для профилей. Я оттуда же брал, например, данные о переопределениях стилей элементов сети на виде профиля.
Я использую свойство ProfileId. Ты хочешь сказать, что это свойство возвращает ID для профилей и труб?
Название: Re: Профили из вида профиля
Отправлено: Дмитрий Загорулькин от 18-08-2016, 13:29:37
Да. В этом свойстве может быть Id не только объекта Profile. Я оттуда же получаю Id объектов ProfileViewPart, для которых на этом виде профиля изменен стиль:
Код - C# [Выбрать]
  1.         /// <summary>
  2.         /// Получение переопределений стилей труб на виде профиля
  3.         /// </summary>
  4.         /// <param name="pView">Вид профиля</param>
  5.         /// <returns>Словарь ID трубы в модели - стиль</returns>
  6.         public static Dictionary<ObjectId, string> GetPipesStyleOverrides(this ProfileView pView)
  7.         {
  8.             Dictionary<ObjectId, string> overrideStylePipes = new Dictionary<ObjectId, string>();
  9.  
  10.             foreach (ProfileOverride gOver in pView.GraphOverrides)
  11.             {
  12.                 if (gOver.UseOverrideStyle)
  13.                 {
  14.                     using (AcDb.DBObject obj = gOver.OverrideStyleId.Open(OpenMode.ForRead, false, true))
  15.                     {
  16.                         if (obj is PipeStyle)
  17.                         {
  18.                             using (ProfileViewPart pViewPart = gOver.ProfileId.Open(OpenMode.ForRead, false, true) as ProfileViewPart)
  19.                             {
  20.                                 PipeStyle pipeStyle = obj as PipeStyle;
  21.                                 overrideStylePipes.Add(pViewPart.ModelPartId, pipeStyle.Name);
  22.                             }
  23.                         }
  24.                     }
  25.                 }
  26.             }
  27.  
  28.             return overrideStylePipes;
  29.         }