Ошибки при переносе проекта с 2008 на 2014

Автор Тема: Ошибки при переносе проекта с 2008 на 2014  (Прочитано 5286 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 2
Пытаюсь адаптировать пример cui из sdk2008, Visual studio  при замене сборок автокада подчеркивает отсутствующие свойства:

Код - C# [Выбрать]
  1. Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; // DocumentManager
  2.  
  3. string mainCuiFile = (string)Application.GetSystemVariable("MENUNAME"); // GetSystemVariable

... и почему-то подчеркивает атрибуты:
Код - C# [Выбрать]
  1. [CommandMethod("savecui")]
  2. [LispFunction("savecui")]

Пытался сам найти  DocumentManager через Object browser, но он отсутсвует в 2014 сборках
Только начинаю разбираться с API, спасибо.
« Последнее редактирование: 24-04-2018, 17:03:19 от Александр Ривилис »

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 806
  • Карма: 166
    • Мои плагины к Автокаду
Проверьте наличие using Autodesk.AutoCAD.ApplicationServices;
А в ссылках проекта acmgd

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 2
Проверьте наличие using Autodesk.AutoCAD.ApplicationServices;
А в ссылках проекта acmgd
Добавлена ссылка. Autodesk.AutoCAD.ApplicationServices.Application он видит а дальше нет (DocumentManager не видит).

Когда подключаю с 2008 те же сборки то все без ошибок

Отмечено как Решение Ese 24-04-2018, 19:33:07

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ese
1. Прочитай у меня в подписи о форматировании кода у нас на форуме и соблюдай это правило!
2. В  AutoCAD 2014 и дальше (точнее начиная с AutoCAD 2013) необходимо подключать три сборки:
acdbmgd.dll
accoremgd.dll
acmgd.dll
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 806
  • Карма: 166
    • Мои плагины к Автокаду
Наверняка ссылки на accoremgd.dll  не хватет

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 2
1. Прочитай у меня в подписи о форматировании кода у нас на форуме и соблюдай это правило!
Хорошо, прочитаю

2. В  AutoCAD 2014 и дальше (точнее начиная с AutoCAD 2013) необходимо подключать три сборки:
acdbmgd.dll
accoremgd.dll
acmgd.dll

Это помогло. Спасибо.  (avc, тоже спасибо)

Теперь это подсвечивает:

Код - C# [Выбрать]
  1.  WorkspacePanel wsPan = new WorkspacePanel(newWs, newPan);

AcCui.dll подключено

Добавил
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.Customization;

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
А этот класс упразднили. И вообще в AutoCAD 2009 появилась Лента (Ribbon). Так что структура CUIx изменилась и соответственно и структура AcCui.dll изменилась. Осталось понять что именно ты собираешься делать и как это можно осуществить в AutoCAD 2014 и новее...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
На всякий случай уточняю, что этот класс был только для "внутреннего использования":



И уже в AutoCAD 2009 его не стало...

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

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 2
Осталось понять что именно ты собираешься делать и как это можно осуществить в AutoCAD 2014 и новее...

1) Хочу сделать, чтобы когда включено рабочее пространство Классический автокад, создавались Toolbar. Когда Ribbon, тогда Ribbon.  Про то как создавать Ribbon статью нашел, как Toolbar пытаюсь разобраться.

2) Не по теме вопрос, а как можно определить какое из Cui включено (и соответственно что подгружать).

3) А в версиях выше 2014 классическое Cui c toolbar`ами есть?   

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 806
  • Карма: 166
    • Мои плагины к Автокаду
Мое сугубо личное мнение, что колдовать со всеми этими панелями в программе - это зло. API неполноценные, без CUIX-файлов все равно не обойтись. Так и зачем мучится? Пишите свой CUIX в котором и меню, и панели, и ленты. Ненужное пользователь сам выключит - делов-то - крестик кликнуть. Классического ворк-спейса в Автокаде давно нет. Но включить руками меню и тулбары - секундное дело. Большинство по прежнему включают, потому что ленту настраивать гораздо муторнее. Так что менюшки в комплекте с плагином по прежнему нужны.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
2) Не по теме вопрос, а как можно определить какое из Cui включено (и соответственно что подгружать).
В основном CUIx есть ссылки на те, которые подгружены: CustomizationSection.PartialCuiFiles
P.S.: Полностью согласен с avc - не следует программно генерировать CUIx. Если можно подготовить файл "вручную", то это и следует делать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 806
  • Карма: 166
    • Мои плагины к Автокаду
насчет программной загрузки файлов кастомизации и проверки какие уже подключены: вот примерчик кода который я использую:
Код - C# [Выбрать]
  1.     /// <summary>
  2.     /// загрузка CUIX если его еще нет в загруженных. проверяет обновление файла
  3.     /// </summary>
  4.     public static void LoadMenu(string path, string name)
  5.     {
  6.       try
  7.       {
  8.         string cuix = name + ".cuix";
  9.         string file = Path.Combine(path, cuix);
  10.         if (!File.Exists(file))
  11.         {
  12.           Cns.Warning("нет файла " + file);
  13.           return;
  14.         }
  15.         string mainCui = Application.GetSystemVariable("MENUNAME") + ".cuix";
  16.         CustomizationSection cs = new CustomizationSection(mainCui);
  17.         if (cs == null) return;
  18.         PartialCuiFileCollection pcfc = cs.PartialCuiFiles;
  19.         if (pcfc.Contains(cuix))
  20.         {        //уже загружен
  21.           FileInfo inf = new FileInfo(file);
  22.           FileInfo infMain = new FileInfo(mainCui);
  23.           if (inf.LastWriteTime > infMain.LastWriteTime)
  24.           {
  25.             Cns.Info("Обновление меню "+ name);
  26.             cs.RemovePartialMenu(cuix, name);
  27.             if (cs.IsModified == true) { cs.Save(); }
  28.           }
  29.           else
  30.             return;
  31.         }
  32.  
  33.         if (cs.AddPartialMenu(file))
  34.         {
  35.           if (cs.IsModified == true)
  36.           {
  37.             cs.Save();
  38.             Application.ReloadAllMenus();
  39.           }
  40.         }
  41.         else
  42.           Cns.Err("Не удалось загрузить меню " + name);
  43.       }
  44.       catch (System.Exception e)
  45.       {
  46.         Cns.Err(e, "Не удалось загрузить меню " + name);
  47.       }
  48.     }

ну мои функции вывода сообщений можете поудалять. Главное подключить Autodesk.AutoCAD.Customization и ссылку на AcCui.

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
... без CUIX-файлов все равно не обойтись
Ну если использовать только ленту - то CUIX в общем-то не нужен. А что, неужели прогреcсивное AutoCAD-человечество ещё тяготеет к рудиментарным тулбарам? Уже 10 лет Autodesk пытается нас отучить от их использования.

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 806
  • Карма: 166
    • Мои плагины к Автокаду
человечество ещё тяготеет к рудиментарным тулбарам?
Из десятков Автокадчиков с которыми я общаюсь риббонками пользуются от силы 1 из 5и. И те оставляют ленту на экране, но дополнительно открывают тулбары. Запрос "Как вернуть классический интерфейс в Автокаде" в топах гугла из всех со словом Автокад. Люди вообще консервативны, а профессионалы жестко консервативны. Любое изменение требует времени на привыкание - а время - деньги. Тем более, что ленты увеличивают количество кликов или требуют капитальной долгой и сложной перенастройки, чтоб собрать все нужное в одну ленту. Я на это убил уйму времени. Интерфейс настройки крайне глючный, не удобный, перетаскивание не работает. Так что ничего удивительного. Еще лет 10 тулбары будут доминировать. Примите как данность.
Вот не поверите, но на 2019 не хотят переходить по убийственно простой причине - Subtract был нарисован всегда кружочками, а стал вдруг квадратиками!! Глаз не цепляется. Все! В топку 2019! А вы говорите тулбары...

Оффлайн Debalance

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
... риббонками пользуются от силы 1 из 5и.
Охотно доверяю вашей статистике. Слава богу, что "профессионалов" всё-таки удалось перевести с MS-DOS и бокового меню в AutoCAD на Windows и тулбары. Как говориться решительный шаг вперёд - это следствие волшебного пинка под зад.

... Глаз не цепляется. Все! В топку 2019!
Совсем разбаловались ребята! Похоже такой аудитории наши жалкие программки и вовсе не нужны, когда в их арсенале есть такие замечательные инструменты как _LINE, _ARC и _CIRCLE...
« Последнее редактирование: 27-04-2018, 20:07:04 от Debalance »