[CommandMethod("AcadMyPluginDwgLoad")]
public static void AcadMyPluginDwgLoad()
{
AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
Database db = new Database(false, true);
db.ReadDwgFile(@"c:\img\02.dwg", FileOpenMode.OpenForReadAndAllShare, false, null);
AcEd.Editor ed = doc.Editor;
AcDb.ObjectIdCollection ids = new AcDb.ObjectIdCollection();
// Имена DataLink
ed.WriteMessage("\nНеиспользуемые/ненайденные связи с данными (DataLink): ");
ed.WriteMessage(db.DataLinkManager.DataLinkCount.ToString());
ed.WriteMessage(db.FileDependencyManager.CountEntries.ToString());
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)
{
if (!dLink.IsValid)
{
ed.WriteMessage("\n\tНенайденая связь: Имя={0} Связь={1}", dLink.Name, dLink.ConnectionString);
dLink.UpgradeOpen();
dLink.Erase(); // Удаляем её
}
else
{
bool bIsFound = false;
foreach (AcDb.ObjectId id_target in dLink.GetTargets())
{
if (id_target.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(AcDb.Entity))))
{
bIsFound = true;
break;
}
if (!bIsFound)
{
ed.WriteMessage("\n\tНеиспользуемая связь: Имя={0} Связь={1}", dLink.Name, dLink.ConnectionString);
dLink.UpgradeOpen();
dLink.Erase(); // Удаляем её
}
}
}
}
}
}
db.SaveAs(@"c:\img\003.dwg", DwgVersion.Current);
ed.WriteMessage("cmpled");
}