예제 #1
0
        /// <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();
            }
        }
예제 #2
0
        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();
            }
        }