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} блоков зон покраски."); }
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} блоков зон покраски."); }