using System.Windows.Forms;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using AcAp = Autodesk.AutoCAD.ApplicationServices;
#pragma warning disable 0618
[assembly: CommandClass(typeof(Rivilis.DXFModify))]
namespace Rivilis
{
public class DXFModify
{
[CommandMethod("DXFModify", CommandFlags.Session)]
public void MyCommand()
{
Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Title = "Выберите dxf-файл";
openFileDialog.Filter = "dxf-файлы|*.dxf";
DialogResult dr = openFileDialog.ShowDialog();
if (dr == DialogResult.OK)
{
Document dxfDoc = AcAp.Application.DocumentManager.Open(openFileDialog.FileName);
if (dxfDoc != null)
{
// Так как мы работаем в контексте приложения и будем модифицировать документ,
// то должны его заблокировать
using (DocumentLock docloc = dxfDoc.LockDocument())
{
Database db = dxfDoc.Database;
using (BlockTable blks = db.BlockTableId.Open(OpenMode.ForRead) as BlockTable)
{
using (BlockTableRecord modelSpace =
blks[BlockTableRecord.ModelSpace].Open(OpenMode.ForRead) as BlockTableRecord)
{
foreach (ObjectId id in modelSpace)
{
using (Entity ent = id.Open(OpenMode.ForRead) as Entity)
{
Circle circ = ent as Circle;
if (circ != null)
{
using (ResultBuffer rb = ent.XData)
{
if (rb != null)
{
//foreach (TypedValue tv in rb)
//{
// dxfDoc.Editor.WriteMessage(
// "\nTypedValue - type: {0}, value: {1}",
// tv.TypeCode, tv.Value);
//}
// Будем модифицировать круг
circ.UpgradeOpen();
// Отметим круги с расширенными данными красным цветом
// (тут возможно вставить свою логику проверки xData)
circ.ColorIndex = 1;
}
}
}
}
}
}
}
}
}
}
}
}
}