public static string AttachedXrefFilename { get; set; }
...
public void AddDocEvents(Document doc)
{
doc.CommandEnded += doc_CommandEnded;
doc.Database.XrefBeginAttached += Database_XrefBeginAttached;
doc.Database.SaveComplete += Database_SaveComplete;
doc.BeginDocumentClose += Document_BeginDocumentClose;
}
void doc_CommandEnded(object sender, CommandEventArgs e)
{
if (e.GlobalCommandName == "XATTACH" && !string.IsNullOrEmpty(AttachedXrefFilename))
{
Document doc = sender as Document;
Database db = doc.Database;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
XrefGraph xrgraph = db.GetHostDwgXrefGraph(false);
for (int i = 1; i < (xrgraph.NumNodes); i++)
{
XrefGraphNode xrNode = xrgraph.GetXrefNode(i);
if (!xrNode.IsNested)
{
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(xrNode.BlockTableRecordId, OpenMode.ForRead);
string pathName = btr.PathName;
if (pathName.StartsWith("."))
pathName = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(db.Filename), pathName));
if (pathName == AttachedXrefFilename)
{
btr.UpgradeOpen();
btr.Name = "test";
break;
}
}
}
tr.Commit();
}
AttachedXrefFilename = null;
}
}
void Database_XrefBeginAttached(object sender, XrefBeginOperationEventArgs e)
{
AttachedXrefFilename = e.From.Filename;
}