using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;
[assembly: CommandClass(typeof(Rivilis.MyPline))]
namespace Rivilis
{
public class MyPline
{
ObjectId idPline; // ObjectId полилинии
[CommandMethod("MyPline")]
public async void MyPlineHandler()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
Editor ed = doc.Editor;
Database db = doc.Database;
db.ObjectAppended += Db_ObjectAppended;
db.ObjectErased += Db_ObjectErased;
// Запускаем команду
try
{
await ed.CommandAsync("_.PLINE", Editor.PauseToken);
while (doc.CommandInProgress.ToUpper() == "PLINE")
{
await ed.CommandAsync(Editor.PauseToken); // Продолжаем команду
}
}
catch { }
// Здесь команда уже завершена
db.ObjectAppended -= Db_ObjectAppended;
db.ObjectErased -= Db_ObjectErased;
ed.WriteMessage("\nPline завершилась. ObjectId = {0}", idPline);
// Здесь уже можно обрабатывать полилинию.
}
private void Db_ObjectAppended(object sender, ObjectEventArgs e)
{
if (e.DBObject is Polyline)
idPline = e.DBObject.ObjectId;
}
private void Db_ObjectErased(object sender, ObjectErasedEventArgs e)
{
if (e.DBObject.ObjectId == idPline)
idPline = ObjectId.Null;
}
}
}