Стили копируются из шаблона, только, один раз за сеанс работы в Civil

Автор Тема: Стили копируются из шаблона, только, один раз за сеанс работы в Civil  (Прочитано 1096 раз)

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

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 322
  • Карма: 50
  • Skype: vildar82
Странная особенность обнаружилась сегодня.
Копирую стили из файла шаблона, таким методом:
Код - C# [Выбрать]
  1. styleBase.ExportTo(dbTarget, mode);
Но, срабатывает только первый раз! Нужно перезапускать Civil, чтобы скопировать еще раз.
Никто не сталкивался?

Civil 2019


Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 322
  • Карма: 50
  • Skype: vildar82
Мне из шаблона нужно скопировать эти стили:
Код - C# [Выбрать]
  1. PipeStyles),
  2. StructureStyles),
  3. PipeRuleSetStyles),
  4. StructureRuleSetStyles),
  5. ProfileViewStyles),
  6. ProfileViewBandSetStyles),
  7. LabelStyles.PipeLabelStyles.PlanProfileLabelStyles)
  8. LabelStyles.PipeLabelStyles.CrossSectionLabelStyles
  9. LabelStyles.StructureLabelStyles.LabelStyles),
Шаблон открываю через:
Код - C# [Выбрать]
  1. dbTemplate.ReadDwgFile
Потом экпортирую все эти стили в рабочую базу.

И вот, эта команда, по копированию стилей из шаблона, срабатывает только один раз за сеанс.  :o
Т.е. при первом запуске команды в сеансе - все норм копируется. А, потом - нет.

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

  • ADN
  • *
  • Сообщений: 2036
  • Карма: 514
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Может быть тут какая-то тонкость в работе с базой данных? Не закрытая осталась, или ещё что-нибудь подобное...

Оффлайн Andant

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
Я использовал статический метод StyleBase с тремя параметрами:
Код - C# [Выбрать]
  1. public static void ExportTo(
  2.         ObjectIdCollection styleIds,
  3.         Database destinationDatabase,
  4.         StyleConflictResolverType conflictResolution
  5. )
  6.  
Все работает нормально.
« Последнее редактирование: 14-05-2019, 11:25:22 от Александр Ривилис »

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 322
  • Карма: 50
  • Skype: vildar82
Не, так ничего не копируется.
Похоже, что ошибка копирования кого-то одного стиля, приводит к откату копирования всех.
Но, эти ошибки не отлавливаются почему-то.  :-[

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 9626
  • Карма: 1230
  • Рыцарь ObjectARX
  • Skype: rivilis
Похоже, что ошибка копирования кого-то одного стиля, приводит к откату копирования всех.
Ну а если попробовать копировать по-одному стилю за раз? Само собой, что он не должен быть открыт.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 322
  • Карма: 50
  • Skype: vildar82
Да, копирую по одному. Статический метод копирования кучи стилей не заметил.
Вот кусочек:
Код - C# [Выбрать]
  1. FindLoadedStyles(loadedStyles, rootTemplate, rootTarget);
  2. foreach (var style in loadedStyles.Where(w => !w.TemplateStyleId.IsNull))
  3. {
  4.    var styleBase = (StyleBase)style.TemplateStyleId.GetObject(OpenMode.ForRead);
  5.    styleBase.ExportTo(dbTarget, mode);
  6. }
  7. t.Commit();

Типа, первый раз копируются стили, но какой-то стиль косячит, и последующие попытки копирований стилей вообще перестают работать напрочь.  :o

Нужно вычислить виновный стиль.  8)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 9626
  • Карма: 1230
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну неплохо бы проверить, что в dbTarget еще нет одноимённого стиля и что после операции экспорта новый стиль появляется.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Andant

  • ADN Club
  • **
  • Сообщений: 79
  • Карма: 26
И чему равно значение параметра mode (StyleConflictResolverType) ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 9626
  • Карма: 1230
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 322
  • Карма: 50
  • Skype: vildar82
И чему равно значение параметра mode (StyleConflictResolverType) ?
Override.
С Ignore - лучше копируется. Куча стилей копируется первый раз, дальше глохнет. По-одному стилю - копируется всегда.
Нас Override интересует.
Кстати, а дочерние стили ты копируешь?
Дочерние стили есть у конкретных классов стилей. Например LabelStyle (как в примере). Я не знаю, что, все классы проверять?
Попробую проверить. Их не так много, которые мы копируем.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 9626
  • Карма: 1230
  • Рыцарь ObjectARX
  • Skype: rivilis
Дочерние стили есть у конкретных классов стилей. Например LabelStyle (как в примере). Я не знаю, что, все классы проверять?
Я думал, что для для полноты копирования тебе нужно скопировать и дочерние. Но если дочерние стили тебе не нужны, то можешь моё замечание проигнорировать.
По-одному стилю - копируется всегда.
Ну и копируй их по одному. А чтобы не было транзакции можешь использовать статический метод ExportTo, передавая по одному ObjectId.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 322
  • Карма: 50
  • Skype: vildar82
Ну и копируй их по одному.
Так работает, только при Ignore режиме.
При Override - только первый раз за сеанс.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 9626
  • Карма: 1230
  • Рыцарь ObjectARX
  • Skype: rivilis
При Override - только первый раз за сеанс.
При этом ничего не открыто в транзакции? Это могут быть и стили и еще что-то, на что эти стили могут ссылаться.
Если в режиме Ignore всё нормально копируется, то нужно задуматься над предварительным переименованием стилей в dbTarget (если это возможно).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение