//厚土层智能分解(基底以下) private void get_intelligentlayering(ObservableCollection <Soilinformation> items) { decimal flag = 0.25m;//划分厚度 用户可自定义 //循环直到没有厚度大于1m的土层 for (int i = 0; i < soilinformationsItems.Count; i++) { if (Convert.ToDecimal(soilinformationsItems[i].SoilThickness) > flag) { int a = 0; //单层划分计数器 decimal b = Convert.ToDecimal(soilinformationsItems[i].SoilThickness); do //进行do循环,当b>=flag时跳出循环 { b -= flag; a += 1; }while (b > flag); Soilinformation intelligentlayer_1 = new Soilinformation { SoilThickness = Convert.ToString(flag), SoilUnitWeight = soilinformationsItems[i].SoilUnitWeight, Haswater = soilinformationsItems[i].Haswater, Voidratio0kPa = soilinformationsItems[i].Voidratio0kPa, Voidratio50kPa = soilinformationsItems[i].Voidratio50kPa, Voidratio100kPa = soilinformationsItems[i].Voidratio100kPa, Voidratio200kPa = soilinformationsItems[i].Voidratio200kPa, Voidratio300kPa = soilinformationsItems[i].Voidratio300kPa, Voidratio400kPa = soilinformationsItems[i].Voidratio400kPa }; Soilinformation intelligentlayer_2 = new Soilinformation { SoilThickness = Convert.ToString(b), SoilUnitWeight = soilinformationsItems[i].SoilUnitWeight, Haswater = soilinformationsItems[i].Haswater, Voidratio0kPa = soilinformationsItems[i].Voidratio0kPa, Voidratio50kPa = soilinformationsItems[i].Voidratio50kPa, Voidratio100kPa = soilinformationsItems[i].Voidratio100kPa, Voidratio200kPa = soilinformationsItems[i].Voidratio200kPa, Voidratio300kPa = soilinformationsItems[i].Voidratio300kPa, Voidratio400kPa = soilinformationsItems[i].Voidratio400kPa }; for (int c = 0; c < a; c++) { soilinformationsItems.Insert(i, intelligentlayer_1); } soilinformationsItems.Insert(i + a, intelligentlayer_2); //移除被分解土层 soilinformationsItems.Remove(soilinformationsItems[i + a + 1]); } } }
//添加空白行方法 private void AddRow1() { Soilinformation soilinformation = new Soilinformation(); soilinformation.SoilThickness = ""; soilinformation.SoilUnitWeight = ""; soilinformation.Haswater = 0;//默认均不含地下水影响 soilinformation.Voidratio0kPa = ""; soilinformation.Voidratio50kPa = ""; soilinformation.Voidratio100kPa = ""; soilinformation.Voidratio200kPa = ""; soilinformation.Voidratio300kPa = ""; soilinformation.Voidratio400kPa = ""; soilinformationsItems.Add(soilinformation); }
//1st处理用户输入数据 private void data_processing1st() { int index = get_baseindex(soilinformationsItems); //基底所在土层 double distance = get_distance(soilinformationsItems); //基底距离下一土层厚度 List <double> list_layer = get_soillayerlist(soilinformationsItems); //用户输入的土层信息表 //根据埋深Depth重新划分土层 //基底上部的一层土层 Soilinformation upbase_soilinformation = new Soilinformation(); upbase_soilinformation.SoilThickness = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].SoilThickness) - distance); upbase_soilinformation.SoilUnitWeight = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].SoilUnitWeight)); upbase_soilinformation.Haswater = 0; upbase_soilinformation.Voidratio0kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio0kPa)); upbase_soilinformation.Voidratio50kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio50kPa)); upbase_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio100kPa)); upbase_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio200kPa)); upbase_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio300kPa)); upbase_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio400kPa)); soilinformationsItems.Insert(index, upbase_soilinformation);//将上半层插入index处,被分解土层移到index+1位置 //基础下部土层(为0时基底位于土层处) Soilinformation downbase_soilinformation = new Soilinformation(); downbase_soilinformation.SoilThickness = Convert.ToString(distance); downbase_soilinformation.SoilUnitWeight = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].SoilUnitWeight)); downbase_soilinformation.Haswater = 0; downbase_soilinformation.Voidratio0kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio0kPa)); downbase_soilinformation.Voidratio50kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio50kPa)); downbase_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio100kPa)); downbase_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio200kPa)); downbase_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio300kPa)); downbase_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index].Voidratio400kPa)); soilinformationsItems.Insert(index + 1, downbase_soilinformation); //将下半层插入index+1处,被分解土层移动到index+2位置 soilinformationsItems.RemoveAt(index + 2); //移除被分解的土层 List <double> list_updownlayer = get_baselayerlist(soilinformationsItems); //对划分的第一个列表提取深度 //移除厚度为0的土层 for (int i = 0; i < soilinformationsItems.Count; i++) { if (Convert.ToDouble(soilinformationsItems[i].SoilThickness) == 0) { soilinformationsItems.Remove(soilinformationsItems[i]); i--;//很重要!! } } if (UndergroudWater < 0 || checkbox_undergroundwater.IsChecked == false)//土层完全不含水,不用再考虑含水层条件 { //土壤的haswater全是0 for (int i = 0; i < soilinformationsItems.Count; i++) { soilinformationsItems[i].Haswater = 0; } } else//土层含水,需要加入含水层进行计算 { int index_water = get_waterindex(soilinformationsItems);//地下水底面所在土层 double distance_water = get_waterdistance(soilinformationsItems); //地下水底面距离下一层土的厚度 if (UndergroudWater == 0) //地下水底位于第一层土上部,下面所有土的haswater全是10 { for (int i = 0; i < soilinformationsItems.Count; i++) { soilinformationsItems[i].Haswater = 10; } } else//地下水埋深大于0,需要重新加入含水层进行划分 { //重新定位与划分含水层 //含水层上部分haswater属性均设置为0 for (int i = 0; i < index_water; i++) { soilinformationsItems[i].Haswater = 0; } //含水层上部土层 Soilinformation upwater_soilinformation = new Soilinformation(); upwater_soilinformation.SoilThickness = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].SoilThickness) - distance_water); upwater_soilinformation.SoilUnitWeight = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].SoilUnitWeight)); upwater_soilinformation.Haswater = 0; upwater_soilinformation.Voidratio0kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio0kPa)); upwater_soilinformation.Voidratio50kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio50kPa)); upwater_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio100kPa)); upwater_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio200kPa)); upwater_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio300kPa)); upwater_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio400kPa)); soilinformationsItems.Insert(index_water, upwater_soilinformation);//上半层插入index_water处,被分解土层移动到index+1位置 //含水层下部土层 Soilinformation downwater_soilinformation = new Soilinformation(); downwater_soilinformation.SoilThickness = Convert.ToString(distance_water); downwater_soilinformation.SoilUnitWeight = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].SoilUnitWeight)); downwater_soilinformation.Haswater = 10; //地下水位下方土层均为10 downwater_soilinformation.Voidratio0kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio0kPa)); downwater_soilinformation.Voidratio50kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio50kPa)); downwater_soilinformation.Voidratio100kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio100kPa)); downwater_soilinformation.Voidratio200kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio200kPa)); downwater_soilinformation.Voidratio300kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio300kPa)); downwater_soilinformation.Voidratio400kPa = Convert.ToString(Convert.ToDouble(soilinformationsItems[index_water].Voidratio400kPa)); soilinformationsItems.Insert(index_water + 1, downwater_soilinformation); //下半层插入index_water+1处,被分解土层移动到index+2位置 soilinformationsItems.RemoveAt(index_water + 2); //移除被分解的含水土层 //地下水位线以下haswater属性均设置为10 for (int i = index_water + 1; i < soilinformationsItems.Count; i++) { soilinformationsItems[i].Haswater = 10; } //移除厚度为0的土层 for (int i = 0; i < soilinformationsItems.Count; i++) { if (Convert.ToDouble(soilinformationsItems[i].SoilThickness) == 0) { soilinformationsItems.Remove(soilinformationsItems[i]); i--;//很重要!! } } } } }
//添加书上例题 private void Addtest() { //初始化界面 foundation_width.Text = Convert.ToString(4); foundation_length.Text = Convert.ToString(4); load.Text = Convert.ToString(100); depth.Text = Convert.ToString(2); undergroudwater.Text = Convert.ToString(0); Soilinformation a = new Soilinformation { SoilThickness = "2", SoilUnitWeight = "16", Haswater = 0, Voidratio0kPa = "0.8", Voidratio50kPa = "0.78", Voidratio100kPa = "0.76", Voidratio200kPa = "0.74", Voidratio300kPa = "0.72", Voidratio400kPa = "0.7" }; Soilinformation b = new Soilinformation { SoilThickness = "5", SoilUnitWeight = "16", Haswater = 0, Voidratio0kPa = "0.7", Voidratio50kPa = "0.66", Voidratio100kPa = "0.62", Voidratio200kPa = "0.58", Voidratio300kPa = "0.54", Voidratio400kPa = "0.5" }; //土样4-1 Soilinformation c = new Soilinformation { SoilThickness = "3", SoilUnitWeight = "19.5", Haswater = 0, Voidratio0kPa = "1.13", Voidratio50kPa = "0.8", Voidratio100kPa = "0.771", Voidratio200kPa = "0.728", Voidratio300kPa = "0.71", Voidratio400kPa = "0.708" }; //土样4-2 Soilinformation d = new Soilinformation { SoilThickness = "6", SoilUnitWeight = "20.1", Haswater = 0, Voidratio0kPa = "1.2", Voidratio50kPa = "0.81", Voidratio100kPa = "0.771", Voidratio200kPa = "0.728", Voidratio300kPa = "0.71", Voidratio400kPa = "0.708" }; soilinformationsItems.Add(c); soilinformationsItems.Add(d); soilinformationsItems.Add(b); soilinformationsItems.Add(a); soilinformationsItems.Add(c); soilinformationsItems.Add(a); soilinformationsItems.Add(c); soilinformationsItems.Add(d); soilinformationsItems.Add(b); }