27/02/2019
Как проверить, что при редактировании XREF он сохранён или отвергнут в .NET
Madhukar Moogala в этой статье описал как можно используя ObjectARX определить были ли сохранены изменения при редактировании внешней ссылки по месту или нет. А вот как можно добиться аналогичного результата, используя AutoCAD .NET API:
Код - C#: [Выделить]
- using System;
- using Autodesk.AutoCAD.Runtime;
- using Autodesk.AutoCAD.ApplicationServices;
- using Autodesk.AutoCAD.DatabaseServices;
- using Autodesk.AutoCAD.Geometry;
- using Autodesk.AutoCAD.EditorInput;
- // This line is not mandatory, but improves loading performances
- [assembly: CommandClass(typeof(Rivilis.XrefLongTrans))]
- namespace Rivilis
- {
- public class XrefLongTrans
- {
- enum EditInPlaceXrefState
- {
- Discarded,
- Saved
- };
- static EditInPlaceXrefState state =
- EditInPlaceXrefState.Discarded;
- [CommandMethod("WatchXref")]
- public void WatchXref()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- LongTransactionManager longTranMan = Application.LongTransactionManager;
- longTranMan.CheckedIn += TrMan_CheckedIn;
- longTranMan.Aborted += TrMan_Aborted;
- doc.CommandEnded += Doc_CommandEnded;
- }
- [CommandMethod("UnWatchXref")]
- public void UnWatchXref()
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- LongTransactionManager longTranMan = Application.LongTransactionManager;
- longTranMan.CheckedIn -= TrMan_CheckedIn;
- longTranMan.Aborted -= TrMan_Aborted;
- doc.CommandEnded -= Doc_CommandEnded;
- }
- private void TrMan_Aborted(object sender, LongTransactionEventArgs e)
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- if (e.Transaction.Type == LongTransactionType.XRefDb)
- {
- ed.WriteMessage("\nТранзакция {0} отменена\n", e.Transaction.LongTransactionName);
- state = EditInPlaceXrefState.Discarded;
- }
- }
- private void TrMan_CheckedIn(object sender, LongTransactionEventArgs e)
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- if (e.Transaction.Type == LongTransactionType.XRefDb)
- {
- ed.WriteMessage("\nТранзакция {0} подтверждена\n", e.Transaction.LongTransactionName);
- state = EditInPlaceXrefState.Saved;
- }
- }
- private void Doc_CommandEnded(object sender, CommandEventArgs e)
- {
- if (e.GlobalCommandName.ToUpper() == "REFCLOSE")
- {
- Document doc = Application.DocumentManager.MdiActiveDocument;
- if (doc == null) return;
- Editor ed = doc.Editor;
- ed.WriteMessage("\nИзменения XREF по месту {0}\n",
- (state == EditInPlaceXrefState.Saved) ?
- "сохранены": "отменены");
- }
- }
- }
- }
Автор: Александр Ривилис
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 27.02.2019