Сообщество программистов Autodesk в СНГ

ADN Club => Civil 3D API => Тема начата: Дмитрий Загорулькин от 08-10-2014, 12:03:09

Название: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 12:03:09
Здравствуйте!
Недавно перенес свои разработки в Civil 3D 2015 версии и, соответственно, перешел на Visual Studio 2013. Сейчас уже ни для кого не секрет, что в 2015 версии AutoCAD отказались от использования фиберов. Об этом можно прочитать например здесь: http://adn-cis.org/autocad2015-for-develop.html
Однако, запустив отладку, я не смог остановить выполнение кода в точке остановки, т.к. "Код выполняется в другом потоке"  :o . Более того, при изменении настроек чертежа, Civil 3D вылетал с ошибкой.
Вот как это выглядит: https://screencast.autodesk.com/Main/Details/81c2064b-7147-453d-89c4-81d526679a78
Сегодня я решил попробовать старое доброе обнуление NEXTFIBERWORLD (других вариантов уже не оставалось, я перепробовал все что мог) - и проблема исчезла! При этом, в запущенном с отключенными фиберами Civil 2015  не работает NETLOAD из автозагружаемого лисп-файла, так же, как и в 2014 версии.
Получается, что в случае с Civil 3D от фиберов "недоотказались" и переменные NEXTFIBERWORLD и FIBERWORLD по-прежнему актуальны.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 12:33:33
Сегодня я решил попробовать старое доброе обнуление NEXTFIBERWORLD (других вариантов уже не оставалось, я перепробовал все что мог) - и проблема исчезла! При этом, в запущенном с отключенными фиберами Civil 2015  не работает NETLOAD из автозагружаемого лисп-файла, так же, как и в 2014 версии.
Получается, что в случае с Civil 3D от фиберов "недоотказались" и переменные NEXTFIBERWORLD и FIBERWORLD по-прежнему актуальны.
Стоп. А каким у тебя был FIBERWORLD прежде чем ты начал эксперименты? Т.к. в AutoCAD 2015 изначально FIBERWORLD равен 0.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 12:57:12
FIBERWORLD не проверял, а NEXTFIBERWORLD было "<вкл.>", то есть = 1. Значит, и FIBERWORLD должно было быть = 1.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 13:01:05
FIBERWORLD не проверял, а NEXTFIBERWORLD было "<вкл.>", то есть = 1.
Хочешь меня запутать? ;-) Если NEXTFIBERWORLD было 1, то и FIBERWORLD было 1. Ты уверен что до того ничего не менял? Для эксперимента попробуй создать новый профиль и переключится на него. Ну и перезапустить Civil 3D и проверить значение FIBERWORLD (важно именно его значение, т.к. оно показывает текущее состояние).
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 13:11:04
Нет такого желания :)
Создал профиль, сделал текущим, перезапустил программу, проверил:
Команда: NEXTFIBERWORLD

Новое значение NEXTFIBERWORLD <Вкл>: *Прервано*

Команда: FIBERWORLD

FIBERWORLD = Вкл (только чтение)
Команда: *Прервано*
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 13:47:09
Уточню ка я в ADN DevHelp какое значение по-умолчанию должно быть у переменной FIBRWORLD в AutoCAD Civil 3D 2015.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 14:26:10
Проверил на "нетронутом" Civil 3D 2015 - фиберы по умолчанию отключены. Но в этом случае не работает NETLOAD из LISP кода. Получается, что по умолчанию теперь этот способ загрузки DLL нерабочий?
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Алексей Кулик от 08-10-2014, 15:45:41
В принципе можно попробовать временно установить NEXTFIBERWORLD в 1, выполнить _.netload и потом вернуть обратно. Хотя, конечно, это далеко не гуд...
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 15:49:36
Не получится - изменения переменной вступают в силу только после перезапуска программы.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Алексей Кулик от 08-10-2014, 16:06:09
Может, у меня тут мозги закипают потихоньку - но вроде бы на чистом ACAD 2015 сработало. Попробую перепроверить, но попозже.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 16:08:40
Не получится - изменения переменной вступают в силу только после перезапуска программы.
Именно. Я так понимаю, что NETLOAD из lisp-кода не работает только при запуске AutoCAD, а во всех остальных случаях работает. В любом случае советую решать этот вопрос радикально, т.е. отказаться от загрузки при помощи команды NETLOAD.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Алексей Кулик от 08-10-2014, 16:24:13
При отключенном NEXTFIBERWORLD загрузка через _.netload не срабатывает даже в уже созданном документе (при этом ручная загрузка работает вполне корректно).
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 16:24:42
Чем дальше в лес, тем толще партизаны...
При отключенных фиберах ПКМ работает только на повтор последней команды, независмо от настроек в профиле.
https://screencast.autodesk.com/main/details/1fe0b73e-f4e5-44e7-8d2c-6dbdb2ebe2cf
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 16:37:25
При отключенных фиберах ПКМ работает только на повтор последней команды, независмо от настроек в профиле.
В чистом AutoCAD 2015 это не воспроизводится. Меня смущает то, что ты запустил два Civil 3D 2015 с разными значениями FIBERWORLD. Как ты это сделал? Я не уверен, что это может корректно работать.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 16:46:50
В чистом AutoCAD 2015 это не воспроизводится.
Проверю вечером на домашнем английском Civil 2015 и сделаю видеоотчет.
Да все то же самое, даже если я запускаю один экземпляр программы. Второй я запустил, изменив значение NEXTFIBERWORLD на 1 в первом, просто для того, чтобы видео удобнее было записывать.

P.S. Что же такое, неужели я один пытаюсь что-то делать в Civil 2015? Должен же кто-то еще с ним пытаться разбираться... Товарищи, где вы? Ау!! :)
Отписался бы хоть кто-нибудь, есть такие проблемы или это только я такой "везучий".

P.P.S. Удалось проверить поведение ПКМ на "нетронутом" Civil 3D 2015 без SP - там нет этой проблемы. У меня же SP1, может в этом дело...
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 17:25:47
Я не смог воспроизвести ситуацию с отключенным FIBERWORD и неработающим контекстным меню в AutoCAD Civil 3D 2015 Russian:
https://screencast.autodesk.com/main/details/6b2db5f9-848d-4eb3-b535-eeb6ccbd731e
Это версия с SP1:

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F6827%2F7842324.2%2F0_e97aa_2da8923b_orig.png&hash=2ee447ae1f17be2acb76ee5561fa03fc)
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 17:40:40
Стойте, Вы жмете ПКМ во время выполнения команды, а я показывал ее поведение, когда команда не выполняется.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 18:00:47
Стойте, Вы жмете ПКМ во время выполнения команды, а я показывал ее поведение, когда команда не выполняется.
А так: https://screencast.autodesk.com/Main/Details/283940ed-41e6-4ba8-b2c9-d6e7dfd4e2cd ?
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 18:28:33
Александр Наумович, большое спасибо за проверку! Благодаря Вам, нашел-таки причину.
Такое поведение наблюдается, если имела место попытка NETLOAD из LISP файла. Возникает какая-то внутренняя ошибка и дальше Civil ведет себя таким безобразным образом.
Опять же, не всякая попытка NETLOAD из LISP вводит Civil в ступор. Попробовал выполнить загрузку одиночного DLL файла - выполнилось успешно. Когда же LISP грузит "пачку" DLL - возникает ошибка... Буду разбираться!
Еще раз спасибо!
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 18:45:54
Такое поведение наблюдается, если имела место попытка NETLOAD из LISP файла.
Этот лисп ты запускал вручную после того как Civil 3D полностью загрузился или он запускается автоматически при загрузке? Если автоматически при загрузке, то каким образом (есть с десяток разных способов)?
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 18:56:34
В последний раз я запускал LISP через инструмент загрузки приложений (_APPLOAD). Мой LISP-загрузчик выдал ошибку при загрузке. После этого, я создал простой LISP в котором практически одной строчкой грузил одну DLL - он загрузился без ошибок.
Тогда я убрал из своего старого LISP-загрузчика установки значений переменных (GETVAR, SETVAR), вывод сообщений в командную строку (PRINC) и функцию итераций по списку (MAPCAR) - он стал грузиться без ошибок.
Вот теперь методом исключения пытаюсь понять, что же вызывает ошибку.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 19:36:33
В общем, получается, что проблема возникает при совместном использовании MAPCAR, LAMBDA, VL-CMDF и NETLOAD. Уж в чем тут проблема - непонятно.
Вот такой код вызывает ошибку:
Код - Auto/Visual Lisp [Выбрать]
  1. (mapcar (function (lambda (a) (vl-cmdf "_netload" a)))
  2.         (list
  3.           "zlib.net.dll"
  4.           "ProjectorSupport.dll"
  5.           "ProjectorWinFormLib.dll"))
А его "развернутый" аналог - нет:
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-cmdf "_netload" "zlib.net.dll")
  2. (vl-cmdf "_netload" "ProjectorSupport.dll")
  3. (vl-cmdf "_netload" "ProjectorWinFormLib.dll")
В видео первая минута - один сеанс, где я запускал первый код, начиная с 00:01:02 - другой сеанс, где я запускал второй код. Эдакий видеомонтаж :)
https://screencast.autodesk.com/Main/Details/9f186a70-af9c-457e-8f69-c12e06ba103c

Если же фиберы включить, то ошибки не происходит.
https://screencast.autodesk.com/Main/Details/f2604c51-a010-4529-b46a-1e46a162203f
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 19:38:14
начни с замены (vl-cmdf ...) на (command ...)
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 08-10-2014, 19:46:01
начни с замены (vl-cmdf ...) на (command ...)
Не помогло. К тому же, vl-cmdf есть в обоих вариантах.
Mapcar тоже отдельно работает - проверял. А вот именно в комбинации mapcar+netload+vl-cmdf "что-то не того" происходит.
В принципе, я спокойно могу обойтись и без таких конструкций, заменив циклы на развернутые аналоги.
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 08-10-2014, 19:51:42
Я бы посоветовал грузить один dll-файл, который будет грузить все остальные. Список кого нужно грузить можно оформить в виде xml-файла в той же папке, что dll-файл. Мне кажется, что так должно быть надежнее. Кстати можно будет делать это всё из главного потока (Thread), что должно быть более корректным: http://adn-cis.org/ispolzovanie-potokov-dlya-fonovoj-obrabotki.html
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Дмитрий Загорулькин от 09-10-2014, 09:28:09
начни с замены (vl-cmdf ...) на (command ...)
Заменил на command-s (новая LISP функция для синхронного выполнения команды), проблема пропала.
Я бы посоветовал грузить один dll-файл, который будет грузить все остальные. Список кого нужно грузить можно оформить в виде xml-файла в той же папке, что dll-файл. Мне кажется, что так должно быть надежнее. Кстати можно будет делать это всё из главного потока (Thread), что должно быть более корректным: http://adn-cis.org/ispolzovanie-potokov-dlya-fonovoj-obrabotki.html
О... эта тема отдельной ветки. Вообще, сейчас в моде Bundle, как я понял :)
Название: Re: Фиберы и AutoCAD Civil 3D 2015
Отправлено: Александр Ривилис от 09-10-2014, 11:49:44
Заменил на command-s (новая LISP функция для синхронного выполнения команды), проблема пропала.
О! Отлично.
Вообще, сейчас в моде Bundle, как я понял :)
Сейчас да, но это если ты поддерживаешь AutoCAD начиная не ранее чем 2012-ым.