Esempio n. 1
0
 /// <summary>
 /// При прерывании вызывает исключение "Отменено пользователем.".
 /// Т.е. можно не обрабатывает DialogResult.
 /// </summary>      
 public static System.Windows.Forms.DialogResult ShowDialog()
 {
     if (HasErrors)
     {
         Logger.Log.Error(string.Join("\n", Errors.Select(e => e.Message)));
         Errors.Sort();
         var formErr = new FormError(true);
         var res = Application.ShowModalDialog(formErr);
         if (res != System.Windows.Forms.DialogResult.OK)
         {
             formErr.EnableDialog(false);
             //Application.ShowModelessDialog(formErr);
             throw new Exception("Отменено пользователем.");
         }
         return res;
     }
     else
     {
         return System.Windows.Forms.DialogResult.OK;
     }
 }
Esempio n. 2
0
        public static void Check(IEnumerable idsBlRefs, HashSet<string> ignoreBlocks)
        {
            curDepth = 0;
            _ignoreBlocks = ignoreBlocks;
            Database db = HostApplicationServices.WorkingDatabase;
            _errors = new List<Error>();
            attemptedblocks = new HashSet<ObjectId>();
            AllDublicBlRefInfos = new List<BlockRefDublicateInfo>();
            dictBlRefInfos = new Dictionary<string, Dictionary<PointTree, List<BlockRefDublicateInfo>>>();
            try
            {
                using (var t = db.TransactionManager.StartTransaction())
                {

                    if (idsBlRefs == null)
                    {
                        var ms = SymbolUtilityServices.GetBlockModelSpaceId(db).GetObject(OpenMode.ForRead) as BlockTableRecord;
                        idsBlRefs = ms;
                    }
                    GetDublicateBlocks(idsBlRefs, Matrix3d.Identity, 0);
                    t.Commit();
                }

                // дублирующиеся блоки
                AllDublicBlRefInfos = dictBlRefInfos.SelectMany(s => s.Value.Values).Where(w => w.Count > 1)
                                        .SelectMany(s => s.GroupBy(g => g).Where(w => w.Skip(1).Any()))
                                        .Select(s =>
                                           {
                                               var bi = s.First();
                                               bi.CountDublic = s.Count();
                                               bi.Dublicates = s.Skip(1).ToList();
                                               return bi;
                                           }).ToList();

                // Добавление дубликатов в результирующий список
                //AddTransformedToModelDublic(dublicBlRefInfos);
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex, $"CheckDublicateBlocks - {db.Filename}. {ex.StackTrace}");
                return;
            }

            if (AllDublicBlRefInfos.Count == 0)
            {
                Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\nДубликаты блоков не найдены.");
            }
            else
            {
                foreach (var dublBlRefInfo in AllDublicBlRefInfos)
                {
                    Error err = new Error($"Дублирование блоков '{dublBlRefInfo.Name}' - {dublBlRefInfo.CountDublic} шт. в точке {dublBlRefInfo.Position.ToString()}",
                       dublBlRefInfo.IdBlRef, dublBlRefInfo.TransformToModel, System.Drawing.SystemIcons.Error);
                    err.Tag = dublBlRefInfo;
                    _errors.Add(err);
                }
            }

            if (_errors.Count>0)
            {
                var formDublicates = new FormError(_errors, true);
                formDublicates.Text = "Дублирование блоков";
                formDublicates.EnableDublicateButtons();
                if (Application.ShowModalDialog(formDublicates) != System.Windows.Forms.DialogResult.OK)
                {
                    formDublicates.EnableDialog(false);
                    Application.ShowModelessDialog(formDublicates);
                    throw new Exception("Отменено пользователем.");
                }
            }
        }