using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
// This line is not mandatory, but improves loading performances
[assembly: CommandClass(typeof(AutoCAD_CSharp_plug_in5.MyCommands))]
namespace AutoCAD_CSharp_plug_in5
{
// This class is instantiated by AutoCAD for each document when
// a command is called by the user the first time in the context
// of a given document. In other words, non static data in this class
// is implicitly per-document!
public class MyCommands
{
// The CommandMethod attribute can be applied to any public member
// function of any public class.
// The function should take no arguments and return nothing.
// If the method is an intance member then the enclosing class is
// intantiated for each document. If the member is a static member then
// the enclosing class is NOT intantiated.
//
// NOTE: CommandMethod has overloads where you can provide helpid and
// context menu.
// Modal Command with localized name
[CommandMethod("ORAORA", CommandFlags.UsePickSet)]
public void eraseCircles_2()
{
// получаем БД и Editor текущего документа
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
// создаем переменную, в которой будут содержаться данные для фильтра
TypedValue[] filterlist = new TypedValue[1];
// первый аргумент (0) указывает, что мы задаем тип объекта this
// второй аргумент ("CIRCLE") - собственно тип
filterlist[0] = new TypedValue(0, "CIRCLE");
// создаем фильтр
SelectionFilter filter = new SelectionFilter(filterlist);
// пытаемся получить ссылки на объекты с учетом фильтра
// ВНИМАНИЕ! Нужно проверить работоспособность метода с замороженными и заблокированными слоями!
PromptSelectionResult selRes = ed.SelectAll();
// если произошла ошибка - сообщаем о ней
if (selRes.Status != PromptStatus.OK)
{
ed.WriteMessage("\nError!\n");
return;
}
//thi (вроде, все это не нужно, но удалять и переделывать немного страшно)
// получаем массив ID объектов
ObjectId[] ids = selRes.Value.GetObjectIds();
long time1 = DateTime.Now.Ticks;
long t1 = Convert.ToInt64(time1);
Line acLine = new Line(new Point3d(25, 25, 0), new Point3d(33, 33, 0));
doc.Editor.Command("_undo", 1);
long time2 = DateTime.Now.Ticks;
long t2 = Convert.ToInt64(time2);
long tcontrol = t2 - t1;
Entity gov;
// начинаем транзакцию
using (Transaction tr = db.TransactionManager.StartTransaction())
{
// "пробегаем" по всем полученным объектам
foreach (ObjectId id in ids)
{
// приводим каждый из них к типу Entity
Entity entity = (Entity)tr.GetObject(id, OpenMode.ForRead);
// открываем приговоренный объект на запись
entity.UpgradeOpen();
// удаляем объект
entity.Erase();
long timea = DateTime.Now.Ticks;
long ta = Convert.ToInt64(time1);
Line acLine2 = new Line(new Point3d(25, 25, 0), new Point3d(33, 33, 0));
long timeb = DateTime.Now.Ticks;
long tb = Convert.ToInt64(timeb);
long t3 = tb - ta;
doc.Editor.Command("_undo", 1);
doc.Editor.Command("_undo", 1);
if (t3 < tcontrol)
{
tcontrol = t3;
ed.WriteMessage("\n Id предгов: {entity}\n");
gov = entity;
}
else
{
ed.WriteMessage("\nВсе чисто, вроде {entity}\n");
}
}
tr.Commit();
gov.Erase();
}
}
}
}