private void drawButton_Click(object sender, EventArgs e)
        {
            if(cells == null){
                MessageBox.Show("Расчёты не были произведены. Невозможно построить ячеистую структуру");
                return;
            }

            if(FreeClass.bodyDrawer == null)
            {
                MessageBox.Show("Тело не было построенно. Невозможно построить ячеистую структуру");
                return;
            }

            if (loopBuildRadioButton.Checked)
            {
                DialogResult dialogResult = MessageBox.Show("Выбрано циклическое построение. Будет выполненно только одно " + 
                    "построение (самое последнее). Продолжить?",
                    "Предупреждение", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.No) { return; }
            }

            // Если ячейки уже существуют
            if (FreeClass.cells != null)
            {
                DialogResult dialogResult = MessageBox.Show("На объекте уже есть ячеистая структура. Удалить её?", 
                    "Предупреждение", MessageBoxButtons.YesNo);
                if (dialogResult == DialogResult.Yes) {  deleteButton_Click(null, null); }
                else if (dialogResult == DialogResult.No){ return; }
            }

            drawer = new NandMRectangleCellsDrawer(FreeClass.sldManager, FreeClass.body, FreeClass.bodyDrawer);
            FreeClass.cells = drawer;
            drawer.SetCells(cells); drawer.drawCells();
        }
        private void ResearchActions(NandMRectangleCellsDrawer cellsDraw, int i, int j)
        {
            //создаём исследование
            research = new Research(FreeClass.sldManager, FreeClass.bodyDrawer.GetFacesArray());
            research.CreateStudy();

            cells.Calculation();
            cellsDraw.SetCells(cells); cellsDraw.drawCells();

            //прикладываем силы или фиксируем грани
            foreach (object[] act in action)
            {
                if (act[0].Equals("fix"))
                {
                    research.BodyParts_Select((int)act[1]);
                    research.FixFace();
                }
                else if (act[0].Equals("force"))
                {
                    research.BodyParts_Select((int)act[1]);
                    research.CreateLoad((double)act[2]);
                }
            }

            research = new Research(FreeClass.sldManager, FreeClass.bodyDrawer.GetFacesArray());
            research.CreateStudy();

            research.CreateMesh(); research.MaterialSet();
            research.RunAnalysis();

            double stress = research.GetStress(), displacement = research.GetDisplacement();

            dataGridView1.Rows[j - 1].Cells[1].Value = Math.Round(stress, cells.GetAccuracy());           // Деформация равномерное
            dataGridView1.Rows[j - 1].Cells[2].Value = Math.Round(displacement, cells.GetAccuracy()) + 5; // Смещение равномерное

            logTextBox.Text += Environment.NewLine;
            logTextBox.Text += "Итерация: " + i.ToString(); logTextBox.Text += Environment.NewLine;
            logTextBox.Text += "Напряжение(ksi): " + stress.ToString(); logTextBox.Text += Environment.NewLine;
            logTextBox.Text += "Смещение(mk): " + displacement.ToString(); logTextBox.Text += Environment.NewLine;

            // задержка
            //Thread.Sleep(2500);

            // Очищаем
            research.deleteStudy(); research = null;
            FreeClass.sldManager.swModel.ClearSelection2(true);

            cellsDraw.deleteCells();
        }