using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Internal;
using Autodesk.AutoCAD.Runtime;
using acApp = Autodesk.AutoCAD.ApplicationServices.Application;
using System;
[assembly
: ExtensionApplication
(typeof(FOO
.Events))]
namespace FOO
{
public class Events : IExtensionApplication
{
void IExtensionApplication.Initialize()
{
Editor ed = acApp.DocumentManager.MdiActiveDocument.Editor;
ed.WriteMessage("\nFOO events registered \n");
Register();
}
void IExtensionApplication.Terminate()
{
}
public static void Register()
{
DocumentCollection acDocs = acApp.DocumentManager;
Editor ed = acDocs.MdiActiveDocument.Editor;
try
{
foreach (Document doc in acDocs)
{
doc.CommandEnded -= doc_CommandEnded;
doc.CommandEnded += doc_CommandEnded;
}
acDocs.DocumentCreated -= acDocs_DocumentCreated;
acDocs.DocumentCreated += acDocs_DocumentCreated;
acDocs.DocumentActivated -= acDocs_DocumentActivated;
acDocs.DocumentActivated += acDocs_DocumentActivated;
Reconcile();
}
catch (System.Exception ex)
{
ed.WriteMessage("\n; error: " + ex.Message + " \n");
}
}
public static void acDocs_DocumentActivated(Object sender, DocumentCollectionEventArgs e)
{
if (e.Document != null)
{
Reconcile();
}
}
public static void acDocs_DocumentCreated(Object sender, DocumentCollectionEventArgs e)
{
if (e.Document != null)
{
Register();
}
}
public static void doc_CommandEnded(Object sender, CommandEventArgs e)
{
if (Utils.WcMatch(e.GlobalCommandName.ToUpper(),
"*CHSPACE,*MSPACE,*PSPACE,*LAYOUT_CONTROL,U,*UNDO,*VPMAX,*VPMIN"))
{
Reconcile();
}
}
public static bool PViewportActive(Document doc)
{
Editor ed = doc.Editor;
Database db = doc.Database;
Transaction tr =
db.TransactionManager.StartOpenCloseTransaction();
//db.TransactionManager.StartTransaction();
using (tr)
{
BlockTable bt =
(BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr =
(BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForRead);
if (btr.Name.ToUpper() == "*MODEL_SPACE")
{
return true;
}
else
{
return false;
}
}
}
public static void Reconcile()
{
DocumentCollection acDocs = acApp.DocumentManager;
Document doc = acDocs.MdiActiveDocument;
Editor ed = doc.Editor;
string tilemode = acApp.GetSystemVariable("TILEMODE").ToString();
// Model space
if (tilemode == "1")
{
ed.WriteMessage("\n** ModelSpace active ** \n");
}
else
{
// Pviewport
if (PViewportActive(doc))
{
ed.WriteMessage("\n** PViewport active ** \n");
}
// Paper space
else
{
ed.WriteMessage("\n** PaperSpace active ** \n");
}
}
}
}
}