public void Initialize()
{
Application.DocumentManager.MdiActiveDocument.CommandEnded += OnCommandEnded;
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nRotation Sync Loaded.");
}
public void Terminate()
{
Application.DocumentManager.MdiActiveDocument.CommandEnded -= OnCommandEnded;
}
private void OnCommandEnded(object sender, CommandEventArgs e)
{
if (e.GlobalCommandName.Equals("ROTATE", StringComparison.OrdinalIgnoreCase))
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
using (Transaction tr = db.TransactionManager.StartTransaction())
{
BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
BlockTableRecord modelSpace = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
TypedValue[] filter = { new TypedValue((int)DxfCode.Start, "INSERT") };
SelectionFilter selectionFilter = new SelectionFilter(filter);
PromptSelectionResult selRes = ed.SelectAll(selectionFilter);
if (selRes.Status == PromptStatus.OK)
{
SelectionSet sset = selRes.Value;
var filteredBlocks = sset.Cast<SelectedObject>()
.Select(selObj => tr.GetObject(selObj.ObjectId, OpenMode.ForRead) as BlockReference)
.Where(blkRef => blkRef != null &&
blkRef.Name == "profile")
.ToList();
foreach (var blkRef in filteredBlocks)
{
if (blkRef != null)
{
UpdateAngleAttribute(tr, blkRef);
}
}
}
tr.Commit();
}
}
}
Here is my code and how I solved it. I was subscribing to CommandWillStart event too,
but when I delete is it worked only with OnCommandEnded event. I don't know if this is a logical solution or not but it works.