Beispiel #1
0
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            RandomPaint proper = comboBoxColor.SelectedItem as RandomPaint;

            // Добавление набора с ползунком
            addTrackProper(proper);
        }
Beispiel #2
0
        // Запись текущего значения процента в текстбокс
        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();
        }
Beispiel #3
0
        private void comboBoxColor_SelectionChangeCommitted(object sender, EventArgs e)
        {
            RandomPaint proper = comboBoxColor.SelectedItem as RandomPaint;

            comboBoxColor.BackColor = proper.Color;
            // Добавление набора с ползунком
            addTrackProper(proper);
        }
Beispiel #4
0
 private void addTrackProper(RandomPaint proper)
 {
     // Проверка нет ли уже такого слоя в распределении
     if (!_trackPropers.ContainsKey(proper.LayerName))
     {
         _trackPropers.Add(proper.LayerName, proper);
         AddControls(proper);
     }
 }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #9
0
        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);
            }
        }
Beispiel #10
0
        // Получение корректного нового значения процента (чтобы не превышалось 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()");
            }
        }
Beispiel #12
0
 public Spot(RandomPaint proper)
 {
     _proper = proper;
 }
Beispiel #13
0
        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);
        }