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

ADN Club => Civil 3D API => Тема начата: Вильдар от 25-03-2020, 14:40:30

Название: Обновление вида профиля (областей данных)
Отправлено: Вильдар от 25-03-2020, 14:40:30
Привет,
Странное поведение вида профиля наблюдается  ::)
Добавляю профиль по поверхности.
При этом вид профиля не считывает данные с нового профиля - пока не зайти в свойства вида профиля.
Как обновить вид профиля?
Реген не помогает.
Пробовал RecordGraphicsModified у вида профиля вызвать - нифига.

1 картинка - профиль добавлен - но вид профиля не реагирует на это.
2 - захожу в свойства вида профиля и нажимаю отмену
3 - данные с профиля обновляются

(https://i.postimg.cc/dD30RSbv/1.jpg) (https://postimg.cc/dD30RSbv)
(https://i.postimg.cc/w3rjwQzN/2.jpg) (https://postimg.cc/w3rjwQzN)
(https://i.postimg.cc/PP8r9vfR/3.jpg) (https://postimg.cc/PP8r9vfR)
Название: Re: Обновление вида профиля (областей данных)
Отправлено: Александр Ривилис от 25-03-2020, 17:43:20
Ну если подготовишь:
1. dwg-файл с нужной информацией
2. Тестовый проект в zip-архиве, показывающий что ты делаешь.
то я отправлю вопрос в ADN DevHelp
3. Sreencast видео того, как это у тебя работает и про необходимость обновить свойства.
Название: Re: Обновление вида профиля (областей данных)
Отправлено: Дмитрий Загорулькин от 25-03-2020, 19:00:37
Была похожая ситуация, когда менялись оси сечений по трассе (передвигались/добавлялись/удалялись). А подпрофильная таблица, которая брала данные из этих осей, не реагировала на эти изменения. Причём, это не особенность API была, а внутреннее поведение Civil 3D. То есть, проблема наблюдалась при пользовательском редактировании стандартными инструментами.
Я её решал стандартным для сивила способом - "подёргать" объект туда-сюда, чтобы он запустил свои механизмы обновления.
Код - C# [Выбрать]
  1. /// <summary>
  2. /// Обновление вида профиля
  3. /// </summary>
  4. /// <param name="pView">Вид профиля</param>        
  5. [Obsolete("Used only for pviews with sample lines data")]
  6. public static void Update(this ProfileView pView)
  7. {
  8.     // "Подергаем" вид профиля
  9.     ElevationRangeType startElevMode = pView.ElevationRangeMode;
  10.     double startMinElev = pView.ElevationMin, startMaxElev = pView.ElevationMax;
  11.  
  12.     pView.ElevationRangeMode = ElevationRangeType.UserSpecified;
  13.     pView.ElevationMax += 1;
  14.  
  15.     pView.ElevationMax = startMaxElev;
  16.     pView.ElevationMin = startMinElev;
  17.     pView.ElevationRangeMode = startElevMode;
  18.  
  19.     // "Подергаем" область данных
  20.     ProfileViewBandItemCollection pViewBandItems = pView.Bands.GetBottomBandItems();
  21.     pView.Bands.SetBottomBandItems(pViewBandItems);
  22.  
  23.     // "Подергаем" стиль вида профиля
  24.     using (ProfileViewStyle pViewStyle
  25.         = pView.StyleId.SafeOpen<ProfileViewStyle>(OpenMode.ForWrite))
  26.     {
  27.         bool oldClipGrid = pViewStyle.GridStyle.VerticalGridOptions.UseClipGrid;
  28.         pViewStyle.GridStyle.VerticalGridOptions.UseClipGrid = !oldClipGrid;
  29.         pViewStyle.GridStyle.VerticalGridOptions.UseClipGrid = oldClipGrid;
  30.     }
  31. }
  32.  
Название: Re: Обновление вида профиля (областей данных)
Отправлено: Вильдар от 25-03-2020, 19:03:53
Дмитрий Загорулькин, спасибо, попробую)