static public ISymbol CreateStandardSymbol(geometryType type) { ISymbol symbol = null; switch (type) { case geometryType.Envelope: case geometryType.Polygon: symbol = new SimpleFillSymbol(); ((SimpleFillSymbol)symbol).OutlineSymbol = new SimpleLineSymbol(); ((SimpleFillSymbol)symbol).Color = RandomColor; ((SimpleLineSymbol)((SimpleFillSymbol)symbol).OutlineSymbol).Color = RandomColor; break; case geometryType.Polyline: symbol = new SimpleLineSymbol(); ((SimpleLineSymbol)symbol).Color = RandomColor; break; case geometryType.Multipoint: case geometryType.Point: symbol = new SimplePointSymbol(); ((SimplePointSymbol)symbol).Color = RandomColor; break; } return(symbol); }
static public ISymbol CreateStandardHighlightSymbol(geometryType type) { ISymbol symbol = null; switch (type) { case geometryType.Envelope: case geometryType.Polygon: symbol = new SimpleFillSymbol(); ((SimpleFillSymbol)symbol).Color = ArgbColor.FromArgb(100, 255, 255, 0); ((SimpleFillSymbol)symbol).OutlineSymbol = new SimpleLineSymbol(); ((SimpleLineSymbol)((SimpleFillSymbol)symbol).OutlineSymbol).Color = ArgbColor.Yellow; ((SimpleLineSymbol)((SimpleFillSymbol)symbol).OutlineSymbol).Width = 5; break; case geometryType.Polyline: symbol = new SimpleLineSymbol(); ((SimpleLineSymbol)symbol).Color = ArgbColor.Yellow; ((SimpleLineSymbol)symbol).Width = 5; break; case geometryType.Point: symbol = new SimplePointSymbol(); ((SimplePointSymbol)symbol).Color = ArgbColor.Yellow; ((SimplePointSymbol)symbol).Size = 10; break; } return(symbol); }
static public ISymbol CreateStandardSelectionSymbol(geometryType type) { ISymbol symbol = null; switch (type) { case geometryType.Envelope: case geometryType.Polygon: symbol = new SimpleFillSymbol(); ((SimpleFillSymbol)symbol).Color = ArgbColor.Transparent; ((SimpleFillSymbol)symbol).OutlineSymbol = new SimpleLineSymbol(); ((SimpleLineSymbol)((SimpleFillSymbol)symbol).OutlineSymbol).Color = ArgbColor.Cyan; ((SimpleLineSymbol)((SimpleFillSymbol)symbol).OutlineSymbol).Width = 3; break; case geometryType.Polyline: symbol = new SimpleLineSymbol(); ((SimpleLineSymbol)symbol).Color = ArgbColor.Cyan; ((SimpleLineSymbol)symbol).Width = 3; break; case geometryType.Point: symbol = new SimplePointSymbol(); ((SimplePointSymbol)symbol).Color = ArgbColor.Cyan; ((SimplePointSymbol)symbol).Size = 5; break; } return(symbol); }
public void DrawGrabbers(IDisplay display) { if (_geometry == null || display == null) { return; } IPointCollection pColl = gView.Framework.SpatialAlgorithms.Algorithm.GeometryPoints(_geometry, false); if (pColl == null || pColl.PointCount == 0) { return; } SimplePointSymbol pointSymbol = new SimplePointSymbol(); pointSymbol.Color = System.Drawing.Color.White; pointSymbol.OutlineColor = System.Drawing.Color.Black; pointSymbol.OutlineWidth = 1; pointSymbol.Marker = SimplePointSymbol.MarkerType.Square; pointSymbol.Size = 5; for (int i = 0; i < pColl.PointCount; i++) { IPoint point = pColl[i]; if (point == null) { continue; } display.Draw(pointSymbol, point); } }
private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { DevExpress.XtraEditors.Controls.EditorButton btn = e.Button; switch (btn.Caption) { case "定位": DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } int focusedRowHandle = this.gridView1.FocusedRowHandle; if (focusedRowHandle == -1) { return; } DataRow dr = this.gridView1.GetDataRow(focusedRowHandle); if (dr["geo"] != null && dr["Name"] != null && dr["fcName"] != null && dr["fc"] != null) { ISurfaceSymbol ss = new SurfaceSymbolClass(); ss.Color = 0xcc00ff00; ICurveSymbol cs = new CurveSymbolClass(); cs.Color = 0xff00ff00; cs.Width = -5; ss.BoundarySymbol = cs; ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = SystemInfo.Instance.SymbolSize; ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); IGeometry objGeo = dr["geo"] as IGeometry; if (objGeo.GeometryType == gviGeometryType.gviGeometryModelPoint) { IModelPoint mp = objGeo as IModelPoint; IModelPointSymbol mps = new ModelPointSymbol(); mps.SetResourceDataSet((dr["fc"] as IFeatureClass).FeatureDataSet); mps.Color = 0xffffff00; IRenderModelPoint rMP = app.Current3DMapControl.ObjectManager.CreateRenderModelPoint(mp, mps, app.Current3DMapControl.ProjectTree.RootID); rMP.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rMP.Guid, 8000); IGeometryFactory geoFact = new GeometryFactory(); IPoint pt = geoFact.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pt.X = mp.X; pt.Y = mp.Y; pt.Z = mp.Z; ITableLabel tl = DrawTool.CreateTableLabel1(1); tl.TitleText = dr["fcName"].ToString(); tl.SetRecord(0, 0, dr["Name"].ToString()); tl.Position = pt; this._listRender.Add(tl.Guid); app.Current3DMapControl.Camera.FlyToObject(tl.Guid, gviActionCode.gviActionFlyTo); } } break; } }
private void btnOK_Click(object sender, EventArgs e) { newRender = new SimpleGeometryRender(); newRender.RenderGroupField = this.comboBox1.Text; if (IsSimplePoint) { ISimplePointSymbol newSymbol = new SimplePointSymbol(); if (this.dataGridView2.Rows[0].Cells[1].Value.ToString() != "") { newSymbol.Alignment = StringToGviPivotAlignment(this.dataGridView2.Rows[0].Cells[1].Value.ToString()); } if (this.dataGridView2.Rows[1].Cells[1].Value.ToString() != "") { newSymbol.Size = int.Parse(this.dataGridView2.Rows[1].Cells[1].Value.ToString()); } if (this.dataGridView1.Rows[0].Cells[1].Value.ToString() != "") { string colstr = this.dataGridView1.Rows[0].Cells[1].Value.ToString(); Color col = Utils.HexNumberToColor(colstr); newSymbol.FillColor = col; } if (this.dataGridView1.Rows[1].Cells[1].Value.ToString() != "") { newSymbol.Style = StringToSimplePointStyle(this.dataGridView1.Rows[1].Cells[1].Value.ToString()); } newRender.Symbol = newSymbol; } else { IImagePointSymbol newSymbol = new ImagePointSymbol(); if (this.dataGridView2.Rows[0].Cells[1].Value.ToString() != "") { newSymbol.Alignment = StringToGviPivotAlignment(this.dataGridView2.Rows[0].Cells[1].Value.ToString()); } if (this.dataGridView2.Rows[1].Cells[1].Value.ToString() != "") { newSymbol.Size = int.Parse(this.dataGridView2.Rows[1].Cells[1].Value.ToString()); } if (this.checkBox1.Checked) { newSymbol.ImageName = this.textBoxPicturePath.Text; } else { newSymbol.ImageName = this.textBoxPictureName.Text; } newRender.Symbol = newSymbol; } }
public SimplePoint() { SimplePointSymbol pSymbol = new SimplePointSymbol(); pSymbol.Color = ArgbColor.Red; pSymbol.Size = 10; this.Symbol = pSymbol; this.Template = new Point(0, 0); RemoveAllGrabbers(); AddGrabber(GrabberIDs.move); }
public GPSTrack() { _polyline = new Polyline(); _polyline.AddPath(new Path()); _symbol = new SimpleLineSymbol(); ((SimpleLineSymbol)_symbol).Color = System.Drawing.Color.Red; _pointSymbol = new SimplePointSymbol(); ((SimplePointSymbol)_pointSymbol).Color = System.Drawing.Color.Red; ((SimplePointSymbol)_pointSymbol).Size = 5; }
private void Initialize(string layerName, IFeatureDataSource dataSource, VisualParameters parameters, LayerType type, RenderingApproach rendering, RasterizationApproach toRasterTechnique, ScaleInterval visibleRange, SimplePointSymbol pointSymbol, LabelParameters labeling) { this.Id = Guid.NewGuid(); this.DataSource = dataSource; this.Rendering = rendering; this.ToRasterTechnique = toRasterTechnique; var geometries = dataSource.GetGeometries(); if (geometries.Count > 0) { this.Type = type | GetGeometryType(geometries.FirstOrDefault()); } else { this.Type = type; } this.Extent = geometries.GetBoundingBox(); this.LayerName = layerName; this.VisualParameters = parameters; this.PointSymbol = pointSymbol ?? new SimplePointSymbol() { SymbolWidth = 4, SymbolHeight = 4 }; //this.PositionFunc = positionFunc; this.Labels = labeling; //Check for missing visibleRange if (this.Labels != null) { if (this.Labels.VisibleRange == null) { this.Labels.VisibleRange = visibleRange; } } this.VisibleRange = (visibleRange == null) ? ScaleInterval.All : visibleRange; }
private void btnAdd_Click(object sender, EventArgs e) { geometryType geomType = geometryType.Unknown; if (_layer != null && _layer.FeatureClass != null) { geomType = _layer.FeatureClass.GeometryType; } if (geomType == geometryType.Unknown) { FormGeometrySelector geomSel = new FormGeometrySelector(); if (geomSel.ShowDialog() != DialogResult.OK || geomSel.GeometryType == geometryType.Unknown) { return; } geomType = geomSel.GeometryType; } ISymbol symbol = null; switch (geomType) { case geometryType.Point: symbol = new SimplePointSymbol(); break; case geometryType.Polyline: symbol = new SimpleLineSymbol(); break; case geometryType.Polygon: symbol = new SimpleFillSymbol(); break; } FormNewSLDRule newRule = new FormNewSLDRule(_layer, new SLDRenderer.Rule(new gView.Framework.OGC.WFS.Filter(GmlVersion.v1), symbol)); if (newRule.ShowDialog() == DialogResult.OK) { _renderer.Rules.Add(newRule.Rule); RendererBox.Items.Add(new RuleItem(newRule.Rule)); } }
/// <summary> /// 创建点 /// </summary> /// <returns></returns> IRenderPoint CreateRenderPoint() { //创建一个点类型实例,设置坐标值 GeometryFactory GF = new GeometryFactory(); IPoint p = GF.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); p.SetCoords(3.3, 4.4, 5.5, 0, 0); //创建一个点类型的样式实例 ISimplePointSymbol sps = new SimplePointSymbol(); sps.Color = Color.Blue; //颜色 sps.Size = 10; //大小 sps.Alignment = gviPivotAlignment.gviPivotAlignBottomCenter; //对齐 return(axRenderControl.ObjectManager.CreateRenderPoint(p, sps, Guid.Empty)); }
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { IWindowsFormsEditorService wfes = provider.GetService( typeof(IWindowsFormsEditorService)) as IWindowsFormsEditorService; if (wfes != null) { ISymbol symbol = (ISymbol)value; if (symbol == null) { symbol = new SimplePointSymbol(); } Form_UITypeEditor_Color dlg = new Form_UITypeEditor_Color(wfes, symbol); wfes.DropDownControl(dlg.panelSymbol); return(dlg.Symbol); } return(value); }
private ISymbol ReadPointSymbol(XmlNode node) { if (node == null) { return(null); } SimplePointSymbol symbol = new SimplePointSymbol(); symbol.Color = ReadColor(node.SelectSingleNode("Graphic/Mark/Fill/CssParameter[@name='fill']")); symbol.OutlineColor = ReadColor( node.SelectSingleNode("Graphic/Mark/Stroke/CssParameter[@name='stroke']"), node.SelectSingleNode("Graphic/Mark/Stroke/CssParameter[@name='stroke-opacity']")); symbol.OutlineWidth = ReadFloat(node.SelectSingleNode("Graphic/Mark/Stroke/CssParameter[@name='stroke-width']")); switch (ReadString(node.SelectSingleNode("Graphic/Mark/WellKnownName")).ToLower()) { case "circle": symbol.Marker = SimplePointSymbol.MarkerType.Circle; break; case "cross": symbol.Marker = SimplePointSymbol.MarkerType.Cross; break; case "triangle": symbol.Marker = SimplePointSymbol.MarkerType.Triangle; break; case "square": symbol.Marker = SimplePointSymbol.MarkerType.Square; break; case "star": symbol.Marker = SimplePointSymbol.MarkerType.Star; break; } symbol.Size = ReadFloat(node.SelectSingleNode("Graphic/Size")); return(symbol); }
void axRenderControl1_RcMouseClickSelect2(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (IntersectPoint == null) { return; } if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectClick)) { this.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect2); ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = 20; ps.FillColor = System.Drawing.Color.Red; this.axRenderControl1.ObjectManager.CreateRenderPoint(IntersectPoint, ps, rootId); for (int i = 0; i < videoList.Count; i++) { IViewshed v = videoList[i]; v.Unhighlight(); double wx, wy; bool isIn = v.WorldToScreen(IntersectPoint, 1, out wx, out wy); if (isIn) { v.Highlight(System.Drawing.Color.Red); IPoint poiInWorld = v.ScreenToWorld(wx, wy); if (poiInWorld != null) { this.axRenderControl1.InteractMode = gviInteractMode.gviInteractFocus; bool bFocus = this.axRenderControl1.Camera.SetFocus(poiInWorld); if (bFocus) { MessageBox.Show("set focus success!"); } } } } } }
private void btnCreatePoint_Click(object sender, EventArgs e) { _geoEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 if (gfactory == null) { gfactory = new GeometryFactory(); } fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ); fde_point.SetCoords(0, 0, 0, 0, 0); ISimplePointSymbol pointSymbol = new SimplePointSymbol(); pointSymbol.Size = 10; rpoint = this.axRenderControl1.ObjectManager.CreateRenderPoint(fde_point, pointSymbol, rootId); resultCode = _geoEditor.StartEditRenderGeometry(rpoint, gviGeoEditType.gviGeoEditCreator); if (!resultCode) { MessageBox.Show(this.axRenderControl1.GetLastError().ToString()); } }
private void TemplateFromTransformedGeomety(IGeometry geometry) { if (geometry == null) { return; } _template = geometry.Clone() as IGeometry; if (_template == null) { return; } TranslateGeometry(_template, -_xOffset, -_yOffset); RotateGeometry(_template, Math.Cos(-_angle), Math.Sin(-_angle)); ScaleGeometry(_template, 1.0 / _scaleX, 1.0 / _scaleY); if (!(this is Ghost)) { if (_template is IPoint) { SimplePointSymbol pSymbol = new SimplePointSymbol(); pSymbol.Size = 10; pSymbol.Color = System.Drawing.Color.FromArgb(150, 255, 255, 0); _ghost = new Ghost(_template, pSymbol); } if (_template is IPolygon || _template is IPolyline) { SimpleLineSymbol lineSymbol = new SimpleLineSymbol(); lineSymbol.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; lineSymbol.Color = System.Drawing.Color.Gray; _ghost = new Ghost(_template, lineSymbol); } } }
virtual public void DrawGrabbers(IDisplay display) { IMultiPoint grabbers = Grabbers(display, true); if (grabbers == null) { return; } System.Drawing.Drawing2D.SmoothingMode smode = display.GraphicsContext.SmoothingMode; display.GraphicsContext.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; SimplePointSymbol pointSymbol = new SimplePointSymbol(); pointSymbol.Color = System.Drawing.Color.White; pointSymbol.OutlineColor = System.Drawing.Color.Black; pointSymbol.OutlineWidth = 1; pointSymbol.Size = 8; if (display.GraphicsContainer.EditMode == GrabberMode.Pointer) { Ring ring = new Ring(); for (int i = 0; i < Math.Min(grabbers.PointCount, 4); i++) { ring.AddPoint(grabbers[i]); } Polygon polygon = new Polygon(); polygon.AddRing(ring); SimpleLineSymbol lSymbol = new SimpleLineSymbol(); lSymbol.Color = System.Drawing.Color.Gray; lSymbol.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash; display.Draw(lSymbol, polygon); lSymbol.Release(); for (int i = 0; i < grabbers.PointCount; i++) { if (!UseGrabber((GrabberIDs)i)) { continue; } if (i > 7 && pointSymbol.Color == System.Drawing.Color.White) { pointSymbol.Color = System.Drawing.Color.Yellow; DrawRotationGrabberline(display); } display.Draw(pointSymbol, grabbers[i]); } } else if (display.GraphicsContainer.EditMode == GrabberMode.Vertex) { pointSymbol.Marker = SimplePointSymbol.MarkerType.Square; pointSymbol.Size = 5; for (int i = 0; i < grabbers.PointCount; i++) { display.Draw(pointSymbol, grabbers[i]); } } display.GraphicsContext.SmoothingMode = smode; }
private void DrawEnvelope(IEnvelope env, ISpatialCRS crs, out ArrayList rPolylineList) { rPolylineList = new ArrayList(); IPolyline polyline = new GeometryFactory().CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; polyline.SpatialCRS = crs; IPoint point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); point.SpatialCRS = crs; ISimplePointSymbol psy = new SimplePointSymbol(); psy.FillColor = System.Drawing.Color.Yellow; psy.Size = 10; ICurveSymbol cSymbol = new CurveSymbol(); cSymbol.Color = System.Drawing.Color.Yellow; cSymbol.Width = 2; point.SetCoords(env.MinX, env.MinY, env.MinZ, 0, 0); //0 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MaxX, env.MinY, env.MinZ, 0, 1); //1 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MaxX, env.MaxY, env.MinZ, 0, 2); //2 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MinX, env.MaxY, env.MinZ, 0, 3); //3 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MinX, env.MinY, env.MinZ, 0, 4); //0 polyline.AppendPoint(point); //close rPolylineList.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cSymbol, rootId)); polyline.SetEmpty(); point.SetCoords(env.MinX, env.MaxY, env.MaxZ, 0, 0); //4 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MaxX, env.MaxY, env.MaxZ, 0, 0); //5 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MaxX, env.MinY, env.MaxZ, 0, 0); //6 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MinX, env.MinY, env.MaxZ, 0, 0); //7 //this.axRenderControl1.ObjectManager.CreateRenderPoint(point, psy); polyline.AppendPoint(point); point.SetCoords(env.MinX, env.MaxY, env.MaxZ, 0, 0); //4 polyline.AppendPoint(point); //close rPolylineList.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cSymbol, rootId)); polyline.SetEmpty(); point.SetCoords(env.MinX, env.MinY, env.MinZ, 0, 0); //0 polyline.AppendPoint(point); point.SetCoords(env.MinX, env.MinY, env.MaxZ, 0, 0); //7 polyline.AppendPoint(point); rPolylineList.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cSymbol, rootId)); polyline.SetEmpty(); point.SetCoords(env.MaxX, env.MinY, env.MinZ, 0, 0); //1 polyline.AppendPoint(point); point.SetCoords(env.MaxX, env.MinY, env.MaxZ, 0, 0); //6 polyline.AppendPoint(point); rPolylineList.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cSymbol, rootId)); polyline.SetEmpty(); point.SetCoords(env.MaxX, env.MaxY, env.MinZ, 0, 0); //2 polyline.AppendPoint(point); point.SetCoords(env.MaxX, env.MaxY, env.MaxZ, 0, 0); //5 polyline.AppendPoint(point); rPolylineList.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cSymbol, rootId)); polyline.SetEmpty(); point.SetCoords(env.MinX, env.MaxY, env.MinZ, 0, 0); //3 polyline.AppendPoint(point); point.SetCoords(env.MinX, env.MaxY, env.MaxZ, 0, 0); //4 polyline.AppendPoint(point); rPolylineList.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cSymbol, rootId)); }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 开启顶点捕捉 this.axRenderControl1.MouseSnapMode = gviMouseSnapMode.gviMouseSnapVertex; _geoEditor = this.axRenderControl1.ObjectEditor; enableSnapBox.CheckedChanged += new System.EventHandler(enableSnapBox_CheckedChanged); this.toolStripComboBoxMeasure.SelectedIndex = 0; this.toolStripComboBoxEdit.SelectedIndex = 0; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "MouseSnap.html"; } layerEnvelopeMap = new Hashtable(); fcGUIDMap = new Hashtable(); // 可视化Point类型FeatureLayer { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\point.FDB"); ci.Database = tmpFDBPath; ISimpleGeometryRender render = new SimpleGeometryRender(); ISimplePointSymbol pointSymbol = new SimplePointSymbol(); pointSymbol.Size = 10; render.Symbol = pointSymbol; FeatureLayerVisualize(ci, true, "Point", render); } // 可视化Polyline类型FeatureLayer { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\polyline.FDB"); ci.Database = tmpFDBPath; FeatureLayerVisualize(ci, false, "Polyline", null); } // 可视化Polygon类型FeatureLayer { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\polygon.FDB"); ci.Database = tmpFDBPath; FeatureLayerVisualize(ci, false, "Polygon", null); } // 可视化ModelPoint类型FeatureLayer { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; FeatureLayerVisualize(ci, false, "ModelPoint", null); } // 绑定选择事件 this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); }
private void GetData() { if (this.cbLayer.SelectedItem == null) { return; } DF3DFeatureClass dffc = this.cbLayer.SelectedItem as DF3DFeatureClass; if (dffc == null) { return; } IFeatureClass fc = dffc.GetFeatureClass(); if (fc == null) { return; } if (_num > _count || _count == 0) { return; } ISpatialFilter filter = this._filter; filter.ResultBeginIndex = _num - 1; filter.ResultLimit = 1; IFdeCursor cursor = null; IRowBuffer row = null; try { cursor = fc.Search(filter, false); if ((row = cursor.NextRow()) != null) { #region 定位 int geoindex = row.FieldIndex("Geometry"); DF3DApplication app = DF3DApplication.Application; if (geoindex != -1 && !row.IsNull(geoindex) && app != null && app.Current3DMapControl != null) { ISurfaceSymbol ss = new SurfaceSymbolClass(); ss.Color = 0xcc00ff00; ICurveSymbol cs = new CurveSymbolClass(); cs.Color = 0xff00ff00; cs.Width = -5; ss.BoundarySymbol = cs; ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = SystemInfo.Instance.SymbolSize; ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); IGeometry geo = row.GetValue(geoindex) as IGeometry; IPoint ptTL = null; if (geo.GeometryType == gviGeometryType.gviGeometryMultiPolyline) { double x = 0; double y = 0; double z = 0; IMultiPolyline mPolyline = geo as IMultiPolyline; for (int m = 0; m < mPolyline.GeometryCount; m++) { IPolyline polyline = mPolyline.GetPolyline(m); IPoint pttemp = polyline.Midpoint; x += pttemp.X; y += pttemp.Y; z += pttemp.Z; } x = x / mPolyline.GeometryCount; y = y / mPolyline.GeometryCount; z = z / mPolyline.GeometryCount; ptTL = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); ptTL.X = x; ptTL.Y = y; ptTL.Z = z; IRenderMultiPolyline rMPolyline = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolyline(mPolyline, cs, app.Current3DMapControl.ProjectTree.RootID); rMPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything; rMPolyline.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rMPolyline.Guid, 8000); app.Current3DMapControl.Camera.FlyToObject(rMPolyline.Guid, gviActionCode.gviActionJump); } else if (geo.GeometryType == gviGeometryType.gviGeometryMultiPolygon) { double x = 0; double y = 0; double z = 0; IMultiPolygon mPolygon = geo as IMultiPolygon; for (int m = 0; m < mPolygon.GeometryCount; m++) { IPolygon polygon = mPolygon.GetPolygon(m); IPoint pttemp = polygon.Centroid; x += pttemp.X; y += pttemp.Y; z += pttemp.Z; } x = x / mPolygon.GeometryCount; y = y / mPolygon.GeometryCount; z = z / mPolygon.GeometryCount; ptTL = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); ptTL.X = x; ptTL.Y = y; ptTL.Z = z; IRenderMultiPolygon rMPolygon = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolygon(mPolygon, ss, app.Current3DMapControl.ProjectTree.RootID); rMPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything; rMPolygon.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rMPolygon.Guid, 8000); app.Current3DMapControl.Camera.FlyToObject(rMPolygon.Guid, gviActionCode.gviActionJump); } else if (geo.GeometryType == gviGeometryType.gviGeometryPolyline) { IPolyline polyline = geo as IPolyline; ptTL = polyline.Midpoint; IRenderPolyline rPolyline = app.Current3DMapControl.ObjectManager.CreateRenderPolyline(polyline, cs, app.Current3DMapControl.ProjectTree.RootID); rPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything; rPolyline.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rPolyline.Guid, 8000); app.Current3DMapControl.Camera.FlyToObject(rPolyline.Guid, gviActionCode.gviActionJump); } else if (geo.GeometryType == gviGeometryType.gviGeometryPoint) { IPoint point = geo as IPoint; ptTL = point; IRenderPoint rPoint = app.Current3DMapControl.ObjectManager.CreateRenderPoint(point, ps, app.Current3DMapControl.ProjectTree.RootID); rPoint.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rPoint.Guid, 8000); app.Current3DMapControl.Camera.FlyToObject(rPoint.Guid, gviActionCode.gviActionJump); } else if (geo.GeometryType == gviGeometryType.gviGeometryPolygon) { IPolygon polygon = geo as IPolygon; ptTL = polygon.Centroid; IRenderPolygon rPolygon = app.Current3DMapControl.ObjectManager.CreateRenderPolygon(polygon, ss, app.Current3DMapControl.ProjectTree.RootID); rPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything; rPolygon.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(rPolygon.Guid, 8000); app.Current3DMapControl.Camera.FlyToObject(rPolygon.Guid, gviActionCode.gviActionJump); } else if (geo.GeometryType == gviGeometryType.gviGeometryModelPoint) { ptTL = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); IModelPoint mp = geo as IModelPoint; ptTL.X = mp.X; ptTL.Y = mp.Y; ptTL.Z = mp.Z; IModelPointSymbol mps = new ModelPointSymbol(); mps.SetResourceDataSet(fc.FeatureDataSet); IRenderGeometry render = app.Current3DMapControl.ObjectManager.CreateRenderModelPoint(mp, mps, app.Current3DMapControl.ProjectTree.RootID); render.Glow(8000); app.Current3DMapControl.ObjectManager.DelayDelete(render.Guid, 8000); app.Current3DMapControl.Camera.FlyToObject(render.Guid, gviActionCode.gviActionJump); } if (ptTL != null) { ITableLabel tl = DrawTool.CreateTableLabel1(1); tl.TitleText = "属性查询"; tl.SetRecord(0, 0, dffc.ToString()); if (ptTL != null) { tl.Position = ptTL; } app.Current3DMapControl.Camera.FlyToObject(tl.Guid, gviActionCode.gviActionFlyTo); app.Current3DMapControl.ObjectManager.DelayDelete(tl.Guid, 8000); } } #endregion FacilityClass facc = dffc.GetFacilityClass(); if (facc == null) { IFieldInfoCollection fiCol = fc.GetFields(); for (int i = 0; i < fiCol.Count; i++) { IFieldInfo fi = fiCol.Get(i); object obj = row.GetValue(i); string str = ""; switch (fi.FieldType) { case gviFieldType.gviFieldBlob: case gviFieldType.gviFieldUnknown: case gviFieldType.gviFieldGeometry: continue; case gviFieldType.gviFieldFloat: case gviFieldType.gviFieldDouble: double d; if (double.TryParse(obj.ToString(), out d)) { str = d.ToString("0.00"); } break; default: str = obj.ToString(); break; } DataRow dr = this._dtShow.NewRow(); dr["Property"] = string.IsNullOrEmpty(fi.Alias) ? fi.Name : fi.Alias; dr["Value"] = str; this._dtShow.Rows.Add(dr); } } else { List <DFDataConfig.Class.FieldInfo> facFields = facc.FieldInfoCollection; if (facFields != null) { foreach (DFDataConfig.Class.FieldInfo facField in facFields) { if (!facField.CanQuery) { continue; } int index = row.FieldIndex(facField.Name); if (index != -1 && !row.IsNull(index)) { object obj = row.GetValue(index); string str = ""; IFieldInfo fiFC = row.Fields.Get(index); switch (fiFC.FieldType) { case gviFieldType.gviFieldBlob: case gviFieldType.gviFieldUnknown: case gviFieldType.gviFieldGeometry: continue; case gviFieldType.gviFieldFloat: case gviFieldType.gviFieldDouble: double d; if (double.TryParse(obj.ToString(), out d)) { str = d.ToString("0.00"); } break; default: str = obj.ToString(); break; } DataRow dr = this._dtShow.NewRow(); dr["Property"] = facField.ToString(); dr["Value"] = str; this._dtShow.Rows.Add(dr); } } } } } } catch (Exception ex) { } finally { if (cursor != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor); cursor = null; } if (row != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(row); row = null; } } }
private static int AddGeometry(drawing.Graphics graphics, SqlGeometry geometry, Func <Point, Point> transform, drawing.Pen pen, drawing.Brush brush, double pointSize, SimplePointSymbol pointSymbol) { if (geometry.IsNotValidOrEmpty()) { return(1); } //CheckGeometry(geometry); var type = geometry.GetOpenGisType(); switch (type) { case OpenGisGeometryType.Point: AddPoint(graphics, geometry, transform, pen, brush, pointSize, pointSymbol); //, pointSymbol, symbol); break; case OpenGisGeometryType.LineString: AddLineString(graphics, geometry, transform, pen, brush); break; case OpenGisGeometryType.Polygon: AddPolygon(graphics, geometry, transform, pen, brush); break; case OpenGisGeometryType.MultiPoint: AddMultiPoint(graphics, geometry, transform, pen, brush, pointSize, pointSymbol); //, pointSymbol, symbol); break; case OpenGisGeometryType.MultiLineString: AddMultiLineString(graphics, geometry, transform, pen, brush); break; case OpenGisGeometryType.MultiPolygon: AddMultiPolygon(graphics, geometry, transform, pen, brush); break; case OpenGisGeometryType.GeometryCollection: System.Diagnostics.Trace.WriteLine($"******************WARNNING------at SqlSpatialToGdiBitmap.cs GeometryCollection escaped {new System.Diagnostics.StackTrace().GetFrame(0).GetFileLineNumber()}"); break; case OpenGisGeometryType.CircularString: case OpenGisGeometryType.CompoundCurve: case OpenGisGeometryType.CurvePolygon: default: throw new NotImplementedException(); } return(0); }
public PointRenderForm(IGeometryRender geoRender, object[] fieldNamesItems, bool isSimplePoint) { InitializeComponent(); IsSimplePoint = isSimplePoint; { this.comboBox1.Items.AddRange(fieldNamesItems); this.comboBox1.Text = ""; if (geoRender != null) { int index = Utils.getIndexFromItems(fieldNamesItems, geoRender.RenderGroupField); this.comboBox1.SelectedIndex = index; } } ISimpleGeometryRender render = geoRender as ISimpleGeometryRender; if (render == null) { if (isSimplePoint) { this.dataGridView1.Enabled = true; this.checkBox1.Enabled = false; this.textBoxPictureName.Enabled = false; this.textBoxPicturePath.Enabled = false; ISimplePointSymbol tmpSymbol = new SimplePointSymbol(); string[] row1 = new string[] { "Alignment", tmpSymbol.Alignment.ToString() }; string[] row2 = new string[] { "Size", tmpSymbol.Size.ToString() }; object[] rows = new object[] { row1, row2 }; foreach (string[] rowArray in rows) { this.dataGridView2.Rows.Add(rowArray); } string[] row11 = new string[] { "FillColor", tmpSymbol.FillColor.ToString() }; string[] row12 = new string[] { "Style", tmpSymbol.Style.ToString() }; object[] rows2 = new object[] { row11, row12 }; foreach (string[] rowArray in rows2) { this.dataGridView1.Rows.Add(rowArray); } return; } else { this.dataGridView1.Enabled = false; this.checkBox1.Enabled = true; this.textBoxPictureName.Enabled = true; IImagePointSymbol tmpSymbol = new ImagePointSymbol(); string[] row1 = new string[] { "Alignment", tmpSymbol.Alignment.ToString() }; string[] row2 = new string[] { "Size", tmpSymbol.Size.ToString() }; object[] rows = new object[] { row1, row2 }; foreach (string[] rowArray in rows) { this.dataGridView2.Rows.Add(rowArray); } this.textBoxPictureName.Text = ""; return; } } if (render.Symbol == null) { return; } if (isSimplePoint) { this.dataGridView1.Enabled = true; this.checkBox1.Enabled = false; this.textBoxPictureName.Enabled = false; this.textBoxPicturePath.Enabled = false; ISimplePointSymbol symbol = render.Symbol as ISimplePointSymbol; if (symbol != null) { string[] row1 = new string[] { "Alignment", symbol.Alignment.ToString() }; string[] row2 = new string[] { "Size", symbol.Size.ToString() }; object[] rows = new object[] { row1, row2 }; foreach (string[] rowArray in rows) { this.dataGridView2.Rows.Add(rowArray); } string[] row11 = new string[] { "FillColor", symbol.FillColor.ToString() }; string[] row12 = new string[] { "Style", symbol.Style.ToString() }; object[] rows2 = new object[] { row11, row12 }; foreach (string[] rowArray in rows2) { this.dataGridView1.Rows.Add(rowArray); } } else { ISimplePointSymbol tmpSymbol = new SimplePointSymbol(); string[] row1 = new string[] { "Alignment", tmpSymbol.Alignment.ToString() }; string[] row2 = new string[] { "Size", tmpSymbol.Size.ToString() }; object[] rows = new object[] { row1, row2 }; foreach (string[] rowArray in rows) { this.dataGridView2.Rows.Add(rowArray); } string[] row11 = new string[] { "FillColor", tmpSymbol.FillColor.ToString() }; string[] row12 = new string[] { "Style", tmpSymbol.Style.ToString() }; object[] rows2 = new object[] { row11, row12 }; foreach (string[] rowArray in rows2) { this.dataGridView1.Rows.Add(rowArray); } } } else { this.dataGridView1.Enabled = false; this.checkBox1.Enabled = true; this.textBoxPictureName.Enabled = true; IImagePointSymbol symbol = render.Symbol as IImagePointSymbol; if (symbol != null) { string[] row1 = new string[] { "Alignment", symbol.Alignment.ToString() }; string[] row2 = new string[] { "Size", symbol.Size.ToString() }; object[] rows = new object[] { row1, row2 }; foreach (string[] rowArray in rows) { this.dataGridView2.Rows.Add(rowArray); } this.textBoxPicturePath.Text = symbol.ImageName; this.textBoxPictureName.Text = symbol.ImageName; } else { IImagePointSymbol tmpSymbol = new ImagePointSymbol(); string[] row1 = new string[] { "Alignment", tmpSymbol.Alignment.ToString() }; string[] row2 = new string[] { "Size", tmpSymbol.Size.ToString() }; object[] rows = new object[] { row1, row2 }; foreach (string[] rowArray in rows) { this.dataGridView2.Rows.Add(rowArray); } this.textBoxPictureName.Text = ""; } } }
private static void AddPoint(drawing.Graphics graphics, SqlGeometry point, Func <Point, Point> transform, drawing.Pen pen, drawing.Brush brush, double pointSize, SimplePointSymbol pointSymbol) { var parsedPoint = transform(point.AsWpfPoint()).AsPoint(); if (pointSymbol?.GeometryPointSymbol != null) { GeometryHelper.Transform(graphics, pointSymbol.GeometryPointSymbol, parsedPoint, pen, brush); } else if (pointSymbol?.ImagePointSymbolGdiPlus != null) { //96.09.21 //graphics.DrawImage(pointSymbol.ImagePointSymbol, new drawing.RectangleF((float)parsedPoint.X - _symbolOffset, (float)parsedPoint.Y - _symbolOffset, _symbolSize, _symbolSize)); graphics.DrawImage(pointSymbol.ImagePointSymbolGdiPlus, new drawing.RectangleF((float)(parsedPoint.X - pointSymbol.SymbolWidth / 2.0), (float)(parsedPoint.Y - pointSymbol.SymbolHeight), (float)pointSymbol.SymbolWidth, (float)pointSymbol.SymbolHeight)); } else { graphics.DrawEllipse(pen, (float)(parsedPoint.X - pointSymbol.SymbolWidth / 2.0), (float)(parsedPoint.Y - pointSymbol.SymbolHeight / 2.0), (float)pointSymbol.SymbolWidth, (float)pointSymbol.SymbolHeight); graphics.FillEllipse(brush, (float)(parsedPoint.X - pointSymbol.SymbolWidth / 2.0), (float)(parsedPoint.Y - pointSymbol.SymbolHeight / 2.0), (float)pointSymbol.SymbolWidth, (float)pointSymbol.SymbolHeight); } }
private static void AddMultiPoint(drawing.Graphics graphics, SqlGeometry multiPoint, Func <Point, Point> transform, drawing.Pen pen, drawing.Brush brush, double pointSize, SimplePointSymbol pointSymbol)//, ImageSource pointSymbol, Geometry symbol) { int numberOfPoints = multiPoint.STNumGeometries().Value; for (int i = 0; i < numberOfPoints; i++) { var point = multiPoint.STGeometryN(i + 1); if (point.IsNotValidOrEmpty()) { continue; } AddPoint(graphics, point, transform, pen, brush, pointSize, pointSymbol); } }
//const int _pointSize = 2; //const int _offset = (int)(_pointSize / 2.0); ////const int _symbolSize = 16; //static readonly int _symbolOffset;//= (int)(_symbolSize / 2.0); public static void WriteToImage(drawing.Bitmap image, List <SqlGeometry> geometries, Func <Point, Point> transform, drawing.Pen pen, drawing.Brush brush, double pointSize, SimplePointSymbol pointSymbol) { drawing.Graphics graphics = drawing.Graphics.FromImage(image); int p = 0; if (geometries != null) { foreach (SqlGeometry item in geometries) { p += AddGeometry(graphics, item, transform, pen, brush, pointSize, pointSymbol); } } //return image; }
public static drawing.Bitmap ParseSqlGeometry(List <SqlGeometry> geometries, double width, double height, Func <Point, Point> transform, drawing.Pen pen, drawing.Brush brush, double pointSize, SimplePointSymbol pointSymbol) { var result = new drawing.Bitmap((int)width, (int)height); drawing.Graphics graphics = drawing.Graphics.FromImage(result); int p = 0; if (geometries != null) { foreach (SqlGeometry item in geometries) { p += AddGeometry(graphics, item, transform, pen, brush, pointSize, pointSymbol); } } return(result); }
/// <summary> /// 参数化建模 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnDriveModel_Click(object sender, System.EventArgs e) { try { if (polyline != null) { center = polyline.Envelope.Center; IModelPoint mp = new GeometryFactory().CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; mp.SpatialCRS = datasetCRS; mp.Position = center; IModel model = new ResourceFactory().CreateModel(); IDrawGroup group = new DrawGroup(); IDrawPrimitive primitive = new DrawPrimitive(); IDrawMaterial material = new DrawMaterial(); material.TextureName = (strMediaPath + @"\shp\road\textrure.jpg"); material.CullMode = gviCullFaceMode.gviCullNone; material.WrapModeS = gviTextureWrapMode.gviTextureWrapRepeat; material.WrapModeT = gviTextureWrapMode.gviTextureWrapRepeat; IFloatArray va = new FloatArray(); IFloatArray ta = new FloatArray(); // 逐点外扩 for (int i = 0; i < polyline.PointCount; i++) { #region 单独处理最后一个点 if (i == polyline.PointCount - 1) { curPoint = polyline.GetPoint(i); vecCurPos = curPoint.Position; // 最后一个点重用最后的方向向量 vecTarget = vecDirect.CrossProduct(vecZ); vecTarget.Normalize(); vecTarget.MultiplyByScalar(width / 2); vecP = vecCurPos.Add(vecTarget); vecTarget.MultiplyByScalar(-1); vecQ = vecCurPos.Add(vecTarget); // 设置外扩点 P = curPoint.Clone() as IPoint; P.Position = vecP; Q = curPoint.Clone() as IPoint; Q.Position = vecQ; // 把点坐标加进顶点数组 va.Append((float)(vecP.X - center.X)); va.Append((float)(vecP.Y - center.Y)); va.Append((float)(vecP.Z - center.Z)); va.Append((float)(vecQ.X - center.X)); va.Append((float)(vecQ.Y - center.Y)); va.Append((float)(vecQ.Z - center.Z)); // 加纹理坐标 ta.Append(0); //P点纹理 if (i == 0) { lastV = 0.0; } else { lastV = lastV + length / 10; //v方向上每隔10米重复一次 } ta.Append((float)lastV); ta.Append(1); //Q点纹理 ta.Append((float)lastV); { ISimplePointSymbol ps = new SimplePointSymbol(); ps.FillColor = System.Drawing.Color.Yellow; ps.Size = 5; rPointToDelList.Add(this.axRenderControl1.ObjectManager.CreateRenderPoint(P, ps, rootId)); rPointToDelList.Add(this.axRenderControl1.ObjectManager.CreateRenderPoint(Q, ps, rootId)); } break; } #endregion // 当不是最后一个点时: curPoint = polyline.GetPoint(i); nextPoint = polyline.GetPoint(i + 1); vecCurPos = curPoint.Position; vecNextPos = nextPoint.Position; // 运算 vecNextPos.MultiplyByScalar(-1); vecDirect = vecCurPos.Add(vecNextPos); //方向向量 vecZ.Set(0, 0, 1); vecTarget = vecDirect.CrossProduct(vecZ); vecTarget.Normalize(); vecTarget.MultiplyByScalar(width / 2); vecP = vecCurPos.Add(vecTarget); vecTarget.MultiplyByScalar(-1); vecQ = vecCurPos.Add(vecTarget); // 设置外扩点 P = curPoint.Clone() as IPoint; P.Position = vecP; Q = curPoint.Clone() as IPoint; Q.Position = vecQ; // 把点坐标加进顶点数组 va.Append((float)(vecP.X - center.X)); va.Append((float)(vecP.Y - center.Y)); va.Append((float)(vecP.Z - center.Z)); va.Append((float)(vecQ.X - center.X)); va.Append((float)(vecQ.Y - center.Y)); va.Append((float)(vecQ.Z - center.Z)); // 加纹理坐标 ta.Append(0); //P点纹理 if (i == 0) { lastV = 0.0; } else { lastV = lastV + length / 5; //v方向上每隔10米重复一次 } length = vecDirect.Length; //计算长度给奇数点用 ta.Append((float)lastV); ta.Append(1); //Q点纹理 ta.Append((float)lastV); { ISimplePointSymbol ps = new SimplePointSymbol(); ps.FillColor = System.Drawing.Color.Yellow; ps.Size = 5; rPointToDelList.Add(this.axRenderControl1.ObjectManager.CreateRenderPoint(P, ps, rootId)); rPointToDelList.Add(this.axRenderControl1.ObjectManager.CreateRenderPoint(Q, ps, rootId)); } } // 计算索引坐标 IUInt16Array ia = new UInt16Array(); for (int i = 0; i < va.Length / 6 - 1; i++) { ia.Append((ushort)(2 * i)); ia.Append((ushort)(2 * i + 1)); ia.Append((ushort)(2 * i + 2)); ia.Append((ushort)(2 * i + 1)); ia.Append((ushort)(2 * i + 3)); ia.Append((ushort)(2 * i + 2)); } primitive.VertexArray = va; primitive.TexcoordArray = ta; primitive.IndexArray = ia; primitive.Material = material; group.AddPrimitive(primitive); model.AddGroup(group); // 在内存中临时存储模型 string modelName = fid.ToString(); this.axRenderControl1.ObjectManager.AddModel(modelName, model); mp.ModelName = modelName; mp.ModelEnvelope = model.Envelope; // 可视化临时模型 IRenderModelPoint rmp = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(mp, null, rootId); rmp.MaxVisibleDistance = 100000; rmp.MouseSelectMask = gviViewportMask.gviViewNone; rModelpointToDelList.Add(rmp); } } catch (System.Exception ex) { if (ex.GetType().Name.Equals("UnauthorizedAccessException")) { MessageBox.Show("需要标准runtime授权"); } else { MessageBox.Show(ex.Message); } } }
private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { DevExpress.XtraEditors.Controls.EditorButton btn = e.Button; switch (btn.Caption) { case "定位": DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } int focusedRowHandle = this.gridView1.FocusedRowHandle; if (focusedRowHandle == -1) { return; } DataRow dr = this.gridView1.GetDataRow(focusedRowHandle); if (dr["geo"] != null && dr["Name"] != null && dr["fcName"] != null) { ISurfaceSymbol ss = new SurfaceSymbolClass(); ss.Color = 0xcc00ff00; ICurveSymbol cs = new CurveSymbolClass(); cs.Color = 0xff00ff00; cs.Width = -5; ss.BoundarySymbol = cs; ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = SystemInfo.Instance.SymbolSize; ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); IGeometry objGeo = dr["geo"] as IGeometry; IPoint pt = null; if (objGeo.GeometryType == gviGeometryType.gviGeometryMultiPolyline) { double x = 0; double y = 0; double z = 0; IMultiPolyline mPolyline = objGeo as IMultiPolyline; for (int m = 0; m < mPolyline.GeometryCount; m++) { IPolyline polyline = mPolyline.GetPolyline(m); IPoint pttemp = polyline.Midpoint; x += pttemp.X; y += pttemp.Y; z += pttemp.Z; } x = x / mPolyline.GeometryCount; y = y / mPolyline.GeometryCount; z = z / mPolyline.GeometryCount; pt = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pt.X = x; pt.Y = y; pt.Z = z; IRenderMultiPolyline rMPolyline = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolyline(mPolyline, cs, app.Current3DMapControl.ProjectTree.RootID); rMPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything; rMPolyline.Glow(8000); this._listRender.Add(rMPolyline.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryMultiPolygon) { double x = 0; double y = 0; double z = 0; IMultiPolygon mPolygon = objGeo as IMultiPolygon; for (int m = 0; m < mPolygon.GeometryCount; m++) { IPolygon polygon = mPolygon.GetPolygon(m); IPoint pttemp = polygon.Centroid; x += pttemp.X; y += pttemp.Y; z += pttemp.Z; } x = x / mPolygon.GeometryCount; y = y / mPolygon.GeometryCount; z = z / mPolygon.GeometryCount; pt = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pt.X = x; pt.Y = y; pt.Z = z; IRenderMultiPolygon rMPolygon = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolygon(mPolygon, ss, app.Current3DMapControl.ProjectTree.RootID); rMPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything; rMPolygon.Glow(8000); this._listRender.Add(rMPolygon.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryPolyline) { IPolyline polyline = objGeo as IPolyline; pt = polyline.Midpoint; IRenderPolyline rPolyline = app.Current3DMapControl.ObjectManager.CreateRenderPolyline(polyline, cs, app.Current3DMapControl.ProjectTree.RootID); rPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything; rPolyline.Glow(8000); this._listRender.Add(rPolyline.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryPoint) { IPoint point = objGeo as IPoint; pt = point; IRenderPoint rPoint = app.Current3DMapControl.ObjectManager.CreateRenderPoint(point, ps, app.Current3DMapControl.ProjectTree.RootID); rPoint.Glow(8000); this._listRender.Add(rPoint.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryPolygon) { IPolygon polygon = objGeo as IPolygon; pt = polygon.Centroid; IRenderPolygon rPolygon = app.Current3DMapControl.ObjectManager.CreateRenderPolygon(polygon, ss, app.Current3DMapControl.ProjectTree.RootID); rPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything; rPolygon.Glow(8000); this._listRender.Add(rPolygon.Guid); } else { return; } ITableLabel tl = DrawTool.CreateTableLabel1(1); tl.TitleText = dr["fcName"].ToString(); tl.SetRecord(0, 0, dr["Name"].ToString()); tl.Position = pt; this._listRender.Add(tl.Guid); app.Current3DMapControl.Camera.FlyToObject(tl.Guid, gviActionCode.gviActionFlyTo); } break; } }
public VectorLayer(string layerName, IFeatureDataSource dataSource, VisualParameters parameters, LayerType type, RenderingApproach rendering, RasterizationApproach toRasterTechnique, ScaleInterval visibleRange, SimplePointSymbol pointSymbol = null, LabelParameters labeling = null) { Initialize(layerName, dataSource, parameters, type, rendering, toRasterTechnique, visibleRange, pointSymbol, labeling); }
private void ClickQuery() { DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } try { IFeatureLayer fl = this._drawTool.GetSelectFeatureLayerPickResult().FeatureLayer; if (fl == null) { return; } int featureId = this._drawTool.GetSelectFeatureLayerPickResult().FeatureId; FacilityClass facc = Dictionary3DTable.Instance.GetFacilityClassByDFFeatureClassID(fl.FeatureClassId.ToString()); if (facc == null || facc.Name != "PipeNode") { XtraMessageBox.Show("您选中的不是管点设施,请选择管点设施。", "提示"); return; } DF3DFeatureClass dffc = DF3DFeatureClassManager.Instance.GetFeatureClassByID(fl.FeatureClassId.ToString()); if (dffc == null || dffc.GetFeatureClass() == null) { return; } IFeatureClass fc = dffc.GetFeatureClass(); if (this._bFinished) { Clear(); this._startFCGuid = fc.Guid.ToString(); this._startOid = featureId; this._bFinished = false; ILabel label = app.Current3DMapControl.ObjectManager.CreateLabel(app.Current3DMapControl.ProjectTree.RootID); label.Text = "起点"; ITextSymbol ts = new TextSymbol(); ts.TextAttribute.TextSize = SystemInfo.Instance.TextSize; ts.TextAttribute.TextColor = Convert.ToUInt32(SystemInfo.Instance.TextColor, 16); label.TextSymbol = ts; label.Position = this._drawTool.GetSelectPoint(); this._listRGuid.Add(label.Guid); } else { if (this._startFCGuid == fc.Guid.ToString() && this._startOid == featureId) { XtraMessageBox.Show("您选中的是同一个管点设施。", "提示"); return; } this._bFinished = true; ILabel label = app.Current3DMapControl.ObjectManager.CreateLabel(app.Current3DMapControl.ProjectTree.RootID); label.Text = "终点"; ITextSymbol ts = new TextSymbol(); ts.TextAttribute.TextSize = SystemInfo.Instance.TextSize; ts.TextAttribute.TextColor = Convert.ToUInt32(SystemInfo.Instance.TextColor, 16); label.TextSymbol = ts; label.Position = this._drawTool.GetSelectPoint(); this._listRGuid.Add(label.Guid); if (this._startFCGuid != fc.Guid.ToString()) { XtraMessageBox.Show("您选中的不是同一类管点设施。", "提示"); return; } else { WaitForm.Start("正在分析...", "请稍后"); FacClassReg reg = FacilityInfoService.GetFacClassRegByFeatureClassID(fc.Guid.ToString()); if (reg == null) { return; } TopoClass tc = FacilityInfoService.GetTopoClassByFacClassCode(reg.FacClassCode); if (tc == null) { return; } TopoNetwork net = tc.GetNetwork(); if (net == null) { XtraMessageBox.Show("构建拓扑网络失败!", "提示"); return; } else { string startId = this._startFCGuid + "_" + this._startOid.ToString(); string endId = fc.Guid.ToString() + "_" + featureId.ToString(); List <string> path; double shortestLength = net.SPFA(startId, endId, out path); if ((shortestLength > 0.0 && shortestLength != double.MaxValue) || (path != null && path.Count > 0)) { List <IPoint> listPt = new List <IPoint>(); foreach (string nodeId in path) { int index = nodeId.LastIndexOf("_"); string fcguid = nodeId.Substring(0, index); string oid = nodeId.Substring(index + 1, nodeId.Length - index - 1); DF3DFeatureClass dffcTemp = DF3DFeatureClassManager.Instance.GetFeatureClassByID(fcguid); if (dffcTemp == null || dffcTemp.GetFeatureClass() == null) { continue; } if (dffcTemp.GetFacilityClassName() != "PipeNode") { continue; } IQueryFilter filter = new QueryFilter(); filter.WhereClause = "oid = " + oid; filter.SubFields = "oid,Shape"; IRowBuffer row = null; IFdeCursor cursor = null; try { cursor = dffcTemp.GetFeatureClass().Search(filter, false); while ((row = cursor.NextRow()) != null) { if (!row.IsNull(1) && (row.GetValue(1) is IGeometry)) { IGeometry geo = row.GetValue(1) as IGeometry; switch (geo.GeometryType) { case gviGeometryType.gviGeometryPoint: IPoint pt = geo as IPoint; pt.Z = pt.Z + 1; listPt.Add(pt); break; } } } } catch (Exception ex) { } finally { if (cursor != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor); cursor = null; } if (row != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(row); row = null; } } } IPolyline polyline = (new GeometryFactory()).CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; foreach (IPoint pt in listPt) { ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = 5; ps.Style = gviSimplePointStyle.gviSimplePointCircle; ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); IRenderPoint rp = app.Current3DMapControl.ObjectManager.CreateRenderPoint(pt, ps, app.Current3DMapControl.ProjectTree.RootID); rp.Glow(5000); polyline.AppendPoint(pt); this._listRGuid.Add(rp.Guid); } ICurveSymbol cs = new CurveSymbol(); cs.Color = Convert.ToUInt32(SystemInfo.Instance.LineColor, 16); cs.Width = -5; IRenderPolyline rpl = app.Current3DMapControl.ObjectManager.CreateRenderPolyline(polyline, cs, app.Current3DMapControl.ProjectTree.RootID); rpl.Glow(5000); this._listRGuid.Add(rpl.Guid); } else { XtraMessageBox.Show("两点不连通!", "提示"); } } } } } catch (Exception ex) { XtraMessageBox.Show("分析出错!", "提示"); } finally { WaitForm.Stop(); } }