Просьба протестировать функцию - Страница 2
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Просьба протестировать функцию

Просьба протестировать функцию

Ответ
Поиск в этой теме
Непрочитано 15.05.2007, 09:11
Просьба протестировать функцию
ShaggyDoc
 
Thượng Tá Quân Đội Nhân Dân Việt Nam
 
44d32'44"С, 33d26'51"В
Регистрация: 14.03.2005
Сообщений: 13,372

Есть подозрения на ужасный глюк AutoCAD. Вопрос в том, или это для версии, для экземпляра и т.п.

Прошу отчаянных добровольцев проверить этот код:

Код:
[Выделить все]
(defun test_path (/ support_path)
  (print (getvar "ACADVER"))
  (print (setq support_path (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))))))
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) (strcat "C:\\XXX\\;" support_path))
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) support_path)      
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))
)
(test_path)
Просто скопируйте в редактор VL и отправьте код на выполнение. В результате должны напечататься 4 строки, которые надо вставить в ответ.

Это не больно, ваши Автокады не пострадают. Для вас это ничего не значит, а для меня поддержка в жизни.
Просмотров: 7087
 
Непрочитано 16.05.2007, 00:28
#21
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


А будет ли работоспособна следующая конструкция. Допустим я пожелаю для единообразия работы на разных компьютерах поместить некоторые данные (личный файл меню допустим) на съемный диск. Далее установлю на каждом компьютере первым из путей поиска этот диск с той целью, чтобы нужные файлы “цеплялись” автоматом. Так вот вопрос: будут ли сохраняться пути при загрузке в отсутствии диска (а следовательно и путей к нему) и будут ли при последующей загрузке, когда диск на месте, цепляться нужные файлы?
AY вне форума  
 
Непрочитано 16.05.2007, 02:26
#22
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


ShaggyDoc Может быть у вас программа только что иделает как создает и удаляет каталоги. но если придраться к путям поддержки, то зачем нужен путь без каталога, он не несет никакой функции. Если собрались добавить путь, то предварительно создайте каталог, если решили удалить каталог удалите путь и буде вам счастье.

AY фвтокад может записывать пути на несуществующие каталоги, и если вы воткнете флешку с файлом, то каталог станет рабочим, но возможно придется перезапустить автокад или перезагрузить меню тк меню грузится только при загрузке и командой mnuload. Также имя диска в путях указывается конкретно A: B: G:
Если у вас прописано G:\support, а вы сунули левую флешку, а в другое гнездо флешку с нужным файлом, то обратите внимание какой диск какую букву получил.
Я это так понимаю. Скорее всего добавление несуществующих путей для этого и сделано
mmax вне форума  
 
Непрочитано 16.05.2007, 04:56
#23
KAI

геологоразведка, строительство
 
Регистрация: 14.10.2003
Магадан
Сообщений: 311


>>ShaggyDoc
Код:
[Выделить все]
"17.1s (LMS Tech)" 
"C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\GEOL_DH\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\support;C:\\Program Files\\AutoCAD 2008\\fonts;C:\\Program Files\\AutoCAD 2008\\help;C:\\Program Files\\AutoCAD 2008\\Express;C:\\Program Files\\AutoCAD 2008\\support\\color;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\02_BLOCKS_SLIDES;C:\\Documents and Settings\\KAI-2001\\Application Data\\Autodesk\\AutoCAD 2008\\R17.1\\enu\\Support" 
"C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\GEOL_DH\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\support;C:\\Program Files\\AutoCAD 2008\\fonts;C:\\Program Files\\AutoCAD 2008\\help;C:\\Program Files\\AutoCAD 2008\\Express;C:\\Program Files\\AutoCAD 2008\\support\\color;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\02_BLOCKS_SLIDES;C:\\Documents and Settings\\KAI-2001\\Application Data\\Autodesk\\AutoCAD 2008\\R17.1\\enu\\Support" 
"C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\GEOL_DH\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\support;C:\\Program Files\\AutoCAD 2008\\fonts;C:\\Program Files\\AutoCAD 2008\\help;C:\\Program Files\\AutoCAD 2008\\Express;C:\\Program Files\\AutoCAD 2008\\support\\color;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\00_PROGRAMS;C:\\Program Files\\AutoCAD 2008\\GDH_KAI programs\\KAI-2001\\02_BLOCKS_SLIDES;C:\\Documents and Settings\\KAI-2001\\Application Data\\Autodesk\\AutoCAD 2008\\R17.1\\enu\\Support"
__________________
Лень - великий двигатель прогресса!
KAI вне форума  
 
Автор темы   Непрочитано 16.05.2007, 06:30
#24
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от AY
А будет ли работоспособна следующая конструкция. Допустим я пожелаю для единообразия работы на разных компьютерах поместить некоторые данные (личный файл меню допустим) на съемный диск. Далее установлю на каждом компьютере первым из путей поиска этот диск с той целью, чтобы нужные файлы “цеплялись” автоматом. Так вот вопрос: будут ли сохраняться пути при загрузке в отсутствии диска (а следовательно и путей к нему) и будут ли при последующей загрузке, когда диск на месте, цепляться нужные файлы?
Вот для подобных случаев и делаются проверки. Этим должна заниматься специальная программа во время инициализации. Требуемый дис может быть и съемный, и сетевой, в момент запуска он может физически отсутствовать, может быть сеть недоступна и т.д.

Такой путь прописан в профиле. И в момент инициализации надо проверить наличие пути в профиле, физическое наличие, и если нет, то что-то сделать. В том числе, возможно, заменить "битые" дорожки на другие. Тут разные варианты, например, использование как резерва, папки с локального компьютера.

Для этого и необходимо получение полного списка путей. А уж что с ним делать - должна решать программа, а не функция, назначение которой всего лишь вернуть строку.
ShaggyDoc вне форума  
 
Непрочитано 16.05.2007, 11:15
#25
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Мое маленькое исследование.
Пишем функцию, добавляющую путь к имеющемуся списку путей поддержки:
Код:
[Выделить все]
(defun add-path (path / support_path) 
  (print (getvar "ACADVER")) 
  (print (setq support_path (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))) 
  (vla-put-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object))) (strcat path ";" support_path)) 
  (print (vla-get-supportpath (vla-get-files (vla-get-preferences (vlax-get-acad-object)))))  
  (princ) 
)
Если теперь попытаться добавить путь к имеющемуся каталогу, то все получается:
Цитата:
(add-path "D:\\Design_stock")

"16.0s (LMS Tech)"
"C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
"D:\\Design_stock;C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
При этом, в диалоговом окне Options на вкладке Files видим добавленный новый путь поддержки как в узле "Support File Search Path", так и в узле "Working Support File Search Path".

Удаляем вручную добавленный путь.
Пытаемся добавить путь к несуществующему каталогу и получаем следующий результат:
Цитата:
(add-path "D:\\Assa")

"16.0s (LMS Tech)"
"C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
"C:\\Documents and Settings\\Олег\\Application Data\\Autodesk\\AutoCAD 2004\\R16.0\\enu\\support;C:\\Program Files\\AutoCAD 2004\\support;C:\\Program Files\\AutoCAD 2004\\fonts;C:\\Program Files\\AutoCAD 2004\\help;C:\\Program Files\\AutoCAD 2004\\express"
Т.е добавленный путь не читается функцией vla-get-supportpath (равно, как и через системную переменную ACADPREFIX).
При этом добавленный путь появился только в узле "Support File Search Path и не появился в узле "Working Support File Search Path".

Вывод:
Отсутствие каталога, путь к которому регистрируется, может приводить (а может и всегда гарантированно приводит) к последующему неправильному результату при чтении.
Pastor вне форума  
 
Непрочитано 16.05.2007, 11:31
#26
Pastor

это только кличка
 
Регистрация: 22.10.2006
Москва
Сообщений: 252


Поправлю сам себя.
Думаю, что vla-get-supportpath всегда возвращает правильный результат, а именно пути, присутствующие в узле "Working Support File Search Path"! Т.е. реально существующие на текущий момент пути поддержки.
Pastor вне форума  
 
Автор темы   Непрочитано 16.05.2007, 13:37
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Pastor
Поправлю сам себя.
Думаю, что vla-get-supportpath всегда возвращает правильный результат, а именно пути, присутствующие в узле "Working Support File Search Path"! Т.е. реально существующие на текущий момент пути поддержки.
Вот если бы функция называлась, например, vla-get-workingsupportpath, то тогда было бы правильно. Такая функция, конечно, нужна - приходится делать ее собственный заменитель. То есть проверять самостоятельно наличие требуемых каталогов (заодно выбрасывая, возможно физически существующие, но не нужные). А для этого надо иметь полный список. Конечно, его можно напрямую прочитать из реестра - так и приходится делать. Но хотелось бы стандартным методом, так как не исключено, что в будущем это будет храниться иначе.

Так как тема вызвала интерес, сообщаю подробности - может кому-то пригодится для предотвращения своих ошибок.

В системе ruCAD для каждого нового пользователя создается профиль и специальные папки, которые надо включать в SupportPath. Некоторые файлы используются со всеми версиями Автокада, некоторые - для каждой версии. В связи с появляющейся несовместимостью форматов пришлось делать подкаталоги и с точкой (R16.1, R16.2 и т.д).

Для формирования конкретных путей используется специальный шаблон файла acaddoc.lsp. В этот шаблон продвинутый пользователь может вписать и то, что ему лично нужно - например, подгрузку каких-то собственных программ.

В шаблоне есть строки наподобие

Код:
[Выделить все]
(setq *ru_acad_version_r* "%RU_ACAD_VERSION_R%")
(load "%RU_MAIN_FAS_LIB%")
Программа-стартер заменяет шаблоны типа %RU_ACAD_VERSION_R%
на значения соответствующих переменных - в результате будет конкретный путь для пользователя (у всех может быть разный в зависимости от настроек Windows). Таким образом работают около 1000 пользователей.

Но одной вредной особе (она здесь иногда ошивается) был сделан "специальный билд", в котором появились кое-какие изменения. В инсталляцию случайно попала неправильная версия шаблона. В результате стали возникать ошибки, которых могло бы не быть, если бы vla-get-supportpath возвращала то, что от нее ожидалось. Или если бы она была правильно документирована.

Найти виновницу оказалось нелегко, так как внешние признаки ошибки казалось бы не имели к этому месту никакого отношения.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Просьба протестировать функцию

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск