using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
using System.Collections.Generic;
namespace ClassLibrary1
{
public class CommandClass
{
static Dictionary<string, string> tabTrans = new Dictionary<string, string>()
{
{ @"First line\\PSecond line", "00000"},
{ "zzzaaa", "АБВ"},
{ "Ред.", "Rev"},
{ "История редакций", "REVISION HISTORY"},
{ "Дата", "DATE"},
{ "Черт.", "DRN"},
{ "Пров.", "CHK"},
{ "Конт.", "APP"},
{ "Заказчик:", "Customer:"},
{ "Проект:", "Project name:"},
{ "№Контр.:", "Contract#:"},
{ "№Проекта:", "Project#:"},
{ "Название:", "Title:"},
{ "Шкаф:", "Cabinet:"},
{ "Файл:", "File:"},
{ "Стр.", "Page"},
{ "из", "of"},
{ "Рев.", "Rev"}
};
[CommandMethod("VJUH")]
public void RunCommand()
{
Document adoc = Application.DocumentManager.MdiActiveDocument;
if (adoc == null)
return;
Editor ed = adoc.Editor;
Database db = adoc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
// Получаем BT
BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
if (!bt.Has("A3FRAME_1"))
{
tr.Commit();
return;
}
// Получаем все BTR для "A3FRAME_1"
BlockTableRecord btr = tr.GetObject(bt["A3FRAME_1"], OpenMode.ForRead) as BlockTableRecord;
// Исследуем полученные BTR
foreach (ObjectId btrId in btr)
{
// Ищем все объекты типа DBText
if (btrId.ObjectClass == RXObject.GetClass(typeof(DBText)))
{
// Получаем значение всех объектов DBText
DBText text = tr.GetObject(btrId, OpenMode.ForRead) as DBText;
//Ищем соответствие полученных текстовых значений и словаря
string engText = null;
if (tabTrans.TryGetValue(text.TextString, out engText))
{
//Если нашли соответствие - заменяем
text = tr.GetObject(btrId, OpenMode.ForWrite) as DBText;
text.TextString = engText;
}
}
else if (btrId.ObjectClass == RXObject.GetClass(typeof(MText)))
{
// Получаем значение всех объектов MText
MText mtxt = tr.GetObject(btrId, OpenMode.ForRead) as MText;
string engText = null;
if (tabTrans.TryGetValue(mtxt.Contents, out engText))
{
mtxt = tr.GetObject(btrId, OpenMode.ForWrite) as MText;
mtxt.Contents = engText;
}
}
}
tr.Commit();
}
ed.Regen();
}
}
}