public void AKR_RandomPainting() { CommandStart.Start(doc => { using (var DocLock = doc.LockDocument()) { // Произвольная покраска участка, с % распределением цветов зон покраски. if (_randomPainting == null) { _randomPainting = new RandomPaintService(); } _randomPainting.Start(); } }); }
private void FormImage_Fire(object sender, EventArgs e) { try { Bitmap bitmap = getBitmapForColorArea((Bitmap)sender); using (var lockDoc = _doc.LockDocument()) { using (var t = _db.TransactionManager.StartTransaction()) { // Проверка блока зоны покраски. если нет, то копирование из шаблона с блоками. RandomPaintService.CheckBlockColorAre(_db); clearPreviusBlocks(); _idsInsertBlRefColorArea = new List <ObjectId>(); // блок шаблона зоны покраски var bt = t.GetObject(_db.BlockTableId, OpenMode.ForRead) as BlockTable; var cs = t.GetObject(_db.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; _idCS = cs.Id; var btrColorArea = t.GetObject(bt[Settings.Default.BlockColorAreaName], OpenMode.ForRead) as BlockTableRecord; var blRefColorAreaTemplate = new BlockReference(Point3d.Origin, btrColorArea.Id); cs.AppendEntity(blRefColorAreaTemplate); t.AddNewlyCreatedDBObject(blRefColorAreaTemplate, true); _idBlRefColorAreaTemplate = blRefColorAreaTemplate.Id; RandomPaintService.SetDynParamColorAreaBlock(blRefColorAreaTemplate, _colorAreaSize); _idColCopy = new ObjectIdCollection(); _idColCopy.Add(_idBlRefColorAreaTemplate); Point3d ptStart = new Point3d(_colorAreaSize.ExtentsColorArea.MinPoint.X, _colorAreaSize.ExtentsColorArea.MaxPoint.Y, 0); _layersColorArea = new Dictionary <Color, ObjectId>(); ProgressMeter progressMeter = new ProgressMeter(); progressMeter.SetLimit(bitmap.Width * bitmap.Height); progressMeter.Start("Вставка блоков зон покраски"); for (int i = 0; i < bitmap.Width * bitmap.Height; i++) { if (HostApplicationServices.Current.UserBreak()) { break; } progressMeter.MeterProgress(); int x = i / bitmap.Height; int y = i % bitmap.Height; Point3d position = ptStart.Add(new Vector3d(x * _colorAreaSize.LenghtSpot, -(y + 1) * _colorAreaSize.HeightSpot, 0)); insertSpot(position, getLayerId(bitmap.GetPixel(x, y), _layersColorArea)); } progressMeter.Stop(); blRefColorAreaTemplate.Erase(true); t.Commit(); _doc.Editor.Regen(); _doc.Editor.WriteMessage("\nГотово"); } } } catch (System.Exception ex) { Logger.Log.Error(ex, "FormImage_Fire()"); } }