/// <summary> /// 创建点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnAddPoint_Click(object sender, EventArgs e) { GSOGeoMarker point = new GSOGeoMarker(); //创建点对象 point.X = 120.417888231016; //设置点X的值,单位为度 point.Y = 31.3283140323302; //设置点Y的值,单位为度 point.Z = 20; //设置点Z的值,单位为米 point.AltitudeMode = EnumAltitudeMode.RelativeToGround; //设置点的高程模式,设置为相对地面。则点的为(X,Y)处地面高程上方100米(point.Z = 100) point.Text = "中科图新"; //设置点对象显示的文字 GSOMarkerStyle3D mstyle = new GSOMarkerStyle3D(); //新建点样式 mstyle.IconPath = Application.StartupPath + "\\Resource\\image\\DefaultIcon.png"; //设置图标路径 point.Style = mstyle; //把显示风格 GSOFeature feature = new GSOFeature(); //创建几何要素 feature.Geometry = point; //把点赋予集合要素 feature.Name = point.Text; //赋予名字 globeControl1.Globe.MemoryLayer.AddFeature(feature); //将要素添加到图层中 //下面不属于工程内容,只是飞到点的位置 GSOCameraState cs = new GSOCameraState(); cs.Longitude = point.X; cs.Latitude = point.Y; cs.Altitude = 1000; globeControl1.Globe.FlyToCameraState(cs); }
private void txtNewChange() { decimal x; decimal y; if (txtNewLon.Text.Trim() == "") { txtNewLon.Text = 0 + ""; } bool bl = decimal.TryParse(txtNewLon.Text.Trim(), out x); if (!bl) { MessageBox.Show("数据不符合要求!"); return; } if (txtNewLat.Text.Trim() == "") { txtNewLat.Text = 0 + ""; } bl = decimal.TryParse(txtNewLat.Text.Trim(), out y); if (!bl) { MessageBox.Show("数据不符合要求!"); return; } GSOPoint3d point = ctl.Globe.ScreenToScene((int)Math.Round(x), (int)Math.Round(y)); if (endFeat == null || endFeat.IsDeleted) { endFeat = new GSOFeature(); GSOGeoMarker p = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/CrossIcon.png"; p.Style = style; p.AltitudeMode = EnumAltitudeMode.ClampToGround; endFeat.Name = "目标点"; endFeat.CustomID = 001; p.X = (double)Math.Round(x); p.Y = (double)Math.Round(y); p.Z = 0; endFeat.Geometry = p; endFeat = ctl.Globe.MemoryLayer.AddFeature(endFeat); } else { GSOGeoPoint3D endpoint = endFeat.Geometry as GSOGeoPoint3D; if (endpoint != null) { endpoint.X = (double)Math.Round(x); endpoint.Y = (double)Math.Round(y); endpoint.Z = 0; } } ctl.Refresh(); }
/// <summary> /// 添加地标 /// </summary> private bool AddMarker(string name, double lon, double lat, string path, string description, GSOLayer layer) { try { GSOFeature newFeature = new GSOFeature(); GSOGeoMarker p = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = path; p.Style = style; p.X = lon; p.Y = lat; p.Text = name.Substring(0, name.Length - 4); p.AltitudeMode = EnumAltitudeMode.ClampToGround; newFeature.Geometry = p; newFeature.Name = name; newFeature.Description = description + " "; layer.AddFeature(newFeature); return(true); } catch (Exception e) { e.GetType(); return(false); } }
private void globeControl1_MouseUp(object sender, MouseEventArgs e) { if (MouseDown != e.Location) { return; } if (e.Button == MouseButtons.Left) { if (globeControl1.Globe.Action == EnumAction3D.NormalHit) { GSOPoint3d point3d = new GSOPoint3d(); GSOFeature newFeature = new GSOFeature(); GSOGeoMarker p = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Application.StartupPath + "/Resource/image/DefaultIcon.png"; p.Style = style; p.Z = point3d.Z <= 0 ? 0 : point3d.Z; if (point3d.Z <= 0.0) { point3d = globeControl1.Globe.ScreenToScene(e.X, e.Y); } p.X = point3d.X; p.Y = point3d.Y; p.Z = point3d.Z; newFeature.Geometry = p; newFeature.Name = "我的地标"; globeControl1.Globe.MemoryLayer.AddFeature(newFeature); globeControl1.Globe.Action = EnumAction3D.ActionNull; } //开始判断是否是缓冲区分析 else if (globeControl1.Globe.Action == EnumAction3D.SelectObject) { if (mouseClickType == "缓冲区创建") { //获取选中要素 GSOFeature feature = globeControl1.Globe.SelectedObject; if (feature == null || feature.Geometry == null) { MessageBox.Show("请选择一个目标"); return; } if (feature.Geometry.Type != EnumGeometryType.GeoMarker && feature.Geometry.Type != EnumGeometryType.GeoPolyline3D && feature.Geometry.Type != EnumGeometryType.GeoPolygon3D) { MessageBox.Show("请选择一个点、线、面对象!", "提示"); return; } globeControl1.Globe.Action = EnumAction3D.ActionNull; makeBuffer(feature); } } } }
private void CtrlMarkerStylePage_Load(object sender, EventArgs e) { GSOGeoMarker geoMarker = m_Geometry as GSOGeoMarker; if (geoMarker != null) { textMarkerText.Text = geoMarker.Text; } }
public Form1() { InitializeComponent(); globeControl1 = new GSOGlobeControl(); panel1.Controls.Add(globeControl1); globeControl1.Dock = DockStyle.Fill; //鼠标按下事件,获取坐标 globeControl1.MouseDown += (sender, e) => { Location_MouseDown = e.Location; }; globeControl1.MouseUp += (sender, e) => { //鼠标抬起如果坐标不能对上,就认定为拖动球,不反应 if (Location_MouseDown != e.Location) { return; } if (e.Button == MouseButtons.Left) { //如果按照上面示例按我们方法添加HUD,需要加上这个判断,判断是否点在HUD中 //if (isMouseInHudControl == false) { if (globeControl1.Globe.Action == EnumAction3D.NormalHit) { GSOPoint3d point3d = new GSOPoint3d(); GSOFeature newFeature = new GSOFeature(); GSOGeoMarker p = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Application.StartupPath + "/Resource/image/DefaultIcon.png"; p.Style = style; p.Z = point3d.Z <= 0 ? 0 : point3d.Z; if (point3d.Z <= 0.0) { point3d = globeControl1.Globe.ScreenToScene(e.X, e.Y); } p.X = point3d.X; p.Y = point3d.Y; p.Z = point3d.Z; newFeature.Geometry = p; newFeature.Name = "我的地标"; globeControl1.Globe.MemoryLayer.AddFeature(newFeature); globeControl1.Globe.Action = EnumAction3D.ActionNull; } } } }; }
private void makeBuffer(GSOFeature feature) { double radius = (double)numericUpDownRadius.Value; //缓冲区宽度 double value = (double)numericUpDownFenDuan.Value; //圆角角度 bool isRoundCorner = CBRoundCorner.Checked; //拐角是否圆滑 bool isRoundEnds = CBRoundEnds.Checked; //两端是否圆滑 GSOGeoPolygon3D buffer = null; //创建缓冲面 if (feature.Geometry.Type == EnumGeometryType.GeoMarker) //如果要素为点 { GSOGeoMarker marker = feature.Geometry as GSOGeoMarker; buffer = marker.CreateBuffer(radius, value, false); //创建点的缓冲面(宽度,角度,false) } else if (feature.Geometry.Type == EnumGeometryType.GeoPolyline3D) { GSOGeoPolyline3D line = feature.Geometry as GSOGeoPolyline3D; buffer = line.CreateBuffer(radius, isRoundCorner, value, isRoundEnds, false); //创建线的缓冲面(宽度,拐角圆滑,角度,两端圆滑,false) } else if (feature.Geometry.Type == EnumGeometryType.GeoPolygon3D) { GSOGeoPolygon3D polygon = feature.Geometry as GSOGeoPolygon3D; buffer = polygon.CreateBuffer(radius, isRoundCorner, value, isRoundEnds, false); //创建面的缓冲面(宽度,拐角圆滑,角度,两端圆滑,false) } if (buffer != null) { //缓冲面颜色 GSOSimplePolygonStyle3D style = new GSOSimplePolygonStyle3D(); style.FillColor = Color.FromArgb(122, Color.Yellow); //缓冲线颜色 GSOSimpleLineStyle3D outlineStyle = new GSOSimpleLineStyle3D(); outlineStyle.LineColor = Color.Red; style.OutlineStyle = outlineStyle; buffer.Style = style; GSOFeature featureBuffer = new GSOFeature(); featureBuffer.Geometry = buffer; featureBuffer.Name = feature.Name + "_" + radius + "米_Buffer"; globeControl1.Globe.MemoryLayer.AddFeature(featureBuffer); //重新创建原有要素,使得要素在缓冲面上方,可选择 if (feature != null && feature.Dataset.Type == EnumDatasetType.Memory && feature.Dataset.Caption == "" && feature.Dataset.Name == "") { GSOFeature featureSelectCopy = feature.Clone(); globeControl1.Globe.MemoryLayer.AddFeature(featureSelectCopy); feature.Delete(); } globeControl1.Refresh(); } }
private void textMarkerText_TextChanged(object sender, EventArgs e) { GSOGeoMarker geoMarker = m_Geometry as GSOGeoMarker; if (geoMarker != null) { geoMarker.Text = textMarkerText.Text; if (m_GlobeControl != null) { m_GlobeControl.Refresh(); } } }
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 CheckSelFeaturePoint() { if (m_nCurSelected >= 0 && m_nCurSelected < listViewNodeList.Items.Count) { GSOGeoPoint3D geoPoint3D = null; if (m_FeatureSelPoint == null || m_FeatureSelPoint.IsDeleted) { m_FeatureSelPoint = new GSOFeature(); geoPoint3D = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/CrossIcon.png"; geoPoint3D.Style = style; m_FeatureSelPoint.Geometry = geoPoint3D; if (m_GlobeControl != null) { m_GlobeControl.Globe.MemoryLayer.AddFeature(m_FeatureSelPoint); m_GlobeControl.Refresh(); } } /* * else * { * geoPoint3D = m_FeatureSelPoint.Geometry as GSOGeoPoint3D; * } */ geoPoint3D = m_FeatureSelPoint.Geometry as GSOGeoPoint3D; geoPoint3D.AltitudeMode = m_Geometry.AltitudeMode; try { ListViewItem itemSel = listViewNodeList.Items[m_nCurSelected]; geoPoint3D.X = Double.Parse(itemSel.SubItems[1].Text); geoPoint3D.Y = Double.Parse(itemSel.SubItems[2].Text); geoPoint3D.Z = Double.Parse(itemSel.SubItems[3].Text); } catch (System.Exception exp) { Log.PublishTxt(exp); } if (m_GlobeControl != null) { m_GlobeControl.Refresh(); } } }
// 点 private void btn_point_Click(object sender, System.EventArgs e) { GSOGeoMarker point = new GSOGeoMarker(); //创建点对象 point.X = 120.417888231016; //设置点X的值 point.Y = 31.3283140323302; //设置点Y的值 point.Z = 0; //设置点Z的值,单位为米 point.AltitudeMode = EnumAltitudeMode.RelativeToGround; point.Text = "中科图新"; //设置点对象显示的文字 GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = IconPath; //设置图标 point.Style = style; AddNewGeoToLayer(point, "点"); }
private void AddPoint() { GSOGeoMarker point = new GSOGeoMarker(); //创建点对象 point.X = 120.417888231016; //设置点X的值,单位为度 point.Y = 31.3283140323302; //设置点Y的值,单位为度 point.Z = 20; //设置点Z的值,单位为米 point.AltitudeMode = EnumAltitudeMode.RelativeToGround; //设置点的高程模式,设置为相对地面。则点的为(X,Y)处地面高程上方100米(point.Z = 100) point.Text = "中科图新"; //设置点对象显示的文字 GSOMarkerStyle3D mstyle = new GSOMarkerStyle3D(); //新建点样式 mstyle.IconPath = Application.StartupPath + "\\Resource\\image\\DefaultIcon.png"; //设置图标路径 point.Style = mstyle; //把显示风格 GSOFeature feature = new GSOFeature(); //创建几何要素 feature.Geometry = point; //把点赋予集合要素 feature.Name = point.Text; //赋予名字 feature.Description = string.Format("<img src=\"{0}\">", Application.StartupPath + "\\Resource\\image\\Balloon\\Balloon.png"); globeControl1.Globe.MemoryLayer.AddFeature(feature);//将要素添加到图层中 }
private void button2_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; } string iconPath = textBoxIconPath.Text.Trim(); if (iconPath == "") { iconPath = Application.StartupPath + "\\Resource\\DefaultIcon.png"; } Color lineColor = textBoxLineColor.BackColor; string strLineWidth = textBoxLineWidth.Text.Trim(); double lineWidth = 1; bool blIsLineWidth = double.TryParse(strLineWidth, out lineWidth); Color outlineColor = textBoxOutlineColor.BackColor; string strOutlineWidth = textBoxOutlineWidth.Text.Trim(); double outlineWidth = 1; bool blIsOutlineWidth = double.TryParse(strOutlineWidth, out outlineWidth); Color polygonColor = textBoxPolygonColor.BackColor; string strPolygonAlpha = textBoxPolygonAlpha.Text.Trim(); int polygonAlpha = 255; bool blIsPolygonAlpha = int.TryParse(strPolygonAlpha, out polygonAlpha); polygonColor = Color.FromArgb(polygonAlpha, polygonColor); for (int i = 0; i < layer.GetAllFeatures().Length; i++) { GSOFeature feature = layer.GetAt(i); if (feature.Geometry != null) { switch(feature.Geometry.Type) { case EnumGeometryType.GeoPoint3D: if (panelPoints.Enabled) { GSOGeoPoint3D point = (GSOGeoPoint3D)feature.Geometry; GSOGeoMarker marker = new GSOGeoMarker(); marker.Position = point.Position; marker.Name = point.Name; marker.CameraState = point.CameraState; marker.Label = point.Label; GSOFeature newFeature = new GSOFeature(); newFeature.Name = feature.Name; newFeature.Geometry = marker; layer.RemoveAt(i); layer.AddFeature(newFeature); i--; } break; case EnumGeometryType.GeoMarker: if (panelPoints.Enabled) { GSOGeoMarker marker = (GSOGeoMarker)feature.Geometry; GSOMarkerStyle3D style = null; if (marker.Style == null) { style = new GSOMarkerStyle3D(); } else { style = (GSOMarkerStyle3D)marker.Style; } style.TextVisible = !checkBoxHideLabelOfMarker.Checked; style.IconPath = iconPath.Trim(); marker.Style = style; } break; case EnumGeometryType.GeoPolyline3D: if (panelLines.Enabled) { GSOGeoPolyline3D line = (GSOGeoPolyline3D)feature.Geometry; if (line.Label != null) { line.Label.Visible = !checkBoxHideLabelOfLine.Checked; } if (line.Style == null) { GSOSimpleLineStyle3D styleLine = new GSOSimpleLineStyle3D(); styleLine.LineColor = lineColor; styleLine.LineWidth = lineWidth; line.Style = styleLine; } else { GSOSimpleLineStyle3D styleLine = (GSOSimpleLineStyle3D)line.Style; if (styleLine == null) { GSOPipeLineStyle3D pipeStyle = (GSOPipeLineStyle3D)line.Style; if (pipeStyle != null) { pipeStyle.LineColor = lineColor; pipeStyle.Radius = lineWidth / 2; line.Style = pipeStyle; } } else { styleLine.LineColor = lineColor; styleLine.LineWidth = lineWidth; line.Style = styleLine; } } } break; case EnumGeometryType.GeoPolygon3D: if (panelPolygons.Enabled) { GSOGeoPolygon3D polygon = (GSOGeoPolygon3D)feature.Geometry; if (polygon.Label != null) { polygon.Label.Visible = !checkBoxHideLabelOfPolygon.Checked; } GSOSimplePolygonStyle3D stylePolygon = (polygon.Style == null ? new GSOSimplePolygonStyle3D() : (GSOSimplePolygonStyle3D)polygon.Style); stylePolygon.FillColor = polygonColor; stylePolygon.OutLineVisible = true; GSOSimpleLineStyle3D styleOutline = (GSOSimpleLineStyle3D)stylePolygon.OutlineStyle; if (styleOutline == null) { styleOutline = new GSOSimpleLineStyle3D(); } styleOutline.LineWidth = outlineWidth; styleOutline.LineColor = outlineColor; stylePolygon.OutlineStyle = styleOutline; polygon.Style = stylePolygon; } break; } } } mGlobeControl.Globe.Refresh(); this.Close(); }
void ctl_MouseUp(object sender, MouseEventArgs e) { //判断鼠标为左键点击,并排除用左键移动球体的动作(通过MouseDown时与MouseUp时鼠标屏幕坐标比较) if (e.Button == MouseButtons.Left && e.Location == _locationPoint) { GSOLayer layer; GSOPoint3d point; //获取三维空间鼠标点击事件的空间点坐标 _glbControl.Globe.HitTest(e.X, e.Y, out layer, out point, false, false, 0); //有可能并没有点击到图层上,因此需要将点击的屏幕坐标转换成球面坐标 if (point.X == 0.0 || point.Y == 0.0) { point = this._glbControl.Globe.ScreenToScene(e.X, e.Y); } if (point.Z < 0) { point.Z = 0; } //todo:还需要对获取的坐标值的范围进行判断(由于视角的原因,获取到的坐标有可能非法) //给当前激活textBox赋值 _actX.Text = point.X.ToString(); _actY.Text = point.Y.ToString(); //新建Feature var featurePoint = new GSOFeature(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); GSOGeoMarker p = new GSOGeoMarker(); style.IconPath = _pointImagePath; p.Style = style; p.AltitudeMode = EnumAltitudeMode.Absolute; p.X = point.X; p.Y = point.Y; p.Z = point.Z; if (_isBegin) { _startFeat = featurePoint; p.Text = "起点"; _startFeat.Name = "起点"; _startFeat.Geometry = p; } else { _endFeat = featurePoint; p.Text = "终点"; _endFeat.Name = "终点"; _endFeat.Geometry = p; } var features = _glbControl.Globe.MemoryLayer.GetFeatureByName(featurePoint.Name, true); if (features != null && features.Length > 0) { for (int i = 0; i < features.Length; i++) { _glbControl.Globe.MemoryLayer.RemoveFeatureByID(features[i].ID); } } _glbControl.Globe.MemoryLayer.AddFeature(featurePoint); _glbControl.Refresh(); BackGlobState(); } }
private void button2_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; } string iconPath = textBoxIconPath.Text.Trim(); if (iconPath == "") { iconPath = Application.StartupPath + "\\Resource\\DefaultIcon.png"; } Color lineColor = textBoxLineColor.BackColor; string strLineWidth = textBoxLineWidth.Text.Trim(); double lineWidth = 1; bool blIsLineWidth = double.TryParse(strLineWidth, out lineWidth); Color outlineColor = textBoxOutlineColor.BackColor; string strOutlineWidth = textBoxOutlineWidth.Text.Trim(); double outlineWidth = 1; bool blIsOutlineWidth = double.TryParse(strOutlineWidth, out outlineWidth); Color polygonColor = textBoxPolygonColor.BackColor; string strPolygonAlpha = textBoxPolygonAlpha.Text.Trim(); int polygonAlpha = 255; bool blIsPolygonAlpha = int.TryParse(strPolygonAlpha, out polygonAlpha); polygonColor = Color.FromArgb(polygonAlpha, polygonColor); for (int i = 0; i < layer.GetAllFeatures().Length; i++) { GSOFeature feature = layer.GetAt(i); if (feature.Geometry != null) { switch (feature.Geometry.Type) { case EnumGeometryType.GeoPoint3D: if (panelPoints.Enabled) { GSOGeoPoint3D point = (GSOGeoPoint3D)feature.Geometry; GSOGeoMarker marker = new GSOGeoMarker(); marker.Position = point.Position; marker.Name = point.Name; marker.CameraState = point.CameraState; marker.Label = point.Label; GSOFeature newFeature = new GSOFeature(); newFeature.Name = feature.Name; newFeature.Geometry = marker; layer.RemoveAt(i); layer.AddFeature(newFeature); i--; } break; case EnumGeometryType.GeoMarker: if (panelPoints.Enabled) { GSOGeoMarker marker = (GSOGeoMarker)feature.Geometry; GSOMarkerStyle3D style = null; if (marker.Style == null) { style = new GSOMarkerStyle3D(); } else { style = (GSOMarkerStyle3D)marker.Style; } style.TextVisible = !checkBoxHideLabelOfMarker.Checked; style.IconPath = iconPath.Trim(); marker.Style = style; } break; case EnumGeometryType.GeoPolyline3D: if (panelLines.Enabled) { GSOGeoPolyline3D line = (GSOGeoPolyline3D)feature.Geometry; if (line.Label != null) { line.Label.Visible = !checkBoxHideLabelOfLine.Checked; } if (line.Style == null) { GSOSimpleLineStyle3D styleLine = new GSOSimpleLineStyle3D(); styleLine.LineColor = lineColor; styleLine.LineWidth = lineWidth; line.Style = styleLine; } else { GSOSimpleLineStyle3D styleLine = (GSOSimpleLineStyle3D)line.Style; if (styleLine == null) { GSOPipeLineStyle3D pipeStyle = (GSOPipeLineStyle3D)line.Style; if (pipeStyle != null) { pipeStyle.LineColor = lineColor; pipeStyle.Radius = lineWidth / 2; line.Style = pipeStyle; } } else { styleLine.LineColor = lineColor; styleLine.LineWidth = lineWidth; line.Style = styleLine; } } } break; case EnumGeometryType.GeoPolygon3D: if (panelPolygons.Enabled) { GSOGeoPolygon3D polygon = (GSOGeoPolygon3D)feature.Geometry; if (polygon.Label != null) { polygon.Label.Visible = !checkBoxHideLabelOfPolygon.Checked; } GSOSimplePolygonStyle3D stylePolygon = (polygon.Style == null ? new GSOSimplePolygonStyle3D() : (GSOSimplePolygonStyle3D)polygon.Style); stylePolygon.FillColor = polygonColor; stylePolygon.OutLineVisible = true; GSOSimpleLineStyle3D styleOutline = (GSOSimpleLineStyle3D)stylePolygon.OutlineStyle; if (styleOutline == null) { styleOutline = new GSOSimpleLineStyle3D(); } styleOutline.LineWidth = outlineWidth; styleOutline.LineColor = outlineColor; stylePolygon.OutlineStyle = styleOutline; polygon.Style = stylePolygon; } break; } } } mGlobeControl.Globe.Refresh(); this.Close(); }
private void comboBoxLayers_TextChanged(object sender, EventArgs e) { string layerName = comboBoxLayers.Text; if (layerName.Trim().Equals("")) { return; } GSOLayer layer = mGlobeControl.Globe.Layers.GetLayerByCaption(layerName); if (layer == null) { return; } //清空上一个图层的style textBoxIconPath.Text = ""; textBoxLineColor.BackColor = this.BackColor; textBoxLineWidth.Text = ""; textBoxOutlineColor.BackColor = this.BackColor; textBoxPolygonColor.BackColor = this.BackColor; textBoxOutlineWidth.Text = ""; textBoxPolygonAlpha.Text = ""; bool markerExists = false; bool lineExists = false; bool polygonExists = false; GSOFeatures features = GetAllRealFeatures(layer); for (int i = 0; i < features.Length; i++) { GSOFeature feature = features[i]; if (feature == null) { continue; } if (feature.Geometry != null) { switch (feature.Geometry.Type) { case EnumGeometryType.GeoMarker: if (!markerExists) { GSOGeoMarker marker = (GSOGeoMarker)feature.Geometry; GSOMarkerStyle3D style = (GSOMarkerStyle3D)marker.Style; if (style != null) { textBoxIconPath.Text = style.IconPath; checkBoxHideLabelOfMarker.Checked = !style.TextVisible; markerExists = true; } } break; case EnumGeometryType.GeoPolyline3D: if (!lineExists) { GSOGeoPolyline3D line = (GSOGeoPolyline3D)feature.Geometry; if (line.Label != null) { checkBoxHideLabelOfPolygon.Checked = !line.Label.Visible; } if (line.Style != null) { GSOSimpleLineStyle3D simpleLineStyle = (GSOSimpleLineStyle3D)line.Style; if (simpleLineStyle != null) { textBoxLineColor.BackColor = simpleLineStyle.LineColor; textBoxLineWidth.Text = (simpleLineStyle.LineWidth == 0 ? "1".ToString() : simpleLineStyle.LineWidth.ToString()); lineExists = true; } else { GSOPipeLineStyle3D pipeLineStyle = (GSOPipeLineStyle3D)line.Style; if (pipeLineStyle != null) { textBoxLineColor.BackColor = pipeLineStyle.LineColor; textBoxLineWidth.Text = (pipeLineStyle.Radius * 2).ToString(); lineExists = true; } } } } break; case EnumGeometryType.GeoPolygon3D: if (!polygonExists) { GSOGeoPolygon3D polygon = (GSOGeoPolygon3D)feature.Geometry; if (polygon.Label != null) { checkBoxHideLabelOfLine.Checked = !polygon.Label.Visible; } GSOSimplePolygonStyle3D stylePolygon = (GSOSimplePolygonStyle3D)polygon.Style; if (stylePolygon != null) { textBoxPolygonColor.BackColor = Color.FromArgb(stylePolygon.FillColor.R, stylePolygon.FillColor.G, stylePolygon.FillColor.B); textBoxPolygonAlpha.Text = stylePolygon.FillColor.A.ToString(); GSOSimpleLineStyle3D styleOutline = (GSOSimpleLineStyle3D)stylePolygon.OutlineStyle; if (styleOutline != null) { textBoxOutlineColor.BackColor = styleOutline.LineColor; textBoxOutlineWidth.Text = (styleOutline.LineWidth == 0 ? "1".ToString() : styleOutline.LineWidth.ToString()); } polygonExists = true; } } break; } } } }
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) { if (globeControl1.Globe.SelObjectCount < 2) { MessageBox.Show("请选中至少两个管线!!"); return; } if (disFeature.ID != 0) { globeControl1.Globe.MemoryLayer.RemoveFeatureByID(disFeature.ID); } if (featureDis.ID != 0) { globeControl1.Globe.MemoryLayer.RemoveFeatureByID(featureDis.ID); } GSOLayer reslayer; globeControl1.Globe.GetSelectObject(0, out m_DisAnalysisFirstFeature, out reslayer); globeControl1.Globe.GetSelectObject(1, out m_DisAnalysisSecondFeature, out reslayer); if (m_DisAnalysisSecondFeature != null && m_DisAnalysisSecondFeature != null) { GSOGeoPolyline3D line1 = m_DisAnalysisFirstFeature.Geometry as GSOGeoPolyline3D; GSOGeoPolyline3D line2 = m_DisAnalysisSecondFeature.Geometry as GSOGeoPolyline3D; if (line1 == null || line2 == null) { MessageBox.Show("请选择管线!!"); return; } GSOPipeLineStyle3D pipeStyle1 = line1.Style as GSOPipeLineStyle3D; GSOPipeLineStyle3D pipeStyle2 = line2.Style as GSOPipeLineStyle3D; if (pipeStyle1 == null || pipeStyle2 == null) { MessageBox.Show("请选择管线!!"); return; } GSOPoint3d pntIntersect1; GSOPoint3d pntIntersect2; double dHonLen; double dVerLen; double dNoIntersectStartRatio = 0; // 计算两条线的距离和交点,若果失败返回-1 // 若在同一直线上,并且有交点,返回0 // 若不在同一平面,返回最近两点的距离,并且计算最近两点 double dDist = globeControl1.Globe.Analysis3D.ComputeTwoGeoPolylineDistance(line1, line2, out pntIntersect1, out pntIntersect2, out dHonLen, out dVerLen, false, false, dNoIntersectStartRatio); if (dDist > -1) { if (dDist == 0) { MessageBox.Show("管线在同一水平面,距离为0"); return; } else { dDist = dDist - pipeStyle1.Radius - pipeStyle2.Radius; GSOGeoPolyline3D disline = new GSOGeoPolyline3D(); GSOPoint3ds point3ds = new GSOPoint3ds(); point3ds.Add(pntIntersect1); point3ds.Add(pntIntersect2); disline.AddPart(point3ds); GSOSimpleLineStyle3D style = new GSOSimpleLineStyle3D(); //创建线的风格 //设置透明度及颜色,FromArgb()中的四个参数分别为alpha、red、green、blue,取值范围为0到255 style.LineColor = Color.GreenYellow; style.LineWidth = 3; //设置线的宽度为3 style.VertexVisible = true; //显示线的节点 disline.Style = style; //把风格添加到线上 disline.AltitudeMode = EnumAltitudeMode.Absolute; disFeature.Geometry = disline; GSOGeoMarker markerDis = new GSOGeoMarker(); markerDis.X = pntIntersect1.X; markerDis.Y = pntIntersect1.Y; markerDis.Z = (pntIntersect1.Z + pntIntersect2.Z) / 2; markerDis.Text = dDist.ToString().Substring(0, dDist.ToString().IndexOf(".") + 3) + "米"; markerDis.AltitudeMode = EnumAltitudeMode.Absolute; GSOMarkerStyle3D styleMarker = new GSOMarkerStyle3D(); GSOTextStyle styleText = new GSOTextStyle(); styleText.IsSizeFixed = true; styleText.ForeColor = Color.White; styleText.FontSize = 20; styleMarker.TextStyle = styleText; markerDis.Style = styleMarker; featureDis.Geometry = markerDis; layerTemp = globeControl1.Globe.Layers.Add(Application.StartupPath + "\\tempLgdData.lgd"); layerTemp.AddFeature(featureDis); layerTemp.AddFeature(disFeature); globeControl1.Refresh(); } } else { MessageBox.Show("没有交点!!"); return; } } }
void ctl_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { GSOPoint3d point = ctl.Globe.ScreenToScene(e.X, e.Y); if (radioOld.Checked) { txtOldLon.Text = point.X.ToString(); txtOldLat.Text = point.Y.ToString(); if (startFeat == null || startFeat.IsDeleted) { startFeat = new GSOFeature(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); GSOGeoMarker p = new GSOGeoMarker(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/CrossIcon.png"; p.Style = style; p.AltitudeMode = EnumAltitudeMode.ClampToGround; p.X = point.X; p.Y = point.Y; p.Z = point.Z; startFeat.Name = "起点"; startFeat.CustomID = 000; startFeat.Geometry = p; startFeat = ctl.Globe.MemoryLayer.AddFeature(startFeat); } else { GSOGeoPoint3D startpoint = startFeat.Geometry as GSOGeoPoint3D; if (startpoint != null) { startpoint.X = point.X; startpoint.Y = point.Y; startpoint.Z = 0; } } } else { txtNewLon.Text = point.X.ToString(); txtNewLat.Text = point.Y.ToString(); if (endFeat == null || endFeat.IsDeleted) { endFeat = new GSOFeature(); GSOGeoMarker p = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/CrossIcon.png"; p.Style = style; p.AltitudeMode = EnumAltitudeMode.ClampToGround; endFeat.Name = "目标点"; endFeat.CustomID = 001; p.X = point.X; p.Y = point.Y; p.Z = point.Z; endFeat.Geometry = p; endFeat = ctl.Globe.MemoryLayer.AddFeature(endFeat); } else { GSOGeoPoint3D endpoint = endFeat.Geometry as GSOGeoPoint3D; if (endpoint != null) { endpoint.X = point.X; endpoint.Y = point.Y; endpoint.Z = 0; } } } ctl.Refresh(); } }
private void AddPlaceMarkMenu_Click(object sender, EventArgs e) { GSOFeature newFeature = new GSOFeature(); GSOGeoMarker p = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/DefaultIcon.png"; p.Style = style; p.X = globeControl1.Globe.CameraState.Longitude; p.Y = globeControl1.Globe.CameraState.Latitude; newFeature.Geometry = p; newFeature.Name = "我的地标"; ShowAddFeatureDlg(newFeature); }
private void btnCreateModel_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(txtModelLayer.Text)) { MessageBox.Show("文件路径无效!", "提示"); return; } if (File.Exists(txtModelLayer.Text)) { MessageBox.Show("文件已存在!", "提示"); return; } GSOLayer sourceLayer = ctl.Globe.Layers[cmbLayer.SelectedIndex]; GSOLayer layer = ctl.Globe.Layers.Add(txtModelLayer.Text); lgdFilePath = txtModelLayer.Text; if (layer != null) { GSOFeatures features = sourceLayer.GetAllFeatures(); for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOFeature newFeature = new GSOFeature(); string text = ""; if (combLabel.SelectedItem != null) { text = f.GetFieldAsString(combLabel.SelectedItem.ToString()); } if (listFields.CheckedItems.Count > 0) { newFeature.Description = GetBubbleInfo(f, numWidth.Value.ToString(), numHeight.Value.ToString()); } if (f.Geometry is GSOGeoPoint3D) { GSOGeoMarker marker = new GSOGeoMarker(); marker.Position = f.Geometry.GeoCenterPoint; marker.Text = text; GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Application.StartupPath + "\\Resource\\ddd.png"; marker.Style = style; newFeature.Geometry = marker; } else if(f.Geometry.Type == EnumGeometryType.GeoPolyline3D) { GSOGeoPolyline3D line = (GSOGeoPolyline3D)f.Geometry.Clone(); GSOLabel label = new GSOLabel(); label.Text = text; GSOLabelStyle style = new GSOLabelStyle(); style.HasTracktionLine = false; style.OutlineColor = Color.Transparent; style.MaxVisibleDistance = 100000; label.Style = style; line.Label = label; newFeature.Geometry = line; } else if (f.Geometry.Type == EnumGeometryType.GeoPolygon3D) { GSOGeoPolygon3D polygon = (GSOGeoPolygon3D)f.Geometry.Clone(); GSOLabel label = new GSOLabel(); label.Text = text; GSOLabelStyle style = new GSOLabelStyle(); style.HasTracktionLine = false; style.OutlineColor = Color.Transparent; style.MaxVisibleDistance = 100000; label.Style = style; polygon.Label = label; newFeature.Geometry = polygon; } newFeature.Name = text; layer.AddFeature(newFeature); } } ctl.Refresh(); layer.Save(); //ctl.Globe.Layers.Remove(layer); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void CheckSelFeaturePoint() { if (m_nCurSelected >= 0 && m_nCurSelected < listViewNodeList.Items.Count) { GSOGeoPoint3D geoPoint3D = null; if (m_FeatureSelPoint == null || m_FeatureSelPoint.IsDeleted) { m_FeatureSelPoint = new GSOFeature(); geoPoint3D = new GSOGeoMarker(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/CrossIcon.png"; geoPoint3D.Style = style; m_FeatureSelPoint.Geometry = geoPoint3D; if (m_GlobeControl!=null) { m_GlobeControl.Globe.MemoryLayer.AddFeature(m_FeatureSelPoint); m_GlobeControl.Refresh(); } } /* else { geoPoint3D = m_FeatureSelPoint.Geometry as GSOGeoPoint3D; } */ geoPoint3D = m_FeatureSelPoint.Geometry as GSOGeoPoint3D; geoPoint3D.AltitudeMode = m_Geometry.AltitudeMode; try { ListViewItem itemSel = listViewNodeList.Items[m_nCurSelected]; geoPoint3D.X = Double.Parse(itemSel.SubItems[1].Text); geoPoint3D.Y = Double.Parse(itemSel.SubItems[2].Text); geoPoint3D.Z = Double.Parse(itemSel.SubItems[3].Text); } catch (System.Exception exp) { Log.PublishTxt(exp); } if (m_GlobeControl != null) { m_GlobeControl.Refresh(); } } }
private void txtOldChange() { decimal x; decimal y; if (txtOldLon.Text.Trim() == "") { txtOldLon.Text = 0 + ""; } bool bl = decimal.TryParse(txtOldLon.Text.Trim(), out x); if (!bl) { MessageBox.Show("数据不符合要求!"); return; } if (txtOldLat.Text.Trim() == "") { txtOldLat.Text = 0 + ""; } bl = decimal.TryParse(txtOldLat.Text.Trim(), out y); if (!bl) { MessageBox.Show("数据不符合要求!"); return; } if (startFeat == null || startFeat.IsDeleted) { startFeat = new GSOFeature(); GSOMarkerStyle3D style = new GSOMarkerStyle3D(); GSOGeoMarker p = new GSOGeoMarker(); style.IconPath = Path.GetDirectoryName(Application.ExecutablePath) + "/Resource/CrossIcon.png"; p.Style = style; p.AltitudeMode = EnumAltitudeMode.ClampToGround; p.X = (double)Math.Round(x); p.Y = (double)Math.Round(y); p.Z = 0; startFeat.Name = "起点"; startFeat.CustomID = 000; startFeat.Geometry = p; startFeat = ctl.Globe.MemoryLayer.AddFeature(startFeat); } else { GSOGeoPoint3D startpoint = startFeat.Geometry as GSOGeoPoint3D; if (startpoint != null) { startpoint.X = (double)Math.Round(x); startpoint.Y = (double)Math.Round(y); startpoint.Z = 0; } } ctl.Refresh(); }
private void btnCreateModel_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(txtModelLayer.Text)) { MessageBox.Show("文件路径无效!", "提示"); return; } if (File.Exists(txtModelLayer.Text)) { MessageBox.Show("文件已存在!", "提示"); return; } GSOLayer sourceLayer = ctl.Globe.Layers[cmbLayer.SelectedIndex]; GSOLayer layer = ctl.Globe.Layers.Add(txtModelLayer.Text); lgdFilePath = txtModelLayer.Text; if (layer != null) { GSOFeatures features = sourceLayer.GetAllFeatures(); for (int j = 0; j < features.Length; j++) { GSOFeature f = features[j]; GSOFeature newFeature = new GSOFeature(); string text = ""; if (combLabel.SelectedItem != null) { text = f.GetFieldAsString(combLabel.SelectedItem.ToString()); } if (listFields.CheckedItems.Count > 0) { newFeature.Description = GetBubbleInfo(f, numWidth.Value.ToString(), numHeight.Value.ToString()); } if (f.Geometry is GSOGeoPoint3D) { GSOGeoMarker marker = new GSOGeoMarker(); marker.Position = f.Geometry.GeoCenterPoint; marker.Text = text; GSOMarkerStyle3D style = new GSOMarkerStyle3D(); style.IconPath = Application.StartupPath + "\\Resource\\ddd.png"; marker.Style = style; newFeature.Geometry = marker; } else if (f.Geometry.Type == EnumGeometryType.GeoPolyline3D) { GSOGeoPolyline3D line = (GSOGeoPolyline3D)f.Geometry.Clone(); GSOLabel label = new GSOLabel(); label.Text = text; GSOLabelStyle style = new GSOLabelStyle(); style.HasTracktionLine = false; style.OutlineColor = Color.Transparent; style.MaxVisibleDistance = 100000; label.Style = style; line.Label = label; newFeature.Geometry = line; } else if (f.Geometry.Type == EnumGeometryType.GeoPolygon3D) { GSOGeoPolygon3D polygon = (GSOGeoPolygon3D)f.Geometry.Clone(); GSOLabel label = new GSOLabel(); label.Text = text; GSOLabelStyle style = new GSOLabelStyle(); style.HasTracktionLine = false; style.OutlineColor = Color.Transparent; style.MaxVisibleDistance = 100000; label.Style = style; polygon.Label = label; newFeature.Geometry = polygon; } newFeature.Name = text; layer.AddFeature(newFeature); } } ctl.Refresh(); layer.Save(); //ctl.Globe.Layers.Remove(layer); this.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }