Сообщество программистов Autodesk в СНГ
ADN Club => AutoCAD .NET API => Тема начата: Atomohod от 01-03-2019, 19:34:31
-
Здравствуйте!
Столкнулся с задачей синхронизации объектов из нескольких чертежей в одном. Есть большой насыщенный чертеж, который разбивается на строительные районы и отдается в разработку нескольким людям по району каждому. Нужно чтобы с определенной периодичностью, например раз в три дня вся геометрия из файлов разработчиков собиралась обратно в главный файл без участия человека. В дальнейшем, после окончания разработки, нужно чтобы команда проверяла различия в версиях объектов исходных файлов и если объекты различаются то переносила бы их в главный чертеж вместо устаревших.
Придумал такое решение:
1. Просканировать главный чертеж и записать в файл типа json состояние объектов и их Handle.
2. Разделить главный чертеж на строительные районы.
3. Периодически запускать команду которая бы по handle находила объекты в главном и разрабатываемых чертежах, считывала из json их предыдущее состояние и сравнивала с текущим.
4. Если есть различия то команда копирует объект из разрабатываемого файла в главный, удаляя устаревший.
Вопросы:
-Есть ли в Autocad возможность версионирования объекта? Я не нашел.
-Прошу Вашего мнения по поводу моего алгоритма- будет ли работать или может есть какой нибудь путь попроще?
PS External reference не подойдет, требуют чтобы в файле были сами объекты.
-
-Есть ли в Autocad возможность версионирования объекта? Я не нашел.
Нет версионности. -Прошу Вашего мнения по поводу моего алгоритма- будет ли работать или может есть какой нибудь путь попроще?
Сомневаюсь в работоспобности этой идеи.
PS External reference не подойдет, требуют чтобы в файле были сами объекты.
Зря. В AutoCAD я не знаю другого алгоритма для совместной работы. В конце концов на основе внешних ссылок можно генерировать файл, в котором будут объекты внешних ссылок.
-
Сомневаюсь в работоспобности этой идеи.
В чем я ошибся, думаю не так?
-
Сомневаюсь в работоспобности этой идеи.
В чем я ошибся, думаю не так?
Ну хотя бы в том, что в AutoCAD нет объектов в том понимании, как они есть в вертикальных приложениях. Допустим у тебя есть полилиния и пользователь расчленил её и получил набор отрезков и дуг вместо одной полилинии. С точки зрения графики ничего не изменилось. С точки зрения примитивов AutoCAD есть изменение - исходной метки нет, а появились новые. Более того с одной меткой в исходном чертеже может быть один примитив, а в исправленном другой (такое возможно). Есть еще куча нюансов...
-
Сомневаюсь в работоспособности этой идеи.
Это точно.
-Прошу Вашего мнения по поводу моего алгоритма- будет ли работать или может есть какой нибудь путь попроще?
Не только работоспособность идеи, но и правильность постановки задачи вызывает большие сомнения.
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(но это не точно).
-
А затереть все и скопировать в главный все исходники не проще?
Есть часть геометрии которая разрабатывается в главном чертеже. Затирать все нельзя. Главный файл в готовом виде весит 95 мб.
-
Есть часть геометрии которая разрабатывается в главном чертеже. Затирать все нельзя.
1 Что мешает разрабатываемую геометрию поместить также во внешнюю ссылку? В главном файле могут остаться одни ссылки и ничего более.
2 Если она разрабатывается в главном, как вариант можно поместить ее в "свои слои", примитивы из которых не затирать. Все остальное затирать и копировать заново или вставлять внешними ссылками. Вариантов много можно придумать, как защитить их от удаления.
Главный файл в готовом виде весит 95 мб.
нормально с ним работать? По моему опыту 10мб и более уже ощутимо тормозят, для просмотра, печати еще ничего но редактировать проблематично.
-
1 Что мешает разрабатываемую геометрию поместить также во внешнюю ссылку?
Причина весьма нетривиальна - геометрия в ссылках, до момента втягивания ее в главный файл отображается "сереньким", что "ну просто недопустимо"(по мнению пары начальников и десятка пенсионеров из смежных отделов) . Поэтому вместо встроенного механизма внешних ссылок приходится изощряться и изобретать очередное "вундерваффе" с помощью кода.
-
нормально с ним работать? По моему опыту 10мб и более уже ощутимо тормозят, для просмотра, печати еще ничего но редактировать проблематично.
В принципе он довольно шустрый-именно рабочей геометрии под редактуру в нем немного. Большую часть занимает насыщение- блоки оборудования и все такое. С железом в нашем отделе все норм, поэтому критических просадок в производительности нет. Уменьшить вес файла пробовали, не получилось. слишком насыщенный проект.
-
Причина весьма нетривиальна - геометрия в ссылках, до момента втягивания ее в главный файл отображается "сереньким", что "ну просто недопустимо"(по мнению пары начальников и десятка пенсионеров из смежных отделов)
XDWGFADECTL (https://knowledge.autodesk.com/ru/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2019/RUS/AutoCAD-Core/files/GUID-D9B77309-E28A-4018-BE4A-92AEA550940B-htm.html) установить в 0 и всё. Пусть пенсионеры изучают основные возможности AutoCAD.
-
В AutoCAD Map 3D есть штатные инструменты для многопользовательской работы с одним чертежом