private void DeleteExec([NotNull] IStyleItem styleItem) { var doc = AcadHelper.Doc; var db = doc.Database; if (styleItem.Id.Database != db) { throw new Exception($"Переключись на чертеж '{db.Filename}'"); } try { StyleTable.Delete(styleItem); Styles?.Remove(styleItem); } catch (Exception ex) { ShowMessage(ex.Message); } Inspector.Show(); }
public override void Delete(IStyleItem styleItem) { var doc = AcadHelper.Doc; var needTwice = false; using (doc.LockDocument()) using (var t = doc.TransactionManager.StartTransaction()) { var dbo = styleItem.Id.GetObjectT <DBObject>(OpenMode.ForWrite); if (dbo is BlockTableRecord btr) { foreach (var dbObject in btr.GetBlockReferenceIds(true, false).GetObjects <DBObject>(OpenMode.ForWrite)) { var ownerName = dbObject.OwnerId.GetObject <BlockTableRecord>()?.Name; Inspector.AddError("Удалено", $"Удалено вхождение блока из {ownerName}"); dbObject.Erase(); } if (btr.IsDynamicBlock) { foreach (var anonymBtr in btr.GetAnonymousBlockIds().GetObjects <BlockTableRecord>()) { foreach (var dbObject in anonymBtr.GetBlockReferenceIds(true, false) .GetObjects <DBObject>(OpenMode.ForWrite)) { var ownerName = dbObject.OwnerId.GetObject <BlockTableRecord>()?.Name; Inspector.AddError("Удалено", $"Удалено вхождение анонимного блока из {ownerName}"); dbObject.Erase(); } } } btr.Erase(); } else { try { var replaceId = ObjectId.Null; var replaceName = string.Empty; var table = styleTableId.GetObjectT <DBObject>(); switch (table) { case SymbolTable st: if (st is LayerTable lt) { if (styleItem.Name == "0") { throw new Exception("Нельзя удалить 0 слой"); } replaceId = lt["0"]; replaceName = "0"; } else if (styleItem.Name != "ПИК" && st.Has("ПИК")) { replaceId = st["ПИК"]; replaceName = "ПИК"; } else if (styleItem.Name != "Standart" && st.Has("Standart")) { replaceId = st["Standart"]; replaceName = "Standart"; } else { replaceId = st.Cast <ObjectId>().FirstOrDefault(s => s != styleItem.Id); replaceName = replaceId.GetObject <SymbolTableRecord>()?.Name; } break; case DBDictionary dict: if (dict.Contains("ПИК")) { if (dict["ПИК"] is DictionaryEntry entry) { replaceId = (ObjectId)entry.Value; replaceName = "ПИК"; } } else if (dict.Contains("Standart")) { if (dict["Standart"] is DictionaryEntry entry) { replaceId = (ObjectId)entry.Value; replaceName = "Standart"; } } break; } if (dbo is LayerTableRecord) { ReplaceLayer(doc.Database, styleItem.Id, replaceId, replaceName); } // Найти все ссылки и зменить var refs = dbo.GetReferences(); if (!replaceId.IsNull) { refs.SoftPointerIds.ForEach(p => ReplacePointer(p, styleItem.Id, replaceId, replaceName)); refs.HardPointerIds.ForEach(p => ReplacePointer(p, styleItem.Id, replaceId, replaceName)); needTwice = true; } else { dbo.Erase(); } } catch (Exception ex) { Logger.Log.Error(ex, $"Ошибка замены референсов в стиле '{styleItem.Name}' в таблице стилей '{Name}'"); } } t.Commit(); } if (needTwice) { using (doc.LockDocument()) using (var t = doc.TransactionManager.StartTransaction()) { var dbo = styleItem.Id.GetObjectT <DBObject>(OpenMode.ForWrite); dbo.Erase(); t.Commit(); } } }
public abstract void Delete(IStyleItem styleItem);