ADN Open CIS
Сообщество программистов Autodesk в СНГ

27/02/2019

Как проверить, что при редактировании XREF он сохранён или отвергнут в .NET

Madhukar Moogala в этой статье описал как можно используя ObjectARX определить были ли сохранены изменения при редактировании внешней ссылки по месту или нет. А вот как можно добиться аналогичного результата, используя AutoCAD .NET API:

Код - C#: [Выделить]
  1. using System;
  2. using Autodesk.AutoCAD.Runtime;
  3. using Autodesk.AutoCAD.ApplicationServices;
  4. using Autodesk.AutoCAD.DatabaseServices;
  5. using Autodesk.AutoCAD.Geometry;
  6. using Autodesk.AutoCAD.EditorInput;
  7.  
  8. // This line is not mandatory, but improves loading performances
  9. [assembly: CommandClass(typeof(Rivilis.XrefLongTrans))]
  10.  
  11. namespace Rivilis
  12. {
  13.  
  14.   public class XrefLongTrans
  15.   {
  16.     enum EditInPlaceXrefState
  17.     {
  18.       Discarded,
  19.       Saved
  20.     };
  21.  
  22.     static EditInPlaceXrefState state =
  23.       EditInPlaceXrefState.Discarded;
  24.  
  25.     [CommandMethod("WatchXref")]
  26.     public void WatchXref()
  27.     {
  28.       Document doc = Application.DocumentManager.MdiActiveDocument;
  29.       if (doc == null) return;
  30.       Editor ed = doc.Editor;
  31.       LongTransactionManager longTranMan = Application.LongTransactionManager;
  32.       longTranMan.CheckedIn += TrMan_CheckedIn;
  33.       longTranMan.Aborted += TrMan_Aborted;
  34.       doc.CommandEnded += Doc_CommandEnded;
  35.     }
  36.     [CommandMethod("UnWatchXref")]
  37.     public void UnWatchXref()
  38.     {
  39.       Document doc = Application.DocumentManager.MdiActiveDocument;
  40.       if (doc == null) return;
  41.       Editor ed = doc.Editor;
  42.       LongTransactionManager longTranMan = Application.LongTransactionManager;
  43.       longTranMan.CheckedIn -= TrMan_CheckedIn;
  44.       longTranMan.Aborted -= TrMan_Aborted;
  45.       doc.CommandEnded -= Doc_CommandEnded;
  46.     }
  47.  
  48.     private void TrMan_Aborted(object sender, LongTransactionEventArgs e)
  49.     {
  50.       Document doc = Application.DocumentManager.MdiActiveDocument;
  51.       if (doc == null) return;
  52.       Editor ed = doc.Editor;
  53.       if (e.Transaction.Type == LongTransactionType.XRefDb)
  54.       {
  55.         ed.WriteMessage("\nТранзакция {0} отменена\n", e.Transaction.LongTransactionName);
  56.         state = EditInPlaceXrefState.Discarded;
  57.       }
  58.     }
  59.  
  60.     private void TrMan_CheckedIn(object sender, LongTransactionEventArgs e)
  61.     {
  62.       Document doc = Application.DocumentManager.MdiActiveDocument;
  63.       if (doc == null) return;
  64.       Editor ed = doc.Editor;
  65.       if (e.Transaction.Type == LongTransactionType.XRefDb)
  66.       {
  67.         ed.WriteMessage("\nТранзакция {0} подтверждена\n", e.Transaction.LongTransactionName);
  68.         state = EditInPlaceXrefState.Saved;
  69.       }
  70.     }
  71.  
  72.     private void Doc_CommandEnded(object sender, CommandEventArgs e)
  73.     {
  74.       if (e.GlobalCommandName.ToUpper() == "REFCLOSE")
  75.       {
  76.         Document doc = Application.DocumentManager.MdiActiveDocument;
  77.         if (doc == null) return;
  78.         Editor ed = doc.Editor;
  79.         ed.WriteMessage("\nИзменения XREF по месту {0}\n",
  80.           (state == EditInPlaceXrefState.Saved) ?
  81.           "сохранены": "отменены");
  82.       }
  83.     }
  84.   }
  85. }
  86.  

 

Автор: Александр Ривилис

Обсуждение: http://adn-cis.org/forum/index.php?topic=

Опубликовано 27.02.2019