private void MoveEachFeature(GSOFeatureFolder folder, double daltX, double daltY) { GSOFeatures features = folder.Features; for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, daltX, daltY); } else { GSOGeometry g = feature.Geometry; if (g != null) { g.MoveXY(daltX, daltY); } //GSOGeoModel model = feature.Geometry as GSOGeoModel; //if (model!=null) //{ // GSOPoint3d pt = model.Position; // pt.X += daltX; // pt.Y += daltY; // model.Position = pt; //} } } }
private void cmbLayer_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxShpLayerList.SelectedItem == null) { return; } GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxShpLayerList.SelectedItem.ToString().Trim()); if (layer == null) { return; } textBoxNewLayerName.Text = layer.Caption; GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) { return; } combCode.Items.Clear(); combDeep.Items.Clear(); combModelName.Items.Clear(); for (int i = 0; i < features[0].GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(features[0].GetFieldDefn(i)); combCode.Items.Add(fielddef.Name); combDeep.Items.Add(fielddef.Name); combModelName.Items.Add(fielddef.Name); } combCode.SelectedItem = "管线点编码"; combDeep.SelectedItem = "井深"; combModelName.SelectedItem = "编号"; }
private FrmShowValvesNeedClose(GSOGlobeControl globe, GSOFeatures features, ArrayList list) { InitializeComponent(); globeControl1 = globe; m_CloseValvesAnalyResFeatures = features; m_CloseValvesList = list; }
private FrmShowValvesNeedClose(GSOGlobeControl globe,GSOFeatures features,ArrayList list) { InitializeComponent(); globeControl1 = globe; m_CloseValvesAnalyResFeatures = features; m_CloseValvesList = list; }
private void dataGridView1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { DataGridView.HitTestInfo hittestinfo = dataGridView1.HitTest(e.X, e.Y); if (hittestinfo.RowIndex > -1) { contextMenuStrip1.Show(dataGridView1, e.X, e.Y); if (layer == null) { return; } GSOFeatureLayer pFeatureLayer = layer as GSOFeatureLayer; if (pFeatureLayer != null) { features = layer.GetFeatureByName(dataGridView1.Rows[hittestinfo.RowIndex].Cells["编号"].Value.ToString(), true); if (features != null) { for (int i = 0; i < features.Length; i++) { m_feature = features[i]; m_feature.HighLight = false; } globeControl1.Globe.Refresh(); } } } } }
private void cmbLayer_SelectedIndexChanged(object sender, EventArgs e) { GSOLayer layer = ctl.Globe.Layers[cmbLayer.SelectedIndex]; GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) { return; } cmbFrom.Items.Clear(); cmbTo.Items.Clear(); cmbRadius.Items.Clear(); cmbID.Items.Clear(); for (int i = 0; i < features[0].GetFieldCount(); i++) { cmbFrom.Items.Add(((GeoScene.Data.GSOFieldDefn)(features[0].GetFieldDefn(i))).Name); cmbTo.Items.Add(((GeoScene.Data.GSOFieldDefn)(features[0].GetFieldDefn(i))).Name); cmbRadius.Items.Add(((GeoScene.Data.GSOFieldDefn)(features[0].GetFieldDefn(i))).Name); cmbID.Items.Add(((GeoScene.Data.GSOFieldDefn)(features[0].GetFieldDefn(i))).Name); } cmbFrom.SelectedItem = "Deep1"; cmbTo.SelectedItem = "Deep2"; cmbRadius.SelectedItem = "Diameter"; cmbID.SelectedItem = "Handle"; }
private void MoveEachFeature(GSOFeatureFolder folder, double height) { GSOFeatures features = folder.Features; for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, height); } else { GSOGeoModel model = feature.Geometry as GSOGeoModel; if (model != null) { GSOPoint3d pt = model.Position; if (model.AltitudeMode == EnumAltitudeMode.ClampToGround) { model.AltitudeMode = EnumAltitudeMode.RelativeToGround; } pt.Z += height; model.Position = pt; } } } }
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) { return; } GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer; if (pFeatureLayer != null) { string featureName = dataGridView1.Rows[e.RowIndex].Cells["编号"].Value.ToString(); if (featureName == "") { return; } GSOFeatures features = pFeatureLayer.GetFeatureByName(featureName, false); GSOFeature feature = new GSOFeature(); for (int j = 0; j < features.Length; j++) { if (features[j].Name == featureName) { feature = features[j]; if (globeControl1 != null) { globeControl1.Globe.FlyToFeature(feature); globeControl1.Globe.Refresh(); } } } } }
private FrmEditLayerAttributesByTable(GSOLayer layer,GSOFeatures selectFeatures, GSOGlobeControl globeControl) { InitializeComponent(); geoLayer = layer; m_features = selectFeatures; globeControl1 = globeControl; }
private void buttonMerge_Click(object sender, EventArgs e) { GSOLayer layerlgd = mGlobeControl.Globe.Layers.Add(textBoxLgdPath.Text.Trim()); GSOLayer layerkml = mGlobeControl.Globe.Layers.Add(textBoxKmlPath.Text.Trim()); GSOLayer newlayer = mGlobeControl.Globe.Layers.Add(textBoxSavePath.Text.Trim()); if (layerlgd.GetAllFeatures().Length > 0) { GSOFeatures features = layerlgd.GetAllFeatures(); for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; newlayer = AddFeatureAndFeatureFolder(feature, newlayer); } } if (layerkml.GetAllFeatures().Length > 0) { GSOFeatures features = layerkml.GetAllFeatures(); for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; newlayer = AddFeatureAndFeatureFolder(feature, newlayer); } } if (newlayer.GetAllFeatures().Length > 0) { newlayer.SaveAs(textBoxSavePath.Text.Trim()); MessageBox.Show("合并成功", "提示"); } else { MessageBox.Show("将要合并的图层不符合要求", "提示"); } this.Close(); }
//删除 private void button3_Click(object sender, EventArgs e) { try { double min = double.Parse(textBox1.Text); double max = double.Parse(textBox2.Text); for (int i = 0; i < treeView1.Nodes.Count; i++) { if (treeView1.Nodes[i].Checked) { GSOLayer layer = treeView1.Nodes[i].Tag as GSOLayer; GSOFeatures fs = layer.GetAllFeatures(); for (int j = fs.Length - 1; j >= 0; j--) { GSOFeature f = fs[j]; double z = f.Geometry.GeoCenterPoint.Z; if (z >= min && z <= max) { layer.RemoveAt(j); } } } } } catch (Exception exp) { exp.GetType(); } }
private void dataGridView1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { DataGridView.HitTestInfo hittestinfo = dataGridView1.HitTest(e.X, e.Y); if (hittestinfo.RowIndex > -1) { contextMenuStrip1.Show(dataGridView1, e.X, e.Y); if (layer == null) { return; } GSOFeatureLayer pFeatureLayer = layer as GSOFeatureLayer; if (pFeatureLayer != null) { features = layer.GetFeatureByName(dataGridView1.Rows[hittestinfo.RowIndex].Cells["编号"].Value.ToString(), true); if (features != null) { for (int i = 0; i < features.Length; i++) { m_feature = features[i]; m_feature.HighLight = false; } globeControl1.Globe.Refresh(); } } } } }
private FrmEditLayerAttributesByTable(GSOLayer layer, GSOFeatures selectFeatures, GSOGlobeControl globeControl) { InitializeComponent(); geoLayer = layer; m_features = selectFeatures; globeControl1 = globeControl; }
private void FrmBatchUpdateFieldValue_FormClosing(object sender, FormClosingEventArgs e) { globeControl1.Globe.Action = EnumAction3D.ActionNull; isSelectObject = false; layer = null; features = null; }
/// <summary> /// 递归升高/降低给定高度值 /// </summary> /// <param name="folder">要素集</param> /// <param name="height">高度/米</param> private void MoveEachFeature(GSOFeatureFolder folder, double height) { GSOFeatures features = folder.Features; for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, height); } else { GSOGeometry geometry = feature.Geometry; if (geometry != null) { //为了显示升降效果,需要将ClampToGround模式修改为RelativeToGround模式 if (geometry.AltitudeMode == EnumAltitudeMode.ClampToGround) { geometry.AltitudeMode = EnumAltitudeMode.RelativeToGround; } //将z轴移动height米 geometry.MoveZ(height); } } } }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { int selectIndex = comboBox1.SelectedIndex; if (selectIndex >= 0) { layer = mGlobeControl.Globe.Layers.GetLayerByCaption(comboBox1.SelectedItem.ToString()); if (layer != null) { features = layer.GetAllFeatures(); if (features.Length > 0) { GSOFeature feature = features[0]; if (feature.GetFieldCount() > 0) { for (int i = 0; i < feature.GetFieldCount(); i++) { GSOFieldDefn defn = (GSOFieldDefn)feature.GetFieldDefn(i); listBox1.Items.Add(defn.Name); } } } } } }
private void dataGridView1_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { DataGridView.HitTestInfo hittestinfo = dataGridView1.HitTest(e.X, e.Y); if (hittestinfo.RowIndex > -1) { string featureName = dataGridView1.Rows[hittestinfo.RowIndex].Cells["编号"].Value.ToString(); contextMenuStrip1.Show(dataGridView1, e.X, e.Y); featureName = featureName.Trim(); if (geoLayer == null) { return; } GSOFeatures features = geoLayer.GetFeatureByName(featureName, false); for (int j = 0; j < features.Length; j++) { if (features[j].Name == featureName) { m_feature = features[j]; if (m_feature != null && m_feature.HighLight == true) { m_feature.HighLight = false; globeControl1.Globe.Refresh(); } break; } } } } }
/// <summary> /// 获取图层中的所有feature对象,包括featureFolder下面的feature对象 /// </summary> /// <param name="layer"></param> /// <returns></returns> public static GSOFeatures getRealFeaturesByLayer(GSOLayer layer) { GSOFeatures realFeatures = new GSOFeatures(); if (layer != null) { for (int i = 0; i < layer.GetAllFeatures().Length; i++) { GSOFeature feature = layer.GetAt(i); if (feature != null) { if (feature.Type == EnumFeatureType.FeatureFolder) { GSOFeatureFolder featureFolder = feature as GSOFeatureFolder; getRealFeatureByFeatures(featureFolder.Features, ref realFeatures); } else { realFeatures.Add(feature); } } } } return(realFeatures); }
private GSOFeatureDataset CreateDBFeatureDataset(string name) { if (comboBoxShpLayerList.SelectedItem == null) { MessageBox.Show("请选择一个Shp图层!", "提示"); return(null); } GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxShpLayerList.SelectedItem.ToString().Trim()); if (layer == null) { MessageBox.Show("Shp图层为空!", "提示"); return(null); } GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) { MessageBox.Show("图层要素个数为0!", "提示"); return(null); } GSOFeatureDataset featureDataset = layer.Dataset as GSOFeatureDataset; if (featureDataset == null) { MessageBox.Show("Shp图层不是矢量图层!", "提示"); return(null); } if (comboBoxDataSourceList.SelectedItem == null) { MessageBox.Show("请选择一个目标数据源!", "提示"); return(null); } GSODataSource ds = Utility.getDataSourceByFullName(globeControl1, comboBoxDataSourceList.SelectedItem.ToString().Trim()); if (ds == null) { MessageBox.Show("选择的目标数据源为空!", "提示"); return(null); } GSOFeatureDataset newFeatureDataset = ds.CreateFeatureDataset(name); if (newFeatureDataset != null) { for (int i = 0; i < featureDataset.FieldCount; i++) { GeoScene.Data.GSOFieldAttr fielddef = featureDataset.GetField(i); GSOFieldAttr field = new GSOFieldAttr(); field.Name = fielddef.Name; field.Type = fielddef.Type; field.Width = fielddef.Width; field.Precision = fielddef.Precision; bool res = newFeatureDataset.AddField(field); } newFeatureDataset.Save(); } return(newFeatureDataset); }
public FrmShowValveInformation(GSOGlobe _globe, GSOFeatures _features, int _valveCount) { InitializeComponent(); globe = _globe; features = _features; valveCount = _valveCount; }
public FrmShowValveInformation(GSOGlobe _globe, GSOFeatures _features,int _valveCount) { InitializeComponent(); globe = _globe; features = _features; valveCount = _valveCount; }
private void buttonAnalyse_Click(object sender, EventArgs e) { if (globeControl1.Globe != null && m_polygon3D != null) { double dAlt = Convert.ToDouble(textBoxDestAlt.Text); //交给系统处理,传入值为面,高度,返回为挖的高度,填的高度,挖的区域,填的区域,全部的面积,最高点,最低点,最后两项默认false,0 globeControl1.Globe.Analysis3D.DigFillAnalyse(m_polygon3D, dAlt, out m_dDigVolume, out m_dFillVolume, out m_dDigArea, out m_dFillArea, out m_dTotalArea, out m_pntMaxAlt, out m_pntMinAlt, false, 0); GSOFeature altFeature = null; //创建一个空要素 GSOFeatures tempFeatures = globeControl1.Globe.MemoryLayer.GetFeatureByName("DigFillAltPolygon", true); //要素从内存图层里获取 if (tempFeatures.Length > 0) //判断是否获取到 { altFeature = tempFeatures[0]; //获取到就直接赋值 } //把传进来的范围面复制一个 GSOGeoPolygon3D newPolygon = (GSOGeoPolygon3D)m_polygon3D.Clone(); newPolygon.SetAltitude(dAlt); //给这个面设置高度 newPolygon.AltitudeMode = EnumAltitudeMode.Absolute; //高度类型是相对地面 GSOExtrudeStyle extrudeStyle = new GSOExtrudeStyle(); //拉伸风格 extrudeStyle.ExtrudeType = EnumExtrudeType.ExtrudeToValue; //拉伸方式 extrudeStyle.ExtrudeValue = m_pntMinAlt.Z; //拉伸的值 extrudeStyle.TailPartVisible = false; //末端是否可见 //多边形风格,立面风格 GSOSimplePolygonStyle3D extrudePolygonStyle = new GSOSimplePolygonStyle3D(); extrudePolygonStyle.FillColor = Color.FromArgb(150, 0, 255, 0); //多边形填充颜色 extrudeStyle.BodyStyle = extrudePolygonStyle; //把风格赋给拉伸风格 //多边形风格,顶层风格 GSOSimplePolygonStyle3D polygonStyle = new GSOSimplePolygonStyle3D(); polygonStyle.FillColor = Color.FromArgb(200, 0, 0, 255); //设置颜色 newPolygon.Style = polygonStyle; //面的顶层风格 newPolygon.ExtrudeStyle = extrudeStyle; //棉的立面风格 //判断如果要素为空,或者被删除 if (m_AltFeature == null || m_AltFeature.IsDeleted) { //新建一个要素,并且把刚才配置的要素赋值给它 m_AltFeature = new GSOFeature(); m_AltFeature.Name = "DigFillAltPolygon"; m_AltFeature.Geometry = newPolygon; globeControl1.Globe.MemoryLayer.AddFeature(m_AltFeature); } else { //如果原来就有,就直接赋值 m_AltFeature.Geometry = newPolygon; } //刷新球 globeControl1.Globe.Refresh(); //设置文字 SetText(); } }
private void buttonAddAttribute_Click(object sender, EventArgs e) { if (MessageBox.Show("确定要添加该属性字段?", "提示!", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { try { GSOFeatureLayer pFeatureLayer = geoLayer as GSOFeatureLayer; if (pFeatureLayer == null) { return; } GSOFeatures feats = pFeatureLayer.GetAllFeatures(); GSOFeatureDataset dateset = pFeatureLayer.Dataset as GSOFeatureDataset; GSOFieldAttr fieldattr = new GSOFieldAttr(); fieldattr.Name = textBoxAddAttributeName.Text; switch (comboBoxAddAttributeType.SelectedIndex) { case 0: fieldattr.Type = EnumFieldType.Text; fieldattr.Width = 2000; break; case 1: fieldattr.Type = EnumFieldType.Double; break; case 2: //fieldattr.Type = EnumFieldType.INT16; //fieldattr.Type = EnumFieldType.INT32; fieldattr.Type = EnumFieldType.INT64; break; case 3: fieldattr.Type = EnumFieldType.Date; break; } dateset.AddField(fieldattr); dateset.Save(); listBoxAttribute.Items.Add(fieldattr.Name); MessageBox.Show("添加属性字段成功!", "提示!"); if (m_globeControl != null) { m_globeControl.Refresh(); } } catch (System.Exception exp) { Log.PublishTxt(exp); } } }
private void buttonOk_Click(object sender, EventArgs e)//确定 { if (comboBox1.Text.Trim() == "") { MessageBox.Show("图层不能为空"); return; } if (txtPath.Text.Trim() == "") { MessageBox.Show("模型路径不能为空"); return; } if (textBoxLayerPath.Text.Trim() == "") { MessageBox.Show("图层保存路径不能为空"); return; } GSOLayer newlayer = globeControl1.Globe.Layers.Add(textBoxLayerPath.Text.Trim()); newlayer.Caption = Path.GetFileNameWithoutExtension(txtPath.Text.Trim()); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBox1.Text.Trim()); if (layer != null) { GSOFeatures features = layer.GetAllFeatures(); if (features.Length > 0) { for (int i = 0; i < features.Length; i++) { if (features[i] != null && features[i].Geometry != null) { if (features[i].Geometry.Type == EnumGeometryType.GeoPoint3D) { GSOFeature feature = new GSOFeature(); GSOGeoPoint3D point3d = features[i].Geometry as GSOGeoPoint3D; if (point3d != null) { GSOGeoModel model = new GSOGeoModel(); model.FilePath = txtPath.Text.Trim(); model.Position = point3d.Position; feature.Geometry = model; newlayer.AddFeature(feature); } } } } globeControl1.Globe.Refresh(); } } this.Close(); }
//取消高亮 private void button4_Click(object sender, EventArgs e) { GSOFeatures feats = getFeatures(); if (feats != null && feats.Length != 0) { for (int i = 0; i < feats.Length; i++) { feats[i].HighLight = false; } } globeControl1.Globe.Refresh(); }
public static FrmShowValvesNeedClose getForm(GSOGlobeControl globe, GSOFeatures features, ArrayList list) { if (form == null) { form = new FrmShowValvesNeedClose(globe, features, list); } else { form.m_CloseValvesAnalyResFeatures = features; form.m_CloseValvesList = list; } return(form); }
public static FrmShowValvesNeedClose getForm(GSOGlobeControl globe, GSOFeatures features, ArrayList list) { if (form == null) { form = new FrmShowValvesNeedClose(globe, features, list); } else { form.m_CloseValvesAnalyResFeatures = features; form.m_CloseValvesList = list; } return form; }
private void buttonOk_Click(object sender, EventArgs e) { if (comboBoxLayers.Text == "") { MessageBox.Show("请选择一个图层!"); return; } GSOLayer layer = mGlobeControl.Globe.Layers.GetLayerByCaption(comboBoxLayers.Text.Trim()); if (layer == null) { MessageBox.Show("您选择的图层不存在!"); return; } Color fontColor = textBoxFontColor.BackColor; string strFontSize = comboBoxFontSize.Text; double fontSize = 12; bool blIsFontSize = double.TryParse(strFontSize, out fontSize); GSOFeatures features = layer.GetAllFeatures(); for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature.Geometry != null) { switch (feature.Geometry.Type) { case EnumGeometryType.GeoMarker: GSOGeoMarker marker = (GSOGeoMarker)feature.Geometry; GSOMarkerStyle3D style = (marker.Style == null ? new GSOMarkerStyle3D() : (GSOMarkerStyle3D)marker.Style); GSOTextStyle textStyle = (style.TextStyle == null ? new GSOTextStyle() : style.TextStyle); textStyle.ForeColor = fontColor; textStyle.FontSize = fontSize; style.TextStyle = textStyle; marker.Style = style; break; } } mGlobeControl.Globe.Refresh(); } //layer.Save(); this.Close(); }
private void ClearCloseValvesAnalysis()//清楚阀门分析结果 { if (m_CloseValvesAnalyResFeatures != null) { for (int i = 0; i < m_CloseValvesList.Count; i++) { GSOFeature feature = m_CloseValvesList[i] as GSOFeature; feature.Label.Text = ""; } globeControl1.Refresh(); m_CloseValvesAnalyResFeatures = null; m_CloseValvesList = new ArrayList(); } }
public static GSOFeature FindFeatureByUserID(GSOFeatureDataset featdataset, string fieldname, string value) { GSOFeatures feats = featdataset.GetAllFeatures(); for (int i = 0; i < feats.Length; i++) { GSOFeature feat = feats[i]; if (feat.GetFieldAsString(fieldname) == value) { return(feat); } } return(null); }
//清楚阀门分析结果 private void ClearCloseValvesAnalysis() { if (m_CloseValvesAnalyResFeatures != null) { for (int i = 0; i < m_CloseValvesList.Count; i++) { GSOFeature feature = m_CloseValvesList[i] as GSOFeature; feature.Label.Text = ""; } globeControl1.Refresh(); m_CloseValvesAnalyResFeatures = null; m_CloseValvesList = new ArrayList(); } }
GSOFeatures GetAllRealFeatures(GSOLayer layer) { if (layer == null) { return(null); } GSOFeatures realfeatures = new GSOFeatures(); for (int i = 0; i < layer.GetAllFeatures().Length; i++) { GSOFeature feature = layer.GetAllFeatures()[i]; GetRealFeature(feature, realfeatures); } return(realfeatures); }
public static FrmEditLayerAttributesByTable GetForm(GSOLayer layer, GSOFeatures selectFeatures, GSOGlobeControl globeControl) { if (tableAttribute == null) { tableAttribute = new FrmEditLayerAttributesByTable(layer, selectFeatures, globeControl); } else { geoLayer = layer; m_features = selectFeatures; globeControl1 = globeControl; } tableAttribute.isShow = true; return(tableAttribute); }
public static FrmEditLayerAttributesByTable GetForm(GSOLayer layer, GSOFeatures selectFeatures, GSOGlobeControl globeControl) { if (tableAttribute == null) { tableAttribute = new FrmEditLayerAttributesByTable(layer, selectFeatures, globeControl); } else { geoLayer = layer; m_features = selectFeatures; globeControl1 = globeControl; } tableAttribute.isShow = true; return tableAttribute; }
private void cancelHighLight(GSOFeatures features) { if (features != null) { for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature != null) { feature.HighLight = false; } } globeControl1.Globe.Action = EnumAction3D.ActionNull; } }
/// <summary> /// 删除字段 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_Delete_Click(object sender, EventArgs e) { if (null == this.dataGridView1.SelectedCells || 1 > this.dataGridView1.SelectedCells.Count) { MessageBox.Show("请选择要删除的列。"); return; } //新建选择列列表 List <DataGridViewColumn> colsToDel = new List <DataGridViewColumn>(); for (int i = 0; i < this.dataGridView1.SelectedCells.Count; i++) { //获取到datagridView中选中的列信息 var column = this.dataGridView1.Columns[this.dataGridView1.SelectedCells[i].ColumnIndex]; if (!colsToDel.Contains(column)) { //添加列信息 colsToDel.Add(column); } } //提示是否删除 if (MessageBox.Show(string.Format("是否删除{0}字段?\n此操作不可撤销。", string.Join(",", colsToDel.AsEnumerable().Select(c => c.Name))), "消息", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { //获得所有要素 GSOFeatures features = _layer.GetAllFeatures(); //遍历选中列的列表 foreach (var item in colsToDel) { //遍历所有要素 for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; //获取选中列在要素属性表中的索引 int index = feature.GetFieldIndex(item.Name); //删除该字段 feature.DeleteField(index); } //同时删除控件中的列 this.dataGridView1.Columns.Remove(item); } //保存图层 _layer.Save(); } }
private void cmbLayer_SelectedIndexChanged(object sender, EventArgs e) { if (comboBoxShpLayerList.SelectedItem == null) { return; } GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxShpLayerList.SelectedItem.ToString().Trim()); if (layer == null) { return; } textBoxNewLayerName.Text = layer.Caption; GSOFeatures features = layer.GetAllFeatures(); if (features.Length == 0) { return; } cmbFrom.Items.Clear(); cmbTo.Items.Clear(); cmbRadius.Items.Clear(); cmbID.Items.Clear(); cmbMaiSheFangShi.Items.Clear(); cmbWidth.Items.Clear(); cmbHeight.Items.Clear(); for (int i = 0; i < features[0].GetFieldCount(); i++) { GeoScene.Data.GSOFieldDefn fielddef = (GeoScene.Data.GSOFieldDefn)(features[0].GetFieldDefn(i)); cmbFrom.Items.Add(fielddef.Name); cmbTo.Items.Add(fielddef.Name); cmbRadius.Items.Add(fielddef.Name); cmbID.Items.Add(fielddef.Name); cmbMaiSheFangShi.Items.Add(fielddef.Name); cmbWidth.Items.Add(fielddef.Name); cmbHeight.Items.Add(fielddef.Name); } cmbFrom.SelectedItem = "Deep1"; cmbTo.SelectedItem = "Deep2"; cmbID.SelectedItem = "Handle"; cmbRadius.SelectedItem = "Diameter"; cmbMaiSheFangShi.SelectedItem = "D_Type"; cmbWidth.SelectedItem = "Weight"; cmbHeight.SelectedItem = "Height"; }
//datagrid绑定数据 public void SetDataTable(GSOFeatures feats) { if (feats.Length == 0) { MessageBox.Show("查询结果为空!","提示"); return; } GSOFeature feat = feats[0]; try { DataTable table = new DataTable(); for (int i = 0; i < feat.GetFieldCount(); i++) { GSOFieldDefn field = (GSOFieldDefn)feat.GetFieldDefn(i); table.Columns.Add(field.Name); } for (int i = 0; i < feats.Length; i++) { GSOFeature f = feats[i]; DataRow row = table.NewRow(); for (int j = 0; j < feat.GetFieldCount(); j++) { GSOFieldDefn field = (GSOFieldDefn)feat.GetFieldDefn(j); row[j] = f.GetValue(field.Name); } table.Rows.Add(row); } dataGridView1.DataSource = table; for (int i = 0; i < feats.Length; i++) { GSOFeature f = feats[i]; if (dataGridView1.Rows.Count > i) { dataGridView1.Rows[i].Tag = f; } } } catch (System.Exception exp) { Log.PublishTxt(exp); MessageBox.Show(exp.Message,"提示"); } }
private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.RowIndex < 0) return; GSOFeatureLayer pFeatureLayer = layer as GSOFeatureLayer; if (pFeatureLayer != null) { features = layer.GetFeatureByName(dataGridView1.Rows[e.RowIndex].Cells["编号"].Value.ToString(),true); if (features != null) { for (int i = 0; i < features.Length; i++) { m_feature = features[i]; globeControl1.Globe.FlyToFeature(features[i]); } globeControl1.Globe.Refresh(); } } }
private void buttonOK_Click(object sender, EventArgs e) { string filename = textbox1.Text.Trim(); GSOLayer newlayer = mGlobeControl.Globe.Layers.Add(filename); int indexCount = filename.LastIndexOf('.') - filename.LastIndexOf('\\') - 1; string newlayerCaption = ""; if (indexCount > 0) { newlayerCaption = filename.Substring(filename.LastIndexOf('\\') + 1, indexCount); newlayer.Caption = newlayerCaption; } for (int i = 0; i < mListPolygon.Count; i++) { GSOGeoPolygon3D polygon = mListPolygon[i]; string caption = ""; if (comboBoxLayerName.SelectedIndex >= 0) { caption = comboBoxLayerName.SelectedItem.ToString().Trim(); } GSOLayer layer = mGlobeControl.Globe.Layers.GetLayerByCaption(caption); GSOFeatures feats = new GSOFeatures(); if (layer != null) { feats = layer.FindFeaturesInPolygon(polygon, false); } if (feats != null) { newlayer.AddFeatures(feats); } } if (newlayer != null) { newlayer.SaveAs(filename); MessageBox.Show("导出成功!","提示"); } this.Close(); }
GSOFeatures GetAllRealFeatures(GSOLayer layer) { if (layer == null) { return null; } GSOFeatures realfeatures = new GSOFeatures(); for (int i = 0; i < layer.GetAllFeatures().Length; i++) { GSOFeature feature = layer.GetAllFeatures()[i]; GetRealFeature(feature, realfeatures); } return realfeatures; }
private void VisitFeature3Ds(GSOFeatures feature3ds, TreeNode node) { for (int i = 0; i < feature3ds.Length; i++) { GSOFeature feature = feature3ds[i]; if (feature.Type == EnumFeatureType.FeatureFolder) { TreeNode tempnode = new TreeNode(); tempnode.Text = feature.Name; tempnode.ImageIndex = 1; tempnode.SelectedImageIndex = 1; tempnode.Checked = feature.Visible; tempnode.Tag = feature; node.Nodes.Add(tempnode); GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; VisitFeature3Ds(featureFolder.Features, tempnode); } else { TreeNode tempnode = new TreeNode(); tempnode.Text = feature.Name; if (feature.Geometry != null) { switch (feature.Geometry.Type) { case EnumGeometryType.GeoPoint3D: case EnumGeometryType.GeoMarker: tempnode.ImageIndex = 3; tempnode.SelectedImageIndex = 3; break; case EnumGeometryType.GeoPolyline3D: tempnode.ImageIndex = 4; tempnode.SelectedImageIndex = 4; break; case EnumGeometryType.GeoPolygon3D: tempnode.ImageIndex = 5; tempnode.SelectedImageIndex = 5; break; case EnumGeometryType.GeoModel: case EnumGeometryType.GeoEntity: case EnumGeometryType.GeoGroupEntity: case EnumGeometryType.GeoSphereEntity: case EnumGeometryType.GeoBoxEntity: case EnumGeometryType.GeoEllipsoidEntity: case EnumGeometryType.GeoCylinderEntity: case EnumGeometryType.GeoFrustumEntity: case EnumGeometryType.GeoEllipCylinderEntity: case EnumGeometryType.GeoEllipFrustumEntity: case EnumGeometryType.GeoRangeEllipsoidEntity: case EnumGeometryType.GeoRangeEllipCylinderEntity: case EnumGeometryType.GeoRangeEllipFrustumEntity: tempnode.ImageIndex = 6; tempnode.SelectedImageIndex = 6; break; case EnumGeometryType.GeoGroundOverlay: tempnode.ImageIndex = 7; tempnode.SelectedImageIndex = 7; break; } } tempnode.Checked = feature.Visible; tempnode.Tag = feature; node.Nodes.Add(tempnode); } } }
private void ConnexityAnalysis() { GSODataset curCAYDataset = m_ConnexityAnalysisFirstLayer.Dataset; string srName = curCAYDataset.Name; GSONetworkDataset curCAYNDataset = curCAYDataset.DataSource.GetDatasetByName(srName + "Network") as GSONetworkDataset; if (curCAYNDataset == null) { MessageBox.Show("该图层没有创建网络拓扑,请先创建网络拓扑信息再进行分析!", "提示"); return; } int[] arryResID; curCAYNDataset.ConnexityAnalysis(m_ConnexityAnalysisFirstFeature.ID, m_ConnexityAnaylsisSecondFeature.ID, out arryResID, false, true); m_ConnexityAnalyResFeatures = m_ConnexityAnalysisFirstLayer.GetFeaturesByIDs(arryResID); if (m_ConnexityAnalyResFeatures == null || m_ConnexityAnalyResFeatures.Length < 1) { String strLine1 = "管线:" + m_ConnexityAnalysisFirstFeature.ID; String strLine2 = "管线:" + m_ConnexityAnaylsisSecondFeature.ID; MessageBox.Show(strLine1 + " 与 " + strLine2 + " 不连通", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { int nCount = m_ConnexityAnalyResFeatures.Length; GSOGeoPolyline3D effectLine = new GSOGeoPolyline3D(); GSOPoint3ds effectPart = new GSOPoint3ds(); for (int i = 0; i < nCount; i++) { m_ConnexityAnalyResFeatures[i].HighLight = true; GSOGeoPolyline3D geoline = m_ConnexityAnalyResFeatures[i].Geometry as GSOGeoPolyline3D; if (geoline != null) { //管线显示流动效果 for (int j = 0; j < geoline.PartCount; j++) { effectLine.AddPart(geoline[j]); } } } effectLine.SmoothToSpline(); GSOFeature feature = new GSOFeature(); feature.Geometry = effectLine; if (feature.Geometry.Style == null) { feature.Geometry.Style = new GSOSimpleLineStyle3D(); } feature.Geometry.AltitudeMode = EnumAltitudeMode.RelativeToGround; ((GSOStyle3D)feature.Geometry.Style).UsingBlur = true; globeControl1.Globe.MemoryLayer.AddFeature(feature); GSOAniFeature featureAnimation = new GSOAniFeature();//动画的类型--要素动画 featureAnimation.Feature = feature; //动画的关联对象 GSOGeoMarker marker = new GSOGeoMarker(0, 0, 0,""); GSOMarkerStyle3D markerStyle = new GSOMarkerStyle3D(); markerStyle.IconPath = Application.StartupPath + "/Resource/image/star4.bmp"; marker.Style = markerStyle; marker.AltitudeMode = EnumAltitudeMode.RelativeToGround; GSOFeature markerFeature = new GSOFeature(); markerFeature.Geometry = marker; GSOAniEffectLineGrow effect = new GSOAniEffectLineGrow();//动画效果-线增长动画 effect.StartValue = 0; effect.EndValue = 1; effect.FrameCount = 1200; effect.RepeatCount = 1; effect.IsSmooth = false; effect.ActorFeature = markerFeature; GSOAniKeyFrame keyFream = new GSOAniKeyFrame(); //关键帧 keyFream.Frame = 0; keyFream.AddEffect(effect); //给关键帧添加动画效果 GSOAniObjTimeLine timeLine = new GSOAniObjTimeLine();//动画对象 timeLine.Name = "线增长动画对象"; timeLine.AniObject = featureAnimation; //动画对象的动画类型 timeLine.AddKeyFrame(keyFream); //给动画对象添加关键帧 GSOAnimationPage page = new GSOAnimationPage(); //动画 page.FPS = 60; //动画--帧率 page.FrameCount = 20 * 60; //动画时长 * 帧率 //动画--帧总数 page.Name = "线增长动画"; page.AddObjTimeLine(timeLine); //给动画添加动画对象 globeControl1.Globe.AnimationPages.Add(page); globeControl1.Globe.AnimationPages.GetAt(globeControl1.Globe.AnimationPages.Length - 1).Play(); globeControl1.Refresh(); } }
private void 属性ToolStripMenuItem_Click(object sender, EventArgs e) { TreeNode node = (TreeNode)layerNodeContexMenu.Tag; if (node != null) { string name = node.Text; string path = ""; string type = ""; double opaque = 0.0d; bool isEdit = false; if (node.Parent == layerManagerNode) { GSOLayer layer = (GSOLayer)node.Tag; if (layer != null) { if (layer.Dataset != null && layer.Dataset.DataSource != null) { GSODataSource ds = layer.Dataset.DataSource; if (ds.Type == EnumDataSourceType.SqlServer) { path = ds.Name.Substring(0, ds.Name.IndexOf("_")); } else if (ds.Type == EnumDataSourceType.Oracle) { path = ds.Name.Substring(0, ds.Name.IndexOf("/")); } } else { path = layer.Name; } GSOFeatures feats = new GSOFeatures(); count = 0; GetReallyFeature(layer.GetAllFeatures()); type = layer.Type.ToString(); opaque = layer.Opaque; isEdit = layer.Editable; MessageBox.Show("图层名称:" + name + "\n\n路径:" + path + "\n\n类型:" + type + "\n\n不透明度:" + opaque.ToString() + "\n\n可编辑:" + isEdit.ToString() + "\n\n共有 " + count.ToString() + " 条记录", "属性", MessageBoxButtons.OK, MessageBoxIcon.Information); } } } }
private void FrmPipelineIndented_Load(object sender, EventArgs e) { if (globeControl1 != null) { for (int i = 0; i < globeControl1.Globe.Layers.Count; i++) { GSOLayer layer = globeControl1.Globe.Layers[i]; if (layer != null && layer.Type == EnumLayerType.FeatureLayer) { comboBoxLayerCaption.Items.Add(layer.Caption); comboBoxLayerValveCaption.Items.Add(layer.Caption); } } } featuresIndented = new GSOFeatures(); featuresInit = new GSOFeatures(); }
private void FrmBatchUpdateFieldValue_FormClosing(object sender, FormClosingEventArgs e) { globeControl1.Globe.Action = EnumAction3D.ActionNull; isSelectObject = false; layer = null; features = null; }
private void FrmPolygonToWater_Load(object sender, EventArgs e) { mFeatures = mLayer.GetAllFeatures(); mFeaturesOld = new GSOFeatures(); bool hasGeoWater = false; for (int i = 0; i < mFeatures.Length; i++) { if (mFeatures[i] != null) { mFeaturesOld.Add(mFeatures[i].Clone()); if (!hasGeoWater) { if (mFeatures[i].Geometry != null && mFeatures[i].Geometry.Type == EnumGeometryType.GeoWater) { GSOGeoWater geoWater = (GSOGeoWater)mFeatures[i].Geometry; // 水一般都是绝对高度模式 //geoWater.Altitude = EnumAltitudeMode.Absolute; textBoxWaveSpeedX.Text = geoWater.WaveSpeedX.ToString(); textBoxWaveSpeedY.Text = geoWater.WaveSpeedY.ToString(); textBoxWaveWidth.Text = geoWater.WaveWidth.ToString(); pictureBoxWaterColor.BackColor = geoWater.WaterColor; pictureBoxReflectColor.BackColor = geoWater.ReflectColor; textBoxNormalImage.Text = geoWater.WaveNormalImage; textBoxDuDvImage.Text = geoWater.WaveDuDvImage; checkboxReflectSky.Checked = geoWater.ReflectSky; checkBoxWaveLOD.Checked = geoWater.UseWaveLOD; hasGeoWater = true; } } } } if (!hasGeoWater) { textBoxWaveSpeedX.Text = "" + 0; textBoxWaveSpeedY.Text = "" + 0.00999999977648258; textBoxWaveWidth.Text = "" + 1; comboBoxLightType.SelectedIndex = 0; } }
//上下游追踪 private void NetworkTraceUpDown(Boolean bTraceUp) { if (globeControl1.Globe.SelectedObject == null) { MessageBox.Show("请点击“工具”—“选中对象”选择一条线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } GSOFeature selLineFeature = globeControl1.Globe.SelectedObject; if (selLineFeature.Geometry == null || selLineFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) { MessageBox.Show("请点击“工具”—“选中对象”选择一条线!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (globeControl1.Globe.SelectedObjectLayer == null) { return; } GSODataset curCAYDataset = globeControl1.Globe.SelectedObjectLayer.Dataset; if (curCAYDataset == null || curCAYDataset.DataSource == null) { MessageBox.Show("选中对象所在图层不是数据库图层!", "提示"); return; } string srName = curCAYDataset.Name; GSONetworkDataset curCAYNDataset = curCAYDataset.DataSource.GetDatasetByName(srName + "Network") as GSONetworkDataset; if (curCAYNDataset == null) { MessageBox.Show("选中对象所在图层没有创建拓扑!","提示"); return; } int[] arryResID; curCAYNDataset.TraceUpDownAnalysis(selLineFeature.ID, out arryResID, bTraceUp, false, true); m_TraceUpDownAnalyResFeatures = globeControl1.Globe.SelectedObjectLayer.GetFeaturesByIDs(arryResID); if (m_TraceUpDownAnalyResFeatures == null || m_TraceUpDownAnalyResFeatures.Length < 1) { String strLine1 = "没有上游!"; if (!bTraceUp) { strLine1 = "没有下游!"; } MessageBox.Show(strLine1); } else { int nCount = m_TraceUpDownAnalyResFeatures.Length; //显示箭头 for (int i = 0; i < nCount; i++) { m_TraceUpDownAnalyResFeatures[i].HighLight = true; GSOGeoPolyline3D geoline = m_TraceUpDownAnalyResFeatures[i].Geometry as GSOGeoPolyline3D; if (geoline != null) { GSOLineStyle3D lineStyle = geoline.Style as GSOLineStyle3D; if (lineStyle != null) { if (lineStyle.ArrowStyle == null) { lineStyle.ArrowStyle = new GSOArrowStyle(); lineStyle.ArrowStyle.BodyWidth = 2; lineStyle.ArrowStyle.BodyLen = 6; lineStyle.ArrowStyle.HeadWidth = 8; lineStyle.ArrowStyle.HeadLen = 10; lineStyle.ArrowStyle.OutlineVisible = true; lineStyle.ArrowStyle.OutlineColor = Color.Red; lineStyle.ArrowStyle.Speed = lineStyle.ArrowStyle.Speed / 2; } lineStyle.ArrowVisible = true; lineStyle.ArrowStyle.Play(); } } } //动画 //GSOLayer layer = globeControl1.Globe.Layers.Add(Application.StartupPath + "/MyPlace.kml"); //if (layer != null) //{ // GSOAnimationPage page = new GSOAnimationPage(); //动画 // page.FPS = 60; //动画--帧率 // page.FrameCount = 20 * 60; //动画时长 * 帧率 //动画--帧总数 // page.Name = "线增长动画"; // GSOAniObjTimeLine timeLine = new GSOAniObjTimeLine();//动画对象 // timeLine.Name = "线增长动画对象"; // for (int i = 0; i < nCount; i++) // { // m_TraceUpDownAnalyResFeatures[i].HighLight = false; // GSOGeoPolyline3D geoline = m_TraceUpDownAnalyResFeatures[i].Geometry as GSOGeoPolyline3D; // if (geoline != null && geoline.PartCount > 0) // { // GSOPoint3d endPoint = geoline[0][0]; // if (endPoint != null) // { // GSOFeatures featuresInPolygon = getFeatureByPolygon(layer, m_TraceUpDownAnalyResFeatures, endPoint, 0.1); // if (featuresInPolygon != null && featuresInPolygon.Length == 0) // { // timeLine = createKeyFrame(timeLine, m_TraceUpDownAnalyResFeatures[i]); // endPoint = geoline[geoline.PartCount - 1][geoline[geoline.PartCount - 1].Count - 1]; // } // } // } // } // page.AddObjTimeLine(timeLine); // globeControl1.Globe.AnimationPages.Add(page); // globeControl1.Globe.AnimationPages.GetAt(globeControl1.Globe.AnimationPages.Length - 1).Play(); // globeControl1.Refresh(); //} //else //{ // MessageBox.Show("没有动画演示需要的临时图层MyPlace","提示"); //} globeControl1.Refresh(); } }
private bool apply() { double waveSpeedX = 0; if (!double.TryParse(textBoxWaveSpeedX.Text.Trim(), out waveSpeedX)) { MessageBox.Show("水波横向速度不符合要求"); return false ; } double waveSpeedY = 0; if (!double.TryParse(textBoxWaveSpeedY.Text.Trim(), out waveSpeedY)) { MessageBox.Show("水波纵向速度不符合要求"); return false; } double waveWidth = 0; if (!double.TryParse(textBoxWaveWidth.Text.Trim(), out waveWidth)) { MessageBox.Show("水波宽度不符合要求"); return false; } Color waterColor = pictureBoxWaterColor.BackColor; Color reflectorColor = Color.FromArgb(Convert.ToByte(upDownReflectOpaque.Value), pictureBoxReflectColor.BackColor); int intLightType = comboBoxLightType.SelectedIndex; string waveNormalImagePath = textBoxNormalImage.Text; string waveDuDvImagePath = textBoxDuDvImage.Text; GSOFeatures featuresAdded = new GSOFeatures(); GSOFeatures featuresNomal = new GSOFeatures(); for (int i = mFeatures.Length - 1; i >= 0 ; i--) { GSOFeature feature = mFeatures[i]; if (feature != null && feature.Geometry != null) { if (feature.Geometry.Type == EnumGeometryType.GeoPolygon3D) { GSOGeoPolygon3D geoPolygon3d = (GSOGeoPolygon3D)feature.Geometry; GSOGeoWater geoWater = geoPolygon3d.ConvertToGeoWater(); // 水一般都是绝对高度模式 //geoWater.Altitude = EnumAltitudeMode.Absolute; geoWater.WaveSpeedX = waveSpeedX; geoWater.WaveSpeedY = waveSpeedY; geoWater.WaveWidth = waveWidth; geoWater.WaterColor = waterColor; geoWater.ReflectColor = reflectorColor; geoWater.WaveNormalImage = waveNormalImagePath; geoWater.WaveDuDvImage = waveDuDvImagePath; geoWater.ReflectSky = checkboxReflectSky.Checked; geoWater.UseWaveLOD = checkBoxWaveLOD.Checked; GSOFeature newFeature = feature.Clone(); geoWater.Play(); newFeature.Geometry = geoWater; featuresAdded.Add(newFeature); } else if (feature.Geometry.Type == EnumGeometryType.GeoWater) { GSOGeoWater geoWater = (GSOGeoWater)feature.Geometry; // 水一般都是绝对高度模式 //geoWater.Altitude = EnumAltitudeMode.Absolute; geoWater.WaveSpeedX = waveSpeedX; geoWater.WaveSpeedY = waveSpeedY; geoWater.WaveWidth = waveWidth; geoWater.WaterColor = waterColor; geoWater.ReflectColor = reflectorColor; geoWater.WaveNormalImage = waveNormalImagePath; geoWater.WaveDuDvImage = waveDuDvImagePath; geoWater.ReflectSky = checkboxReflectSky.Checked; geoWater.UseWaveLOD = checkBoxWaveLOD.Checked; GSOFeature newFeature = feature.Clone(); geoWater.Play(); newFeature.Geometry = geoWater; featuresAdded.Add(newFeature); } else { featuresNomal.Add(feature); } } } mLayer.RemoveAllFeature(); mLayer.AddFeatures(featuresAdded); mLayer.AddFeatures(featuresNomal); mGlobeControl.Refresh(); return true; }
private GSOFeatures getFeatureByPolygon(GSOLayer layer,GSOFeatures features, GSOPoint3d point, double allowValue) { if (layer == null || point == null || allowValue <= 0) { return null; } GSOGeoPolyline3D bufferLine = new GSOGeoPolyline3D(); GSOPoint3ds points = new GSOPoint3ds(); points.Add(point); GSOPoint3d newPoint = new GSOPoint3d(); newPoint.X = point.X + 0.00001; newPoint.Y = point.Y; newPoint.Z = point.Z; points.Add(newPoint); bufferLine.AddPart(points); GSOGeoPolygon3D polygon = bufferLine.CreateBuffer(allowValue, true, 12, false, false); layer.RemoveAllFeature(); layer.AddFeatures(features); GSOFeatures featuresInPolygon = layer.FindFeaturesInPolygon(polygon, false); return featuresInPolygon; }
void AddFeaturesNodeToMyPlace(GSOFeatures features) { if (features==null) { return; } for (Int32 i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature.Type == EnumFeatureType.FeatureFolder) { GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; AddFeaturesNodeToMyPlace(featureFolder.Features); } else { TreeNode tempnode = new TreeNode(); tempnode.Text = feature.Name; if (feature.Geometry != null) { switch (feature.Geometry.Type) { case EnumGeometryType.GeoPoint3D: case EnumGeometryType.GeoMarker: tempnode.ImageIndex = 3; tempnode.SelectedImageIndex = 3; break; case EnumGeometryType.GeoPolyline3D: tempnode.ImageIndex = 4; tempnode.SelectedImageIndex = 4; break; case EnumGeometryType.GeoPolygon3D: tempnode.ImageIndex = 5; tempnode.SelectedImageIndex = 5; break; case EnumGeometryType.GeoModel: case EnumGeometryType.GeoEntity: case EnumGeometryType.GeoGroupEntity: case EnumGeometryType.GeoSphereEntity: case EnumGeometryType.GeoBoxEntity: case EnumGeometryType.GeoEllipsoidEntity: case EnumGeometryType.GeoCylinderEntity: case EnumGeometryType.GeoFrustumEntity: case EnumGeometryType.GeoEllipCylinderEntity: case EnumGeometryType.GeoEllipFrustumEntity: case EnumGeometryType.GeoRangeEllipsoidEntity: case EnumGeometryType.GeoRangeEllipCylinderEntity: case EnumGeometryType.GeoRangeEllipFrustumEntity: tempnode.ImageIndex = 6; tempnode.SelectedImageIndex = 6; break; case EnumGeometryType.GeoGroundOverlay: tempnode.ImageIndex = 7; tempnode.SelectedImageIndex = 7; break; } } GSOFeature newFeature = globeControl1.Globe.MemoryLayer.AddFeature(feature); tempnode.Checked = newFeature.Visible; tempnode.Tag = newFeature; myPlaceNode.Nodes.Add(tempnode); } } }
private void btnApply_Click(object sender, EventArgs e) { GSOLayer layer = ctl.Globe.Layers.GetLayerByCaption(cmbLayers.Text.Trim()); if (layer == null) { MessageBox.Show("请选择图层", "提示"); return; } if (layer.Type != EnumLayerType.FeatureLayer) { MessageBox.Show("当前选中的图层不是模型图层!", "提示"); return; } GSOFeatureLayer flayer = layer as GSOFeatureLayer; GSOFeatures features = new GSOFeatures(); if (radioButtonElevateAllFeature.Checked == true) { features = flayer.GetAllFeatures(); } else if (radioButtonElevatePartFeature.Checked == true) { string fieldName = comboBoxFieldNames.Text.Trim(); if (fieldName == "") { MessageBox.Show("请选择字段名称!", "提示"); return; } if (listViewFieldValues.SelectedItems.Count <= 0) { MessageBox.Show("请选中一个字段值!", "提示"); return; } string fieldValue = listViewFieldValues.SelectedItems[0].Text.Trim(); features = flayer.GetFeatureByFieldValue(fieldName, fieldValue,true); } string elevateHeight = txtHeight.Text.Trim(); double height = 0; if (txtHeight.Text == "" || double.TryParse(elevateHeight, out height) == false) { MessageBox.Show("请输入正确的调整高度", "提示"); return; } for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature is GSOFeatureFolder) { MoveEachFeature(feature as GSOFeatureFolder, height); } else if (feature.Geometry is GSOGeoModel) { GSOGeoModel model = feature.Geometry as GSOGeoModel; if (model != null) { GSOPoint3d pt = model.Position; pt.Z += height; model.Position = pt; } } else if (feature.Geometry is GSOGeoPolyline3D) { GSOGeoPolyline3D templine = feature.Geometry as GSOGeoPolyline3D; if (templine != null) { templine.MoveZ(height); feature.Geometry = templine; } } } ctl.Refresh(); MessageBox.Show("抬升成功", "提示"); }
//阀门分析 private bool NetworkCloseValvesAnalysis(GSOFeature lineFeature, GSOPoint3d pntBreak, GSOLayer lineLayer) { if (lineLayer == null || lineFeature == null || lineFeature.Geometry == null || lineFeature.Geometry.Type != EnumGeometryType.GeoPolyline3D) { return false; } GSODataset curCAYDataset = lineLayer.Dataset; if (curCAYDataset == null || curCAYDataset.DataSource == null) { return false; } string srName = curCAYDataset.Name; GSONetworkDataset curCAYNDataset = curCAYDataset.DataSource.GetDatasetByName(srName + "Network") as GSONetworkDataset; if (curCAYNDataset == null) { MessageBox.Show("该图层没有创建网络拓扑,请先创建网络拓扑信息再进行分析!", "提示"); return false; } ClearCloseValvesAnalysisMenuItem_Click(null, null); int[] arryResNodeID; int[] arryResValveID; curCAYNDataset.CloseValveAnalysis(lineFeature.ID, out arryResNodeID, out arryResValveID, false, true); if (arryResValveID != null) { if (lineFeature.GetFieldAsInt32("管线编码") >= 6000 && lineFeature.GetFieldAsInt32("管线编码") <= 6203) // 6100是热力管线的编码 { GSOLayer ValveLayer = globeControl1.Globe.Layers.GetLayerByCaption("热力阀门"); if (ValveLayer != null) { m_CloseValvesAnalyResFeatures = ValveLayer.GetFeaturesByIDs(arryResValveID); } } else if (lineFeature.GetFieldAsInt32("管线编码") >= 5000 && lineFeature.GetFieldAsInt32("管线编码") <= 5200) // 5000是燃气管线的编码 { GSOLayer ValveLayer = globeControl1.Globe.Layers.GetLayerByCaption("燃气阀门"); if (ValveLayer != null) { m_CloseValvesAnalyResFeatures = ValveLayer.GetFeaturesByIDs(arryResValveID); } } else if (lineFeature.GetFieldAsInt32("管线编码") >= 3000 && lineFeature.GetFieldAsInt32("管线编码") <= 3513) // 3000是给水管线的编码 { GSOLayer ValveLayer = globeControl1.Globe.Layers.GetLayerByCaption("给水阀门"); if (ValveLayer != null) { m_CloseValvesAnalyResFeatures = ValveLayer.GetFeaturesByIDs(arryResValveID); } } } if (m_CloseValvesAnalyResFeatures == null || m_CloseValvesAnalyResFeatures.Length < 1) { MessageBox.Show("没有找到要关闭的阀门!"); } else { int nCount = m_CloseValvesAnalyResFeatures.Length; if (nCount > 0) { FrmShowValvesNeedClose frm = FrmShowValvesNeedClose.getForm(globeControl1, m_CloseValvesAnalyResFeatures, m_CloseValvesList); frm.setLstValvesName(); if (!frm.Visible) { frm.Show(this); } } } return true; }
void GetRealFeature(GSOFeature feature, GSOFeatures realfeatures) { if (feature == null || realfeatures == null) { return; } if (feature.Type == EnumFeatureType.Feature) { realfeatures.Add(feature); } else if (feature.Type == EnumFeatureType.FeatureFolder) { GSOFeatureFolder featureFolder = (GSOFeatureFolder)feature; for (int i = 0; i < featureFolder.Features.Length; i++) { GetRealFeature(featureFolder.Features[i],realfeatures); } } }
private void cancelHighLight(GSOFeatures features) { if (features != null) { for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature != null) { feature.HighLight = false; } } globeControl1.Globe.Action = EnumAction3D.ActionNull; } }
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { int selectIndex = comboBox1.SelectedIndex; if (selectIndex >= 0) { layer = mGlobeControl.Globe.Layers.GetLayerByCaption(comboBox1.SelectedItem.ToString()); if (layer != null) { features = layer.GetAllFeatures(); if (features.Length > 0) { GSOFeature feature = features[0]; if (feature.GetFieldCount() > 0) { for (int i = 0; i < feature.GetFieldCount(); i++) { GSOFieldDefn defn = (GSOFieldDefn)feature.GetFieldDefn(i); listBox1.Items.Add(defn.Name); } } } } } }
private GSOFeatures getFeatures() { try { GSOFeatures feats = new GSOFeatures(); double min = double.Parse(textBox1.Text); double max = double.Parse(textBox2.Text); for (int i = 0; i < treeView1.Nodes.Count; i++) { if (treeView1.Nodes[i].Checked) { GSOLayer layer = treeView1.Nodes[i].Tag as GSOLayer; GSOFeatures fs = layer.GetAllFeatures(); for (int j = 0; j < fs.Length; j++) { GSOFeature f = fs[j]; double z = f.Geometry.GeoCenterPoint.Z; if (f != null && f.Geometry != null && f.Geometry.Type == EnumGeometryType.GeoModel) { GSOGeoModel model = f.Geometry as GSOGeoModel; z = model.PositionZ; } if (z >= min && z <= max) { feats.Add(f); } } } } return feats; } catch (Exception exp) { exp.GetType(); } return null; }
public static GSOFeatures Table2Features(DataTable table, string currentQueryLayer,GeoScene.Globe.GSOGlobeControl globeControl1) { GSOFeatures features = new GSOFeatures(); for (int i = 0; i < table.Rows.Count; i++) { DataRow row = table.Rows[i]; string featureName = row["编号"].ToString(); featureName = featureName.Trim(); GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(currentQueryLayer); GSOFeatures tempfeatures = layer.GetFeatureByName(featureName, false); if (tempfeatures.Length > 0) { features.Add(tempfeatures[0]); } } return features; }
//清除追踪结果 private void ClearUpDownTraceMenuItem_Click(object sender, EventArgs e) { if (m_TraceUpDownAnalyResFeatures != null) { int nCount = m_TraceUpDownAnalyResFeatures.Length; for (int i = 0; i < nCount; i++) { m_TraceUpDownAnalyResFeatures[i].HighLight = false; GSOGeoPolyline3D geoline = m_TraceUpDownAnalyResFeatures[i].Geometry as GSOGeoPolyline3D; if (geoline != null) { GSOLineStyle3D lineStyle = geoline.Style as GSOLineStyle3D; if (lineStyle != null) { lineStyle.ArrowVisible = false; } } } m_TraceUpDownAnalyResFeatures = null; } }
private void GetReallyFeature(GSOFeatures features) { if (features != null && features.Length > 0) { for (int i = 0; i < features.Length; i++) { if (features[i].Type == EnumFeatureType.FeatureFolder) { GetReallyFeature(((GSOFeatureFolder)features[i]).Features); } else { countLog++; } } } }