using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Windows;
using Autodesk.AutoCAD.Windows.ToolPalette;
using System.Xml;
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(Rivilis.ToolsInfo))]
namespace Rivilis
{
public class ToolsInfo
{
[CommandMethod("TPINFO")]
public void MyCommand()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Editor ed = doc.Editor;
ToolPaletteManager tpm = ToolPaletteManager.Manager;
CatalogItemCollection cats = tpm.Catalogs;
foreach (CatalogItem cat in cats)
{
for (int i = 0; i < cat.ChildCount; i++)
{
CatalogItem subcat = cat.GetChild(i);
ed.WriteMessage($"\nName={subcat.Name}");
// Работаем только с конкретным каталогом
if (subcat.Name.Equals("MyBlockTools",StringComparison.OrdinalIgnoreCase))
{
for (int j = 0; j < subcat.ChildCount; j++)
{
CatalogItem subsubcat = subcat.GetChild(j);
Tool tool = subsubcat as Tool;
ed.WriteMessage($"\n\nTool Name={tool.Name}");
string str = tool.GetXml(SaveFlags.SaveLinksAsLinks);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(str);
XmlNodeList sf = xmlDoc.GetElementsByTagName("SourceFile");
if (sf.Count > 0) {
ed.WriteMessage($"\n\tSourceFile={sf[0].InnerText}");
}
XmlNodeList bn = xmlDoc.GetElementsByTagName("BlockName");
if (bn.Count > 0) {
ed.WriteMessage($"\n\tBlockName={bn[0].InnerText}");
}
}
}
}
}
}
}
}