using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
[assembly: CommandClass(typeof(ChgMTextInBlock.MyCommands))]
namespace ChgMTextInBlock
{
public class MyCommands
{
[CommandMethod("ChgMTextInBlock")]
public void ChgMTextInBlockHandler()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Editor ed = doc.Editor;
Database db = doc.Database;
PromptEntityOptions prOpt =
new PromptEntityOptions("Выберите блок с MText: ");
prOpt.SetRejectMessage("Это не блок!");
prOpt.AddAllowedClass(typeof(BlockReference), true);
PromptEntityResult prRes = ed.GetEntity(prOpt);
if (prRes.Status != PromptStatus.OK) return;
using (Transaction tr = doc.TransactionManager.StartTransaction())
{
BlockReference br =
tr.GetObject(prRes.ObjectId, OpenMode.ForRead) as BlockReference;
if (br != null)
{
BlockTableRecord btr =
tr.GetObject(br.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
if (btr != null)
{
foreach (ObjectId id in btr)
{
if (id.ObjectClass == RXClass.GetClass(typeof(MText)))
{
MText mt = tr.GetObject(id, OpenMode.ForWrite) as MText;
// Меняем цвет MText
if (mt != null)
{
mt.ColorIndex = (mt.ColorIndex + 1) % 255;
}
}
}
}
}
tr.Commit();
}
ed.Regen(); // Чтобы отобразились изменения в блоке.
}
}
}