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

ADN Club => Адаптация AutoCAD и вертикальных приложений => Тема начата: VetalBY от 14-04-2016, 16:07:49

Название: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 14-04-2016, 16:07:49
Проблема следующая: все иконки меню собраны в dll в формате bmp. В AutoCAD 2017, насколько я понял, прекращена поддержка bmp в иконках, нужно переходить на png. Вернее акад показывает и bmp, но без прозрачности, т. е. выглядит это мягко говоря "не очень".
Как проще выполнить перевод проекта Visual Studio для создания ресурсной dll от bmp к png? Что-то не нахожу вообще информации по созданию dll для AutoCAD, содержащую иконки не bmp, а png.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 14-04-2016, 16:11:39
Только не png, а ico. Как-то так: http://adn-cis.org/ispolzovanie-resursnoj-dll-dlya-cuix-s-prozrachnyimi-rastrami.html
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 14-04-2016, 17:09:40
А я с png мучаюсь... Взял отсюда http://adn-cis.org/autodesk-developer-day-2016.html
Видимо png можно использовать, но только не в dll.
Спасибо, попробую ico
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 14-04-2016, 17:32:07
Работает. И bmp, и ico можно держать в одной dll, которая подойдет под все версии акада - это очень хорошо)
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 14-04-2016, 20:15:20
И bmp, и ico можно держать в одной dll, которая подойдет под все версии акада - это очень хорошо)
Держать то можно, но имена ресурсов должны отличаться и соответственно должны быть разные CUI/CUIX-файлы.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 14-04-2016, 23:08:54
Держать то можно, но имена ресурсов должны отличаться и соответственно должны быть разные CUI/CUIX-файлы.
Они разного типа, одни Bitmap, другие RCDATA, поэтому имена могут быть одинаковые.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 14-04-2016, 23:18:36
Они разного типа, одни Bitmap, другие RCDATA, поэтому имена могут быть одинаковые.
А вот тут я не уверен. Каким образом AutoCAD определит брать ли ему IDI_TRIANGLE32 из раздела BITMAP или IDI_TRIANGLE32 из раздела RCDATA, если в cuix-файле указано IDI_TRIANGLE32?
Т.е. содержимое rc-файла такое допустимо:
Код - INI [Выбрать]
  1. BITMAP16                BITMAP                  "RES\\bitmap16.bmp"
  2. BITMAP32                BITMAP                  "RES\\bitmap32.bmp"
  3. BITMAP16                RCDATA                  "RES\\bitmap16.ico"
  4. BITMAP32                RCDATA                  "RES\\bitmap32.ico"
Но какую из иконок возьмёт AutoCAD если его просят BITMAP32?
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 14-04-2016, 23:52:07
Но какую из иконок возьмёт AutoCAD если его просят BITMAP32?
Ну для точного ответа нужно провести тесты на всех акадах)
Из того, что смотрел я:
AutoCAD 2006 - 2017 берут из RCDATA, т.е получается bmp вообще не нужен. На более низких версиях не смотрел, мне не нужно, подозреваю, что будут искать bmp.
А вот BricsCAD точно берет bmp.
Поэтому я и говорю, что вариант с двумя одинаковыми именами в разных типах должен сработать везде, т. е. более надежный и хуже не будет. Каждая версия будет искать свой тип, о котором она знает.
Еще бы для разных тем оформления (темная и светлая) всё в одну dll запихнуть - вообще сказка была бы)
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 15-04-2016, 00:00:53
Еще бы для разных тем оформления (темная и светлая) всё в одну dll запихнуть - вообще сказка была бы)
Да ладно. Добавишь ещё одну dll:
- в версиях 2015-2016 для темной схемы подгружается DLL, совпадающая с названием CUIX, для светлой - название с суффиксом "_light". Пример: "MyTools.cuix", иконки для темной схемы: "MyTools.dll", для светлой: "MyTools_light.dll".
Думаю что для AutoCAD 2017 аналогично.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 15-04-2016, 00:36:18
Да ладно. Добавишь ещё одну dll:
Ну да. Только вот опять не по-русски всё: без суффикса в 2015 акаде-это для темной схемы (на пиктограммах цвет хорошо видимый - это белый, для светлой - черный), а в том же 2013-м для темной и светлой пиктограммки не отличаются (вычерчены черным). ИМХО нужно было для светлой схемы без суффикса. Ну это так, заморочки, это я к тому, что скорее всего одним меню не обойтись...
Александр, спасибо за подсказку на счет ico. Честно говоря, до сих пор встречал только информацию о том, что dll делают из bmp. И был сильно удивлен, что уже AutoCAD 2006 знал об RCDATA.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 15-04-2016, 00:43:41
И был сильно удивлен, что уже AutoCAD 2006 знал об RCDATA.
Насколько я помню и более ранние знали, но с какой версии не помню. Кажется с 2004-ой, но проверить не могу. Просто в своё время просматривал ресурсные dll-ки самого AutoCAD и находил, что стандартные иконки находятся именно в разделе RCDATA, а не BITMAP.
В основном они содержались в файле acadbtn.xmx, а в последних версиях в acadbtn.xmx и acadbtn_light.xmx
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 16-04-2016, 14:01:08
возможно будет интересно глянуть: http://bushman-andrey.blogspot.ru/2013/08/dll-partial-cui.html
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 16-04-2016, 14:55:43
возможно будет интересно глянуть: http://bushman-andrey.blogspot.ru/2013/08/dll-partial-cui.html
Теперь можешь статью немного подправить на предмет возможности использования ico-файлов (в том числе и прозрачных) и то, что цвет 192,192,192 в AutoCAD 2017 и последующих больше не воспринимается как прозрачный.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 13-05-2016, 13:17:30
и то, что цвет 192,192,192 в AutoCAD 2017 и последующих больше не воспринимается как прозрачный.
У меня в AutoCAD 2009 этот цвет на ribbon panel интерпретируется как прозрачный, а на toolbar - нет... В чём может быть затык?
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 13-05-2016, 13:29:14
Оказалось, что AutoCAD "сфотографировал" предыдущую версию картинки и после обновления dll обновление было подхвачено только риббонами, но не туллбаром. Выгрузка и повторная загрузка частичного меню не помогает - всё равно туллбар кажет старый вариант.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 13-05-2016, 13:33:37
Перебил значения small image и lage image на инвалидные, нажал apply, получил "облачко с вопросиком", после чего снова переписал значения предыдущими, нажал apply - всё стало отображаться корректно.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: VetalBY от 13-05-2016, 13:49:00
Оказалось, что AutoCAD "сфотографировал" предыдущую версию картинки и после обновления dll обновление было подхвачено только риббонами, но не туллбаром. Выгрузка и повторная загрузка частичного меню не помогает - всё равно туллбар кажет старый вариант.
После подмены dll нужно удалять файл mnr, это скомпилированный файл ресурсов, он сформируется заново.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 13-05-2016, 13:57:52
После подмены dll нужно удалять файл mnr, это скомпилированный файл ресурсов, он сформируется заново.
Именно так. Необходимо удалять одноимённый mnr-файл, лежащий в том же каталоге, что и mnu/mns/cui/cuix- файл. И это в AutoCAD с незапамятных времён (> 15 лет)
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 13-05-2016, 13:58:49
По теме библиотек с иконками - возможно кто-то не знает о наличии библиотеки от Майкрософт (может пригодиться) https://www.microsoft.com/en-us/download/details.aspx?id=35825
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Виталий от 12-06-2016, 13:36:25
Еще бы для разных тем оформления (темная и светлая) всё в одну dll запихнуть - вообще сказка была бы)
Никогда не делал меню используя dll. Наверно это единственный вариант чтобы сделать разные иконки для светлого и темного меню? Если так, поделитесь полным проектом содержащим все (две) dll. Чтобы сразу по образцу адаптировать свое меню, а то бегая по разным ссылкам трудно понять что к чему.
А еще лучше было бы без этих знаний сделать 2 cuix и их перегружать при изменении переменной "COLORTHEME" если это вообще возможно. Было бы здорово для многих используя только Vlisp добиться того же результата.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 12-06-2016, 21:43:33
Если так, поделитесь полным проектом содержащим все (две) dll. Чтобы сразу по образцу адаптировать свое меню, а то бегая по разным ссылкам трудно понять что к чему.
Еще раз повторюсь: http://adn-cis.org/ispolzovanie-resursnoj-dll-dlya-cuix-s-prozrachnyimi-rastrami.html (http://adn-cis.org/ispolzovanie-resursnoj-dll-dlya-cuix-s-prozrachnyimi-rastrami.html)
Там есть пример проекта:  cui resonly ico.zip (http://adn-cis.org/assets/gallery/AutoCAD/cui-resonly-ico-7.zip)
Ты конечно его уже попробовал?
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Виталий от 14-06-2016, 11:08:31
Я не знаю сколько нужно времени чтобы его запустить (не открыавается и не компелируется и еще куча вопросов  где сам cuix и т.п.- не полный проект) и вообще разбираться в этой каше, когда уже есть готовый cuix c кучей png для light режима. Убежден, что проще и быстрее! сделать второй cuix c суффисом _dark или типа того, чем еще одну гору разгребать на ровном месте.

Там для Автодеска элементано было бы сделать в редакторе CUI еще одно поле в Properties для dark/light режима к тому же создаются разные .mnr и _light.mnr для каждого cuix. Но у нас автоматизация почему-то идет в противоположную сторону (для разработчиков).

Когда я задался этой темой меня интересовала больше сама организация решения. Например, есть здоровый готовый cuix (не из 2-3 команд) он должен создаваться, считаю только визуально в Автокаде! А потом, что получается его нужно с нуля воссоздать в формате ресурсов cpp для dll. К тому же в самом CUI редакторе внутри Автокада возможность добавления ICO нет вообще, т.е. дискуссия в этой теме про ICON это только для программистов сишников, а не большинства людей, которые всю жизнь адаптировали меню средствами Автокада.   
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 14-06-2016, 11:41:16
кознить нилзйа памилавать
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Виталий от 14-06-2016, 15:06:22
Как я понял если неосторожно добавить png'гешку в cuix, то удалить или изменить ее в cuix невозможно, Только ее оставлять (мусор) и добавлять другую, но уже обязательно с другим именем. поскольку CUI интерфейс их не перезаписывает и не удаляет!

Шутка: Если изучить язык cpp, xml, VS IDE и т.п., то ее можно удалить, скомпелировать новый DLL и о чудо, картинка будет удалена - легко и главное надежно.

Если серьезно есть ли возможность ее удалить без VS? 
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 14-06-2016, 15:13:03
скомпелировать
Программисту настойчиво делать такие грамматические ошибки как-то не "кошерно"...
Если серьезно есть ли возможность ее удалить без VS? 
CUIX - это обычный архив, у которого заменили расширение. Распакуй, измени как тебе нужно и запакуй обратно.


Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Виталий от 15-06-2016, 09:55:06
CUIX - это обычный архив, у которого заменили расширение. Распакуй, измени как тебе нужно и запакуй обратно.
Спасибо, не знал, помогло. Может уважаемые программисты добьете, что подменить в архиве чтобы были разные иконки для светлого и темного режимов. Вижу только причинно-следственную связь в двух файлах ###.mnr и ###_light.mnr. Пытался их подменять но не сработало.
Какие файлы отвечают внутри архива за различие темного и светлого режимов, если они вообще есть там?   
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Александр Ривилис от 15-06-2016, 11:20:07
Может уважаемые программисты добьете, что подменить в архиве чтобы были разные иконки для светлого и темного режимов.
Ничего подменять не надо. Точнее подменять там нечего.
Какие файлы отвечают внутри архива за различие темного и светлого режимов, если они вообще есть там?   
Нет там ничего, чтобы тебя интересовало. Только ресурсные DLL и только так, как было сказано выше. Другое решение - два CUIX-файла в зависимости светлой или тёмной тем.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Виталий от 15-06-2016, 15:07:30
Кто знает почему вставляешь в cuix png c прозрачным фоном, а в готовом меню прозрачный фон становится черным!? Вчера все было нормально. Вообще в CUI интерфейсе куча ошибок! Топчешься на одном месте, тем более когда сотни bmp конвертируешь в png (слава богу за раз), но потом каждому по отдельности меняешь фон на прозрачный, а в итоге в Автокаде он становится вдруг черным!!!
Высылаю как доказательство файлы. От чего это может зависеть.  Неужели еще и форматы PNG могут быть разными?
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 15-06-2016, 15:35:42
Есть такая поговорка: "от дурной головы ногам больно". Сам себе проблемы изобретаешь. Поиск забанили? Ты за то время, что мусолишь эту тему, мог уже сам сто раз найти на форумах этого сайта обсуждения по CUI\CUIX и изображений используемых в них (и по части прозрачности, в т.ч.). Кроме того, в документации полно информации по теме.

Причём твои вопросы наводят на мысль, что ты не читал даже ту тему, в которой печатаешь свои сообщения, поскольку и в ней это обсуждалось...

Перепечатывать здесь тебе то, что уже напечатано в др. темах - сомнительное удовольствие.
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Виталий от 15-06-2016, 17:12:44
Тему всю читал. О том, что прозрачный цвет может быть в результате черным пояснений не встречал.
У меня все нормально было, а потом может быть другим способом png сделал. Короче если трудно подсказать в чем моя ошибка, сам разберусь.   
Название: Re: Перевод иконок ресурсной dll с bmp на png
Отправлено: Андрей Бушман от 15-06-2016, 17:30:53
сам разберусь.
тоже неплохой вариант. Если надоест велосипед изобретать, то поиском можно (неожиданно) обнаружить, что решение проблемы прозрачности уже демонстрировалось (http://adn-cis.org/forum/index.php?topic=3138.msg12723#msg12723) на этом форуме. В своих проектах я успешно использую обозначенный способ.