using System; using System.Collections; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Engine; using GeoScene.Globe; namespace Cyberpipe { public partial class FrmShResult : Office2007Form { public string layername; private GSOGlobeControl globleControl1; int count=0; GSOFeature hlfeature = null; List<string> m_PipelineLayerNames = new List<string>(); MainFrm mainfrm; public FrmShResult(string _layername, GSOGlobeControl _globleControl1, List<string> _PipelineLayerNames) { layername = _layername; globleControl1 = _globleControl1; m_PipelineLayerNames = _PipelineLayerNames; InitializeComponent(); } void addDataToDataGridView(List<ClassDataTableParam> dt, DataGridView dataGridVeiw) { for (int i = 0; i < dt.Count; i++) { int id = dataGridVeiw.Rows.Add(); dataGridVeiw.Rows[id].Cells[0].Value = dt[i].selectedFeatureCaption; dataGridVeiw.Rows[id].Cells[1].Value = dt[i].selectedFeatureName; dataGridVeiw.Rows[id].Cells[2].Value = dt[i].targetFeatureCaption; dataGridVeiw.Rows[id].Cells[3].Value = dt[i].targetFeatureName; dataGridVeiw.Rows[id].Cells[4].Value = dt[i].resultDis; dataGridVeiw.Rows[id].Cells[5].Value = dt[i].dis; } } public void analysis() { mainfrm = (MainFrm)Owner; List<ClassDataTableParam> dtV = new List<ClassDataTableParam>(); List<ClassDataTableParam> dtH = new List<ClassDataTableParam>(); GSOLayer layer = globleControl1.Globe.Layers.GetLayerByCaption(layername);//审核图层 if (layer == null) return; GSOFeatures feats = layer.GetAllFeatures(); if (feats == null) return; for (int i = 0; i < feats.Length; i++) { ClassYJSHAlgorithm.distanceAnalysis(feats[i], m_PipelineLayerNames, globleControl1,out dtV, out dtH); addDataToDataGridView(dtH, dgridShHResult); addDataToDataGridView(dtV, dgridShVResult); } mainfrm.shresultLists = initMainfrmShList(); recordHistory(dgridShVResult,"V"); recordHistory(dgridShHResult,"H"); } private ArrayList initMainfrmShList() { List<string> m_vqLayer = new List<string>(); List<string> m_hqLayer = new List<string>(); ArrayList shresultLists = new ArrayList(); for (int i = 0; i < dgridShVResult.RowCount; i++) { if (m_vqLayer.Contains(dgridShVResult.Rows[i].Cells[1].Value.ToString())) continue; m_vqLayer.Add(dgridShVResult.Rows[i].Cells[1].Value.ToString()); shresultLists.Add(new ShResult(dgridShVResult.Rows[i].Cells[1].Value.ToString(), "垂直净距不符合要求")); } for (int i = 0; i < dgridShHResult.RowCount; i++) { if (m_hqLayer.Contains(dgridShHResult.Rows[i].Cells[1].Value.ToString())) continue; m_hqLayer.Add(dgridShHResult.Rows[i].Cells[1].Value.ToString()); shresultLists.Add(new ShResult(dgridShHResult.Rows[i].Cells[1].Value.ToString(), "水平净距不符合要求")); } return shresultLists; } private void recordHistory(DataGridView datagridview,string type) { String sql = ""; string now = DateTime.Now.ToString("yyyy-MM-dd"); if (datagridview.Rows.Count > 0) { for (int i = 0; i < datagridview.Rows.Count; i++) { sql = "insert into casic_audit_result(SH_LAYER,SH_NO,WT_LAYER,WT_NO,DISTANCE," + "KIND,SH_STAFF,SH_TIME) values('" + datagridview.Rows[i].Cells[0].Value + "','" + datagridview.Rows[i].Cells[1].Value + "','" + datagridview.Rows[i].Cells[2].Value + "','" + datagridview.Rows[i].Cells[3].Value + "','" + datagridview.Rows[i].Cells[4].Value + "','" + type + "','" + Utility.userName + "'," + "to_date('" + now + "','yyyy-MM-dd'))"; OledbHelper.sqlExecuteNonQuery(sql); } } } /// <summary> /// 双击后围绕问题对象旋转 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgridShVResult_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != -1) { GSOLayer gsoLayer = globleControl1.Globe.Layers.GetLayerByCaption( dgridShVResult.Rows[e.RowIndex].Cells[0].Value.ToString()); GSOFeatures gsoFeatures = gsoLayer.GetFeatureByName( dgridShVResult.Rows[e.RowIndex].Cells[1].Value.ToString(), false); ClassSearchAnalysis.AddMakerToLineFeature(globleControl1, gsoFeatures[0]); highlight(gsoFeatures[0]); } } /// <summary> /// 双击后围绕问题对象旋转 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void dgridShHResult_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex != -1) { GSOLayer gsoLayer = globleControl1.Globe.Layers.GetLayerByCaption( dgridShHResult.Rows[e.RowIndex].Cells[0].Value.ToString()); GSOFeatures gsoFeatures = gsoLayer.GetFeatureByName( dgridShHResult.Rows[e.RowIndex].Cells[1].Value.ToString(), false); ClassSearchAnalysis.AddMakerToLineFeature(globleControl1, gsoFeatures[0]); highlight(gsoFeatures[0]); } } public void highlight(GSOFeature feature) { hlfeature = feature; timer1.Start(); } /// <summary> /// 使用timer实现管线的闪烁效果 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void timer1_Tick(object sender, EventArgs e) { GSOFeature rowFeature = hlfeature; if (rowFeature == null) return; if (count >= 40) { timer1.Stop(); rowFeature.HighLight = false; count = 0; } else { count++; if (count%2 != 0) { rowFeature.HighLight = true; globleControl1.Refresh(); } else { rowFeature.HighLight = false; globleControl1.Refresh(); } } } private void FrmShResult_FormClosed(object sender, FormClosedEventArgs e) { mainfrm.boolfrmShResult = false; globleControl1.Globe.MemoryLayer.RemoveAllFeature(); timer1.Stop(); } /// <summary> /// 一键审核导出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonExp1_Click(object sender, EventArgs e) { if (dgridShHResult.Rows.Count <= 0 && dgridShVResult.Rows.Count <= 0) { MessageBox.Show("表格内容为空!", "提示"); return; } string strSaveFile = string.Empty; SaveFileDialog savefiledialog = new SaveFileDialog(); savefiledialog.Filter = "Excel文件|*.xls,*.xlsx"; savefiledialog.AddExtension = true; savefiledialog.FileName = "一键审核" + DateTime.Now.ToString("yyyyMMdd") + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second; if (savefiledialog.ShowDialog() != DialogResult.OK) return; else strSaveFile = savefiledialog.FileName; ExpEXCEL.ExpToExcel(dgridShHResult, dgridShVResult, strSaveFile); MessageBox.Show("导出成功!"); } } }