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

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Всем привет, извиняюсь за дилетантские вопросы.

В общем создал файл частичной адаптации в 2016 AutoCAD-е, но при загрузке в AutoCAD 2014 он ругается.

Что может быть не так?

Оффлайн Николай Полещук

  • ADN
  • *
  • Сообщений: 33
  • Карма: 9
Файлы CUIX в разных версиях AutoCAD несовместимы, даже если и откроются, то будут неправильно работать.
Совместимость есть только на уровне MNU-файлов.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Хотелось бы уточнить: cui, созданный в 2008 версии, гарантированно преобразуется в cuix. Также гарантированно откроется в 2009.
Я бы сказал, что "обратной совместимости файлов меню нет, т.е. придется создавать в более младшей версии и потом уже открывать в более новой".
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Файлы CUIX в разных версиях AutoCAD несовместимы
Ну я же не просто так захотел чтоб оно работало от нового к старому. Раньше так делал.
Вот и сейчас специально новый пример cuix создал в 2016 и он нормально открылся в 2013
т.е. придется создавать в более младшей версии и потом уже открывать в более новой
Ну так и приходится, специально сегодня установил 2013 AutoCAD. Только там (в 2013) неудобно с png иконками, он не даёт их выбрать, приходиться вручную имена писать.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А зачем png? Для прозрачности? Если я правильно помню, где-то мелькал документ Autodesk Icon Develop Guide (формат pdf, текст достаточно мелкий) - там указывалось, какие цвета RGB AutoCAD понимает как "прозрачный". Может, стоит в эту сторону поискать?
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Для прозрачности?
Да, для прозрачного фона.
Нашёл статью http://bimapps.typepad.com/bim-apps/2011/Usability/Autodesk%20Icon%20Guidelines.pdf много всего полезного и интересного, но про прозрачный цвет ничего не нашёл.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
https://forums.autodesk.com/t5/autocad-2010-2011-2012/custom-ribbon-tool-background-color/td-p/2571342 :
"As Mat.Kirkland said, colour 192,192,192 is used for transparent backgrounds in autocad.

On the button image editor in autocad, click the more button under the standard colours, then type 192,192,192 in the bottom left where it says color:"

Т.е. RGB 192,192,192 понимается acad'ом как прозрачный цвет.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Есть еще вариант - создать ресурсную dll, куда и загонять все что угодно ;)
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Т.е. RGB 192,192,192 понимается acad'ом как прозрачный цвет.

Спасибо!
Проверил так оно и есть, только не совсем честная прозрачность. Т.е. при наложение других прозрачностей на этот "серый" фон, он становится немного другим не " RGB 192,192,192" и тем самым добавляя серые ореолы к объектам иконки, но как вариант - да.

создать ресурсную dll
Осталось научится создавать эти "ресурсные dll"  :D

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Старая тема: http://forum.dwg.ru/showthread.php?t=31134

в той теме
Цитата: gomer
Для новых версий это уже не актуально, файлы *.cuix содержат в себе кнопки

Спасибо, но пока не до изучения нового (dll там всякие), со старым бы разобраться, в общем вариант с ручным вводом имён png иконок меня пока больше устраивает.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Под "неактуально" подразумевалось "необязательно". Но это не означает, что механизм прекратил свое существование ;) mnc и mnr до сих пор компилируются :)
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Осталось научится создавать эти "ресурсные dll"  :D
У Андрея Бушмана есть статья на эту тему: http://bushman-andrey.blogspot.com/2013/08/dll-partial-cui.html
В принципе всё достаточно просто и наглядно. А это статьи на нашем сайте (для тех, кому не нужно объяснять как создавать ресурсные dll):
http://adn-cis.org/ispolzovanie-resursnoj-dll-dlya-cuix-s-prozrachnyimi-rastrami.html
http://adn-cis.org/npi-%28cui%29-i-prozrachnyie-kartinki.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Блин ещё одна засада с этими иконками, не помню с какого момента, но в AutoCAD-е появилась возможность переключать цветовую схему оформления с тёмной на светлую. И свои иконки AutoCAD каким-то образом меняет в соответствии со схемой, чтоб они нормально читались. А как быть с пользовательскими? То что смотрится хорошо на белом , плохо смотрится на сером :-(. Что делать, очень не хочется уходить от прозрачного фона.
Раз даже AutoCAD глюканул, и при тёмной схеме отображал фон-тёмным, а свои иконки как для светлого.



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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Я посмотрел - имена ресурсов не меняются в штатных файлах адаптации независимо от темы оформления. А если использовать руководство по созданию иконок от Autodesk?
P.S. Конечно, есть возможность и вручную png загонять, и ресурсную dll использовать ;)
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
А если использовать руководство по созданию иконок от Autodesk?
Там с непрозрачным фоном предлагают делать.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Внимательно читаем:
http://help.autodesk.com/view/ACD/2015/RUS/?guid=GUID-7103E61A-8317-4834-BB00-0FE23AEB020F
Приходим к выводу, что:
1) Нужно иметь два комплекта иконок
2) Нужно каждый из комплектов иконок поместить в свою ресурсную dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Секундочку... Насколько я помню, про фон кнопки там как раз ничего не сказано. Там сказано насчет оформления рисунков.
Вот мое меню в ACAD2016 с разными темами оформления. Никакого переключения не производится. Картинки хранятся в одной ресурсной dll, выполнены как bmp. Так что рекомендация, мне кажется, не совсем обязательна для выполнения.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Картинки хранятся в одной ресурсной dll, выполнены как bmp.
Судя по их виду они без прозрачности (т.е. без цвета 192,192,192 - т.к. они bmp, то другого способа сделать фон прозрачным нет). Geobuilder хочет этого избежать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
У Андрея Бушмана есть статья на эту тему: http://bushman-andrey.blogspot.com/2013/08/dll-partial-cui.html

но у меня нет такого пункта "ресурсы", может потому что у меня студия "экспресс"?  :'(

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
но у меня нет такого пункта "ресурсы", может потому что у меня студия "экспресс"?  :'(
Да. Из бесплатных есть Visual Studio Community, в которой эта и многие другие возможности есть.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Из бесплатных есть Visual Studio Community
Спасибо, уже устанавливаю.

Приходим к выводу, что:
1) Нужно иметь два комплекта иконок
2) Нужно каждый из комплектов иконок поместить в свою ресурсную dll
Хорошо, в справке написано
Цитировать
Начиная с AutoCAD 2015, если файл CUIx использует внешний ресурс DLL для пользовательских изображений, необходимо создать отдельный ресурс DLL для каждой темы: светлой и темной.
А как быть если приложение будет использоваться в более ранних чем AutoCAD 2015? Я всё про публикацию приложений в App Store.
Как будет правильнее, для разных версий автокада создавать разные Cuix или же добавить 3-ий dll без суфикса "_light/_dark"?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Подозреваю, что проще будет png или ico загонять в dll.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Подозреваю, что проще будет png или ico загонять в dll.
Не, не... Тут уже второй вопрос, с прозрачностью разобрались, bmp с прозрачным цветом 192,192,192, самый простой вариант. Но появились новые грабли смена цветовой схемы, на твоём же рисунке "голубой шар с кисточкой и красным кругляшком" смотрится куда лучше на белом чем на тёмном. Для тёмной надо новый рисовать с другими цветами для контраста.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
У меня bmp сформированы неверно, надо будет переделывать (инет глюканул, мой комментарий не прошел). Как будет время - проверю, что получится.
Все, что сказано - личное мнение.

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

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

Оффлайн Doublefish

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Когда я публиковал приложение в App Store я тоже задумался об иконках и как с ними быть. В результате я пришёл к тому, что вручную перекрасил все иконки (файлы bmp), изменив фон на 192,192,192 (даже и не зная ещё тогда что именно этот цвет и надо). Это решило проблему с отображением иконок во всех AutoCAD 2012-2016 даже с переключением с темной темы на светлую. Имеем всего один cuix файл и все иконки внутри его. В результате я про иконки забыл как страшный сон, т.к. больше проблем с этим нет. Все остальные варианты оказались трудней и отнимали время, а оказолось что проще перекрасить в ручную в самом редакторе CUIX по кнопке Изменить.

Изменения cuix производил в AutoCAD 2014, изменённый cuix загружается плагином и отображается нормально в AutoCAD 2012-2016.

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Это решило проблему с отображением иконок во всех AutoCAD 2012-2016 даже с переключением с темной темы на светлую.
Т.е. не менять цвета при переходе, а изначально подобрать такие, чтоб и там и там оптимально смотрелись?

Оффлайн Doublefish

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Пример иконки bmp в CUIX, отображение в темной схеме и затем отображение в светлой теме - проблемы с отображением нет
« Последнее редактирование: 27-10-2015, 12:51:07 от Doublefish »

Оффлайн Doublefish

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
в названии темы в одном слове ошибка - поправьте пожалуйста

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Как будет правильнее, для разных версий автокада создавать разные Cuix или же добавить 3-ий dll без суфикса "_light/_dark"?
Ну это на твоё усмотрение. Только суффикс "_dark" не нужен - отсутствие суффикса как раз и означает тему "_dark".

P.S.: По поводу последнего моего утверждения - на 100% не уверен. Нужно проверять.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • *****
  • Сообщений: 1096
  • Карма: 172
Небольшой отчет: проверил на нескольких bmp, сделав для них фон RGB 192,192,192. dll одна. Иконки вроде бы отображаются с прозрачностью и в темной, и светлой темах оформления. ico / png не загонял.
Все сделано в VS2015CommunityEdition
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • Карма: 735
Т.е. придётся всё равно делать разные 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
  • Карма: 735
Я картинок добавил, там это показано. В принципе, структура Bundle может быть любая. Но идею Вы верно уловили - CUIX и DLL для версий 2014 и 2015-2016 должны лежать в разных папках.

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

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

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Все секретное удалил и пометил как "<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
А почему его самого об этом не спросить (я не об имени|фамилии)?

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
А почему его самого об этом не спросить (я не об имени|фамилии)?
Обязательно спрошу, только они отвечают спустя минимум неделю.
Я кстати его и про имя\фамилию спросил, но он на этот вопрос так и не ответил. Они так ещё забавно пишут в письмах Dear ... Я конечно знаю что это Уважаемый, но почему-то читается как Дорогой  :D


Другой мой куратор, Sripathi Acharya, засунул обновления моего приложение для Civil 3D почему-то в AutoCAD, по ссылке оно есть а вот ни каким другим путём в app store его найти больше нельзя, тоже спросил его об этом неделю назад, до сих пор тишина.

Как бы есть сомнения, может я криворукий, вот и спросил тут.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
...
они отвечают спустя минимум неделю
...
в app store
теперь понял. ) То, что вместо цивила засунули в обычный акад - это может быть обычной ошибкой (человеческий фактор) либо в настройках XML-файла пакета не был указан цивил в качестве целевого вертикального приложения (тоже могло произойти по запарке). Наверняка смогут ответить скорее всего только авторы правок.

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

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Если появится аргументированное объяснение (например от тех же авторов правки), то мне тоже будет интересно почитать его.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Но вот присылает мне мой чудо наставник, Sachin Kathare, установочный файл. А там в cuix коды ресурсов заменены на bmp фалы   ...
Что я сделал не так?
Ведь не лень было ему, (то ли Sachin то ли  Kathare, фиг знает где имя) bmp создавать из приложенных для фала справки png, и при чём даже не в сам cuix файл их запаковывать а в папку support копировать, туда же куда и Cuix при установки копируется. Как-то может нужно подсказать\намекнуть что вместе с cuix-ми нужно и ресурсные dll-ы копировать?
Подозреваю, что они просто не знают, что можно по-другому делать. Конечно, надо подсказать. Для этого они и присылают установщик, чтобы мы могли им замечания/пожелания высказать.
По поводу имени - в именах сотрудников Autodesk (может так принято в США?) сперва идет имя, потом фамилия. Скорее всего, тут так же.

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Но вот присылает мне мой чудо наставник, Sachin Kathare, установочный файл. А там в cuix коды ресурсов заменены на bmp фалы   ...
Что я сделал не так?
Ну в итоге, сам криворукий.
А я ещё всё думаю, а как AutoCAD узнает где ему нужный dll искать для соответствующего Cuix? Причём, странно почему-то cuxi файл он загружает не из папки bundle, а копирует его в свой support. А потом заметил строчку в примере Дмитрия SupportPath="./Resources/R19/", а я такого не писал в своём PackageContents.xml, вот он иконки и не находил. Я же раньше не знал, что можно свой bundle  скопировать в C:\ProgramData\Autodesk\ApplicationPlugins и при запуске AutoCAD сам всё подхватит и установит,  и тестировал подгружая всё вручную.
Теперь всё работает, попробую обновить ещё раз и как-то объяснить эту схему своему "наставнику", я думаю он сам по ходу не знал что так можно, дописать SupportPath в PackageContents.xml было бы проще, чем в cuix bmp-шные иконки запихивать.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А VS по-умолчанию определяет их как ICON, изменил на RCDATA и всё получилось. Потом пошёл дальше в тестах, и png определил как RCDATA, на что AutoCAD закрылся с ошибкой, и пока я это безобразие не исправил даже запускаться больше не стал выдавая ошибку.

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

Я пропустил этот момент, но начиная с AutoCAD 2017 SP1 можно добавлять в ресурсную dll не только ico, но и png. Autodesk'овцы исправили баг, который этому препятствовал.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
начиная с AutoCAD 2017 SP1 можно добавлять в ресурсную dll не только ico, но и png. Autodesk'овцы исправили баг, который этому препятствовал.
Круто, но... есть индивиды что до сих пор сидят на версиях 2010, всё равно для них придётся делать ico. Да и вот эта заморочка с dll для тёмной и светлой темы, могли бы сразу ещё тогда сделать png для тёмной и светлой темы, хотя это для нас, для приложений с 1-2 кнопками удобно 1-2 png, а если у приложения 6 панелей с 50-ю кнопками\иконками, конечно удобнее для всего этого использовать 1-2 ресурсных dll.

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
но начиная с AutoCAD 2017
Если я не ошибаюсь, но начиная с 2017 почему-то через боундел не подхватывается  SupportPath и соответственно Cuix не видит dll :-(
2018

2014


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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я конечно могу ошибаться, но SupportPath здесь роли не играет. dll-файл смотрится в том же каталоге, что одноимённый cuix-файл. Проверь не заблокирован ли у тебя dll-файл.

Я проверил у себя и в 2017 и в 2018. Всё нормально (и light, и dark):


Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Если я не ошибаюсь, но начиная с 2017 почему-то через боундел не подхватывается  SupportPath и соответственно Cuix не видит dll :-(
Замечал несколько раз такое поведение. На одном из ПК мне удалось победить эту проблему установкой всех версий C++ Redistributable и .NET Framework 4.7 (хоть Autodesk и рекомендует его не использовать). Подозреваю, что ресурсные DLL, создаваемые в современных версиях Visual Studio требуют наличия на ПК современных версий C++ Redistributable и .NET Framework. Т.к. в С++ совсем не силён, то могу только предполагать.
К слову, у меня в версиях Civil 3D 2016-2018 твоя вкладка отображается корректно.
Проверь не заблокирован ли у тебя dll-файл.
Dll заблокированы, но это не мешает  :)
« Последнее редактирование: 12-10-2017, 14:16:07 от Дмитрий Загорулькин »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Подозреваю, что ресурсные DLL, создаваемые в современных версиях Visual Studio требуют наличия на ПК современных версий C++ Redistributable и .NET Framework. Т.к. в С++ совсем не силён, то могу только предполагать.
Нет. Это не так. В ресурсной DLL только ресурсы и наличие C++ Redistributable и .NET Framework не требуется совсем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Меня на эту мысль навело то, что мы же задаём параметр Platform Toolset:

Он ведь как-то влияет на получаемую dll?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Он ведь как-то влияет на получаемую dll?
Нет. Для ресурсной никак не влияет. А вот для обычных влияет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Нет. Для ресурсной никак не влияет.
И Бушман Андрей то же самое пишет (http://bushman-andrey.blogspot.ru/2013/08/dll-partial-cui.html):
Цитировать
Однако, когда речь заходит о создании DLL файл ресурсов, то тут всё гораздо проще: достаточно скомпилировать файл один раз (используя любую версию инструментов), с конфигурацией Release Win32, и затем использовать его на платформах x86\x64 (я компилировал DLL x86 и при этом в Windows 7 x64 мой CUI файл успешно извлекал из него изображения).
А я уж хотел его упрекнуть в том, что он в статье писал о том, что нужно задавать этот параметр. Оказывается - нет. Лучше бы вообще не расписывал тонкости работы с Toolset (в рамках именно этой статьи), а то только с толку сбил :)

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
SupportPath здесь роли не играет. dll-файл смотрится в том же каталоге, что одноимённый cuix-файл.
Играет, это мы где-то на этом же форуме ещё раньше выяснили.
Дело в том что cuix грузится не из папки bundle а сначала зачем-то копируется в C:\Users\*****\AppData\Roaming\Autodesk\****\***\Support при этом dll с собой не копирует.  И так как он не находит dllрядом ищет её в путях поиска.
И вот тут какая-то проблема возникает, я уже и в ручную добавляю этот путь, но после перезагрузки AutoCAD в списке путей он пропадает :-( Была как то в 2015 версии похожая проблема, но там из-за кириллицы в путях, что ему не нравится сейчас не пойму :-(

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Остаётся порекомендовать тебе:
1) Убедится, что в путях доступа нет dll-файла с таким же именем, но другим содержимым.
2) Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Off-Topic: показать


Знаковый пост!

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Остаётся порекомендовать тебе:
1) Убедится, что в путях доступа нет dll-файла с таким же именем, но другим содержимым.
2) Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.
В общем есть таки ограничение  на количество записей в "пути поиска" получается их там не может быть больше 34, и в последних версиях Autodesk умудрился забить весь этот список своими путями, для пользователей особо места не осталось. В ручном режиме я конечно обхитрил его, удалил пару путей явно мною не используемых и добавил свои но не в конце а середину списка.
Но как быть с boundle технологией и нашими ресурсными dll ?

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Скопировать этот dll-файл (а точнее два файла) в каталог рядом с cuix-файлом.
В общем скопировать не проблема, надо подумать ещё как потом обновлять...
Код - Auto/Visual Lisp [Выбрать]
  1. (defun dll_near_cuix (name         bundle_name  /
  2.                       name_cuix    name_dll     name_dll_light
  3.                       R            supp_dir      prog_dir
  4.                      )
  5. ;;;  (dll_near_cuix  "Geo_dev"  "BearDyugin Deviations.bundle")
  6.   (if (>= (atoi (getvar 'ACADVER)) 20)
  7.     (setq
  8.       name_cuix      (strcat name ".cuix")
  9.       name_dll       (strcat name ".dll")
  10.       name_dll_light (strcat name "_light.dll")
  11.       R              "\\R20"
  12.     )
  13.     (setq
  14.       name_cuix (strcat name "_19.cuix")
  15.       name_dll  (strcat name "_19.dll")
  16.       R         "\\R19"
  17.     )
  18.   )
  19.   (if (and
  20.         (not (findfile name_dll))
  21.         (setq supp_dir (findfile name_cuix))
  22.       )
  23.     (progn
  24.       (setq supp_dir (vl-filename-directory supp_dir)
  25.             prog_dir (getenv "programdata")
  26.             prog_dir (strcat
  27.                        prog_dir
  28.                        "\\Autodesk\\ApplicationPlugins\\"
  29.                        bundle_name
  30.                        "\\Contents\\Resources"
  31.                        R
  32.                       )
  33.       )
  34.       (if (setq temp (findfile (strcat prog_dir "\\" name_dll)))
  35.         (vl-file-copy temp (strcat supp_dir "\\" name_dll))
  36.       )
  37.       (if
  38.         (and
  39.           name_dll_light
  40.           (setq temp (findfile (strcat prog_dir "\\" name_dll_light)))
  41.         )
  42.          (vl-file-copy temp (strcat supp_dir "\\" name_dll_light))
  43.       )
  44.     )
  45.   )
  46. )

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Ну, теоретически надо выгружать меню, и заменять файлы.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Ну, теоретически надо выгружать меню, и заменять файлы.
Это кстати неплохо бы делать и при первом добавлении, а то в противном случае иконки появляются только после перезагрузки AutoCAD.
Есть не командный метод перезагрузки меню?
Твой код читал но так и не понял http://autolisp.ru/wp-content/uploads/2013/11/kpblc-menu-update.lsp
Опять же, тогда можно и dll ни куда не копировать? выгрузить меню то что из support, и загрузить то что из boundle :-) Очень я сомневаюсь, что на одном ПК будут работать разные пользователи и при этом ещё полезут в адаптацию...

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Если выполняется загрузка частичного меню, то я предпочитаю сейчас использовать именно командный метод: в противном случае меню может быть загружено, но ни лента, ни выпадающее меню не отображаются.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Есть не командный метод перезагрузки меню?
MenuGroups.Load для загрузки меню и MenuGroup.Unload для выгрузки.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Ребята, кто-нибудь может по-русски объяснить чего мне там в ответе написали...
https://forums.autodesk.com/t5/autocad-forum/cuix-file-and-icons-in-the-resource-dll/td-p/7565485#M451

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
чего мне там в ответе написали...
Похоже чувак ушел от ответа. Сам понимаешь, "EXPERT ELITE" у таких язык подвешен...

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В общем выгружаю командно меню которое загружено из папки support, и загружаю его же командно из папки bundle
перезагружаю AutoCAD и оно опять загружено из support
Как быть? нужно рабочее пространство ещё сохранять?
Нашёл код у Алексея
Код - Auto/Visual Lisp [Выбрать]
  1.  (if (setq wscurrent (getvar "wscurrent"))
  2.         (command "_.wssave" wscurrent "_y")
  3.         )
Вроде сделал так, но эффекта 0

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
А после загрузки меню точно загружено из bundle? И не срабатывает ли какой-то код, меняющий меню?
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Вот такой простенький лиспик выдаст перечень загруженных меню и их путей
Код - Auto/Visual Lisp [Выбрать]
  1. (vl-load-com)
  2.  
  3. (defun tt (/ lst)
  4.   (vlax-for item (vla-get-menugroups (vlax-get-acad-object))
  5.     (setq lst (cons (cons (vla-get-name item) (vla-get-menufilename item)) lst))
  6.     ) ;_ end of vlax-for
  7.   (vl-sort lst '(lambda (a b) (< (car a) (car b))))
  8.   ) ;_ end of defun

Да, кстати! Посмотри, нет ли у тебя "необработанных" меню - иногда они такие бяки порождают!
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Примерно так и делаю
Код - Auto/Visual Lisp [Выбрать]
  1. (defun Geo_reload_cuix
  2.        (name bundle_name / name_cuix R supp_dir prog_dir pas)
  3.  
  4.   (vlax-for item
  5.                  (vla-get-MenuGroups
  6.                    (vlax-get-acad-object)
  7.                  )
  8.     (if (eq (vla-get-Name item) name)
  9.       (setq pas (vla-get-menuFileName item))
  10.     )
  11.   )
  12.   (setq R         (if (>= (atoi (getvar 'ACADVER)) 20)
  13.                     "\\R20"
  14.                     "\\R19"
  15.                   )
  16.         prog_dir  (getenv "programdata")
  17.         name_cuix (strcat name ".cuix")
  18.   )
  19.   (if (and
  20.         pas
  21.         (not (wcmatch pas "*ProgramData*"))
  22.         (setq supp_dir (findfile name_cuix))
  23.         (setq temp (findfile (strcat (strcat
  24.                                        prog_dir
  25.                                        "\\Autodesk\\ApplicationPlugins\\"
  26.                                        bundle_name
  27.                                        "\\Contents\\Resources"
  28.                                        R
  29.                                       )
  30.                                      "\\"
  31.                                      name_cuix
  32.                              )
  33.                    )
  34.         )
  35.       )
  36.     (progn
  37.       (command "_.menuunload" name)
  38.       (command "_.menuload" temp)
  39.       (if (setq wscurrent (getvar "wscurrent"))
  40.         (command "_.wssave" wscurrent "_y")
  41.       )
  42.     )
  43.   )
  44. )
Меню загружается то что нужно, т.к. начинают отображаться иконки кнопок, потому что рядом с cuix в bundle лежит ресурсная dll, а рядом с cuix в support нет

Но всё равно это всё полумеры...

Раньше я копировал dll из bundle в suport и всё работало, но потом подумал над обновлением, и решил перезагружать cuix, но когда опять столкнулся с проблемой теперь думаю просто проверять дату dll если она в bundle свежее то обновлять dll в support.

Но эти функции я вешаю проверять при запуске команд, а до того там нет иконок :-(
Пробовал в конце файла сразу вызов функции делать, чтоб типа в момент загрузки, но фиг, она загружается так рано, что AutoCAD ещё не готов ни чего выполнять, в итоге ни чего и не выполняется :-(

При этом когда вручную делаю перезагрузку меню, то всё сохраняется, и перезапуск AutoCAD уже ничего назад не возвращает.

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Возможно, не срабатывает (findfile name_cuix). Я бы добавил удаление старых файлов меню, по принципу:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun geo_reload_cuix (name bundle_name / name_cuix r supp_dir prog_dir pas)
  2.   (setq pas       (menugroup name)
  3.         r         (strcat "\\R" (itoa (atoi (getvar "acadver"))))
  4.         prog_dir  (getenv "programdata")
  5.         name_cuix (strcat name ".cuix")
  6.         ) ;_ end of setq
  7.   (if (and pas
  8.            (not (wcmatch pas "*ProgramData*"))
  9.            (setq supp_dir (findfile name_cuix))
  10.            (setq temp (findfile
  11.                         (strcat (strcat prog_dir "\\Autodesk\\ApplicationPlugins\\" bundle_name "\\Contents\\Resources" r)
  12.                                 "\\"
  13.                                 name_cuix
  14.                                 ) ;_ end of strcat
  15.                         ) ;_ end of findfile
  16.                  ) ;_ end of setq
  17.            ) ;_ end of and
  18.     (progn (command "_.menuunload" name)
  19.            (foreach file (vl-directory-files (vl-filename-directory name) (strcat (vl-filename-base name) ".*") 1)
  20.              (vl-file-delete file)
  21.              ) ;_ end of foreach
  22.            (foreach file (vl-directory-files (vl-filename-directory temp) (strcat (vl-filename-base temp) ".*") 1)
  23.              (if (and (vl-filename-extension file)
  24.                       (wcmatch (vl-string-trim "." (strcase (vl-filename-extension file))) "MN[RC]")
  25.                       ) ;_ end of and
  26.                (vl-file-delete file)
  27.                ) ;_ end of if
  28.              ) ;_ end of foreach
  29.            (command "_.menuload" temp)
  30.            (if (setq wscurrent (getvar "wscurrent"))
  31.              (command "_.wssave" wscurrent "_y")
  32.              ) ;_ end of if
  33.            ) ;_ end of progn
  34.     ) ;_ end of if
  35.   ) ;_ end of defun
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Пока не забыл: для обновления ресурсной dll необходимо будет выгружать cuix, удалять файлы mn[rc], и только потом выполнять обновление файлов и загрузку меню.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Я бы добавил удаление старых файлов меню
Пока не проверял, но я думаю AutoCAD их опять туда вернёт.
Не совсем понятно как эта bundle технология работает, запускается AutoCAD, заглядывает в C:\ProgramData\Autodesk\ApplicationPlugins читает там все PackageContents.xml во всех bundle, и если не находит cuix в support, то копирует его туда, и уже от туда загружает в AutoCAD
Так что вернусь к копированию dll, и при этом перезагрузкой cuix, как ты позже заметил.

Вопрос, как это сделать без вмешательства пользователя? Ну т.е. сегодня, он у меня должен сначала увидеть, вопросики вместо иконок, догадаться нажать на одну из них, тогда при запуске команды я проверяю, как дела с Cuix и при необходимости копирую\обновляю их...

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Если у тебя лисповое приложение, то прямо при загрузке его и выполняй проверку меню, достаточно сделать самовызов функции. Ну а для .NET, наверное, потребуется уже другая технология (хотя она тоже описывалась).
Все, что сказано - личное мнение.

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

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

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

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

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Попробуй:
1. Выгружать через vla-unload
2. Использовать command-s вместо command
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В общем командный метод не работетет
При использовании command выдаёт вот это:
Цитировать
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
; ошибка: Команда AutoCAD отвергнута: "_.menuunload"
Причём почему-то вместо одного раза, аж 5 раз.

При использовании command-s получаем вот это:
Цитировать
; ошибка: Неизвестная ошибка (command-s).

С Vla всё получилось, нашёл ещё статью, там узнал как не только выгружать но и загружать http://adn-cis.org/basemenu-autocad.html
Но почему-то вот на такое ругается, говорит нет у документа такого параметра как МенюГруппс
Код - Auto/Visual Lisp [Выбрать]
  1.  (vla-load (vla-get-menugroups
  2.                           (vla-get-activedocument (vlax-get-acad-object))
  3.                           ) ;_ end of vla-get-menugroups
  4.                        "бла-бла-бла-меню"
  5.                         :vlax-false
  6.                         )
А вот так вполне работает
Код - Auto/Visual Lisp [Выбрать]
  1. (vla-load (vla-get-menugroups
  2.                            (vlax-get-acad-object))                          
  3.                         "бла-бла-бла-меню"
  4.                         :vlax-false
  5.                         )
Не совсем понял про третий параметр  :vlax-false из статьи предположил что для основного меню он  :vlax-true, для частичного  :vlax-false правильно?


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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Проблема в том, что при программной загрузке меню лента не появляется. А с лентой лиспом работать невозможно (насколько я знаю). Поэтому пришлось использовать именно командные методы.
За command-s приношу извинения, я просто не помню, с какой версии оно появилось.
То, что срабатывает "аж 5 раз", надо смотреть, что и откуда вызывается. Я бы проходил пошагово по всему приложению и выяснял, почему так все срабатывает.
Все, что сказано - личное мнение.

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

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

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
За command-s приношу извинения, я просто не помню, с какой версии оно появилось.
Да не, я в 2018 проверяю, это какой-то прикол с этой bundle технологией.
т.е. vla - работает, а vl-cmdf\command\command-s - нет.
Я всё таки склоняюсь к тому, что загрузка происходит слишком рано, и AutoCAD ещё либо не готов к командным методам, либо специально их отвергает на этом этапе.
« Последнее редактирование: 03-04-2018, 12:33:03 от BearDyugin »

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
В общем получилось вот так:
Код - Auto/Visual Lisp [Выбрать]
  1. (defun copy_dll_to_cuix (name         bundle_name     /
  2.                       get_dat         name_cuix       name_dll
  3.                       name_dll_light  R               file_cuix
  4.                       supp_dir        prog_dir
  5.                       dll_light_file_prog             dll_file_prog
  6.                       dll_file_supp
  7.                      )
  8.   (defun get_dat (file /)
  9.     (setq dat (vl-file-systime file))
  10.     (+ (* (car dat) 365) (* (cadr dat) 30) (cadddr dat))
  11.   )
  12.   (setq
  13.     name_cuix      (strcat name ".cuix")
  14.     name_dll       (strcat name ".dll")
  15.     name_dll_light (strcat name "_light.dll")
  16.     R              (if (>= (atoi (getvar 'ACADVER)) 20)
  17.                      "\\R20"
  18.                      "\\R19"
  19.                    )
  20.   )
  21.   (if
  22.     (and
  23.       (setq
  24.         file_cuix (findfile name_cuix)
  25.       )
  26.       (setq supp_dir (vl-filename-directory file_cuix)
  27.             prog_dir (getenv "programdata")
  28.             prog_dir (strcat
  29.                        prog_dir
  30.                        "\\Autodesk\\ApplicationPlugins\\"
  31.                        bundle_name
  32.                        "\\Contents\\Resources"
  33.                        R
  34.                       )
  35.             dll_light_file_prog
  36.              (findfile
  37.                (strcat prog_dir "\\" name_dll_light)
  38.              )
  39.             dll_file_prog
  40.              (findfile (strcat prog_dir "\\" name_dll))
  41.       )
  42.       (or
  43.         (not (setq dll_file_supp
  44.                     (findfile (strcat supp_dir "\\" name_dll))
  45.              )
  46.         )
  47.         (< (get_dat dll_file_supp) (get_dat dll_file_prog))
  48.       )
  49.     )
  50.      (progn
  51.        (vl-file-copy dll_file_prog (strcat supp_dir "\\" name_dll))
  52.        (if
  53.          dll_light_file_prog
  54.           (vl-file-copy
  55.             dll_light_file_prog
  56.             (strcat supp_dir "\\" name_dll_light)
  57.           )
  58.        )
  59.        (vla-unload
  60.          (vla-item (vla-get-MenuGroups (vlax-get-acad-object)) name)
  61.        )
  62.        (vla-load (vla-get-menugroups
  63.                    (vlax-get-acad-object)
  64.                  )
  65.                  file_cuix
  66.                  :vlax-false
  67.        )
  68.      )
  69.   )
  70. )
Конечно очень мало вероятно, что найдётся ещё кто-нибудь использующий Lisp, технологию bundle, и ресурсные dll с иконками для файлов адаптации одновременно  :D

Всем спасибо!

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
В общем есть таки ограничение  на количество записей в "пути поиска" получается их там не может быть больше 34
А откуда такая информация?





Команда: (findfile "SupFoldTest.lsp")
"D:\\acadsupport\\новая папка (15)\\SupFoldTest.lsp"

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Цитата: BearDyugin от 13-11-2017, 05:42:04

    В общем есть таки ограничение  на количество записей в "пути поиска" получается их там не может быть больше 34

А откуда такая информация?
Мне тоже кажется, что это ерунда. Скорее есть ограничение на суммарную длину "пути поиска".
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Скорее есть ограничение на суммарную длину "пути поиска".
Добавил ещё 35 путей подлиннее (всего теперь их 71):



Закрыл-открыл AutoCAD, проверил - работают:
Команда: (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"
Дальше вручную проверять уже неинтересно. Надо уже программу писать, чтобы она создавала новые пути, пока не случится какой-нибудь фатал.
В общем, если и есть какой-то лимит на записи, то его достигнуть непросто.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
В общем, если и есть какой-то лимит на записи, то его достигнуть непросто.
Это может зависеть от версии, локализации, наличия установленных обновлений AutoCAD (или вертикального приложения), ну и от приложений сторонних разработчиков...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
ну и от приложений сторонних разработчиков...
А это как может повлиять?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
Если я правильно помню, то пути поиска хранятся в реестре, в переменной окружения "ACAD" (разделенные символом ";"). Соответственно какую длину строки выдержит реестр - такую и выдержит. Ограничение не в количестве путей, а в их суммарной длине.
Все, что сказано - личное мнение.

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

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

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Соответственно какую длину строки выдержит реестр - такую и выдержит.
Там, по-моему, ограничение в 1 МБ...

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Есть такое. В реестре хранится в переменной типа REG_EXPAND_SZ. Из ограничений на размер я нашёл только это: https://msdn.microsoft.com/en-us/library/windows/desktop/ms724872(v=vs.85).aspx
То есть, как я понимаю, в последних версиях размер ограничен только размером доступной памяти.

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Там, по-моему, ограничение в 1 МБ...
Даже если 1 Мб. Это 1048576 байт. Погуглил маленько на тему того, сколько байт занимает один строковый символ. Вроде как, самое большое значение, которое нашёл - 6 байт. Максимально допустимый путь - 255 символов. Итого, разделив, получаем 685 с копейками. Мне кажется, такого количества путей более чем достаточно :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
ну и от приложений сторонних разработчиков...
А это как может повлиять?
Приложение считывает значение переменной в буфер недостаточной длины, манипулирует с ним, а затем пишет обратно. В результате обрезанный путь. Или как в Civil 3D 2015 - перекодирует кириллицу в абракадабру...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
А откуда такая информация?
Инфа из опыта.
В общем сначала стали жаловаться пользователи, что в 2018 Сивиле не отображаются иконки у моих приложений.
Хотя в PackageContents.xml написано
Код - XML [Выбрать]
  1.  SupportPath="./Contents/Resources/R20"
собственно там изначально и лежит cuix со своими dll
В Civil 3D 2018 заглядываю в "Пути поиска" нет там этих путей...
Добавляю их вручную

Перезагружаю AutoCAD Civil 3D 2018 опять заглядываю в "Пути поиска" и их опять там нет


Итак на всех моих ПК и у всех моих знакомых... Может это баг  Сивила 2018?

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Может это баг  Сивила 2018?
Так ведь я как раз в 2018 и проверял, это же видно на скриншоте: http://adn-cis.org/forum/index.php?topic=3138.msg31427#msg31427

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
А если новый путь поместить выше пути SPDSExtension? Пропадёт путь SPDSExtension?

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

  • Administrator
  • *****
  • Сообщений: 1096
  • Карма: 172
В качестве оффтопа :) Обычно я под один проект делаю максимум один путь поддержки, вся остальная информация - в реестре, откуда она и считывается.
Все, что сказано - личное мнение.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
BearDyugin,
А если SPDS Extension вообще выкинуть (от слова "совсем")???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
А если SPDS Extension вообще выкинуть (от слова "совсем")
То тогда, после перезагрузки, всё добавленное сохраняется, а SPDS Extension появляется снова уже в конце списка.

В общем это он SPDS виноват получается? Он мне ни когда не нравился :-)

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

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
В общем это он SPDS виноват получается?
Похоже на то.
ну и от приложений сторонних разработчиков...
В яблочко, Александр Наумович! :)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
В яблочко, Александр Наумович! :)
Я даже знаю одного человека на нашем форуме, которому можно предъявить претензии. Я его называть не буду, но ссылку на эту тему кину.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А если SPDS Extension вообще выкинуть (от слова "совсем")
То тогда, после перезагрузки, всё добавленное сохраняется, а SPDS Extension появляется снова уже в конце списка.

В общем это он SPDS виноват получается? Он мне ни когда не нравился :-)
Давай уточним. Если деинсталлировать SPDS Extension (так, чтобы AutoCAD его не мог найти и загрузить), то проблема с ограничением количества путей путей доступа остается или нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 270
  • Карма: 24
  • Геодезист
Если деинсталлировать SPDS Extension (так, чтобы AutoCAD его не мог найти и загрузить), то проблема с ограничением количества путей путей доступа остается или нет?
Удалил его, и всё наладилось, в списке сразу появились новые пути, которые раньше туда кто-то не пускал...