ACBファイル (Autodesk Color Book) はXMLファイルで、色のデータベースである。AutoCADに添付されているACBファイルの色値は暗号化されていてそのままでは確認できない。COLORダイアログで調べるのも億劫である。
下記のコードは、ダイアログボックスからACBファイルを指定すると、そのカラーブック名と色名、色値をコマンドウィンドウに表示する。
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using System.Xml;
namespace csSample1
{
public class Class1
{
/// <summary>
/// ACBVIEWERコマンド
/// </summary>
[CommandMethod("ACBVIEWER")]
public void cmdAcbViewer()
{
// Specify ACB file
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
PromptOpenFileOptions options = new PromptOpenFileOptions("Specify color book file");
options.Filter = "Color book file(*.acb)|*.acb|All file(*.*)|*.*";
options.FilterIndex = 0;
PromptFileNameResult result = ed.GetFileNameForOpen(options);
if (result.Status != PromptStatus.OK)
return;
// Print book name in ACB file
Color color = doc.Database.Cecolor;
string bookName = "";
string colorName = "";
XmlDocument xdoc = new XmlDocument();
xdoc.Load(result.StringResult);
foreach(XmlElement elem in xdoc.GetElementsByTagName("bookName"))
{
bookName = elem.InnerText;
ed.WriteMessage("\nBookName = {0}", bookName);
}
// Print all color name and value in ACB file
foreach (XmlElement elem2 in xdoc.GetElementsByTagName("colorName"))
{
colorName = elem2.InnerText;
color = Color.FromNames(colorName, bookName);
ed.WriteMessage("\nColorName = {0} RGB=({1},{2},{3})", colorName, color.Red, color.Green, color.Blue);
}
}
}
}