Файлы CUIX в разных версиях AutoCAD несовместимыНу я же не просто так захотел чтоб оно работало от нового к старому. Раньше так делал.
т.е. придется создавать в более младшей версии и потом уже открывать в более новойНу так и приходится, специально сегодня установил 2013 AutoCAD. Только там (в 2013) неудобно с png иконками, он не даёт их выбрать, приходиться вручную имена писать.
Для прозрачности?Да, для прозрачного фона.
Т.е. RGB 192,192,192 понимается acad'ом как прозрачный цвет.
создать ресурсную dllОсталось научится создавать эти "ресурсные dll" :D
Старая тема: http://forum.dwg.ru/showthread.php?t=31134
Для новых версий это уже не актуально, файлы *.cuix содержат в себе кнопки
Осталось научится создавать эти "ресурсные dll" :DУ Андрея Бушмана есть статья на эту тему: http://bushman-andrey.blogspot.com/2013/08/dll-partial-cui.html
А если использовать руководство по созданию иконок от Autodesk?Там с непрозрачным фоном предлагают делать.
Картинки хранятся в одной ресурсной dll, выполнены как bmp.Судя по их виду они без прозрачности (т.е. без цвета 192,192,192 - т.к. они bmp, то другого способа сделать фон прозрачным нет). Geobuilder хочет этого избежать.
У Андрея Бушмана есть статья на эту тему: http://bushman-andrey.blogspot.com/2013/08/dll-partial-cui.html(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2F4.bp.blogspot.com%2F-ij7Ng9Vz_Rs%2FUgyN8zUf8bI%2FAAAAAAAAA0w%2FQ3Zet4xIAWE%2Fs1600%2Fadd_resource_file.png&hash=aa182a45ef58671e0d352d41cbb98dc1)
но у меня нет такого пункта "ресурсы", может потому что у меня студия "экспресс"? :'(Да. Из бесплатных есть Visual Studio Community, в которой эта и многие другие возможности есть.
Из бесплатных есть Visual Studio CommunityСпасибо, уже устанавливаю.
Приходим к выводу, что:Хорошо, в справке написано
1) Нужно иметь два комплекта иконок
2) Нужно каждый из комплектов иконок поместить в свою ресурсную dll
Начиная с AutoCAD 2015, если файл CUIx использует внешний ресурс DLL для пользовательских изображений, необходимо создать отдельный ресурс DLL для каждой темы: светлой и темной.А как быть если приложение будет использоваться в более ранних чем AutoCAD 2015? Я всё про публикацию приложений в App Store.
Подозреваю, что проще будет png или ico загонять в dll.Не, не... Тут уже второй вопрос, с прозрачностью разобрались, bmp с прозрачным цветом 192,192,192, самый простой вариант. Но появились новые грабли смена цветовой схемы, на твоём же рисунке "голубой шар с кисточкой и красным кругляшком" смотрится куда лучше на белом чем на тёмном. Для тёмной надо новый рисовать с другими цветами для контраста.
Это решило проблему с отображением иконок во всех AutoCAD 2012-2016 даже с переключением с темной темы на светлую.Т.е. не менять цвета при переходе, а изначально подобрать такие, чтоб и там и там оптимально смотрелись?
Как будет правильнее, для разных версий автокада создавать разные Cuix или же добавить 3-ий dll без суфикса "_light/_dark"?Ну это на твоё усмотрение. Только суффикс "_dark" не нужен - отсутствие суффикса как раз и означает тему "_dark".
Только суффикса "_dark" нет - отсутствие суффикса как раз и означает тему "_dark".В ранних версиях иконки буду браться из "без суффикса" или первой попавшейся?
Например, если загружен файл CUIx под именем mymenu.cuix, AutoCAD выполняет поиск файла библиотеки ресурсов mymenu_light.dll, если используется светлая тема, и файла mymenu_dark.dll, если используется темная тема.
В ранних версиях иконки буду браться из "без суффикса" или первой попавшейся?В ранних версиях только без суффикса - про суффикс они понятия не имеют. В 2015 и новее думаю (!!!), что при отсутствии dll с суффиксом "_dark" будет браться без суффикса, но это нужно проверять. У меня сейчас такой возможности нет, а ты как раз этим занимаешься. Вот и доложишь результаты тестирования. :)
Только суффикс "_dark" не нужен - отсутствие суффикса как раз и означает тему "_dark".Блин и точно, с суффиксом "_dark" он вообще не читает. Создал *_light и *_dark, отображалось всегда только как в *_light, переименовал *_dark в без суффикса, и всё, стало картинку из него подхватывать для тёмной темы.
Также попробовал в dll засунуть иконки pngи icoно AutoCAD (даже 2016) почему-то не хочет их показывать.
ICO_16_EXPLODE
ICO_32_EXPLODE
ICO_16_EXPORT_FILE
ICO_32_EXPORT_FILE
ICO_16_EXTEND
ICO_32_EXTEND
ICO_16_EXTRUD
ICO_32_EXTRUD
Так что если сделать меню maestro.cuix (можно и с другим именем, но тогда maestro.dll нужно переименовать) и использовать эти имена, то должны появляться иконки. Проще всего для добавления новых иконок править в текстовом редакторе (даже в обычном Блокноте) файл maestro.rc ICO_16_EXPLODE RCDATA "./res/RCDATA_16_EXPLODE.ico"
Ну а затем перестроить проект.Хочу обратить внимание на то, что тип ресурса должен быть не BITMAP, а RCDATAА VS по-умолчанию определяет их как ICON, изменил на RCDATA и всё получилось. Потом пошёл дальше в тестах, и png определил как RCDATA, на что AutoCAD закрылся с ошибкой, и пока я это безобразие не исправил даже запускаться больше не стал выдавая ошибку.
Хотя опять же не фига не логично. Ранние версии как раз и имели только светлое оформление, а иконку будут брать для тёмной из файла без суффикса.
Т.е. придётся всё равно делать разные Cuix для разных версий AutoCAD, причём для ранних(19.0-19.1) можно и без dll просто с прозрачными bmp, а для свежих(20.0-20.1) уже dark\light dll.Недавно как раз с этим очень плотно имел дело. CUIX-файл делал один на версии 2014-2016, проблем с этим не было. Также, сделал два C++ проекта с ресурсными иконочными DLL - один для темной схемы, второй - для светлой. В настройках проектов в разделе "Build Events - Post Build Events" можно настроить события таким образом, чтобы создаваемые dll файлы после сборки сразу копировались в нужные папки под нужным названием. В папку для 2014 версии - только "светлая" dll без суффикса, в папку для версий 2015-2016 - "светлая" с суффиксом "_light", "темная" - без суффикса. Я сперва так делал, а потом настроил то же самое но уже в проекте WIX-инсталлятора. В общем, каким образом ни делай, есть возможность один раз настроить и уже потом не думать откуда и какие файлы нужно скопировать и как назвать - все делается автоматически.
В папку для 2014 версии - только "светлая" dll без суффикса, в папку для версий 2015-2016 - "светлая" с суффиксом "_light", "темная" - без суффикса.Воот, а где эти папки?
Я картинок добавил, там это показаноКлёва, а можно ещё картинку PackageContents.xml, пожалуйста. Лучше бы сам файлик, но я смотрю там много секретного, хотя
Ведь не лень было ему, (то ли Sachin то ли Kathare, фиг знает где имя) bmp создавать из приложенных для фала справки pngА почему его самого об этом не спросить (я не об имени|фамилии)?
А почему его самого об этом не спросить (я не об имени|фамилии)?Обязательно спрошу, только они отвечают спустя минимум неделю.
...теперь понял. ) То, что вместо цивила засунули в обычный акад - это может быть обычной ошибкой (человеческий фактор) либо в настройках XML-файла пакета не был указан цивил в качестве целевого вертикального приложения (тоже могло произойти по запарке). Наверняка смогут ответить скорее всего только авторы правок.
они отвечают спустя минимум неделю
...
в app store
Но вот присылает мне мой чудо наставник, Sachin Kathare, установочный файл. А там в cuix коды ресурсов заменены на bmp фалы ...Подозреваю, что они просто не знают, что можно по-другому делать. Конечно, надо подсказать. Для этого они и присылают установщик, чтобы мы могли им замечания/пожелания высказать.
Что я сделал не так?
Ведь не лень было ему, (то ли Sachin то ли Kathare, фиг знает где имя) bmp создавать из приложенных для фала справки png, и при чём даже не в сам cuix файл их запаковывать а в папку support копировать, туда же куда и Cuix при установки копируется. Как-то может нужно подсказать\намекнуть что вместе с cuix-ми нужно и ресурсные dll-ы копировать?
Но вот присылает мне мой чудо наставник, Sachin Kathare, установочный файл. А там в cuix коды ресурсов заменены на bmp фалы ...Ну в итоге, сам криворукий.
Что я сделал не так?
А VS по-умолчанию определяет их как ICON, изменил на RCDATA и всё получилось. Потом пошёл дальше в тестах, и png определил как RCDATA, на что AutoCAD закрылся с ошибкой, и пока я это безобразие не исправил даже запускаться больше не стал выдавая ошибку.
В общем png через ресурсный dll ни как не получается использовать в AutoCAD, странно на прямую в cuix можно, а через dll нельзя.
начиная с AutoCAD 2017 SP1 можно добавлять в ресурсную dll не только ico, но и png. Autodesk'овцы исправили баг, который этому препятствовал.Круто, но... есть индивиды что до сих пор сидят на версиях 2010, всё равно для них придётся делать ico. Да и вот эта заморочка с dll для тёмной и светлой темы, могли бы сразу ещё тогда сделать png для тёмной и светлой темы, хотя это для нас, для приложений с 1-2 кнопками удобно 1-2 png, а если у приложения 6 панелей с 50-ю кнопками\иконками, конечно удобнее для всего этого использовать 1-2 ресурсных dll.
но начиная с AutoCAD 2017Если я не ошибаюсь, но начиная с 2017 почему-то через боундел не подхватывается SupportPath и соответственно Cuix не видит dll :-(
Если я не ошибаюсь, но начиная с 2017 почему-то через боундел не подхватывается SupportPath и соответственно Cuix не видит dll :-(Замечал несколько раз такое поведение. На одном из ПК мне удалось победить эту проблему установкой всех версий C++ Redistributable и .NET Framework 4.7 (хоть Autodesk и рекомендует его не использовать). Подозреваю, что ресурсные DLL, создаваемые в современных версиях Visual Studio требуют наличия на ПК современных версий C++ Redistributable и .NET Framework. Т.к. в С++ совсем не силён, то могу только предполагать.
Проверь не заблокирован ли у тебя dll-файл.Dll заблокированы, но это не мешает :)
Подозреваю, что ресурсные DLL, создаваемые в современных версиях Visual Studio требуют наличия на ПК современных версий C++ Redistributable и .NET Framework. Т.к. в С++ совсем не силён, то могу только предполагать.Нет. Это не так. В ресурсной DLL только ресурсы и наличие C++ Redistributable и .NET Framework не требуется совсем.
Он ведь как-то влияет на получаемую dll?Нет. Для ресурсной никак не влияет. А вот для обычных влияет.
Нет. Для ресурсной никак не влияет.И Бушман Андрей то же самое пишет (http://bushman-andrey.blogspot.ru/2013/08/dll-partial-cui.html):
Однако, когда речь заходит о создании DLL файл ресурсов, то тут всё гораздо проще: достаточно скомпилировать файл один раз (используя любую версию инструментов), с конфигурацией Release Win32, и затем использовать его на платформах x86\x64 (я компилировал DLL x86 и при этом в Windows 7 x64 мой CUI файл успешно извлекал из него изображения).А я уж хотел его упрекнуть в том, что он в статье писал о том, что нужно задавать этот параметр. Оказывается - нет. Лучше бы вообще не расписывал тонкости работы с Toolset (в рамках именно этой статьи), а то только с толку сбил :)
SupportPath здесь роли не играет. dll-файл смотрится в том же каталоге, что одноимённый cuix-файл.Играет, это мы где-то на этом же форуме ещё раньше выяснили.
Остаётся порекомендовать тебе:В общем есть таки ограничение на количество записей в "пути поиска" получается их там не может быть больше 34, и в последних версиях Autodesk умудрился забить весь этот список своими путями, для пользователей особо места не осталось. В ручном режиме я конечно обхитрил его, удалил пару путей явно мною не используемых и добавил свои но не в конце а середину списка.
1) Убедится, что в путях доступа нет dll-файла с таким же именем, но другим содержимым.
2) Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.
Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.В общем скопировать не проблема, надо подумать ещё как потом обновлять...
Ну, теоретически надо выгружать меню, и заменять файлы.Это кстати неплохо бы делать и при первом добавлении, а то в противном случае иконки появляются только после перезагрузки AutoCAD.
Есть не командный метод перезагрузки меню?MenuGroups.Load для загрузки меню и MenuGroup.Unload для выгрузки.
чего мне там в ответе написали...Похоже чувак ушел от ответа. Сам понимаешь, "EXPERT ELITE" у таких язык подвешен...
Я бы добавил удаление старых файлов менюПока не проверял, но я думаю AutoCAD их опять туда вернёт.
Если у тебя лисповое приложение, то прямо при загрузке его и выполняй проверку меню, достаточно сделать самовызов функции.Я так делал, ни чего не вышло. То ли из-за использование командного метода, то ли ещё что-то. Они загружаются один за одним из этих Bundle, и не ждут их выполнение.
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"Причём почему-то вместо одного раза, аж 5 раз.
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Неизвестная ошибка (command-s).
За command-s приношу извинения, я просто не помню, с какой версии оно появилось.Да не, я в 2018 проверяю, это какой-то прикол с этой bundle технологией.
В общем есть таки ограничение на количество записей в "пути поиска" получается их там не может быть больше 34А откуда такая информация?
Команда: (findfile "SupFoldTest.lsp")
"D:\\acadsupport\\новая папка (15)\\SupFoldTest.lsp"
Цитата: BearDyugin от 13-11-2017, 05:42:04Мне тоже кажется, что это ерунда. Скорее есть ограничение на суммарную длину "пути поиска".
В общем есть таки ограничение на количество записей в "пути поиска" получается их там не может быть больше 34
А откуда такая информация?
Скорее есть ограничение на суммарную длину "пути поиска".Добавил ещё 35 путей подлиннее (всего теперь их 71):
Команда: (findfile "SupFoldTest.lsp")
"D:\\very long folder name for test\\very long folder name for test level 1\\very long folder name for test level 2\\very long folder name for test level 3\\very long folder name for test level 4\\новая папка (35)\\SupFoldTest.lsp"
Дальше вручную проверять уже неинтересно. Надо уже программу писать, чтобы она создавала новые пути, пока не случится какой-нибудь фатал.В общем, если и есть какой-то лимит на записи, то его достигнуть непросто.Это может зависеть от версии, локализации, наличия установленных обновлений AutoCAD (или вертикального приложения), ну и от приложений сторонних разработчиков...
ну и от приложений сторонних разработчиков...А это как может повлиять?
Соответственно какую длину строки выдержит реестр - такую и выдержит.Там, по-моему, ограничение в 1 МБ...
Там, по-моему, ограничение в 1 МБ...Даже если 1 Мб. Это 1048576 байт. Погуглил маленько на тему того, сколько байт занимает один строковый символ. Вроде как, самое большое значение, которое нашёл - 6 байт. Максимально допустимый путь - 255 символов. Итого, разделив, получаем 685 с копейками. Мне кажется, такого количества путей более чем достаточно :)
Приложение считывает значение переменной в буфер недостаточной длины, манипулирует с ним, а затем пишет обратно. В результате обрезанный путь. Или как в Civil 3D 2015 - перекодирует кириллицу в абракадабру...ну и от приложений сторонних разработчиков...А это как может повлиять?
А откуда такая информация?Инфа из опыта.
Может это баг Сивила 2018?Так ведь я как раз в 2018 и проверял, это же видно на скриншоте: http://adn-cis.org/forum/index.php?topic=3138.msg31427#msg31427
А если SPDS Extension вообще выкинуть (от слова "совсем")То тогда, после перезагрузки, всё добавленное сохраняется, а SPDS Extension появляется снова уже в конце списка.
В общем это он SPDS виноват получается?Похоже на то.
ну и от приложений сторонних разработчиков...В яблочко, Александр Наумович! :)
В яблочко, Александр Наумович! :)Я даже знаю одного человека на нашем форуме, которому можно предъявить претензии. Я его называть не буду, но ссылку на эту тему кину.
Давай уточним. Если деинсталлировать SPDS Extension (так, чтобы AutoCAD его не мог найти и загрузить), то проблема с ограничением количества путей путей доступа остается или нет?А если SPDS Extension вообще выкинуть (от слова "совсем")То тогда, после перезагрузки, всё добавленное сохраняется, а SPDS Extension появляется снова уже в конце списка.
В общем это он SPDS виноват получается? Он мне ни когда не нравился :-)
Если деинсталлировать SPDS Extension (так, чтобы AutoCAD его не мог найти и загрузить), то проблема с ограничением количества путей путей доступа остается или нет?Удалил его, и всё наладилось, в списке сразу появились новые пути, которые раньше туда кто-то не пускал...