Синхронизация нескольких файлов

Автор Тема: Синхронизация нескольких файлов  (Прочитано 9022 раз)

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

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

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Здравствуйте!
Столкнулся с задачей синхронизации объектов из нескольких чертежей в одном. Есть большой насыщенный чертеж, который разбивается на строительные районы и отдается в разработку нескольким людям по району каждому. Нужно чтобы с определенной периодичностью, например раз в три дня вся геометрия из файлов разработчиков собиралась обратно в главный файл без участия человека. В дальнейшем, после окончания разработки, нужно чтобы команда проверяла различия в версиях объектов исходных файлов и если объекты различаются то переносила бы их в главный чертеж вместо устаревших.

Придумал такое решение:
1. Просканировать главный чертеж и записать в файл типа json состояние объектов и их Handle.
2. Разделить главный чертеж на строительные районы.
3. Периодически запускать команду которая бы по handle находила объекты в главном и разрабатываемых чертежах, считывала из json их предыдущее состояние и сравнивала с текущим.
4. Если есть различия то команда копирует объект из разрабатываемого файла в главный, удаляя устаревший.

Вопросы:
-Есть ли в Autocad возможность версионирования объекта? Я не нашел.
-Прошу Вашего мнения по поводу моего алгоритма- будет ли работать или может есть какой нибудь путь попроще?

PS External reference не подойдет, требуют чтобы в файле были сами объекты.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Синхронизация нескольких файлов
« Ответ #1 : 01-03-2019, 19:39:19 »
-Есть ли в Autocad возможность версионирования объекта? Я не нашел.
Нет версионности.
-Прошу Вашего мнения по поводу моего алгоритма- будет ли работать или может есть какой нибудь путь попроще?
Сомневаюсь в работоспобности этой идеи.
PS External reference не подойдет, требуют чтобы в файле были сами объекты.
Зря. В AutoCAD я не знаю другого алгоритма для совместной работы. В конце концов на основе внешних ссылок можно генерировать файл, в котором будут объекты внешних ссылок.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Синхронизация нескольких файлов
« Ответ #2 : 01-03-2019, 20:44:29 »
Сомневаюсь в работоспобности этой идеи.
В чем я ошибся, думаю не так?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Синхронизация нескольких файлов
« Ответ #3 : 01-03-2019, 20:49:51 »
Сомневаюсь в работоспобности этой идеи.
В чем я ошибся, думаю не так?
Ну хотя бы в том, что в AutoCAD нет объектов в том понимании, как они есть в вертикальных приложениях. Допустим у тебя есть полилиния и пользователь расчленил её и получил набор отрезков и дуг вместо одной полилинии. С точки зрения графики ничего не изменилось. С точки зрения примитивов AutoCAD есть изменение - исходной метки нет, а появились новые. Более того с одной меткой в исходном чертеже может быть один примитив, а в исправленном другой (такое возможно). Есть еще куча нюансов...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Синхронизация нескольких файлов
« Ответ #4 : 01-03-2019, 21:14:17 »
Сомневаюсь в работоспособности этой идеи.
Это точно.

-Прошу Вашего мнения по поводу моего алгоритма- будет ли работать или может есть какой нибудь путь попроще?
Не только работоспособность идеи, но и правильность постановки задачи вызывает большие сомнения.

1. Уже что-то подобное делалось? Или организация впервые пытается это проделать?
Есть большой насыщенный чертеж, который разбивается на строительные районы и отдается в разработку нескольким людям по району каждому. Нужно чтобы с определенной периодичностью, например раз в три дня вся геометрия из файлов разработчиков собиралась обратно в главный файл без участия человека.
настораживает насколько большой файл. Файл может перестать ворочаться и уронить автокад. Для этого как-раз используются внешние ссылки с их возможностью подгрузки-выгрузки в чертеж. Я нечто подобное делал но с растрами, там объем растров был большой и изначально было понимание что все открывать одновременно нельзя. И цель "общего файла" увязать всю информацию  в координатах и иметь возможность обрабатывать частями.
это первое что ты должен проработать.

2. Для чего требование?
PS External reference не подойдет, требуют чтобы в файле были сами объекты.
Работа с печатью, управление слоями, это все возможно с External reference, и в конце концов External reference можно в определенные момент внедрять в чертеж, получая " сами объекты".

3.
команда проверяла различия в версиях объектов исходных файлов и если объекты различаются то переносила бы их в главный чертеж вместо устаревших
4. Если есть различия то команда копирует объект из разрабатываемого файла в главный, удаляя устаревший.
А затереть все и скопировать в главный все исходники не проще? И опять очень смахивает на внедрение External reference. Может тут ключевое - найти отличия в 2х файлах и определить время и место изменений....А само внедрение судя по описанию всегда по последней версии.

4.
1. Просканировать главный чертеж и записать в файл типа json состояние объектов и их Handle.
3. Периодически запускать команду которая бы по handle находила объекты в главном и разрабатываемых чертежах, считывала из json их предыдущее состояние и сравнивала с текущим.
делал нечто подобное но на маленьких файлах 2-10Мб, записывал состояние в xml работало крайне медленно, т.к. это парсинг строк. Т.е. в твоем случае больших файлов это скорее всего не нужно, нужно сравнивать объекты в памяти, нигде не запоминая состояние.

Если уж необходимо запоминать состояние, то смотреть в сторону BinaryWriter https://metanit.com/sharp/tutorial/5.6.php. Предполагаю, что работает в несколько раз быстрее, чем json(но это не точно).

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Синхронизация нескольких файлов
« Ответ #5 : 01-03-2019, 22:52:59 »
А затереть все и скопировать в главный все исходники не проще?
Есть часть геометрии которая разрабатывается в главном чертеже. Затирать все нельзя. Главный файл в готовом виде весит 95 мб.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: Синхронизация нескольких файлов
« Ответ #6 : 02-03-2019, 00:51:00 »
Есть часть геометрии которая разрабатывается в главном чертеже. Затирать все нельзя.
1 Что мешает разрабатываемую геометрию поместить также во внешнюю ссылку? В главном файле могут остаться одни ссылки и ничего более.

2 Если она разрабатывается в главном, как вариант можно поместить ее в "свои слои", примитивы из которых не затирать. Все остальное затирать и копировать заново или вставлять внешними ссылками. Вариантов много можно придумать, как защитить их от удаления.

Главный файл в готовом виде весит 95 мб.
нормально с ним работать? По моему опыту 10мб и более уже ощутимо тормозят, для просмотра, печати еще ничего но редактировать проблематично.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Синхронизация нескольких файлов
« Ответ #7 : 02-03-2019, 19:33:09 »
1 Что мешает разрабатываемую геометрию поместить также во внешнюю ссылку?
Причина весьма нетривиальна - геометрия в ссылках, до момента втягивания ее в главный файл отображается "сереньким", что "ну просто недопустимо"(по мнению пары начальников и десятка пенсионеров из смежных отделов) . Поэтому вместо встроенного механизма внешних ссылок приходится изощряться и изобретать очередное "вундерваффе" с помощью кода.

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

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: Синхронизация нескольких файлов
« Ответ #8 : 02-03-2019, 19:36:23 »
нормально с ним работать? По моему опыту 10мб и более уже ощутимо тормозят, для просмотра, печати еще ничего но редактировать проблематично.
В принципе он довольно шустрый-именно рабочей геометрии под редактуру в нем немного. Большую часть занимает насыщение- блоки оборудования и все такое. С железом в нашем отделе все норм, поэтому критических просадок в производительности нет. Уменьшить вес файла пробовали, не получилось. слишком насыщенный проект.

Отмечено как Решение Atomohod 04-03-2019, 21:00:36

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Синхронизация нескольких файлов
« Ответ #9 : 02-03-2019, 20:04:57 »
Причина весьма нетривиальна - геометрия в ссылках, до момента втягивания ее в главный файл отображается "сереньким", что "ну просто недопустимо"(по мнению пары начальников и десятка пенсионеров из смежных отделов)
XDWGFADECTL установить в 0 и всё. Пусть пенсионеры изучают основные возможности AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 475
  • Карма: 63
Re: Синхронизация нескольких файлов
« Ответ #10 : 04-03-2019, 08:36:17 »
В AutoCAD Map 3D есть штатные инструменты для многопользовательской работы с одним чертежом