[CommandMethod("ADDXDATA")]
static public void AddXdata()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
using (doc.LockDocument())
{
Transaction tr = db.TransactionManager.StartTransaction();
using (tr)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
PromptEntityResult ers = ed.GetEntity("Выберите примитив ");
Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForWrite);
RegAppTable regTable = (RegAppTable)tr.GetObject(db.RegAppTableId, OpenMode.ForRead);
// - - - - - - - - - - MYAPP - - - - - - - - - -
if (!regTable.Has("APP_1"))
{
regTable.UpgradeOpen();
RegAppTableRecord app = new RegAppTableRecord();
app.Name = "APP_1";
regTable.Add(app);
tr.AddNewlyCreatedDBObject(app, true);
}
ResultBuffer RB = new ResultBuffer(new TypedValue((int)DxfCode.ExtendedDataRegAppName, "APP_1"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_1 Текст 1"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_1 Текст 2"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_1 Текст 3"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_1 Текст 4"));
ent.XData = RB;
// - - - - - - - - - - APP_2 - - - - - - - - - -
if (!regTable.Has("APP_2"))
{
regTable.UpgradeOpen();
RegAppTableRecord app = new RegAppTableRecord();
app.Name = "APP_2";
regTable.Add(app);
tr.AddNewlyCreatedDBObject(app, true);
}
RB = new ResultBuffer(new TypedValue((int)DxfCode.ExtendedDataRegAppName, "APP_2"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_2 Текст 1"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_2 Текст 2"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_2 Текст 3"));
RB.Add(new TypedValue((int)DxfCode.ExtendedDataAsciiString, "APP_2 Текст 4"));
ent.XData = RB;
tr.Commit();
}
}
}
[CommandMethod("REMXDATA")]
static public void RemoveXdata()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Transaction tr = db.TransactionManager.StartTransaction();
using (doc.LockDocument())
{
using (tr)
{
Editor ed =
Application.DocumentManager.MdiActiveDocument.Editor;
try
{
// Просим пользователя выбрать примитив
PromptEntityResult ers = ed.GetEntity("Укажите примитив ");
// Открываем выбранный примитив
Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForRead);
ResultBuffer buffer = ent.GetXDataForApplication("APP_1");
// Если есть расширенные данные – удалим их.
// Для этого в качестве расширенных данных
// передаём только имя приложения.
// Только связанные с ним данные будут удалены.
if (buffer != null)
{
ent.UpgradeOpen();
ent.XData = new ResultBuffer(new TypedValue(1001, "APP_1"));
buffer.Dispose();
}
tr.Commit();
}
catch
{
tr.Abort();
}
}
}
}
[CommandMethod("GETXDATA")]
static public void GetXdata()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Transaction tr = db.TransactionManager.StartTransaction();
using (doc.LockDocument())
{
using (tr)
{
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
PromptEntityResult ers = ed.GetEntity("Выберите примитив ");
Entity ent = (Entity)tr.GetObject(ers.ObjectId, OpenMode.ForWrite);
// - - - - - - - - - - APP_1 - - - - - - - - - -
ResultBuffer RB = ent.GetXDataForApplication("APP_1");
if (RB!=null)
foreach (var rb in RB)
System.Windows.Forms.MessageBox.Show(rb.TypeCode.ToString() + " -> " + rb.Value.ToString());
else
System.Windows.Forms.MessageBox.Show("APP_1 -");
// - - - - - - - - - - APP_2 - - - - - - - - - -
RB = ent.GetXDataForApplication("APP_2");
if (RB != null)
foreach (var rb in RB)
System.Windows.Forms.MessageBox.Show(rb.TypeCode.ToString() + " -> " + rb.Value.ToString());
else
System.Windows.Forms.MessageBox.Show("APP_2 -");
}
}
}