示例#1
0
        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();
        }
示例#3
0
 private void deleteButton_Click(object sender, EventArgs e)
 {
     try { FreeClass.cells.deleteCells(); }
     catch { }
     FreeClass.cells = null; drawer = null;
 }
        private void startResearch4_Click(object sender, EventArgs e)
        {
            NandMForm owner;

            try { owner = (NandMForm)this.Owner; }
            catch { MessageBox.Show("Ошибка получения матеинской формы"); return; }

            //if (true) { return; }

            FreeClass.sldManager.swModel.ClearSelection2(true);

            try { FreeClass.cells.deleteCells(); }
            catch { }

            if (!owner.CheckLoop())
            {
                MessageBox.Show("Ошибка: На материнской форме не выбрана функция циклического построения");
                return;
            }

            cellsDraw = new
                        NandMRectangleCellsDrawer(FreeClass.sldManager, FreeClass.body, FreeClass.bodyDrawer);

            /*
             * switch (answer) {
             *  case "2n": {  break; }
             *  case "maxtrix": break;
             *  case "free": break;
             *  default: break;
             * }*/

            dataGridView1.RowCount = 1;

            if (owner.GetMethod() == "matrix")
            {
                int start, end, step;
                start = Convert.ToInt16(owner.GetStartPoint());
                end   = Convert.ToInt16(owner.GetEndPoint());
                step  = Convert.ToInt16(owner.GetStep());
                double partOfVolume = Convert.ToDouble(owner.GetVolume());

                //withoutIterationResearch();

                for (int i = start, j = 1; i <= end; i = i + step, j++)
                {
                    dataGridView1.RowCount = j;

                    //рисуем ячейки
                    cells = new NandMRectangleCells(FreeClass.body);

                    cells.SetAccuracy(Convert.ToInt16(owner.GetAccuracy()));
                    cells.SetCellsV(FreeClass.body.GetV() * partOfVolume / 100);

                    cells.SetColumnsNumber(i); cells.SetRowsNumber(i);
                    dataGridView1.Rows[j - 1].Cells[0].Value = cells.GetRowsNumber() * cells.GetColumnsNumber();

                    ResearchActions(cellsDraw, i, j);
                }
            }
            else if (owner.GetMethod() == "2n")
            {
                int start, end, step;
                start = Convert.ToInt16(owner.GetStartPoint());
                end   = Convert.ToInt16(owner.GetEndPoint());
                step  = Convert.ToInt16(owner.GetStep());
                double partOfVolume = Convert.ToDouble(owner.GetVolume());

                //withoutIterationResearch();

                for (int i = start, j = 1; i <= end; i = i + step, j++)
                {
                    dataGridView1.RowCount = j;

                    //рисуем ячейки
                    cells = new NandMRectangleCells(FreeClass.body);

                    cells.SetAccuracy(Convert.ToInt16(owner.GetAccuracy()));
                    cells.SetCellsV(FreeClass.body.GetV() * partOfVolume / 100);

                    if (i % 2 == 0)
                    {
                        double buff = Math.Sqrt(Math.Pow(2, i));
                        cells.SetColumnsNumber(Convert.ToInt16(buff));
                        cells.SetRowsNumber(Convert.ToInt16(buff));
                    }
                    else
                    {
                        double buff = Math.Sqrt(Math.Pow(2, i - 1));
                        cells.SetColumnsNumber(Convert.ToInt16(buff) * 2);
                        cells.SetRowsNumber(Convert.ToInt16(buff));
                    }

                    dataGridView1.Rows[j - 1].Cells[0].Value = cells.GetRowsNumber() * cells.GetColumnsNumber();

                    ResearchActions(cellsDraw, i, j);
                }
            }
            else if (owner.GetMethod() == "free")
            {
                int start1, start2, end, step;
                start1 = Convert.ToInt16(owner.GetStartPoint());
                start2 = Convert.ToInt16(owner.GetEndPoint());
                end    = Convert.ToInt16(owner.GetMiddlePoint());
                step   = Convert.ToInt16(owner.GetStep());
                double partOfVolume = Convert.ToDouble(owner.GetVolume());

                //withoutIterationResearch();

                for (int i = start1, j = 1; i <= end; i = i + step, j++, start2 = start2 + step)
                {
                    dataGridView1.RowCount = j;

                    //рисуем ячейки
                    cells = new NandMRectangleCells(FreeClass.body);

                    cells.SetAccuracy(6);
                    cells.SetCellsV(FreeClass.body.GetV() * partOfVolume / 100);

                    cells.SetColumnsNumber(i); cells.SetRowsNumber(start2);
                    dataGridView1.Rows[j - 1].Cells[0].Value = cells.GetRowsNumber() * cells.GetColumnsNumber();

                    ResearchActions(cellsDraw, i, j);
                }
            }



            //На случай, если нужно будет поменять условия циклического построения
            //чтобы приложение не обращалось по нулевой ссылке
            research = new Research(FreeClass.sldManager, FreeClass.bodyDrawer.GetFacesArray());
        }