private void okButton_Click(object sender, EventArgs e) { List <string> lineNumbers = new List <string>(this.notMoveLines.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList <string>()); List <MyLine> fixedLines = new List <MyLine>(); if (gridName.Text == string.Empty) { MessageBox.Show("Имя сетки не может быть пустым!"); return; } foreach (string str in lineNumbers) { int idx; if (!int.TryParse(str, out idx)) { MessageBox.Show("Неверно заданы линии!"); return; } MyLine line = parent.currentFullModel.geometryModel.Lines.Find(l => l.Id == idx); if (line == null) { MessageBox.Show("Не найдена линия с номером " + idx.ToString()); return; } fixedLines.Add(line); } parent.precision = parent.DefinePrecision(); if (parent.currentFullModel.geometryModel.Areas.Count != 0) { errorMessage1.Visible = false; errorBadGridName.Visible = false; // создаем новый объект "конечно-элементная модель" и добавляем его в список конечно-элементных моделей. foreach (MyFiniteElementModel model in parent.currentFullModel.FiniteElementModels) // проверяем, нет ли модели с таким именем { if (model.ModelName == gridName.Text) { errorBadGridName.Visible = true; return; } } // создаем для новой КЭ модели id int id = parent.currentFullModel.IdCandidate; currentModel = (MyFiniteElementModel)Util.getObjectCopy(currentModel); currentModel.ModelName = gridName.Text; currentModel.Id = id; currentModel.type = MyFiniteElementModel.GridType.Ruppert; currentModel.restoreArraysForOldMethods(parent.currentFullModel.geometryModel); parent.clearSelection(); parent.ReDrawAll(); this.Hide(); Optimize(fixedLines); } else { errorMessage1.Visible = true; } }
private void okButton_Click(object sender, EventArgs e) { List <string> lineStrings = new List <string>(this.notMoveLines.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList <string>()); List <MyLine> fixedLines = new List <MyLine>(); if (gridName.Text == string.Empty) { MessageBox.Show("Имя сетки не может быть пустым!"); return; } foreach (string str in lineStrings) { int idx; if (!int.TryParse(str, out idx)) { MessageBox.Show("Неверно заданы линии!"); return; } MyLine line = parent.currentFullModel.geometryModel.Lines.Find(l => l.Id == idx); if (line == null) { MessageBox.Show("Не найдена линия с номером " + idx.ToString()); return; } fixedLines.Add(line); } parent.precision = parent.DefinePrecision(); if (parent.currentFullModel.geometryModel.Areas.Count != 0) { errorMessage1.Visible = false; errorBadGridName.Visible = false; // создаем новый объект "конечно-элементная модель" и добавляем его в список конечно-элементных моделей. foreach (MyFiniteElementModel model in parent.currentFullModel.FiniteElementModels) // проверяем, нет ли модели с таким именем { if (model.ModelName == gridName.Text) { errorBadGridName.Visible = true; return; } } // создаем для новой КЭ модели id int id = parent.currentFullModel.IdCandidate; currentModel = (MyFiniteElementModel)Util.getObjectCopy(currentModel); currentModel.ModelName = gridName.Text; currentModel.Id = id; currentModel.restoreArraysForOldMethods(parent.currentFullModel.geometryModel); List <MyNode> dontMove = new List <MyNode>(); for (int i = 1; i < currentModel.INOUT.Count; i++) { if (currentModel.INOUT[i] == 0) { continue; } MyNode node = currentModel.Nodes.Find(n => n.Id == i); if (node != null) { dontMove.Add(node); } } foreach (MyLine line in fixedLines) { if (line is MyStraightLine) { dontMove.AddRange(findNodesAtStraightLine(line as MyStraightLine)); } else { dontMove.AddRange(findNodesAtArc(line as MyArc)); } } Regularize(dontMove); parent.clearSelection(); parent.ModelCreated(currentModel); Close(); } else { errorMessage1.Visible = true; } }
private void okButton_Click(object sender, EventArgs e) { List <string> lineStrings = new List <string>(this.notMoveLines.Text.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList <string>()); List <MyLine> fixedLines = new List <MyLine>(); foreach (string str in lineStrings) { int idx; if (!int.TryParse(str, out idx)) { MessageBox.Show("Неверно заданы линии!"); return; } MyLine line = (MyLine)parent.currentFullModel.geometryModel.StraightLines.Find(l => l.Id == idx) ?? (MyLine)parent.currentFullModel.geometryModel.Arcs.Find(a => a.Id == idx); if (line == null) { MessageBox.Show("Не найдена линия с номером " + idx.ToString()); return; } fixedLines.Add(line); } parent.precision = parent.DefinePrecision(); if (parent.currentFullModel.geometryModel.Areas.Count != 0) { errorMessage1.Visible = false; errorBadGridName.Visible = false; // создаем новый объект "конечно-элементная модель" и добавляем его в список конечно-элементных моделей. foreach (MyFiniteElementModel model in parent.currentFullModel.FiniteElementModels) // проверяем, нет ли модели с таким именем { if (model.ModelName == gridName.Text) { errorBadGridName.Visible = true; return; } } this.Hide(); parent.StartProgress("Выполняется оптимизация"); // создаем для новой КЭ модели id int id = parent.currentFullModel.IdCandidate; currentModel = (MyFiniteElementModel)Util.getObjectCopy(currentModel); currentModel.ModelName = gridName.Text; currentModel.Id = id; currentModel.restoreArraysForOldMethods(parent.currentFullModel.geometryModel); int[] notMove = new int[currentModel.INOUT.Count]; notMove.Initialize(); if (notMoveLines.TextLength != 0) { foreach (MyLine fixedLine in fixedLines) { List <MyNode> tempNodes = new List <MyNode>(); if (fixedLine is MyStraightLine) { findNodesAtStraightLine(tempNodes, (MyStraightLine)fixedLine); foreach (MyNode node in tempNodes) { node.Type = NodeType.Fixed; notMove[node.Id] = 1; } } else { findNodesAtArc(tempNodes, (MyArc)fixedLine); foreach (MyNode node in tempNodes) { node.Type = NodeType.Fixed; notMove[node.Id] = 1; //currentModel.INOUT[node.Id] = 1; } } } } Regularization(currentModel.NRC, parent.currentFullModel.geometryModel.Areas.Count, currentModel, notMove); currentModel.FiniteElements.Clear(); currentModel.Nodes.Clear(); for (int i = 1; i <= currentModel.NP; i++) // MAXNP - число узлов { currentModel.Nodes.Add(new MyNode(currentModel.CORD[2 * (i - 1) + 1], currentModel.CORD[2 * (i - 1) + 2], i)); } for (int temp = 1; temp <= currentModel.NE; temp++) { int numOfFE = currentModel.FiniteElements.Count; int numOfNodes = currentModel.Nodes.Count; List <MyNode> tempNodes = new List <MyNode>(); double X1 = currentModel.CORD[2 * (currentModel.NOP[3 * (temp - 1) + 1] - 1) + 1]; double Y1 = currentModel.CORD[2 * (currentModel.NOP[3 * (temp - 1) + 1] - 1) + 2]; double X2 = currentModel.CORD[2 * (currentModel.NOP[3 * (temp - 1) + 2] - 1) + 1]; double Y2 = currentModel.CORD[2 * (currentModel.NOP[3 * (temp - 1) + 2] - 1) + 2]; double X3 = currentModel.CORD[2 * (currentModel.NOP[3 * (temp - 1) + 3] - 1) + 1]; double Y3 = currentModel.CORD[2 * (currentModel.NOP[3 * (temp - 1) + 3] - 1) + 2]; foreach (MyNode node in currentModel.Nodes) { if (Math.Abs(node.X - X1) <= 0.001 && Math.Abs(node.Y - Y1) <= 0.001) { tempNodes.Add(node); } if (Math.Abs(node.X - X2) <= 0.001 && Math.Abs(node.Y - Y2) <= 0.001) { tempNodes.Add(node); } if (Math.Abs(node.X - X3) <= 0.001 && Math.Abs(node.Y - Y3) <= 0.001) { tempNodes.Add(node); } } MyFiniteElement elem = new MyFiniteElement(numOfFE + 1, 0, tempNodes); elem.DefineArea(parent.currentFullModel.geometryModel.Areas); currentModel.FiniteElements.Add(elem); tempNodes.Clear(); } parent.EndProgress(); parent.ModelCreated(currentModel); Close(); } else { errorMessage1.Visible = true; } }