Example #1
0
        /// <summary>
        /// 查询钻孔编号列表,输出为Borehole类形式
        /// </summary>
        /// <param name="_projectName">项目名称</param>
        /// <returns></returns>
        public static List <Borehole> ReadZkListAsClass(string _projectName)
        {
            // 创建连接到设置信息数据库
            string sql = "Data Source=" + Program.ReadProgramPath() + "\\" + _projectName + ".gsygeo";

            using (SQLiteConnection conn = new SQLiteConnection(sql))
            {
                // 打开连接
                conn.Open();

                // 新建要返回的类列表
                List <Borehole> zklist = new List <Borehole>();

                // 循环读取钻孔数据
                sql = "select * from zkBasicInfo order by name";
                SQLiteDataReader reader = new SQLiteCommand(sql, conn).ExecuteReader();
                while (reader.Read())
                {
                    Borehole zk = new Borehole(reader["name"].ToString(), Convert.ToDouble(reader["altitude"]));
                    zk.X = Convert.ToDouble(reader["xAxis"]);
                    zk.Y = Convert.ToDouble(reader["yAxis"]);
                    zk.InitialWaterLevel = Convert.ToDouble(reader["initialWaterLevel"]);
                    zk.StableWaterLevel  = Convert.ToDouble(reader["stableWaterLevel"]);
                    zk.Layers            = BoreholeDataBase.ReadZkLayer(_projectName, reader["name"].ToString());
                    zk.Samples           = BoreholeDataBase.ReadZkSample(_projectName, reader["name"].ToString());
                    zk.NTests            = BoreholeDataBase.ReadZkNTest(_projectName, reader["name"].ToString());

                    zklist.Add(zk);
                }

                // 返回
                return(zklist);
            }
        }
Example #2
0
        /// <summary>
        /// 计算取样所属分层函数
        /// </summary>
        private void CalcuSampleLayer()
        {
            List <string> zkNumbers = BoreholeDataBase.ReadZkList(Program.currentProject);

            foreach (string zkNumber in zkNumbers)
            {
                List <ZkLayer> layers = BoreholeDataBase.ReadZkLayer(Program.currentProject, zkNumber);
                for (int i = 0; i < dtGAT.Rows.Count; i++)
                {
                    string thisNumber = dtGAT.Rows[i]["zkNumber"].ToString();
                    double thisDepth  = Convert.ToDouble(dtGAT.Rows[i]["sampleDepth"]);
                    if (thisNumber == zkNumber)
                    {
                        for (int j = 0; j < layers.Count; j++)
                        {
                            if (thisDepth <= layers[j].Depth)
                            {
                                dtGAT.Rows[i]["sampleLayer"] = layers[j].Number;
                                break;
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// 钻孔编号输入框内容变化时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ZKNameTextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            tt0.IsOpen = false;
            tt1.IsOpen = false;
            string str = this.ZKNameTextBox.Text;

            if (string.IsNullOrEmpty(str) || string.IsNullOrWhiteSpace(str))
            {
                this.ZKNameTextBox.BorderBrush = Brushes.Red;
                setCanZkName = false;
                tt1.IsOpen   = true;
            }
            else if (BoreholeDataBase.ReadZkList(Program.currentProject).Contains(str) && str != oldZkName)
            {
                this.ZKNameTextBox.BorderBrush = Brushes.Red;
                setCanZkName = false;
                tt0.IsOpen   = true;
            }
            else
            {
                this.ZKNameTextBox.BorderBrush = Brushes.Gray;
                setCanZkName = true;

                // 绘图
                DrawZk();
            }
        }
Example #4
0
        /// <summary>
        /// 方法,重置钻孔列表
        /// </summary>
        /// <param name="_projectName">项目名称</param>
        public void ReSetZkItem(string _projectName)
        {
            treeItem[1].Items.Clear();
            ObservableCollection <TreeViewItem> items = BoreholeDataBase.ReadZkListAsTreeViewItem(_projectName);

            for (int i = 0; i < items.Count; i++)
            {
                treeItem[1].Items.Add(items[i]);
            }
        }
Example #5
0
        /// <summary>
        /// 检查保存数据合法性函数
        /// </summary>
        /// <returns></returns>
        private bool CanSave()
        {
            for (int i = 0; i < dtGAT.Rows.Count; i++)
            {
                for (int j = 0; j < dtGAT.Columns.Count; j++)
                {
                    // 检查取样孔号是否与数据库中匹配
                    if (j == 0)
                    {
                        string zkName = dtGAT.Rows[i][j].ToString();
                        if (!BoreholeDataBase.ReadZkList(Program.currentProject).Contains(zkName))
                        {
                            MessageBox.Show("第" + (i + 1) + "行的取样孔号 " + zkName + " 无法在钻孔数据库中找到,请核实");
                            return(false);
                        }
                    }
                    // 检查取样深度是否为有效数字
                    else if (j == 1)
                    {
                        double num;
                        string dep = dtGAT.Rows[i][j].ToString();
                        if (string.IsNullOrEmpty(dep) || string.IsNullOrWhiteSpace(dep))
                        {
                            MessageBox.Show("第" + (i + 1) + "行的取样深度 " + dep + " 是空值,取样深度不能为空");
                            return(false);
                        }
                        else if (!double.TryParse(dep, out num))
                        {
                            MessageBox.Show("第" + (i + 1) + "行的取样深度 " + dep + " 不是有效数字");
                            return(false);
                        }
                    }
                    // 跳过取样所属分层的检查
                    else if (j == 2)
                    {
                        continue;
                    }
                    // 检查试验数据是否为空
                    else
                    {
                        double num;
                        string data = dtGAT.Rows[i][j].ToString();
                        if (!string.IsNullOrEmpty(data) && !string.IsNullOrWhiteSpace(data) && !double.TryParse(data, out num))
                        {
                            MessageBox.Show("第" + (i + 1) + "行的 " + this.GrainAnalysisTestDataGrid.Columns[j].Header + " " + data + " 不是有效数字");
                            return(false);
                        }
                    }
                }
            }

            return(true);
        }
Example #6
0
        /// <summary>
        /// 读取钻孔数据函数
        /// </summary>
        private void ReadZkList()
        {
            // 读取钻孔数据
            ZkList = BoreholeDataBase.ReadZkListAsClass(Program.currentProject);

            // 赋值ComboBox
            for (int i = 0; i < ZkList.Count; i++)
            {
                CheckBox checkBox = new CheckBox();
                checkBox.Content = ZkList[i].Name;
                this.ZkListBox.Items.Add(checkBox);
            }
        }
Example #7
0
 /// <summary>
 /// 点击"删除此钻孔"
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void DeleteZkButton_Click(object sender, RoutedEventArgs e)
 {
     if (!string.IsNullOrEmpty(oldZkName) && !string.IsNullOrWhiteSpace(oldZkName))
     {
         MessageBoxResult result = MessageBox.Show("您确定要删除 " + oldZkName + " 吗?\n该钻孔的所有资料将被删除,且不可恢复。", "删除钻孔", MessageBoxButton.YesNoCancel, MessageBoxImage.Warning);
         if (result == MessageBoxResult.Yes)
         {
             BoreholeDataBase.RemoveZk(Program.currentProject, oldZkName);
             MainWindow.bind.ReSetZkItem(Program.currentProject);
             this.Visibility = Visibility.Collapsed;
         }
     }
 }
Example #8
0
        /// <summary>
        /// 填充筛选ComboBox函数
        /// </summary>
        private void InitialComboBox()
        {
            List <string> zklist = BoreholeDataBase.ReadZkList(Program.currentProject);

            zklist.Insert(0, "全部钻孔");
            List <string> layerNumberlist = ProjectDataBase.ReadLayerNumberList(Program.currentProject);
            List <string> layerNamelist   = ProjectDataBase.ReadLayerNameList(Program.currentProject);
            List <string> layerlist       = new List <string>();

            for (int i = 0; i < layerNumberlist.Count; i++)
            {
                layerlist.Add(layerNumberlist[i] + "   " + layerNamelist[i]);
            }
            layerlist.Insert(0, "全部分层");
            this.SelectByZkComboBox.ItemsSource      = zklist;
            this.SelectByLayerComboBox.ItemsSource   = layerlist;
            this.SelectByZkComboBox.SelectedIndex    = 0;
            this.SelectByLayerComboBox.SelectedIndex = 0;
        }
Example #9
0
        /// <summary>
        /// 选取分层筛选选框时
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void LayerListComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            // 筛选
            string selectedLayer = this.LayerListComboBox.SelectedItem.ToString();

            selectedLayer = selectedLayer.Substring(0, selectedLayer.IndexOf("   "));
            List <ZkNTest> ntests = BoreholeDataBase.ReadLayerNTest(Program.currentProject, selectedLayer);

            dtND.Clear();
            DataRow dr;

            for (int i = 0; i < ntests.Count; i++)
            {
                dr               = dtND.NewRow();
                dr["zkNumber"]   = ntests[i].ZkNumber;
                dr["nTestDepth"] = ntests[i].Depth.ToString("0.00");
                dr["nTestValue"] = ntests[i].Value.ToString("0");
                dr["nTestType"]  = ntests[i].Type;
                dtND.Rows.Add(dr);
            }
        }
Example #10
0
        /// <summary>
        /// 筛选统计数据
        /// </summary>
        /// <returns></returns>
        public static List <StatisticNTest> SelectStatisticData()
        {
            // 定义统计数据列表
            List <StatisticNTest> statisticList = new List <StatisticNTest>();

            // 定义分层分层编号列表、分层岩土名称列表、试验类型列表
            List <string> layerNumberList = ProjectDataBase.ReadLayerNumberList(Program.currentProject);
            List <string> layerNameList   = ProjectDataBase.ReadLayerNameList(Program.currentProject);

            ZkNTest.ntype[] typeList = new ZkNTest.ntype[] { ZkNTest.ntype.N, ZkNTest.ntype.N10, ZkNTest.ntype.N635, ZkNTest.ntype.N120 };

            // 在分层编号列表中循环,赋值统计数据列表
            for (int i = 0; i < layerNumberList.Count; i++)
            {
                // 在试验类型列表中循环
                for (int j = 0; j < typeList.Length; j++)
                {
                    // 检查当前的分层编号和试验类型的组合下在数据库中是否有内容
                    List <ZkNTest> nTestList = BoreholeDataBase.ReadLayerNTest(Program.currentProject, layerNumberList[i], typeList[j]);
                    if (nTestList.Count > 0)
                    {
                        // 提取符合条件的标贯/动探列表中的试验数据值
                        List <double> dataList = new List <double>();
                        foreach (ZkNTest nTest in nTestList)
                        {
                            dataList.Add(nTest.Value);
                        }

                        // 添加一组符合筛选条件的统计数据
                        StatisticNTest stateNTest = new StatisticNTest(layerNumberList[i], layerNameList[i], typeList[j], dataList, 6);
                        statisticList.Add(stateNTest);
                    }
                }
            }

            // 返回
            return(statisticList);
        }
Example #11
0
        /// <summary>
        /// 初始化项目数据库,创建基本表结构
        /// </summary>
        /// <param name="_projectName">项目名称</param>
        private static void Initial(string _projectName)
        {
            // 创建连接到项目信息数据库
            string sql = "Data Source=" + Program.ReadProgramPath() + "\\" + _projectName + ".gsygeo";

            using (SQLiteConnection conn = new SQLiteConnection(sql))
            {
                // 打开连接
                conn.Open();

                // 新建项目基本信息表projectBasicInfo 设置 项目名称 所在省份 所在县市 为空字符串
                // 表头 项目名称name 所在省份province 所在县市city
                sql = "create table projectBasicInfo(name varchar(255),province varchar(255),city varchar(255))";
                new SQLiteCommand(sql, conn).ExecuteNonQuery();
                sql = "insert into projectBasicInfo(name,province,city) values('','','')";
                new SQLiteCommand(sql, conn).ExecuteNonQuery();

                // 新建项目岩土分层信息表projectLayer
                // 表头 分层编号number 分层名称name 地质年代geo 分层描述description
                sql = "create table projectLayer(number varchar(255),name varchar(255),geo varchar(255),description text)";
                new SQLiteCommand(sql, conn).ExecuteNonQuery();

                // 新建项目公司信息表projectCompany 设置初始空字符串
                // 表头 公司名称companyName 资质代码companyCode 绘图人drawer 报告编写人writer 校核人checker 审查人inspector 核定人approver 批准人finalApprover
                sql = "create table projectCompany(companyName varchar(255),companyCode varchat(255),drawer varchat(255),writer varchat(255),checker varchar(255),inspector varchar(255),approver varchar(255),finalApprover varchar(255))";
                new SQLiteCommand(sql, conn).ExecuteNonQuery();
                sql = "insert into projectCompany(companyName,companyCode,drawer,writer,checker,inspector,approver,finalApprover) values('','','','','','','','')";
                new SQLiteCommand(sql, conn).ExecuteNonQuery();
            }

            // 创建必要数据表
            BoreholeDataBase.Initial(_projectName);
            CPTDataBase.Initial(_projectName);
            RoutineSoilTestDataBase.Initial(_projectName);
            GrainAnalysisTestDataBase.Initial(_projectName);
        }
Example #12
0
        /// <summary>
        /// 单击菜单"工具"-"导入旧版数据"
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ImportOldDataMenu_Click(object sender, RoutedEventArgs e)
        {
            // 检查是否关闭当前项目
            if (Program.currentProject != null)
            {
                MessageBox.Show("您有正处于打开状态的项目,请关闭当前项目后再执行本操作。");
                return;
            }

            // 选择输出目录
            string folderPath;

            System.Windows.Forms.FolderBrowserDialog programPathBrowser = new System.Windows.Forms.FolderBrowserDialog();
            if (programPathBrowser.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                folderPath = programPathBrowser.SelectedPath;
            }
            else
            {
                return;
            }

            if (folderPath.Substring(folderPath.LastIndexOf(@"\") + 1) != "金浪岩土")
            {
                MessageBox.Show("选择的文件夹不正确,请选择\"金浪岩土\"文件夹!");
                return;
            }

            // 耐心等候提示
            MessageBox.Show("导入过程可能需要15-30秒的时间,请耐心等候,点击\"确定\"继续。");

            // 遍历项目文件夹
            List <string> projectlist       = new List <string>();
            List <string> ignoreprojectlist = new List <string>();
            DirectoryInfo dir = new DirectoryInfo(folderPath);

            foreach (DirectoryInfo dChild in dir.GetDirectories("*"))
            {
                // 获取项目名称
                string projectName = dChild.ToString();

                // 获取项目文件夹路径
                string projectPath = folderPath + @"\" + dChild + @"\";

                // 新建项目
                if (!string.IsNullOrEmpty(projectName) && !string.IsNullOrWhiteSpace(projectName))
                {
                    ProjectDataBase.Create(projectName);
                }

                // 读取分层信息
                StreamReader reader    = new StreamReader(projectPath + "基本信息.txt");
                int          countLine = 0;
                while (true)
                {
                    countLine++;
                    string line = reader.ReadLine();
                    if (countLine <= 3)
                    {
                        continue;
                    }
                    if (line == null)
                    {
                        break;
                    }

                    string number = line.Substring(0, line.IndexOf("/"));
                    line = line.Substring(line.IndexOf("/") + 1);
                    string name = line.Substring(0, line.IndexOf("/"));
                    line = line.Substring(line.IndexOf("/") + 1);
                    string description = line;
                    string geo         = "Q4al";
                    ProjectDataBase.AddLayer(projectName, number, name, geo, description);
                }
                reader.Close();

                // 读取钻孔信息
                List <string> numlist = ProjectDataBase.ReadLayerNumberList(projectName);
                List <string> deslist = ProjectDataBase.ReadLayerDescriptionList(projectName);
                DirectoryInfo dirZk   = new DirectoryInfo(projectPath + @"钻孔\");
                foreach (FileInfo dZkFile in dirZk.GetFiles("*.txt"))
                {
                    // 读取基本信息
                    StreamReader zkReader = new StreamReader(projectPath + @"钻孔\" + dZkFile.ToString());
                    zkReader.ReadLine();
                    string zkname = zkReader.ReadLine();
                    zkReader.ReadLine();
                    double zkaltitude = Convert.ToDouble(zkReader.ReadLine());
                    BoreholeDataBase.AddZkBasicInfo(projectName, zkname, zkaltitude, Constants.NullNumber, Constants.NullNumber, Constants.NullNumber, Constants.NullNumber);
                    zkReader.ReadLine();

                    // 读取分层信息
                    List <string> zknumberlist      = new List <string>();
                    List <string> zknamelist        = new List <string>();
                    List <string> zkgeolist         = new List <string>();
                    List <string> zkdescriptionlist = new List <string>();
                    List <double> zkdepthlist       = new List <double>();
                    while (true)
                    {
                        string line = zkReader.ReadLine();
                        if (line == "===取样===")
                        {
                            break;
                        }

                        zknumberlist.Add(line.Substring(0, line.IndexOf("/")));
                        line = line.Substring(line.IndexOf("/") + 1);
                        zknamelist.Add(line.Substring(0, line.IndexOf("/")));
                        line = line.Substring(line.IndexOf("/") + 1);
                        zkdepthlist.Add(Convert.ToDouble(line));
                        zkgeolist.Add("Q4al");
                        int index = numlist.IndexOf(zknumberlist[zknumberlist.Count - 1]);
                        zkdescriptionlist.Add(deslist[index]);
                    }
                    BoreholeDataBase.AddLayerListToZk(projectName, zkname, zknumberlist, zknamelist, zkgeolist, zkdescriptionlist, zkdepthlist);

                    // 读取取样信息
                    List <string> spnumberlist      = new List <string>();
                    List <double> spdepthlist       = new List <double>();
                    List <int>    spisdisturbedlist = new List <int>();
                    countLine = 0;
                    while (true)
                    {
                        string line = zkReader.ReadLine();
                        if (line == "===标贯===")
                        {
                            break;
                        }

                        countLine++;
                        spnumberlist.Add(countLine.ToString());
                        spdepthlist.Add(Convert.ToDouble(line.Substring(0, line.IndexOf("/"))));
                        line = line.Substring(line.IndexOf("/") + 1);
                        spisdisturbedlist.Add(line == "扰" ? 1 : 0);
                    }
                    BoreholeDataBase.AddSampleListToZk(projectName, zkname, spnumberlist, spdepthlist, spisdisturbedlist);

                    // 读取标贯信息
                    List <string> ntnumberlist = new List <string>();
                    List <double> ntdepthlist  = new List <double>();
                    List <double> ntvaluelist  = new List <double>();
                    List <string> nttypelist   = new List <string>();
                    countLine = 0;
                    while (true)
                    {
                        string line = zkReader.ReadLine();
                        if (line == null)
                        {
                            break;
                        }

                        countLine++;
                        ntnumberlist.Add(countLine.ToString());
                        ntdepthlist.Add(Convert.ToDouble(line.Substring(0, line.IndexOf("/"))));
                        line = line.Substring(line.IndexOf("/") + 1);
                        ntvaluelist.Add(Convert.ToDouble(line));
                        nttypelist.Add("N");
                    }
                    BoreholeDataBase.AddNTestListToZk(projectName, zkname, ntnumberlist, ntdepthlist, ntvaluelist, nttypelist);

                    zkReader.Close();
                }

                // 读取静力触探信息
                DirectoryInfo dirJk = new DirectoryInfo(projectPath + @"静力触探\");
                foreach (FileInfo dJkFile in dirJk.GetFiles("*.txt"))
                {
                    // 读取基本信息
                    StreamReader jkReader = new StreamReader(projectPath + @"静力触探\" + dJkFile.ToString());
                    jkReader.ReadLine();
                    string jkname = jkReader.ReadLine();
                    jkReader.ReadLine();
                    double jkaltitude = Convert.ToDouble(jkReader.ReadLine());
                    CPTDataBase.AddJkBasicInfo(projectName, jkname, jkaltitude, Constants.NullNumber, Constants.NullNumber);
                    jkReader.ReadLine();

                    // 读取分层信息
                    List <string> jknumberlist      = new List <string>();
                    List <string> jknamelist        = new List <string>();
                    List <string> jkgeolist         = new List <string>();
                    List <string> jkdescriptionlist = new List <string>();
                    List <double> jkdepthlist       = new List <double>();
                    while (true)
                    {
                        string line = jkReader.ReadLine();
                        if (line == "===Ps值===")
                        {
                            break;
                        }

                        jknumberlist.Add(line.Substring(0, line.IndexOf("/")));
                        line = line.Substring(line.IndexOf("/") + 1);
                        jknamelist.Add(line.Substring(0, line.IndexOf("/")));
                        line = line.Substring(line.IndexOf("/") + 1);
                        jkdepthlist.Add(Convert.ToDouble(line));
                        jkgeolist.Add("Q4al");
                        int index = numlist.IndexOf(jknumberlist[jknumberlist.Count - 1]);
                        jkdescriptionlist.Add(deslist[index]);
                    }
                    CPTDataBase.AddLayerListToJk(projectName, jkname, jknumberlist, jknamelist, jkgeolist, jkdescriptionlist, jkdepthlist);

                    // 读取Ps值信息
                    List <double> pslist = new List <double>();
                    while (true)
                    {
                        string line = jkReader.ReadLine();
                        if (line == null)
                        {
                            break;
                        }

                        pslist.Add(Convert.ToDouble(line));
                    }
                    CPTDataBase.AddPsListToJk(projectName, jkname, pslist);
                }

                // 读取土工试验
                StreamReader           rstReader = new StreamReader(projectPath + @"土工试验\NormalTest.txt");
                List <RoutineSoilTest> rsts      = new List <RoutineSoilTest>();
                while (true)
                {
                    string line = rstReader.ReadLine();
                    if (line == null)
                    {
                        break;
                    }

                    string zkNumber = line.Substring(0, line.IndexOf("/"));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double sampleDepth = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);

                    string         sampleLayer = ProjectDataBase.ReadLayerNumberList(projectName)[0];
                    List <ZkLayer> layers      = BoreholeDataBase.ReadZkLayer(projectName, zkNumber);
                    for (int i = 0; i < layers.Count; i++)
                    {
                        if (sampleDepth <= layers[i].Depth)
                        {
                            sampleLayer = layers[i].Number;
                            break;
                        }
                    }

                    double waterLevel = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double density = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double specificGravity = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double voidRatio = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double saturation = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double liquidLimit = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double plasticLimit = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double plasticIndex = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double liquidityIndex = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double compressibility = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double modulus = Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double frictionAngle = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))) == 0 ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double cohesion = Convert.ToDouble(line.Substring(0, line.IndexOf("/"))) == 0 ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    line = line.Substring(line.IndexOf("/") + 1);
                    double          permeability = line.Substring(0, line.IndexOf("/")) == "0.000000E+000" ? Constants.NullNumber : Convert.ToDouble(line.Substring(0, line.IndexOf("/")));
                    RoutineSoilTest rst          = new RoutineSoilTest(zkNumber, sampleDepth, sampleLayer, waterLevel, density, specificGravity, voidRatio, saturation, liquidLimit, plasticLimit, plasticIndex, liquidityIndex, compressibility, modulus, frictionAngle, cohesion, permeability);
                    rsts.Add(rst);
                }
                rstReader.Close();

                GC.Collect();
                GC.WaitForPendingFinalizers();
                RoutineSoilTestDataBase.Refresh(projectName, rsts);

                projectlist.Add(projectName);
            }

            // 成功提示
            StringBuilder sb = new StringBuilder();

            if (projectlist.Count > 0)
            {
                sb.AppendLine("已成功导入以下项目:");
                for (int i = 0; i < projectlist.Count; i++)
                {
                    sb.AppendLine((i + 1).ToString() + projectlist[i]);
                }
            }
            else
            {
                sb.AppendLine("没有导入任何项目。");
            }
            MessageBox.Show(sb.ToString());
        }
Example #13
0
        // TreeView选择节点变化时激活不同的内容控件
        private void ProjectTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            // 读取选中节点
            TreeViewItem selectedItem = (TreeViewItem)e.NewValue;

            // 根据选中状况清空窗口中的控件
            if (selectedItem == null)
            {
                this.ContectGrid.Children.Clear();
                return;
            }

            if (selectedItem.Header.ToString() != "基本信息" && selectedItem.Parent != null)
            {
                this.ContectGrid.Children.Clear();
            }

            // 选中一级节点时
            // 选中"基本信息"
            if (selectedItem.Header.ToString() == "基本信息")
            {
                ProjectBasicInfo prjb = new ProjectBasicInfo();
                this.ContectGrid.Children.Add(prjb);
            }

            // 选中二级、三级节点时
            if (selectedItem.Parent != null)
            {
                // 读取父节点
                TreeViewItem parentItem = (TreeViewItem)selectedItem.Parent;

                // 选中"钻孔"子节点
                if (parentItem.Header.ToString() == "钻孔")
                {
                    // 读取当前所选钻孔名称
                    string prj    = Program.currentProject;
                    string zkName = selectedItem.Header.ToString();

                    // 实例化一个Borehole类,并将当前所选钻孔的数据库信息赋值给此实例
                    Borehole bh = new Borehole(zkName, BoreholeDataBase.ReadAltitude(prj, zkName));
                    bh.X = BoreholeDataBase.ReadXAxis(prj, zkName);
                    bh.Y = BoreholeDataBase.ReadYAxis(prj, zkName);
                    bh.InitialWaterLevel = BoreholeDataBase.ReadInitialWaterLevel(prj, zkName);
                    bh.StableWaterLevel  = BoreholeDataBase.ReadStableWaterLevel(prj, zkName);
                    bh.Layers            = BoreholeDataBase.ReadZkLayer(prj, zkName);
                    bh.Samples           = BoreholeDataBase.ReadZkSample(prj, zkName);
                    bh.NTests            = BoreholeDataBase.ReadZkNTest(prj, zkName);

                    // 实例化BoreholeControl用户控件,并赋值
                    BoreholeControl bhc = new BoreholeControl(bh);
                    this.ContectGrid.Children.Add(bhc);
                }

                // 选取"原位测试"-"静力触探"子节点
                if (parentItem.Header.ToString() == "静力触探")
                {
                    // 读取当前所选触探孔名称
                    string prj    = Program.currentProject;
                    string jkName = selectedItem.Header.ToString();

                    // 实例化一个CPT类,并将当前所选触探孔的数据库信息赋值给此实例
                    CPT cpt = new CPT(jkName, CPTDataBase.ReadAltitude(prj, jkName));
                    cpt.X      = CPTDataBase.ReadXAxis(prj, jkName);
                    cpt.Y      = CPTDataBase.ReadYAxis(prj, jkName);
                    cpt.Layers = CPTDataBase.ReadJkLayer(prj, jkName);
                    cpt.PsList = CPTDataBase.ReadJkPs(prj, jkName);

                    // 实例化CPTControl用户控件,并赋值
                    CPTControl cptc = new CPTControl(cpt);
                    this.ContectGrid.Children.Add(cptc);
                }

                // 选取"室内试验"-"土工常规"子节点
                if (selectedItem.Header.ToString() == "土工常规")
                {
                    // 实例化一个RoutineSoilTest类列表,并读取数据库信息赋值给此实例
                    List <RoutineSoilTest> rsts = RoutineSoilTestDataBase.ReadAllData(Program.currentProject);

                    // 实例化RoutineSoilTestControl用户控件,并赋值
                    RoutineSoilTestControl rstc = new RoutineSoilTestControl(rsts);
                    this.ContectGrid.Children.Add(rstc);
                }

                // 选取"室内试验"-"颗粒分析"子节点
                if (selectedItem.Header.ToString() == "颗粒分析")
                {
                    // 实例化一个RoutineSoilTest类列表,并读取数据库信息赋值给此实例
                    List <GrainAnalysisTest> gats = GrainAnalysisTestDataBase.ReadAllData(Program.currentProject);

                    // 实例化RoutineSoilTestControl用户控件,并赋值
                    GrainAnalysisTestControl gatc = new GrainAnalysisTestControl(gats);
                    this.ContectGrid.Children.Add(gatc);
                }
            }
        }
Example #14
0
        /// <summary>
        /// 筛选统计数据
        /// </summary>
        /// <returns></returns>
        public static StatisticWordLoad SelectStatisticData()
        {
            // 定义统计数据列表
            StatisticWordLoad statisticData = new StatisticWordLoad();

            // 读取钻孔列表
            List <Borehole> zkList = BoreholeDataBase.ReadZkListAsClass(Program.currentProject);

            // 统计钻孔数量
            int countZk = zkList.Count;

            double countZkDepth = 0;
            int    countUndisturbedSample = 0, countDisturbedSample = 0;
            int    countNTestStandard = 0, countNTestN10 = 0, countNTestN635 = 0, countNTestN120 = 0;

            foreach (Borehole zk in zkList)
            {
                // 统计钻孔进尺
                countZkDepth += zk.Layers[zk.Layers.Count - 1].Depth;

                // 统计原状样、扰动样数量
                foreach (ZkSample sample in zk.Samples)
                {
                    if (sample.IsDisturbed)
                    {
                        countDisturbedSample++;
                    }
                    else
                    {
                        countUndisturbedSample++;
                    }
                }

                // 统计标贯/动探数量
                foreach (ZkNTest ntest in zk.NTests)
                {
                    if (ntest.Type == ZkNTest.ntype.N)
                    {
                        countNTestStandard++;
                    }
                    else if (ntest.Type == ZkNTest.ntype.N10)
                    {
                        countNTestN10++;
                    }
                    else if (ntest.Type == ZkNTest.ntype.N635)
                    {
                        countNTestN635++;
                    }
                    else
                    {
                        countNTestN120++;
                    }
                }
            }

            // 读取土工常规试验列表
            List <RoutineSoilTest> rstList = RoutineSoilTestDataBase.ReadAllData(Program.currentProject);

            // 统计常规试验数量、室内渗透试验数量
            int    countRST = 0, countPermeability = 0;
            double n = -0.19880205;

            foreach (RoutineSoilTest rst in rstList)
            {
                // 统计室内渗透试验
                if (rst.permeability != n)
                {
                    countPermeability++;
                }

                //统计土工常规试验
                if (rst.waterLevel != n ||
                    rst.voidRatio != n ||
                    rst.specificGravity != n ||
                    rst.saturation != n ||
                    rst.plasticLimit != n ||
                    rst.plasticIndex != n ||
                    rst.modulus != n ||
                    rst.liquidLimit != n ||
                    rst.liquidityIndex != n ||
                    rst.frictionAngle != n ||
                    rst.density != n ||
                    rst.compressibility != n ||
                    rst.cohesion != n)
                {
                    countRST++;
                }
            }

            // 读取颗粒分析试验列表
            List <GrainAnalysisTest> gatList = GrainAnalysisTestDataBase.ReadAllData(Program.currentProject);

            // 统计颗分试验数量
            int countGAT = gatList.Count;

            // 读取静力触探列表
            List <CPT> jkList = CPTDataBase.ReadJkListAsClass(Program.currentProject);

            // 统计钻孔数量
            int countJk = jkList.Count;

            // 统计静力触探进尺
            double countJkDepth = 0;

            foreach (CPT jk in jkList)
            {
                countJkDepth += jk.Layers[jk.Layers.Count - 1].Depth;
            }

            // 赋值给统计列表
            statisticData.CountBorehole        = countZk;
            statisticData.CountBoreholePacking = countZk;
            statisticData.Borehole             = countZkDepth;
            statisticData.BoreholePacking      = countZkDepth;
            statisticData.UndisturbedSample    = countUndisturbedSample;
            statisticData.DisturbedSample      = countDisturbedSample;
            statisticData.NTestStandard        = countNTestStandard;
            statisticData.NTestN10             = countNTestN10;
            statisticData.NTestN635            = countNTestN635;
            statisticData.NTestN120            = countNTestN120;
            statisticData.CountCPT             = countJk;
            statisticData.CPT          = countJkDepth;
            statisticData.RST          = countRST;
            statisticData.Permeability = countPermeability;
            statisticData.GAT          = countGAT;

            // 返回
            return(statisticData);
        }
Example #15
0
        /// <summary>
        /// Save命令的Executed事件处理函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void CommandBindingSave_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            // 提取钻孔基本信息参数
            string zkName     = this.ZKNameTextBox.Text;
            double zkAltitude = Convert.ToDouble(this.ZKAltitudeTextBox.Text);
            double zkAxisX    = !string.IsNullOrEmpty(this.AxisXTextBox.Text) && !string.IsNullOrWhiteSpace(this.AxisXTextBox.Text) ? Convert.ToDouble(this.AxisXTextBox.Text) : -0.19880205;
            double zkAxisY    = !string.IsNullOrEmpty(this.AxisYTextBox.Text) && !string.IsNullOrWhiteSpace(this.AxisYTextBox.Text) ? Convert.ToDouble(this.AxisYTextBox.Text) : -0.19880205;
            double zkIniWL    = !string.IsNullOrEmpty(this.InitialWaterLevelTextBox.Text) && !string.IsNullOrWhiteSpace(this.InitialWaterLevelTextBox.Text) ? Convert.ToDouble(this.InitialWaterLevelTextBox.Text) : -0.19880205;
            double zkStaWL    = !string.IsNullOrEmpty(this.StableWaterLevelTextBox.Text) && !string.IsNullOrWhiteSpace(this.StableWaterLevelTextBox.Text) ? Convert.ToDouble(this.StableWaterLevelTextBox.Text) : -0.19880205;

            // 提取钻孔分层参数
            List <string> zkLayerNumberList      = new List <string>();
            List <string> zkLayerNameList        = new List <string>();
            List <string> zkLayerGeoList         = new List <string>();
            List <double> zkLayerDepthList       = new List <double>();
            List <string> zkLayerDescriptionList = new List <string>();

            for (int i = 0; i < dtLayer.Rows.Count; i++)
            {
                zkLayerNumberList.Add((string)dtLayer.Rows[i][0]);
                zkLayerNameList.Add((string)dtLayer.Rows[i][1]);
                zkLayerGeoList.Add((string)dtLayer.Rows[i][2]);
                zkLayerDepthList.Add((double)dtLayer.Rows[i][3]);
                zkLayerDescriptionList.Add((string)dtLayer.Rows[i][4]);
            }

            // 提取钻孔取样参数
            List <string> zkSampleNumberList      = new List <string>();
            List <double> zkSampleDepthList       = new List <double>();
            List <int>    zkSampleIsDisturbedList = new List <int>();

            for (int i = 0; i < dtSample.Rows.Count; i++)
            {
                zkSampleNumberList.Add((string)dtSample.Rows[i][0]);
                zkSampleDepthList.Add((double)dtSample.Rows[i][1]);
                zkSampleIsDisturbedList.Add((bool)dtSample.Rows[i][2] == true ? 1 : 0);
            }

            // 提取钻孔标贯/动探参数
            List <string> zkNTestNumberList = new List <string>();
            List <double> zkNTestDepthList  = new List <double>();
            List <double> zkNTestValueList  = new List <double>();
            List <string> zkNTestTypeList   = new List <string>();

            for (int i = 0; i < dtNTest.Rows.Count; i++)
            {
                zkNTestNumberList.Add((string)dtNTest.Rows[i][0]);
                zkNTestDepthList.Add((double)dtNTest.Rows[i][1]);
                zkNTestValueList.Add((double)dtNTest.Rows[i][2]);
                string s;
                if ((ZkNTest.ntype)dtNTest.Rows[i][3] == ZkNTest.ntype.N)
                {
                    s = "N";
                }
                else if ((ZkNTest.ntype)dtNTest.Rows[i][3] == ZkNTest.ntype.N10)
                {
                    s = "N10";
                }
                else if ((ZkNTest.ntype)dtNTest.Rows[i][3] == ZkNTest.ntype.N635)
                {
                    s = "N635";
                }
                else
                {
                    s = "N120";
                }
                zkNTestTypeList.Add(s);
            }

            // 保存钻孔到数据库
            if (isNewZk == false)
            {
                BoreholeDataBase.RemoveZk(Program.currentProject, oldZkName);
            }
            BoreholeDataBase.AddZkBasicInfo(Program.currentProject, zkName, zkAltitude, zkAxisX, zkAxisY, zkIniWL, zkStaWL);
            BoreholeDataBase.AddLayerListToZk(Program.currentProject, zkName, zkLayerNumberList, zkLayerNameList, zkLayerGeoList, zkLayerDescriptionList, zkLayerDepthList);
            BoreholeDataBase.AddSampleListToZk(Program.currentProject, zkName, zkSampleNumberList, zkSampleDepthList, zkSampleIsDisturbedList);
            BoreholeDataBase.AddNTestListToZk(Program.currentProject, zkName, zkNTestNumberList, zkNTestDepthList, zkNTestValueList, zkNTestTypeList);

            // 更新导航树
            MainWindow.bind.ReSetZkItem(Program.currentProject);

            // 更新状态标签
            this.IsChangedTextBlock.Text       = "已保存";
            this.IsChangedTextBlock.Foreground = Brushes.Blue;
            MessageBox.Show("保存成功!");
            this.Visibility = Visibility.Collapsed;
        }