Community
I have this code that monitor the events and generate a TXT file.
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using System.IO;
public class ObjectEvents
{
private static string logFilePath = "AutoCAD_Events_Log.txt"; // Path to the log file
[CommandMethod("RegisterDbEvents")]
public void RegisterDbEvents()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
db.ObjectAppended += new ObjectEventHandler(Db_ObjectAppended);
db.ObjectModified += new ObjectEventHandler(Db_ObjectModified);
db.ObjectErased += new ObjectErasedEventHandler(Db_ObjectErased);
// Clear the log file when registering new events
if (File.Exists(logFilePath))
{
File.WriteAllText(logFilePath, string.Empty);
}
LogEvent("Database event handlers have been registered.");
}
// Unregisters handlers for database events
[CommandMethod("UnregisterDbEvents")]
public void UnregisterDbEvents()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
db.ObjectAppended -= new ObjectEventHandler(Db_ObjectAppended);
db.ObjectModified -= new ObjectEventHandler(Db_ObjectModified);
db.ObjectErased -= new ObjectErasedEventHandler(Db_ObjectErased);
LogEvent("Database event handlers have been unregistered.");
}
private void Db_ObjectAppended(object sender, ObjectEventArgs e)
{
LogEvent("An object has been appended to the database. Type: " + e.DBObject.GetType().Name);
}
private void Db_ObjectModified(object sender, ObjectEventArgs e)
{
LogEvent("An object has been modified in the database. Type: " + e.DBObject.GetType().Name);
}
private void Db_ObjectErased(object sender, ObjectErasedEventArgs e)
{
string message = e.Erased ? "An object has been erased from the database." : "An object has been unerased in the database.";
LogEvent(message);
}
private void LogEvent(string message)
{
using (StreamWriter sw = File.AppendText(logFilePath))
{
sw.WriteLine($"{System.DateTime.Now}: {message}");
}
}
}
It generates a file like this
2024/04/25 11:06:49: An object has been modified in the database. Type: Xrecord
2024/04/25 11:06:49: An object has been modified in the database. Type: Xrecord
2024/04/25 11:06:49: An object has been erased from the database.
2024/04/25 11:06:49: An object has been modified in the database. Type: BlockTableRecord
2024/04/25 11:06:49: An object has been erased from the database.
2024/04/25 11:06:49: An object has been erased from the database.
2024/04/25 11:06:49: An object has been erased from the database.
It identified an erase event but is there a way to prevent/stop/block that event from happening? Thank you.
Solved! Go to Solution.
Solved by ActivistInvestor. Go to Solution.
Can't find what you're looking for? Ask the community or share your knowledge.