ToolPalette добавление и редактирование дополнительных свойств

Автор Тема: ToolPalette добавление и редактирование дополнительных свойств  (Прочитано 7090 раз)

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

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Не так давно изучаю ToolPalette. Извиняюсь сразу за возможно кривой способ добавления и редактирования данных.
Хочу создать командный tool и дополнительно в нём хранить информацию которую буду использовать в этой команде.

Создаю командный tool
Код - C# [Выбрать]
  1. private void AddTool(CustomToolBase toolBase, Palette pal)
  2.         {
  3.             var tool = toolBase.CreateCommandTool(pal, "MY TOOL", /*какая то картинка*/, "_Macro");
  4.  
  5.             var xmlDocument = ((dynamic)pal.CustomData).OwnerDocument;
  6.             if (xmlDocument == null)
  7.                 return;
  8.  
  9.             var xmlDATA = ((dynamic)tool.ToolData);
  10.             try
  11.             {
  12.                 var toolProp = xmlDocument.CreateElement("Custom prop");
  13.                 toolProp.Text = "Custom prop value";
  14.                 xmlDATA.AppendChild(toolProp);
  15.             }
  16.             catch (Exception ex) { }
  17.             System.Runtime.InteropServices.Marshal.ReleaseComObject(xmlDATA);
  18.             System.Runtime.InteropServices.Marshal.ReleaseComObject(xmlDocument);
  19.         }

редактирование
           
Код - C# [Выбрать]
  1.  var memberXml = ((dynamic)tool.ToolData);
  2.             try
  3.             {
  4.                 dynamic p = memberXml.getElementsByTagName("Custom prop")[0];
  5.                 p.Text = "New Value";
  6.             }
  7.             catch
  8.             { }
  9.             System.Runtime.InteropServices.Marshal.ReleaseComObject(memberXml);

Работает, но думаю что капаю совсем не в ту сторону. как то всё это подозрительно.

Возможно есть более легальный способ это делать, желательно на .NET, но не откажусь наводкам и в сторону ObjectARX

P.S. ReleaseComObject необходимо делать в данном случае?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Цитировать
https://www.keanw.com/2009/10/adding-items-to-an-autocad-tool-palette-using-net.html
https://through-the-interface.typepad.com/through_the_interface/2009/10/streamlined-quicksaveas-command-for-autocad-2010.html
Это уже читал. как раз начинал с этого и подобных статей. Вопрос в другом - в tool хочется писать дополнительные параметры и редактировать их. Даже если я в Macro запишу дополнительные параметры как показано в примере
Код - C# [Выбрать]
  1.   320       tool.CreateCommandTool(
  2.  
  3.   321         pal,
  4.  
  5.   322         name,
  6.  
  7.   323         ii,
  8.  
  9.   324         "_EXECSCR \"" + scrPath.Replace(pthSep, lspSep) + "\""
  10.  
  11.   325       );

то нет адекватного способа поменять их потом...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
то нет адекватного способа поменять их потом...
Наверное только удалить и добавить. Ну или работать как с XML.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Кстати, отступая от темы хотел предостеречь тех кто пытается добавить текстовый тул в используя .NET
в AcTcMgd.dll есть ошибка (коллега выявил). Не значительная но всё же.
Код - C# [Выбрать]
  1.     public enum ToolType
  2.     {
  3.         Normal = 1,
  4.         Text = 1,
  5.         Flyout = 2,
  6.         Separator = 4
  7.     }

это можно обойти сейчас просто
Код - C# [Выбрать]
  1. Tool t= new Tool();
  2. t.ToolType = (ToolType)3;//ToolType.Text;
  3. t.Name = "MY TEXT";

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Цитировать
Наверное только удалить и добавить. Ну или работать как с XML.
Очень жаль. На на счет Marshal.ReleaseComObject можно пояснить - присутствие или отсутствие этого действия каким то образом могут повлиять на работу автокада? Я немного далек от этого, если у вас есть быстрый ответ был бы признателен. Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
На на счет Marshal.ReleaseComObject можно пояснить - присутствие или отсутствие этого действия каким то образом могут повлиять на работу автокада?
Если он лишний, то очень вероятна Fatal Error. А если нужен, но отсутствует, то будет утечка памяти. Если у тебя после Marshal.ReleaseComObject нет Fatal Error, то он нужен.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Цитировать
Если он лишний, то очень вероятна Fatal Error. А если нужен, но отсутствует, то будет утечка памяти. Если у тебя после Marshal.ReleaseComObject нет Fatal Error, то он нужен.
Замечательный ответ.  ;D

А может упасть в этом случае не сразу автокад? Наблюдал падение через некоторое время после отработки команды.

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

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

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
А может упасть в этом случае не сразу автокад? Наблюдал падение через некоторое время после отработки команды.
Да. Это возможно. При следующем обращении к этому коду твоего приложения или AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей КузинАвтор темы

  • ADN OPEN
  • ***
  • Сообщений: 116
  • Карма: 8
Цитировать
А какого ответа ты ждал, если это не документировано? Это у меня из личного опыта в таких ситуациях.
Да не, я просто так сказал. За ответ большое спасибо, у меня тоже были сомнения с этим.