using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Internal; // Нужно для Utils.SelectObjects
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
using AcRx = Autodesk.AutoCAD.Runtime;
using AcAp = Autodesk.AutoCAD.ApplicationServices;
using AcDb = Autodesk.AutoCAD.DatabaseServices;
using AcGe = Autodesk.AutoCAD.Geometry;
using AcEd = Autodesk.AutoCAD.EditorInput;
using AcIt = Autodesk.AutoCAD.Internal;
[assembly: CommandClass(typeof(TestSelectionSet.MyCommands))]
namespace TestSelectionSet
{
public class MyCommands
{
[CommandMethod("TestAddSelection")]
public void TestAddSelection()
{
AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
if (doc == null) return;
AcEd.Editor ed = doc.Editor;
ObjectId[] ids = GetObjectIdFromUser();
if (ids != null && ids.Length != 0) {
// Устанавливаем предварительный набор
// (вместо команды _SELECT)
AcIt.Utils.SelectObjects(ids);
// Первое запрос фальшивый - только для того, чтобы "проглотить"
// набор предварительного выбора
AcEd.PromptSelectionResult resSel = ed.GetSelection();
doc.SendStringToExecute("_P ", false, false, false);
// Тут возможен вариант и с фильтром
resSel = ed.GetSelection();
if (resSel.Status == PromptStatus.OK)
{
ed.WriteMessage("\nВыбрано {0} объектов.", resSel.Value.Count);
}
}
}
/// Тестовая функция, которая возвращает массив ObjectId
public ObjectId[] GetObjectIdFromUser()
{
AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
if (doc == null) return null;
AcEd.Editor ed = doc.Editor;
AcEd.PromptSelectionResult resSel = ed.GetSelection();
if (resSel.Status == PromptStatus.OK && resSel.Value.Count != 0)
return resSel.Value.GetObjectIds();
else
return null;
}
}
}