Не так давно изучаю ToolPalette. Извиняюсь сразу за возможно кривой способ добавления и редактирования данных.
Хочу создать командный tool и дополнительно в нём хранить информацию которую буду использовать в этой команде.
Создаю командный tool
private void AddTool(CustomToolBase toolBase, Palette pal)
{
var tool = toolBase.CreateCommandTool(pal, "MY TOOL", /*какая то картинка*/, "_Macro");
var xmlDocument = ((dynamic)pal.CustomData).OwnerDocument;
if (xmlDocument == null)
return;
var xmlDATA = ((dynamic)tool.ToolData);
try
{
var toolProp = xmlDocument.CreateElement("Custom prop");
toolProp.Text = "Custom prop value";
xmlDATA.AppendChild(toolProp);
}
catch (Exception ex) { }
System.Runtime.InteropServices.Marshal.ReleaseComObject(xmlDATA);
System.Runtime.InteropServices.Marshal.ReleaseComObject(xmlDocument);
}
редактирование
var memberXml = ((dynamic)tool.ToolData);
try
{
dynamic p = memberXml.getElementsByTagName("Custom prop")[0];
p.Text = "New Value";
}
catch
{ }
System.Runtime.InteropServices.Marshal.ReleaseComObject(memberXml);
Работает, но думаю что капаю совсем не в ту сторону. как то всё это подозрительно.
Возможно есть более легальный способ это делать, желательно на .NET, но не откажусь наводкам и в сторону ObjectARX
P.S. ReleaseComObject необходимо делать в данном случае?