//Form callingForm) public Form_BlockNameAndCorrdinate(Form callingForm,Class_BlockSect IX,Dictionary<string,int> DIX) { //修改Block II = IX; RDExamMainForm = callingForm as Form_RDExamProgress ; DI = DIX; InitializeComponent(); }
//public Class_Block_Interface(double 混凝土方塊與方塊摩擦係數值, double 混凝土方塊與拋石摩擦係數值, double 場注土方塊與拋石摩擦係數值, double 拋石與拋石摩擦係數值, double 混凝土陸上單位體積重量值, double 混凝土水中單位體積重量值, double 拋石陸上單位體積重量值, double 拋石水中單位體積重量值, double 砂土水中單位體積重量值, double 海水單位體積重量值,double 單位體積重量) //{ // //_混凝土方塊與方塊摩擦係數 = 混凝土方塊與方塊摩擦係數值; // //_混凝土方塊與拋石摩擦係數 = 混凝土方塊與拋石摩擦係數值; // //_場注土方塊與拋石摩擦係數 = 場注土方塊與拋石摩擦係數值; // //_拋石與拋石摩擦係數 = 拋石與拋石摩擦係數值; // //_混凝土陸上單位體積重量 = 混凝土陸上單位體積重量值; // //_混凝土水中單位體積重量 = 混凝土水中單位體積重量值; // //_拋石陸上單位體積重量 = 拋石陸上單位體積重量值; // //_拋石水中單位體積重量 = 拋石水中單位體積重量值; // //_砂土水中單位體積重量 = 砂土水中單位體積重量值; // //_海水單位體積重量 = 海水單位體積重量值; // _單位體積重量 = 單位體積重量; //} public Class_Block_Interface(Class_BlockSect M) { //_混凝土方塊與方塊摩擦係數 = M.混凝土方塊與方塊摩擦係數; //_混凝土方塊與拋石摩擦係數 = M.混凝土方塊與拋石摩擦係數; //_場注土方塊與拋石摩擦係數 = M.場注土方塊與拋石摩擦係數; //_拋石與拋石摩擦係數 = M.拋石與拋石摩擦係數; //_混凝土陸上單位體積重量 = M.混凝土陸上單位體積重量; //_混凝土水中單位體積重量 = M.混凝土水中單位體積重量; //_拋石陸上單位體積重量 = M.拋石陸上單位體積重量; //_拋石水中單位體積重量 = M.拋石水中單位體積重量; //_砂土水中單位體積重量 = M.砂土水中單位體積重量; //_海水單位體積重量 = M.海水單位體積重量; _單位體積重量 = M.單位體積重量; _使用材質 = M.使用材質; _計算Moment與否 = M.計算Moment與否; }
private void 開啟舊的專案檔ToolStripMenuItem_Click(object sender, EventArgs e) { //只打開座標點位. if (OFD_專案.ShowDialog() == DialogResult.OK) { Class_BlockSect[] BlockMainArrayR = new Class_BlockSect[] { }; int blockSizer = 0; XmlDocument doc = new XmlDocument(); doc.Load(OFD_專案.FileName); bool 成功與否 = false; try { XmlNodeList blockNodeCollection = doc.SelectNodes("Root/Blocks/形塊"); foreach (XmlNode BlockNode in blockNodeCollection) { Array.Resize(ref BlockMainArrayR, blockSizer + 1); //RNode = BlockNode.SelectSingleNode("名稱"); //if (object.Equals(RNode, null)) //{ // return "讀取Block的名稱失敗"; //} int PointCount; double[] getx = new double[] { }; double[] gety = new double[] { }; int getPointsize = 0; Relement = (XmlElement)BlockNode; BlockMainArrayR[blockSizer] = new Class_BlockSect(); BlockMainArrayR[blockSizer].名稱 = Relement.GetAttribute("名稱").ToString(); if (!int.TryParse(Relement.GetAttribute("點數").ToString(), out PointCount)) { MessageBox.Show("Block讀取失敗!點數欄位無法讀取"); return; } BlockMainArrayR[blockSizer].座標點數 = PointCount; double ftest; bool btest; //Block單位體積重量 RNode = BlockNode.SelectSingleNode("單位體積重量"); if (object.Equals(RNode, null)) { MessageBox.Show("Block讀取單位體積重量失敗!"); } Relement = (XmlElement)RNode; if (!double.TryParse(Relement.GetAttribute("Value"), out ftest)) { MessageBox.Show("Block讀取單位體積重量失敗!"); } BlockMainArrayR[blockSizer].單位體積重量 = ftest; //計算Moment與否. RNode = BlockNode.SelectSingleNode("計算Moment"); if (object.Equals(RNode, null)) { MessageBox.Show("Block讀取計算Moment狀況失敗!"); } Relement = (XmlElement)RNode; if (!bool.TryParse(Relement.GetAttribute("Value"), out btest)) { MessageBox.Show("Block讀取計算Moment狀況失敗!"); } BlockMainArrayR[blockSizer].計算Moment與否 = btest; //Block使用材質 RNode = BlockNode.SelectSingleNode("使用材質"); if (object.Equals(RNode, null)) { MessageBox.Show("Block讀取Block使用材質失敗!!"); } Relement = (XmlElement)RNode; /* if (Relement.GetAttribute("Value").ToString() != "") { if (!DDR.ContainsKey(Relement.GetAttribute("Value").ToString())) { MessageBox.Show("Block讀取Block使用材質失敗!!"; } else { //Nothing. } }*/ BlockMainArrayR[blockSizer].使用材質 = Relement.GetAttribute("Value"); string[] GetRE = new string[] { }; XmlNodeList Block周圍參考材質 = BlockNode.SelectNodes("周圍參考材質"); if (!object.Equals(Block周圍參考材質, null)) { foreach (XmlNode MD in Block周圍參考材質) { Relement = (XmlElement)MD; /* if (!DDR.ContainsKey(Relement.GetAttribute("Value").ToString())) { return "Block讀取周圍參考材質"; } */ Array.Resize(ref GetRE, GetRE.GetLength(0) + 1); GetRE[GetRE.GetUpperBound(0)] = Relement.GetAttribute("Value"); } } BlockMainArrayR[blockSizer].周圍參考材質 = GetRE; XmlNodeList CoordinateCollection = BlockNode.SelectNodes("BlockCoordinate"); if (object.Equals(CoordinateCollection, null)) { MessageBox.Show("Block讀取座標失敗"); } foreach (XmlNode CN in CoordinateCollection) { Relement = (XmlElement)CN; Array.Resize(ref getx, getPointsize + 1); Array.Resize(ref gety, getPointsize + 1); if (!double.TryParse(Relement.GetAttribute("xValue"), out ftest)) { MessageBox.Show("Block讀取座標時無法順利從'xValue'欄位轉換座標值"); } getx[getPointsize] = ftest; if (!double.TryParse(Relement.GetAttribute("yValue"), out ftest)) { MessageBox.Show("Block讀取座標時無法順利從'yValue'欄位轉換座標值"); } gety[getPointsize] = ftest; getPointsize += 1; } if (!(getPointsize == PointCount)) { MessageBox.Show("Block讀取座標點數量不一致!"); } BlockMainArrayR[blockSizer].X = getx; BlockMainArrayR[blockSizer].Y = gety; blockSizer += 1; } RNode = doc.SelectSingleNode("Root/Blocks/選取Block序號"); if (object.Equals(RNode, null)) { MessageBox.Show("讀取Block選取序號時失敗"); } int itest; Relement = (XmlElement)RNode; if (!int.TryParse(Relement.GetAttribute("Value"), out itest)) { MessageBox.Show("轉換Block選取序號時失敗"); } int selectedBlockIndex = itest; if (selectedBlockIndex > BlockMainArrayR.GetUpperBound(0)) { MessageBox.Show("Block選取序號超過檔案內紀錄的Block數量!"); } //檢核區塊. 成功與否 = true; } catch { //MessageBox.Show("出現錯誤!"); } Form_BlockNameAndCorrdinate p = new Form_BlockNameAndCorrdinate(); for (int i = 0; i < BlockMainArrayR.GetLength(0); i++) { if (!p.CheckIsConvexPolygonAndCounterClockWise(BlockMainArrayR[i].X, BlockMainArrayR[i].Y)) { //若排列順序非逆時針. MessageBox.Show("Block" + (i + 1).ToString() + "(從1開始)的座標矩陣錯誤,此Block非凸邊形且座標沒有依照逆時針方向紀錄!!"); } } BlockMainArray = BlockMainArrayR; //加入行塊資訊. for (int i = 0; i < BlockMainArray.GetLength(0); i++) { BlockMainArray[i] = BlockMainArrayR[i]; } toolStripStatusLabel1.Text = "開啟完成,取得" + BlockMainArray.GetLength(0).ToString() + "個區塊"; //***** //填入資訊. data_BlockTempShow.Rows.Clear(); DataGridViewRowCollection rows = data_BlockTempShow.Rows; for(int i=0;i<BlockMainArray.GetLength(0);i++) { //序號, 形塊名稱, 單位體積重量, 周圍參考材質, 使用材質. string temp = ""; for(int i2=0;i2<BlockMainArray[i].周圍參考材質.GetLength(0);i2++) { temp += (BlockMainArray[i].周圍參考材質[i2]); if(i2!=(BlockMainArray[i].周圍參考材質.GetUpperBound(0))) { temp += ","; } } rows.Add(new object[] { (i + 1).ToString(), BlockMainArray[i].名稱, BlockMainArray[i].單位體積重量, temp, BlockMainArray[i].使用材質 }); } if(成功與否) { MessageBox.Show("成功載入"); } else { MessageBox.Show("載入失敗"); } //****************** } }
private void btn_OK_Click(object sender, EventArgs e) { //將變數傳回. int 點數 = dataGridView1.Rows.Count; double[] xout = new double[] { }; double[] yout = new double[] { }; double xtest; double ytest; //Array.Resize(ref xout, 點數); //Array.Resize(ref yout, 點數); //string ss = ""; for (int i=0;i<點數;i++) { double.TryParse(dataGridView1.Rows[i].Cells[0].Value.ToString(), out xtest); double.TryParse(dataGridView1.Rows[i].Cells[1].Value.ToString(), out ytest); if(i==點數-1 && xtest==xout[0] && ytest==yout[0]) { break; } Array.Resize(ref xout, i + 1); Array.Resize(ref yout, i + 1); xout[i] = xtest; yout[i] = ytest; //ss = ss + ("X = " + xout[i].ToString() + " , " + yout[i].ToString()); } //檢查是否為凸邊形,且點位順序為逆時針. //不符合時,跳出警訊. if(!CheckIsConvexPolygonAndCounterClockWise(xout,yout)) { //失敗. MessageBox.Show("注意,您所輸入的Polygon形狀限定為凸邊形且點位順序應為逆時針!!","Polygon設定失敗",MessageBoxButtons.OK,MessageBoxIcon.Error); return; } //MessageBox.Show(ss); II = new Class_BlockSect(); II.名稱 = nowname;// textBox_NameInput.Text; II.X = xout; II.Y = yout; II.座標點數 = xout.GetUpperBound(0) + 1; RDExamMainForm.BlockObj = II; this.Close(); }