using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using AcRx = Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices;
using AcDb = Autodesk.AutoCAD.DatabaseServices;
using AcGe = Autodesk.AutoCAD.Geometry;
using AcEd = Autodesk.AutoCAD.EditorInput;
[assembly: CommandClass(typeof(TestUnref.MyCommands))]
namespace TestUnref
{
public class MyCommands
{
// Печатаем имена не используемых/не найденных DataLink
// и удаляем их
[CommandMethod("TestUnrefDlink")]
public void TestUnrefDlink()
{
AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
AcDb.Database db = doc.Database;
AcEd.Editor ed = doc.Editor;
AcDb.ObjectIdCollection ids = new AcDb.ObjectIdCollection();
// Имена DataLink
ed.WriteMessage("\nНе используемые/не найденные DataLink: ");
AcDb.ObjectId idLinkDict = db.DataLinkDictionaryId;
if (!idLinkDict.IsNull) {
using (AcDb.DBDictionary dLinkDict = db.DataLinkDictionaryId.Open(OpenMode.ForRead) as AcDb.DBDictionary) {
foreach (AcDb.DBDictionaryEntry ent in dLinkDict) ids.Add(ent.Value);
}
foreach (AcDb.ObjectId id in ids) {
using (AcDb.DataLink dLink = id.Open(OpenMode.ForRead) as AcDb.DataLink) {
bool bIsValid = true;
if (!dLink.IsValid) {
bIsValid = false;
} else {
bIsValid = false;
foreach (AcDb.ObjectId id_target in dLink.GetTargets()) {
if (id_target.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(AcDb.Table)))) {
bIsValid = true;
break;
}
}
}
if (!bIsValid) {
ed.WriteMessage("\n\tИмя={0} Связь={1}", dLink.Name, dLink.ConnectionString);
dLink.UpgradeOpen();
dLink.Erase(); // Удаляем его
}
}
}
}
}
}
}