Cuix созданный в AutoCAD 2016 не хочет открываться в AutoCAD 2014

Автор Тема: Cuix созданный в AutoCAD 2016 не хочет открываться в AutoCAD 2014  (Прочитано 69769 раз)

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

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Только суффикса "_dark" нет - отсутствие суффикса как раз и означает тему "_dark".
В ранних версиях иконки буду браться из "без суффикса" или первой попавшейся?
Ну и в справке всё же написано
Цитировать
Например, если загружен файл CUIx под именем mymenu.cuix, AutoCAD выполняет поиск файла библиотеки ресурсов mymenu_light.dll, если используется светлая тема, и файла mymenu_dark.dll, если используется темная тема.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
В ранних версиях иконки буду браться из "без суффикса" или первой попавшейся?
В ранних версиях только без суффикса - про суффикс они понятия не имеют. В 2015 и новее думаю (!!!), что при отсутствии dll с суффиксом "_dark" будет браться без суффикса, но это нужно проверять. У меня сейчас такой возможности нет, а ты как раз этим занимаешься. Вот и доложишь результаты тестирования. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Только суффикс "_dark" не нужен - отсутствие суффикса как раз и означает тему "_dark".
Блин и точно, с суффиксом "_dark" он вообще не читает. Создал *_light и *_dark, отображалось всегда только как в *_light, переименовал *_dark в без суффикса, и всё, стало картинку из него подхватывать для тёмной темы.
Хотя опять же не фига не логично. Ранние версии как раз и имели только светлое оформление, а иконку будут брать для тёмной из файла без суффикса.

Также попробовал в dll засунуть иконки pngи icoно AutoCAD (даже 2016) почему-то не хочет их показывать.

Оффлайн Doublefish

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Цитировать
Также попробовал в dll засунуть иконки pngи icoно AutoCAD (даже 2016) почему-то не хочет их показывать.

1. Свойство ИД у вас точно в кавычках указано в dll?
2. Имя dll файла точно такое же как и cuix файла и они рядом?
3. В cuix в свойствах команды указаны малое и большое изображение в виде ИД без кавычек и точно свопадает с ид п.1?

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

  • Administrator
  • *****
  • Сообщений: 1115
  • Карма: 173
Небольшой отчет: проверил на нескольких bmp, сделав для них фон RGB 192,192,192. dll одна. Иконки вроде бы отображаются с прозрачностью и в темной, и светлой темах оформления. ico / png не загонял.
Все сделано в VS2015CommunityEdition
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
png загнать в dll не получится, а ico можно: Использование ресурсной dll для CUIx с прозрачными растрами
Хочу обратить внимание на то, что тип ресурса должен быть не BITMAP, а RCDATA
Ну и прикладываю пример проекта. В нём maestro.dll и имена кнопок:
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"Ну а затем перестроить проект.


« Последнее редактирование: 28-10-2015, 14:09:57 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Хочу обратить внимание на то, что тип ресурса должен быть не BITMAP, а RCDATA
А VS по-умолчанию определяет их как ICON, изменил на RCDATA и всё получилось. Потом пошёл дальше в тестах, и png определил как RCDATA, на что AutoCAD закрылся с ошибкой, и пока я это безобразие не исправил даже запускаться больше не стал выдавая ошибку.

В общем png через ресурсный dll ни как не получается использовать в AutoCAD, странно на прямую в cuix можно, а через dll нельзя.

Но самое плохое это
Хотя опять же не фига не логично. Ранние версии как раз и имели только светлое оформление, а иконку будут брать для тёмной из файла без суффикса.

Т.е. придётся всё равно делать разные Cuix для разных версий AutoCAD, причём для ранних(19.0-19.1)  можно и без dll просто с прозрачными bmp, а для свежих(20.0-20.1) уже dark\light dll. А в случаи с Lisp приложениями это лишние движения, теряется кроссплатформенность  :(

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Т.е. придётся всё равно делать разные 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-инсталлятора. В общем, каким образом ни делай, есть возможность один раз настроить и уже потом не думать откуда и какие файлы нужно скопировать и как назвать - все делается автоматически.
Как AutoCAD определяет, какой DLL подгружать:
- в версиях до 2014 включительно подгружается только та DLL с иконками, название которой совпадает с названием файла CIUX. К примеру, есть файл: "MyTools.cuix", иконки для этого файла ищутся в файле "MyTools.dll".
- в версиях 2015-2016 для темной схемы подгружается DLL, совпадающая с названием CUIX, для светлой - название с суффиксом "_light". Пример: "MyTools.cuix", иконки для темной схемы: "MyTools.dll", для светлой: "MyTools_light.dll".
Еще один неочевидный момент. Можно создавать один ICO файл для иконок 16х16 и 32х32. Для этого внутрь ICO нужно поместить два соответствующих изображения. В настройках кнопки указывается при этом одинаковый ID изображения для большой и маленькой кнопки. AutoCAD сам выберет иконку в зависимости от размера выводимого изображения. Этот прием позволяет сильно сократить количество ICO файлов в ресурсах C++ проекта.

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В папку для 2014 версии - только "светлая" dll без суффикса, в папку для версий 2015-2016 - "светлая" с суффиксом "_light", "темная" - без суффикса.
Воот, а где эти папки?
.bundle\Contents\Resources\en-us\2014 или .bundle\Contents\Resources\2015-2016\ru-RU или куда?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Я картинок добавил, там это показано. В принципе, структура Bundle может быть любая. Но идею Вы верно уловили - CUIX и DLL для версий 2014 и 2015-2016 должны лежать в разных папках.

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Я картинок добавил, там это показано
Клёва, а можно ещё картинку PackageContents.xml, пожалуйста. Лучше бы сам файлик, но я смотрю там много секретного, хотя
бы картинку глянуть.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Все секретное удалил и пометил как "<deleted>" :)
Код - XML [Выбрать]
  1. <?xml version="1.0" encoding="utf-8"?>
  2.  
  3. <ApplicationPackage
  4.  SchemaVersion="1.0"
  5.  AutodeskProduct="AutoCAD"
  6.  ProductType="Application"
  7.  AppVersion="1.0.2"
  8.  FriendlyVersion="1.0.0"
  9.  Author="Dmitriy Zagorulkin"
  10.  Name="<deleted>"
  11.   Description="<deleted>"
  12.   ProductCode="<deleted>"
  13.   UpgradeCode="<deleted>"
  14.   HelpFile="./Resources/Help/<deleted>C3dNetUtils.chm">
  15.  
  16.   <CompanyDetails
  17.    Name="Dmitriy Zagorulkin"
  18.    Phone=" "
  19.    Url="https://vk.com/zagorulkin"
  20.    Email="zagor.dmtr@gmail.com" />
  21.  
  22.   <RuntimeRequirements
  23.    SupportPath="./Resources/Help/"/>  
  24.  
  25.   <Components Description="R19 Parts">
  26.  
  27.     <RuntimeRequirements
  28.      OS="Win64"
  29.      Platform="Civil3D"
  30.      SeriesMin="R19.1"
  31.      SeriesMax="R19.1"
  32.      SupportPath="./Resources/R19/"/>
  33.  
  34.     <ComponentEntry
  35.      AppName="<deleted>C3dNetUtils R19 CUIX file"
  36.       AppDescription="CUIX file for load into AutoCAD Civil 3D 2014"
  37.       Version="1.0.2"
  38.       ModuleName="./Resources/R19/<deleted>C3dNetUtils.cuix"
  39.       AppType="CuiX"/>
  40.      
  41.    
  42.     <ComponentEntry
  43.      AppName="<deleted>C3dNetUtils R19 NET DLL file"
  44.       AppDescription="Net dll for application load into AutoCAD Civil 3D 2014"
  45.       Version="1.0.2"
  46.       ModuleName="./Contents/R19/<deleted>C3dNetUtilsR19.dll"
  47.       LoadOnAutoCADStartup="True">
  48.       <Commands>
  49.         <Command Local="C3dNetUtilsInitialize" Global="C3dNetUtilsInitialize" StartupCommand="True" />
  50.       </Commands>
  51.     </ComponentEntry>
  52.   </Components>
  53.  
  54.   <Components Description="R20 Parts">
  55.  
  56.     <RuntimeRequirements
  57.      OS="Win64" Platform="Civil3D" SeriesMin="R20.0"
  58.      SeriesMax="R20.1" SupportPath="./Resources/R20" />
  59.  
  60.     <ComponentEntry
  61.      AppName="<deleted>C3dNetUtils R20 CUIX file"
  62.       AppDescription="CUIX file for load into AutoCAD Civil 3D 2015-2016"
  63.       ModuleName="./Resources/R20/<deleted>C3dNetUtils.cuix"
  64.       Version="1.0.2"
  65.       AppType="CuiX" />
  66.    
  67.     <ComponentEntry
  68.      AppName="<deleted>C3dNetUtils R20 NET DLL file"
  69.       AppDescription="Net dll for application load into AutoCAD Civil 3D 2015-2016"
  70.       Version="1.0.2"
  71.       ModuleName="./Contents/R20/<deleted>C3dNetUtilsR20.dll"
  72.       LoadOnAutoCADStartup="True">
  73.       <Commands>
  74.         <Command Local="C3dNetUtilsInitialize" Global="C3dNetUtilsInitialize" StartupCommand="True" />
  75.       </Commands>
  76.     </ComponentEntry>
  77.   </Components>
  78.  
  79. </ApplicationPackage>

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
В конце своей заметки я добавил "Примечание" и "UPD".

Оффлайн BearDyuginАвтор темы

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В общем сделал всё как научили, долго мучился, больше из-за того что расплодилось разных вариантов под одним и тем же именем во всех путях поиска, и у AutoCAD голова кругом шла, что от куда брать  :o Но потам разобравшись, всё лишнее удалил. И всё заработало!
Но вот присылает мне мой чудо наставник, Sachin Kathare, установочный файл. А там в cuix коды ресурсов заменены на bmp фалы  :-[ ...
Что я сделал не так?
Ведь не лень было ему, (то ли Sachin то ли  Kathare, фиг знает где имя) bmp создавать из приложенных для фала справки png, и при чём даже не в сам cuix файл их запаковывать а в папку support копировать, туда же куда и Cuix при установки копируется. Как-то может нужно подсказать\намекнуть что вместе с cuix-ми нужно и ресурсные dll-ы копировать?

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Ведь не лень было ему, (то ли Sachin то ли  Kathare, фиг знает где имя) bmp создавать из приложенных для фала справки png
А почему его самого об этом не спросить (я не об имени|фамилии)?