using System; using System.Drawing; using System.IO; using System.Text.RegularExpressions; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Engine; using GeoScene.Globe; namespace WorldGIS.HTForms { public partial class FrmPipelineModelDB : Office2007Form { private GSOGlobeControl ctl; GSODataSource datasource; public GSOLayer rukuLayer; public FrmPipelineModelDB(GSOGlobeControl _ctl) { ctl = _ctl; InitializeComponent(); } /// <summary> /// 窗体初始化事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmPipelineModel_Load(object sender, EventArgs e) { comboBoxDataSourceList.Items.Clear(); foreach (DatabaseConnectParams connectParams in Utility.connectParamsOfDatabase) { if (connectParams != null && (connectParams.databaseType == EnumDataSourceType.SqlServer || connectParams.databaseType == EnumDataSourceType.Oracle)) comboBoxDataSourceList.Items.Add(connectParams.dataSourceFullName); } comboBoxExLayer.Items.Clear(); for (int i = 0; i < ctl.Globe.Layers.Count; i++) { GSOLayer layer = ctl.Globe.Layers[i]; if (Path.GetExtension(layer.Name).ToLower() == ".shp") comboBoxExLayer.Items.Add(layer.Caption); } pipelineTypeCbo.Items.Add("雨水"); pipelineTypeCbo.Items.Add("污水"); pipelineTypeCbo.Items.Add("雨污合流"); pipelineTypeCbo.Items.Add("给水"); pipelineTypeCbo.Items.Add("供电"); pipelineTypeCbo.Items.Add("天然气"); pipelineTypeCbo.Items.Add("共通"); pipelineTypeCbo.Items.Add("电通"); pipelineTypeCbo.Items.Add("路灯"); pipelineTypeCbo.Items.Add("监控"); pipelineTypeCbo.Items.Add("有线电视"); cmbReference.Items.Clear(); cmbReference.Items.Add("管顶"); cmbReference.Items.Add("管底"); } /// <summary> /// 选择管线颜色 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnPipelineColor_Click(object sender, EventArgs e) { colorDialog1.Color = btnPipelineColor.BackColor; if (colorDialog1.ShowDialog() == DialogResult.OK) { btnPipelineColor.BackColor = colorDialog1.Color; } } private bool invalidate() { if (comboBoxDataSourceList.Text.Trim() == "") { MessageBox.Show("请选择目标数据库!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } GSODataSource ds = Utility.getDataSourceByFullName(ctl, comboBoxDataSourceList.SelectedItem.ToString().Trim()); if (ds == null) { MessageBox.Show("选择的目标数据源为空!", "提示"); return false; } else datasource = ds; if (comboBoxExLayer.Text.Trim() == "") { MessageBox.Show("请选择一个图层文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } if (txtModelLayer.Text.Trim().Length >= 20) { MessageBox.Show("请修改图层名称为20个字符以下", "提示"); return false; } if (txtModelLayer.Text.Trim() == "") { MessageBox.Show("请输入入库图层名称!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning); return false; } Regex reg = new Regex("^[0-9]"); Match ma = reg.Match(txtModelLayer.Text.Trim()); if (ma.Success) { MessageBox.Show("图层名称不能以数字开头!", "警告"); return false; } return true; } private void btnCreateModel_Click(object sender, EventArgs e) //建模 { if (!invalidate()) return; try { GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(Path.GetFileNameWithoutExtension( comboBoxExLayer.Text)); if (layer == null) return; if (txtModelLayer.Text != "传感设备图层") { if (!getValidateResult(layer)) return; } //reSetComboboxRansparency(); LineParam lineParam = new LineParam(); lineParam.layerName = txtModelLayer.Text; lineParam.uniqueIdFieldName = cmbID.Text; lineParam.startDepthFieldName = checkBoxDeep.Checked ? cmbFrom.Text : startH.Text; lineParam.endDepthFieldName = checkBoxDeep.Checked ? cmbTo.Text : endH.Text; lineParam.isRevert = chkDeep.Checked; lineParam.diameterFieldName = cmbRadius.Text; lineParam.relativeMode = (cmbReference.Text == "管顶") ? 0 : 1; lineParam.lineColor = btnPipelineColor.BackColor; lineParam.transparency = Convert.ToByte(ComboboxRansparency.Value); lineParam.cornerSliceAngle = Convert.ToDouble(textBoxCornerSliceAngle.Text); lineParam.sliceNum = Convert.ToInt32(txtSlice.Text); lineParam.channelWidth = comboBoxExWidth.Text; lineParam.channelHeight = comboBoxExHeight.Text; if (txtModelLayer.Text != "传感设备图层") lineBuilder(layer, lineParam); else gxLineBuilder(layer, lineParam); MessageBox.Show("入库完成!", "提示"); addLayerToGlobeControl(lineParam.layerName); //this.DialogResult = DialogResult.OK; } catch (Exception ex) { LogHelper.Error(ex.Message); } } bool getValidateResult(GSOLayer layer) { FieldValidate fieldValidate = FieldValidateFactory.Create(ValidateConfig.LoadConfig(), getEnumValidateType()); if (fieldValidate.Validate(layer)) return true; DateTime dt = DateTime.Now; string logFilePath = Application.StartupPath + "\\log\\" + dt.Year + "\\" + dt.Year + dt.Month + "\\" + dt.Year + dt.Month + dt.Day + ".txt"; MessageBox.Show("选择的数据不符合数据规范,详情见日志" + logFilePath, "提示"); return false; } void lineBuilder(GSOLayer layer,LineParam lineParam) { ModelBuilder lineBuilder = new LineBuilder(datasource); lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update, checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam); } void gxLineBuilder(GSOLayer layer, LineParam lineParam) { ModelBuilder lineBuilder = new GXBuilder(datasource); lineBuilder.build(layer, checkBoxAdd.Checked ? EnumUpdateMode.Append : EnumUpdateMode.Update, checkBoxDeep.Checked ? EnumBuildMode.Depth : EnumBuildMode.Alititude, lineParam); } private EnumValidateType getEnumValidateType() { if (comboBoxExWidth.Text != "") return EnumValidateType.FangGou; else if ((pipelineTypeCbo.Text == "雨水") || (pipelineTypeCbo.Text == "污水") || (pipelineTypeCbo.Text == "雨污合流")) return EnumValidateType.PipeLineNoPress; else return EnumValidateType.PipeLinePress; } private void addLayerToGlobeControl(string layerName) { GSOLayer layerRuku = ctl.Globe.Layers.Add(datasource.GetDatasetByName(layerName)); rukuLayer = layerRuku; //定位到该管线起点位置 if (layerRuku.GetAllFeatures().Length > 0) { int num = layerRuku.GetAllFeatures().Length / 2; GSOFeature feature = layerRuku.GetAt(num); if (feature != null && feature.Geometry != null) ctl.Globe.JumpToFeature(feature, 100); else ctl.Globe.FlyToFeature(feature); } } private void reSetComboboxRansparency() { if (comboBoxExWidth.SelectedText != "") ComboboxRansparency.Value = 255; else ComboboxRansparency.Value = 125; } private void clearComboboxParam() { cmbID.Items.Clear(); cmbFrom.Items.Clear(); cmbTo.Items.Clear(); startH.Items.Clear(); endH.Items.Clear(); cmbRadius.Items.Clear(); comboBoxExHeight.Items.Clear(); comboBoxExWidth.Items.Clear(); } private void addComboboxParam(string strFiled) { cmbID.Items.Add(strFiled); cmbFrom.Items.Add(strFiled); cmbTo.Items.Add(strFiled); startH.Items.Add(strFiled); endH.Items.Add(strFiled); cmbRadius.Items.Add(strFiled); comboBoxExWidth.Items.Add(strFiled); comboBoxExHeight.Items.Add(strFiled); } private void initComboboxParam() { cmbID.SelectedItem = "编号"; cmbFrom.SelectedItem = "起始埋深"; cmbTo.SelectedItem = "终止埋深"; //cmbRadius.SelectedItem = "管径_毫米"; comboBoxExHeight.SelectedItem = "沟道高"; comboBoxExWidth.SelectedItem = "沟道宽"; if (cmbRadius.Items.Contains("管径_毫米")) { cmbRadius.SelectedItem = "管径_毫米"; } else { cmbRadius.SelectedItem = "沟道高"; } } private void comboBoxExLayer_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxExLayer.SelectedIndex == -1) return; string layerName = Path.GetFileNameWithoutExtension(comboBoxExLayer.Text); GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(layerName); GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) return; clearComboboxParam(); txtModelLayer.Text = layerName; for (int i = 0; i < features[0].GetFieldCount(); i++) { GSOFieldDefn fielddef = features[0].GetFieldDefn(i); addComboboxParam(fielddef.Name); } for (int i = 0; i < pipelineTypeCbo.Items.Count; i++) { if (comboBoxExLayer.Text.Contains(pipelineTypeCbo.Items[i].ToString())) pipelineTypeCbo.Text = pipelineTypeCbo.Items[i].ToString(); } initComboboxParam(); } /// <summary> /// 关闭按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnClose_Click(object sender, EventArgs e)// 关闭 { Close(); } /// <summary> /// 窗体关闭事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmPipelineModelDB_FormClosing(object sender, FormClosingEventArgs e) { pipelineTypeCbo.Items.Clear(); ctl.Globe.Refresh(); } private void pipelineTypeCbo_SelectedIndexChanged(object sender, EventArgs e) { if ((pipelineTypeCbo.Text =="雨水") || (pipelineTypeCbo.Text == "污水") || (pipelineTypeCbo.Text == "雨污合流")) cmbReference.Text = "管底"; else cmbReference.Text = "管顶"; switch (pipelineTypeCbo.Text) { case "给水": btnPipelineColor.BackColor = Color.FromArgb(0, 0, 255); break; case "供电": btnPipelineColor.BackColor = Color.FromArgb(255, 100, 150); break; case "雨水": btnPipelineColor.BackColor = Color.FromArgb(230, 120, 0); break; case "污水": btnPipelineColor.BackColor = Color.FromArgb(128, 64, 0); break; case "天然气": btnPipelineColor.BackColor = Color.FromArgb(215, 0, 64); break; case "共通": btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); break; case "电通": btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); break; case "有线电视": btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); break; case "监控": btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); break; case "交通信号": btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); break; case "路灯": btnPipelineColor.BackColor = Color.FromArgb(255, 0, 150); break; case "通讯": btnPipelineColor.BackColor = Color.FromArgb(0, 255, 0); break; } } private void checkBoxAdd_CheckedChanged(object sender, EventArgs e) { checkBoxReset.Checked = !checkBoxAdd.Checked; } private void checkBoxReset_CheckedChanged(object sender, EventArgs e) { checkBoxAdd.Checked = !checkBoxReset.Checked; } private void checkBoxDeep_CheckedChanged(object sender, EventArgs e) { checkBoxH.Checked = !checkBoxDeep.Checked; chkDeep.Checked = true; } private void checkBoxH_CheckedChanged(object sender, EventArgs e) { checkBoxDeep.Checked = !checkBoxH.Checked; chkDeep.Checked = false; } private void cmbReference_SelectedIndexChanged(object sender, EventArgs e) { startH.SelectedItem = "起始" + cmbReference.Text + "高"; endH.SelectedItem = "终止" + cmbReference.Text + "高"; } /* private void buttonOpen_Click(object sender, EventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "*.shp|*.shp"; dlg.Multiselect = false; if (dlg.ShowDialog() == DialogResult.OK) { GSOLayer layer = ctl.Globe.Layers.Add(dlg.FileName); comboBoxExLayer.Items.Add(Path.GetFileName(dlg.FileName)); comboBoxExLayer.SelectedItem = Path.GetFileName(dlg.FileName); GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) return; clearComboboxParam(); for (int i = 0; i < features[0].GetFieldCount(); i++) { GSOFieldDefn fielddef = features[0].GetFieldDefn(i); addComboboxParam(fielddef.Name); } initComboboxParam(); } txtModelLayer.Text = "SH" + Path.GetFileNameWithoutExtension(comboBoxExLayer.Text) + DateTime.Now.ToString("yyyyMMdd"); } * */ } }