Создание резервного копирования чертежей .dwg

Автор Тема: Создание резервного копирования чертежей .dwg  (Прочитано 26438 раз)

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

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Пишу с планшета, так что прошу простить за возможные опечатки.

Есть несколько моментов, которые надо бы проработать до того, как садиться за код.
1. Все файлы сохраняются в один каталог независимо ни от чего? А как решать ситуацию, если в 2 (3,4,15...) проектах используются файлы с одинаковыми именами? Например, АР-оси.dwg. И что, все сохранять в один каталог? Какой смысл в таком "бекапе"? Он путаницы и проблем породит больше, чем решит. Если я прав, то получится, что нужна какая-то структура каталогов для хранения на сервере. Вопрос - откуда ее брать?
2. Где и как хранить данные по серверным путям? В реестре? Внутри dwg файла? Во внешнем файле?
Реестр : фактически это вопрос #1 в полный рост.
Внутри файла: тоже не годится. Файлы могут копироваться между проектами - попробуй-ка это запрети! Да и реструктуризацию каталогов пользователи тоже могут производить, особенно если это не оказывает никакого влияния на работу других отделов.
Внешний файл - ага, только надо его имя знать, да еще и путь к нему как-то вычислять надо. Если полагать, что файл располагается "на два каталога выше", то возникает вопрос - как быть с первым сохранением, где пути dwg еще не существует? А если этот файл найти невозможно?
3. Что и как делать, если сервер недоступен? Или поменял имя?
4. Такое "страховое копирование" выполняется автоматически, независимо от желания пользователя, или пользователь запускает спец.команду? Если второе, то зачем заморачиваться - не проще ли будет использовать либо систему документооборота, либо систему контроля версий?

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

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
1. Все файлы сохраняются в один каталог независимо ни от чего? А как решать ситуацию, если в 2 (3,4,15...) проектах используются файлы с одинаковыми именами? Например, АР-оси.dwg. И что, все сохранять в один каталог?
Я полагаю, что ответ очевиден: поскольку каждый DWG относится к какому-либо проекту и размещается в конкретном его подкаталоге (на сервере), то в xrecord этого файла нужно сохранять полное имя этого серверного каталога. В этом случае каждая локальная копия такого DWG файла будет знать где на сервере хранится оригинал.
Цитировать
И что, все сохранять в один каталог? Какой смысл в таком "бекапе"? Он путаницы и проблем породит больше, чем решит.
Я ведь не просто так предлагаю в каждом dwg запоминать расположение его оригинала, расположенного в сети. Разве это до сих пор не очевидно? Сохранять все файлы в один каталог - это значит превращать всё в мусор и не имеет никакого смысла.
Цитировать
2. Где и как хранить данные по серверным путям? В реестре? Внутри dwg файла? Во внешнем файле?
Как я уже писал в предыдущем сообщении - я предлагал сохранять в каждом файле в виде xrecord.

Цитировать
Внутри файла: тоже не годится. Файлы могут копироваться между проектами - попробуй-ка это запрети! Да и реструктуризацию каталогов пользователи тоже могут производить, особенно если это не оказывает никакого влияния на работу других отделов.
С этим согласен. Золотой пули не существует.

Цитировать
Внешний файл - ага, только надо его имя знать, да еще и путь к нему как-то вычислять надо. Если полагать, что файл располагается "на два каталога выше", то возникает вопрос - как быть с первым сохранением, где пути dwg еще не существует? А если этот файл найти невозможно?
Знать имя общего конфиг-файла - это как раз не проблема. На сервере администратор CAD определяет общедоступный для чтения каталог с конфиг-файлами.  Никаких "на n каталогов выше" - это сразу в топку.

Цитировать
А если этот файл найти невозможно?
А это уж задача админа, чтобы файл не исчез.

Цитировать
3. Что и как делать, если сервер недоступен? Или поменял имя?
А если сеть недоступна... то и резервную копию так же сохранять не куда будет. Насчёт "поменял имя" - я могу сказать, как сделано у меня: на локальных компьютерах в каталоге %AppData%\Bushman находится файл common.config.xml. Вот в нём я и храню имена серверов, дополнительных серверных конфиг-файлов, расположения общих окаталогов с различного рода ресурсами, пользовательские системные переменные и т.п. Подробности содержимого файла не даю, т.к. А.Н. Ривилис тут же снова начнёт писать огромными красными буквами, что на форуме разрешается использовать только слова "AutoCAD" и "Autodesk". А в моём конфиг-файле они занимают места меньше всего. Могу в блоге выложить, если кому будет интересно. Там же присутствует и механизм автоматического поиска ресурсов и разрешения конфликтов - файл rsfnd.dll. Он анализирует содержимое конфиг-файлов (локальных для плагинов и общего для всей системы) и определяет, где следует искать ресурс, причём соответствующей версии (наиболее подходящей). Например так он у меня ищет различного рода управляемые и неуправляемые файлы.

Цитировать
4. Такое "страховое копирование" выполняется автоматически, независимо от желания пользователя, или пользователь запускает спец.команду? Если второе, то зачем заморачиваться - не проще ли будет использовать либо систему документооборота, либо систему контроля версий?
Невооружённым глазом видно, что запускается по требованию. Насчёт второго вопроса - это к автору темы. Не все умеют пользоваться Git.


Цитировать
Мне кажется, что сначала надо эти проблемы решить, а потом уже задумываться о решении, вписывающегося в принятую систему.
Судя по "активности" автора, тему вообще можно закрывать.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Я вообще считаю, что если юзер взял себе на локальную машину копию, то по окончанию работы он сам должен положить обратно на сервер ту отредактированную версию, которую посчитает нужным. При этом резервные копии позволяют ему при необходимости положить на сервер не последнюю версию, а какую-то из более ранних. Именно такая логика заложена в моё решение, которое почему-то не устраивает автора топика и он изобретает свой велосипед. Кстати, моих юзеров мой вариант устраивает более чем (используют не первый год).

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Ладно, бог с ней, с общей технологией. Будем считать, что данные хранятся напрямую в dwg-файле. Вариантов лично мне видится не так уж и много:
1. Создание пользовательского словаря и запись в него соответствующих данных. Решение в некоторых случаях может оказаться нерентабельным: достаточно выполнить код:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (vlax-for item (vla-get-dictionaries (vla-get-activedocument (vlax-get-acad-object)))
  4.   (vl-catch-all-apply
  5.     (function
  6.       (lambda ()
  7.         (vla-delete item)
  8.         ) ;_ end of lambda
  9.       ) ;_ end of function
  10.     ) ;_ end of vl-catch-all-apply
  11.   ) ;_ end of vlax-for
И словарь будет уничтожен.
2. Создать пользовательский словарь на объекте ModelSpace (объект пространства модели гарантированно существует в каждом dwg-файле и удалить его невозможно). Словарь приведенным выше кодом не удаляется.
3. Использовать vlax-ldata-* функции. Мне кажется, что это самое удобное с точки зрения лиспа решение, но его весьма затруднительно будет использовать для других решений (например, разработанных через .NET): там записи хранятся весьма хитро.
Цитировать
...Самая интересная информация получится, если мы к примитивам xr1 и xr2 (объекты элементов записей ldata) применим функцию entget и рассмотрим возвращаемые списки. Оказывается, эти примитивы имеют неизвестный доселе тип - VLO-VL!
Недокументированные объекты VLO-VL яаляются Х-записями, приспособленными под нужды функций с префиксом vlax-ldata-.

Еле-еле себя остановил ))) Код во вложении, возможны "хвосты", поскольку код надерган из библиотеки.
Команды для использования:
backsave : Сохранение с созданием bak-копии. Старая копия bak копируется с новым именем
backsave-get-datas : Вывод сообщения о настройках
---
Добавлено: за ради интересу посмотрел, а работает ли счетчик (сам свой код скачал). Счетчик работает. Прикольные результаты получаются. Да и от автора ни ответа, ни привета.
« Последнее редактирование: 08-02-2015, 11:49:26 от Алексей Кулик »
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Цитировать
применим функцию entget и рассморим возвращаемые списки
очепятка рассморения.
Приводя в сообщении код, не завывайте про его форматирование!
А что, время от времени воют?  ;)

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Исправил, спасибо.
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Недокументированные объекты VLO-VL яаляются Х-записями, приспособленными под нужды функций с префиксом vlax-ldata-.
Кстати именно они в какой-то момент становятся прокси-объектами.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Кто "они"? Ldata? Такое бывает, если при загрузке dwg не выполняется загрузка ActiveX-расширения, если я не ошибаюсь
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Кто "они"?
Они - это:
Цитировать
Недокументированные объекты VLO-VL
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн gomer

  • ADN OPEN
  • Сообщений: 4
  • Карма: 2
забыли про обработчик ошибок...

Оффлайн Алексей Кулик

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Не, я править не хочу. Автору это, как выясняется, не надо. А если кому-то понадобится - может и сам добавить ;)
Все, что сказано - личное мнение.

Правила форума существуют не просто так!

Приводя в сообщении код, не забывайте про его форматирование!