private void buttonAdd_Click(object sender, EventArgs e) { RandomPaint proper = comboBoxColor.SelectedItem as RandomPaint; // Добавление набора с ползунком addTrackProper(proper); }
// Запись текущего значения процента в текстбокс private void setPercentToTextBox(RandomPaint proper) { GroupBox groupBox = _groupBoxs[proper.LayerName]; string tag = (string)groupBox.Tag; TextBox textBox = groupBox.Controls.Find("textBox" + tag, false).First() as TextBox; textBox.Text = proper.Percent.ToString(); }
private void comboBoxColor_SelectionChangeCommitted(object sender, EventArgs e) { RandomPaint proper = comboBoxColor.SelectedItem as RandomPaint; comboBoxColor.BackColor = proper.Color; // Добавление набора с ползунком addTrackProper(proper); }
private void addTrackProper(RandomPaint proper) { // Проверка нет ли уже такого слоя в распределении if (!_trackPropers.ContainsKey(proper.LayerName)) { _trackPropers.Add(proper.LayerName, proper); AddControls(proper); } }
private void comboBoxColor_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); RandomPaint proper = ((ComboBox)sender).Items[e.Index] as RandomPaint; // Покраска e.Graphics.FillRectangle(new SolidBrush(proper.Color), e.Bounds); // Текст e.Graphics.DrawString(proper.LayerName, ((Control)sender).Font, Brushes.Black, e.Bounds.X, e.Bounds.Y); }
public static IEnumerable <Spot> GetSpots(RandomPaint proper) { List <Spot> spots = new List <Spot>(); for (int i = 0; i < proper.TailCount; i++) { Spot spot = new Spot(proper); spots.Add(spot); } return(spots); }
private void trackBar_ValueChanged(object sender, EventArgs e) { // Распределяемый трек TrackBar trackBar = (TrackBar)sender; RandomPaint proper = _trackPropers[(string)trackBar.Tag]; int value = getCorrectValue(proper, trackBar.Value); proper.Percent = value; trackBar.Value = value; // Подпись процента в TextBox setPercentToTextBox(proper); }
private Dictionary <string, RandomPaint> getAllProperPaints() { Dictionary <string, RandomPaint> propers = new Dictionary <string, RandomPaint>(); int numProper = 0; using (var t = _db.TransactionManager.StartTransaction()) { var lt = _db.LayerTableId.GetObject(OpenMode.ForRead) as LayerTable; foreach (ObjectId idLayer in lt) { var layer = idLayer.GetObject(OpenMode.ForRead) as LayerTableRecord; RandomPaint proper = new RandomPaint(layer.Name, numProper++, layer.Color.ColorValue, layer.Id); propers.Add(proper.LayerName, proper); } } return(propers); }
private void TextBox_TextChanged(object sender, EventArgs e) { TextBox textBox = (TextBox)sender; string tag = (string)textBox.Tag; RandomPaint proper = _trackPropers[tag]; int val; if (int.TryParse(textBox.Text, out val)) { val = getCorrectValue(proper, val); proper.Percent = val; GroupBox groupBox = _groupBoxs[tag]; TrackBar trackBar = groupBox.Controls.Find("trackBar" + tag, false).First() as TrackBar; trackBar.Value = val; setPercentToTextBox(proper); } }
// Получение корректного нового значения процента (чтобы не превышалось 100% распределения) private int getCorrectValue(RandomPaint proper, int newValue) { int delta = newValue - proper.Percent; int value = newValue; // Нельзя распределить больше 100% if (delta > 0) { int oldDistributedPercent = distributedPercent(); int newDistributedPercent = oldDistributedPercent + delta; if (newDistributedPercent >= 100) { value = 100 - oldDistributedPercent + proper.Percent; return(value); } } return(value); }
// Огонь private void Fire(object sender, EventArgs e) { try { // Удаление предыдущей покраски if (_spots.Count > 0) { deleteSpots(_spots); } _spots = new List <Spot>(); List <RandomPaint> propers = ((Dictionary <string, RandomPaint>)sender).Values.ToList(); _xsize = _colorAreaSize.LenghtSize; //Convert.ToInt32((_extentsPrompted.MaxPoint.X - _extentsPrompted.MinPoint.X) / 300); _ysize = _colorAreaSize.HeightSize; //Convert.ToInt32((_extentsPrompted.MaxPoint.Y - _extentsPrompted.MinPoint.Y) / 100); int totalTileCount = _xsize * _ysize; _ed.WriteMessage("\n"); _ed.WriteMessage("\n-----------------------------------"); _ed.WriteMessage($"\nОбщее кол-во зон покраски = {totalTileCount} штук."); //Logger.Log.Info("totalTileCount = {0}, xsize={1}, ysize={2}", totalTileCount, _xsize, _ysize); int distributedCount = 0; foreach (var proper in propers.OrderByDescending(o => o.TailCount)) { proper.TailCount = Convert.ToInt32(proper.Percent * totalTileCount / 100d); distributedCount += proper.TailCount; _ed.WriteMessage($"\nРаспределяемый цвет '{proper.LayerName}' - {proper.Percent}% = {proper.TailCount} штук."); //Logger.Log.Info("Распределяемый цвет {0}, процентов {1}, штук {2}", proper.LayerName, proper.Percent, proper.TailCount); } if (distributedCount > totalTileCount) { RandomPaint lastProper = propers.Last(); lastProper.TailCount -= distributedCount - totalTileCount; _ed.WriteMessage($"\nУменьшено кол распределяемого цвета '{lastProper.LayerName}' на {(distributedCount - totalTileCount)} штук."); //Logger.Log.Info("Уменьшено кол распр цвета {0} на штук {1}", lastProper.LayerName, (distributedCount - totalTileCount)); } _ed.WriteMessage($"\nВсего рспределено = {distributedCount} ({distributedCount *100 / totalTileCount}%)"); //Logger.Log.Info("distributedCount = {0}", distributedCount); // Сортировка по процентам (начиная с меньшего) var propersOrdered = propers.OrderBy(p => p.Percent); // Получение общего списка распределения покроаски foreach (var proper in propersOrdered) { _spots.AddRange(Spot.GetSpots(proper)); } // Распределение зон покраски List <Spot> distributedSpots = distributeSpots(_spots, totalTileCount); // Вставка блоков зон placementSpots(distributedSpots); // отчет Report(distributedSpots); _ed.Regen(); } catch (System.Exception ex) { _ed.WriteMessage("\n{0}", ex.ToString()); Logger.Log.Error(ex, "FormProper_Fire()"); } }
public Spot(RandomPaint proper) { _proper = proper; }
private void AddControls(RandomPaint proper) { string tag = proper.LayerName; GroupBox groupBox = new GroupBox(); //CheckBox checkBox = new CheckBox(); // Lock/Ublock TextBox textBox = new TextBox(); // % Button buttonDel = new Button(); TrackBar trackBar = new TrackBar(); Label label = new Label(); groupBox.SuspendLayout(); ((ISupportInitialize)(trackBar)).BeginInit(); SuspendLayout(); // groupBox groupBox.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; groupBox.Tag = tag; groupBox.Name = "groupBox" + tag; groupBox.Size = new Size(378, 72); groupBox.TabStop = false; groupBox.Text = tag; groupBox.Controls.Add(textBox); groupBox.Controls.Add(buttonDel); groupBox.Controls.Add(trackBar); groupBox.Controls.Add(label); groupBox.Enabled = true; groupBox.Visible = true; groupBox.Location = _location; shiftLocation(DISTANCE_BETWEEN_GROUP); // textbox % textBox.Anchor = AnchorStyles.Right; textBox.Font = new Font("Microsoft Sans Serif", 11.25F, FontStyle.Regular, GraphicsUnit.Point, 204); textBox.Location = new Point(291, 28); textBox.Name = "textBox" + tag; textBox.Size = new Size(43, 24); textBox.Tag = tag; textBox.Text = proper.Percent.ToString(); // buttonDel buttonDel.Anchor = AnchorStyles.Right; buttonDel.BackgroundImage = Properties.Resources.delete; buttonDel.BackgroundImageLayout = ImageLayout.Stretch; buttonDel.Location = new Point(344, 27); buttonDel.Name = "buttonDel" + tag; buttonDel.Size = new Size(28, 28); buttonDel.Text = "-"; buttonDel.UseVisualStyleBackColor = true; buttonDel.Tag = tag; // trackBar trackBar.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; trackBar.BackColor = proper.Color; trackBar.Location = new Point(12, 19); trackBar.Name = "trackBar" + tag; trackBar.Size = new Size(273, 45); trackBar.TickStyle = TickStyle.Both; trackBar.Tag = tag; trackBar.Maximum = 100; trackBar.Value = proper.Percent; // Label label.AutoSize = true; label.Location = new Point(301, 12); label.Name = "labelTemp2"; label.Size = new Size(15, 13); label.TabIndex = 9; label.Text = "%"; this.Controls.Add(groupBox); // События textBox.TextChanged += TextBox_TextChanged; trackBar.ValueChanged += trackBar_ValueChanged; buttonDel.Click += buttonDel_Click; _groupBoxs.Add(proper.LayerName, groupBox); }