Скопировать метки из профиля

Автор Тема: Скопировать метки из профиля  (Прочитано 11306 раз)

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

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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
В предыдущей теме http://adn-cis.org/forum/index.php?topic=9203.0
Обсуждали подмену профиля на видах профиля.
Все хорошо получилось, но без меток.
Меток на поверхности две
1) Отметка поверхности
2) глубина заложения до лотка трубы

Как же мне получить набор меток из старой поверхности
профиля и добавить этот набор меток в новый профиль?

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #1 : 05-04-2019, 12:06:36 »
Или, если не получится получить из объекта Profile,
то может создать новые метки и назначить их.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Скопировать метки из профиля
« Ответ #2 : 05-04-2019, 12:14:50 »
Имеющиеся метки относятся к "старому" профилю и какого-то простого способа их перенести на другой профиль нет. Можно пройтись по имеющимся меткам, собрать о них данные и по этим данным создать новые метки на "новом" профиле.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Скопировать метки из профиля
« Ответ #3 : 05-04-2019, 12:17:17 »
Меток на поверхности две
1) Отметка поверхности
2) глубина заложения до лотка трубы
Какие это объекты Civil 3D? Нужно полное название на английском. Посмотреть можно с помощью ARXDBG/MGDDBG

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #4 : 05-04-2019, 12:23:54 »
Классы объектов меток такие:
1) AeccDbPipeNetworkBandLabeling
2) AeccDbProfileDataBandLabeling

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Скопировать метки из профиля
« Ответ #5 : 05-04-2019, 12:51:03 »
ProfileView -> Bands -> GetBottomBandItems и/или GetTopBandItems -> пройтись по коллекции и заменить ссылки Profile1Id и/или Profile2Id со старого профиля на новый

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #6 : 05-04-2019, 14:17:10 »
GetBottomBandItems

Не могу понять к какому типу преобразовать элемент коллекции Bands.GetBottomBandItems?
Ругается на неявное преобразование типа.

Код - C# [Выбрать]
  1. //Получаю из трассы trs нужный мне вид профиля
  2. Alignment trs = ...
  3. ObjectId idView = trs.GetProfileViewIds[0]; // Ну пусть первый элемент коллекции
  4. ProfileView pv = (ProfileView)tr.GetObject(idView, CAD_DBS.OpenMode.ForWrite);
  5. // Вот тут к какому типу преобразовать
  6. pv.Bands.GetBottomBandItems;




Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Скопировать метки из профиля
« Ответ #7 : 05-04-2019, 14:24:56 »
Я не просто так вставлял ссылки на справку - там всё есть.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #8 : 05-04-2019, 14:37:37 »
Так вроде не ругается

Код - C# [Выбрать]
  1. ProfileViewBandSet bs = pv.Bands;
  2. ProfileViewBandItemCollection Coll = bs.GetBottomBandItems();

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #9 : 05-04-2019, 16:36:50 »
Не совсем до конца разобрался.
В задаче 1 я создаю новый профиль
В задачах с 2 по 5 получаю доступ к нужному мне виду профиля
через объект трассы trs (Alignment) GetViewID - моя внутренняя функция
и сканируем строки данных вида профиля
Получаю эти два поля Profile1Id и Profile2Id;

А что дальше с этими Profile1Id и Profile2Id, они же к виду профиля относятся.
Как мне их связать с новым профилем который я создал в задаче 1?

Когда я удаляю старый профиль, то вместе с ним и удаляются его метки,
которые прописываются в профильной таблице.
 

Код - C# [Выбрать]
  1.  
  2.                                 // 1. Создаю новый профиль
  3.                                 CAD_DBS.ObjectId NewID = Profile.CreateFromSurface(...)
  4.                                 // 2. Получаем вид профиля
  5.                                 CAD_DBS.ObjectId idView = GetViewID(trs);
  6.                                 CIV_DBS.ProfileView pv = (CIV_DBS.ProfileView)tr.GetObject(idView, CAD_DBS.OpenMode.ForWrite);
  7.                                 // 3. У вида профиля получаем набор установок полос данных
  8.                                 CIV_DBS.ProfileViewBandSet bs = pv.Bands;
  9.                                 // 4. Получаем коллекцию нижних строк (профильная таблица)
  10.                                 CIV_DBS.ProfileViewBandItemCollection RecordsTabl = bs.GetBottomBandItems();
  11.                                 // 5. Цикл по записям профильной таблицы
  12.                                 foreach (CIV_DBS.ProfileViewBandItem itm in RecordsTabl) {
  13.                                     // Тут я так понял нужно поставить некое условие какую строку выбрать?
  14.                                     CAD_DBS.ObjectId id1 = itm.Profile1Id;
  15.                                     CAD_DBS.ObjectId id2 = itm.Profile2Id;
  16.                                 }

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Скопировать метки из профиля
« Ответ #10 : 05-04-2019, 19:14:04 »
А что дальше с этими Profile1Id и Profile2Id, они же к виду профиля относятся.
Как мне их связать с новым профилем который я создал в задаче 1?
Надо проверять эти значения - не ссылаются ли они на Id старого профиля. Если ссылаются - то заменять на Id нового профиля. Наверное, лучше это делать до того, как старый профиль будет удалён.
они же к виду профиля относятся.
В этих свойствах записан Id профиля, с которого берутся значения.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #11 : 08-04-2019, 09:25:39 »
А вроде теперь понятно ProfileID1 и ProfileID2 это соответствуют 
тем двум полям таблицы "Профиль 1" и "Профиль 2",
 которые  "свойствах вида профиля" во вкладке "области данных"
Мне нужно пробежаться по строками найти нужную строку и назначить эти ID

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #12 : 08-04-2019, 09:49:27 »

На картинке выделил столбец "Стиль"
Только не понятно какое поле элемента itm задействовать чтобы найти нужную мне строку?

Код - C# [Выбрать]
  1.                                 // 1. Получаем вид профиля
  2.                                 ObjectId idView = GetViewID(trs);
  3.                                 ProfileView pv = (ProfileView)tr.GetObject(idView, OpenMode.ForWrite);
  4.                                 // 2. У вида профиля получаем набор установок полос данных
  5.                                 ProfileViewBandSet bs = pv.Bands;
  6.                                 // 3. Получаем коллекцию нижних строк (профильная таблица)
  7.                                 ProfileViewBandItemCollection RecordsTabl = bs.GetBottomBandItems();
  8.                                 // 4. Цикл по записям профильной таблицы
  9.                                 foreach (ProfileViewBandItem itm in RecordsTabl)
  10.                                 {
  11.                                     if (itm.[???].ToUpper() == "ТРУБЫ_ПРОЕКТНАЯ ОТМЕТКА ЗЕМЛИ")
  12.                                    {
  13.                                     itm.Profile1Id = ...
  14.                                     itm.Profile2Id = ...
  15.                                     }
  16.                                 }
 

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 738
Re: Скопировать метки из профиля
« Ответ #13 : 08-04-2019, 10:25:04 »
Тебе не всё ли равно как называется тип данных? Пользователи изменят название - и придётся переписывать программу? Ещё раз повторюсь: пройдись по всем данным. Если в Profile1Id содержится ObjectId удаляемого профиля - записывай вместо него ObjectId нового профиля. То же самое и с Profile2Id. И только потом удаляй старый профиль.

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1189
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Скопировать метки из профиля
« Ответ #14 : 08-04-2019, 10:50:18 »
Тебе не всё ли равно как называется тип данных? Пользователи изменят название - и придётся переписывать программу? Ещё раз повторюсь: пройдись по всем данным. Если в Profile1Id содержится ObjectId удаляемого профиля - записывай вместо него ObjectId нового профиля. То же самое и с Profile2Id. И только потом удаляй старый профиль.
А! Ну тогда все понятно. просто проверить на совпадение id если сходятся, то подменить.