/// <summary> /// Выделение объектов и зумирование по границе /// </summary> /// <param name="ids">Элементв</param> /// <param name="ed">Редактор</param> public static void SetSelectionAndZoom([NotNull] this List <ObjectId> ids, Editor ed = null) { try { var doc = AcadHelper.Doc; ed = doc.Editor; using (doc.LockDocument()) using (var t = doc.TransactionManager.StartTransaction()) { if (!ids.Any()) { "Нет объектов для выделения.".WriteToCommandLine(); return; } var ext = new Extents3d(); ids.Select(s => s.GetObject(OpenMode.ForRead)).Iterate(o => { if (o.Bounds.HasValue) { ext.AddExtents(o.Bounds.Value); } }); ext = ext.Offset(); ed.Zoom(ext); Autodesk.AutoCAD.Internal.Utils.SelectObjects(ids.ToArray()); t.Commit(); } } catch (Exception ex) { $"Ошибка выделения объектов - {ex.Message}.".WriteToCommandLine(); } }
public static List <ObjectId> SelectInExtents([NotNull] this Editor ed, Extents3d ext) { using (ed.Document.LockDocument()) { Debug.WriteLine($"SelectInExtents IsApplicationContext={Application.DocumentManager.IsApplicationContext}."); ed.Try(e => e.Document.Database.TileMode = true); ed.Try(e => e.Zoom(ext.Offset(10))); ext.TransformBy(ed.WCS2UCS()); var minPt = ext.MinPoint; var maxPt = ext.MaxPoint; var selRes = ed.SelectCrossingWindow(minPt, maxPt); if (selRes.Status == PromptStatus.OK) { return(selRes.Value.GetObjectIds().ToList()); } throw new OperationCanceledException(); } }