Пример #1
0
        public static void Paste()
        {
            Init();
            if (ToCopy == null || ToCopy.Count == 0)
            {
                Ed.WriteMessage("\nБуфер пустой! Сначала нужно скопировать зоны покраски!");
                return;
            }

            Base = Ed.GetPointWCS("Базовая точка");

            // Группировка зон покраски по параметрам длины и высоты
            var sizeGroups = ToCopy.GroupBy(c => new { c.Length, c.Height });

            using (var t = Db.TransactionManager.StartTransaction())
            {
                // Получение определения блока зоны в текущем чертеже.
                ObjectId idBtrColorArea = GetColorAreaIdBtr();
                var      cs             = Db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;

                // Создание всех слоев для зон покраски
                checkLayers();

                // Создание блока шаблона для каждого типоразмера зон покраски
                foreach (var size in sizeGroups)
                {
                    var idBlRefTemplate = GetBlRefTemplate(size.Key.Length, size.Key.Height, idBtrColorArea, cs, t);
                    var idColToCopy     = new ObjectIdCollection(new[] { idBlRefTemplate });
                    foreach (var item in size)
                    {
                        copyItem(item, idColToCopy, cs.Id, t);
                    }
                    // Удаление блока шаблона
                    var blRefTemplate = idBlRefTemplate.GetObject(OpenMode.ForWrite) as BlockReference;
                    blRefTemplate.Erase();
                }
                t.Commit();
            }
            Ed.WriteMessage($"\nВставлено {ToCopy.Count} блоков зон покраски.");
        }
Пример #2
0
        public static void Copy()
        {
            Init();
            ToCopy = new List <ColorArea>();
            // Выбор блоков зон покраски.

            var idsSelect = GetSelection();

            Base   = Ed.GetPointWCS("Базовая точка");
            Layers = new Dictionary <string, LayerInfo>();
            // Фильтр зон покраски
            using (var t = Db.TransactionManager.StartTransaction())
            {
                foreach (var idBlRef in idsSelect)
                {
                    var blRef = idBlRef.GetObject(OpenMode.ForRead, false, true) as BlockReference;
                    if (blRef == null)
                    {
                        continue;
                    }
                    var blName = blRef.GetEffectiveName();
                    if (blName.Equals(Settings.Default.BlockColorAreaName, StringComparison.OrdinalIgnoreCase))
                    {
                        ColorArea ca = new ColorArea(blRef);
                        ToCopy.Add(ca);
                        // добавление слоя в словарь
                        if (!Layers.ContainsKey(blRef.Layer))
                        {
                            LayerInfo li = new LayerInfo(blRef.LayerId);
                            Layers.Add(li.Name, li);
                        }
                    }
                }
                t.Commit();
            }
            Ed.WriteMessage($"\nСкопировано {ToCopy.Count} блоков зон покраски.");
        }