/// <summary> /// 添加线 /// </summary> /// <param name="gLayer">GraphicsLayer图层对象</param> /// <param name="graphics">绘图对象</param> /// <param name="logPntArr">绘图保存的逻辑坐标数组</param> public void AddLine(GraphicsLayer gLayer, IGraphics graphics, List <Point> logPntArr) { if (ActiveMapDoc != null && logPntArr.Count > 0) { if (ActiveMapDoc.ActiveLayerIndex < 0) { MessageBox.Show("请激活文档的一个线图层", "提示", MessageBoxButton.OK); return; } SFclsGeomType type = ActiveMapDoc.ActiveLayerGeoType; if (!type.Equals(SFclsGeomType.Lin)) { MessageBox.Show("当前图层不能添加该几何类型的要素", "提示", MessageBoxButton.OK); return; } AnyLine line = new AnyLine(); line.Arcs = new Arc[1]; Arc arc = new Arc(); arc.Dots = new Dot_2D[logPntArr.Count]; for (int i = 0; i < logPntArr.Count; i++) { arc.Dots[i] = new Dot_2D() { x = logPntArr[i].X, y = logPntArr[i].Y }; } line.Arcs[0] = arc; m_targetGeo = line; GetActiveLayerAttStruct(); } }
/// <summary> /// 添加区 /// </summary> /// <param name="gLayer">GraphicsLayer图层对象</param> /// <param name="graphics">绘图对象</param> /// <param name="logPntArr">绘图保存的逻辑坐标数组</param> public void AddArea(GraphicsLayer gLayer, IGraphics graphics, List <Point> logPntArr) { if (ActiveMapDoc != null && logPntArr.Count > 0) { if (ActiveMapDoc.ActiveLayerIndex < 0) { MessageBox.Show("请激活文档的一个区图层", "提示", MessageBoxButton.OK); return; } SFclsGeomType type = ActiveMapDoc.ActiveLayerGeoType; if (!type.Equals(SFclsGeomType.Reg)) { MessageBox.Show("当前图层不能添加该几何类型的要素", "提示", MessageBoxButton.OK); return; } ZDIMS.BaseLib.Polygon polygon = new ZDIMS.BaseLib.Polygon(); polygon.Dots = new Dot_2D[logPntArr.Count]; for (int i = 0; i < logPntArr.Count; i++) { polygon.Dots[i] = new Dot_2D() { x = logPntArr[i].X, y = logPntArr[i].Y }; } m_targetGeo = polygon; GetActiveLayerAttStruct(); } }
private void GetTypeForAdd(object sender, UploadStringCompletedEventArgs e) { SFclsGeomType geoType = ActiveLayerObj.OnGetGeomType(e); CAppendFeature fIno = GetMapFeatureInfo(geoType); ActiveLayerObj.AppendFeature(fIno, new UploadStringCompletedEventHandler(GetAddOperResult)); }
private void CheckPolyType(object sender, UploadStringCompletedEventArgs e) { SFclsGeomType data = ActiveLayerObj.OnGetGeomType(e); if (data != SFclsGeomType.Reg) { MessageBox.Show("当前图层不能添加该几何类型的要素", "提示", MessageBoxButton.OK); return; } AddFeature(SFclsGeomType.Reg); }
private void AddFeature(SFclsGeomType geoType) { if (geoType == SFclsGeomType.Unknown) { MessageBox.Show("当前激活图层几何类型未知", "提示", MessageBoxButton.OK); return; } CSetLayerIndex obj = new CSetLayerIndex() { GdbIndex = ActiveLayerObj.ActiveGdbIndex, LayerIndex = ActiveLayerObj.ActiveLayerIndex }; ActiveLayerObj.GetLayerAttStruct(obj, new UploadStringCompletedEventHandler(GetAttStructCallBack)); }
/// <summary> /// 添加点 /// </summary> /// <param name="gLayer">GraphicsLayer图层对象</param> /// <param name="graphics">绘图对象</param> /// <param name="logPntArr">绘图保存的逻辑坐标数组</param> public void AddDot(GraphicsLayer gLayer, IGraphics graphics, List <Point> logPntArr) { if (ActiveMapDoc != null && logPntArr.Count > 0) { if (ActiveMapDoc.ActiveLayerIndex < 0) { MessageBox.Show("请激活文档的一个点图层", "提示", MessageBoxButton.OK); return; } SFclsGeomType type = ActiveMapDoc.ActiveLayerGeoType; if (!type.Equals(SFclsGeomType.Pnt)) { MessageBox.Show("当前图层不能添加该几何类型的要素", "提示", MessageBoxButton.OK); return; } m_targetGeo = new Dot_2D() { x = logPntArr[0].X, y = logPntArr[0].Y }; GetActiveLayerAttStruct(); } }
/// <summary> /// 获取要素信息 /// </summary> /// <returns></returns> private CAppendFeature GetMapFeatureInfo(SFclsGeomType geoType) { CAppendFeature fInfo = new CAppendFeature(); SFeature sf = new SFeature(); sf.AttValue = new string[m_attStruct.FldNumber]; for (int i = 0; i < m_attStruct.FldNumber; i++) { sf.AttValue[i] = m_textBoxArr[i].Text; switch (this.m_attStruct.FldType[i]) { case "double": case "integer": case "long": case "short": if (!CommFun.IsNumber(sf.AttValue[i])) { MessageBox.Show("字段【Fld_" + this.m_attStruct.FldName[i] + "】输入的数据格式不正确。请重新输入!", "提示", MessageBoxButton.OK); return(null); } break; } } SFeatureGeometry sfGeo = null; SFclsGeomType curFGeoType; if (m_targetGeo != null) { sfGeo = m_targetGeo as SFeatureGeometry; if (sfGeo == null) //add feature { sfGeo = new SFeatureGeometry(); switch ((m_targetGeo as IWebGeometry).GetGeomType()) { case WebGeomType.Point: sf.ftype = SFclsGeomType.Pnt; GPoint pnt = new GPoint(); pnt.Dot = m_targetGeo as Dot_2D; sfGeo.PntGeom = new GPoint[] { pnt }; break; case WebGeomType.Line: sf.ftype = SFclsGeomType.Lin; GLine line = new GLine(); line.Line = m_targetGeo as AnyLine; sfGeo.LinGeom = new GLine[] { line }; break; case WebGeomType.Polygon: sf.ftype = SFclsGeomType.Reg; GRegion polygon = new GRegion(); AnyLine circle = new AnyLine(); circle.Arcs = new Arc[1]; circle.Arcs[0] = new Arc(); circle.Arcs[0].Dots = (m_targetGeo as ZDIMS.BaseLib.Polygon).Dots; polygon.Rings = new AnyLine[] { circle }; sfGeo.RegGeom = new GRegion[] { polygon }; break; default: sfGeo = null; break; } } } curFGeoType = geoType; if (this.m_featureStyle == null) { this.m_featureStyle = new WebGraphicsInfo(); } this.m_style.Update(); switch (curFGeoType) { case SFclsGeomType.Pnt: this.m_featureStyle.InfoType = GInfoType.PntInfo; PointStyle newPntStyle = this.m_style as PointStyle; this.m_featureStyle.PntInfo = new CPointInfo(); if (newPntStyle.patternAngle.Text == "") { this.m_featureStyle.PntInfo.Angle = 0.0; } else { this.m_featureStyle.PntInfo.Angle = Convert.ToDouble(newPntStyle.patternAngle.Text); } if (newPntStyle.patternColor._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.PntInfo.Color = 0; } else { this.m_featureStyle.PntInfo.Color = Convert.ToInt32(newPntStyle.patternColor._TextBoxInput.Text.Split(':')[0]); } if (newPntStyle.patternHeight.Text == "") { this.m_featureStyle.PntInfo.SymHeight = 0.0; } else { this.m_featureStyle.PntInfo.SymHeight = Convert.ToDouble(newPntStyle.patternHeight.Text); } if (newPntStyle.patternID._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.PntInfo.SymID = 0; } else { this.m_featureStyle.PntInfo.SymID = Convert.ToInt32(newPntStyle.patternID._TextBoxInput.Text.Split(':')[0]); } if (newPntStyle.patternWidth.Text == "") { this.m_featureStyle.PntInfo.SymWidth = 0.0; } else { this.m_featureStyle.PntInfo.SymWidth = Convert.ToDouble(newPntStyle.patternWidth.Text); } break; case SFclsGeomType.Lin: this.m_featureStyle.InfoType = GInfoType.LinInfo; LineStyle newLineStyle = this.m_style as LineStyle; this.m_featureStyle.LinInfo = new CLineInfo(); if (newLineStyle.color._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.LinInfo.Color = 0; } else { this.m_featureStyle.LinInfo.Color = Convert.ToInt32(newLineStyle.color._TextBoxInput.Text.Split(':')[0]); } if (newLineStyle.patternID._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.LinInfo.LinStyleID = 0; } else { this.m_featureStyle.LinInfo.LinStyleID = Convert.ToInt32(newLineStyle.patternID._TextBoxInput.Text.Split(':')[0]); } if (newLineStyle.patternID2._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.LinInfo.LinStyleID2 = 0; } else { this.m_featureStyle.LinInfo.LinStyleID2 = Convert.ToInt32(newLineStyle.patternID2._TextBoxInput.Text.Split(':')[0]); } if (newLineStyle.penWidth.Text == "") { this.m_featureStyle.LinInfo.LinWidth = 0.0; } else { this.m_featureStyle.LinInfo.LinWidth = Convert.ToDouble(newLineStyle.penWidth.Text); } if (newLineStyle.lineScaleX.Text == "") { this.m_featureStyle.LinInfo.Xscale = 0.0; } else { this.m_featureStyle.LinInfo.Xscale = Convert.ToDouble(newLineStyle.lineScaleX.Text); } if (newLineStyle.lineScaleY.Text == "") { this.m_featureStyle.LinInfo.Yscale = 0.0; } else { this.m_featureStyle.LinInfo.Yscale = Convert.ToDouble(newLineStyle.lineScaleY.Text); } break; case SFclsGeomType.Reg: this.m_featureStyle.InfoType = GInfoType.RegInfo; PolygonStyle newRegStyle = this.m_style as PolygonStyle; this.m_featureStyle.RegInfo = new CRegionInfo(); if (newRegStyle.fillcolor._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.RegInfo.FillColor = 0; } else { this.m_featureStyle.RegInfo.FillColor = Convert.ToInt32(newRegStyle.fillcolor._TextBoxInput.Text.Split(':')[0]); } if (newRegStyle.patternColor._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.RegInfo.PatColor = 0; } else { this.m_featureStyle.RegInfo.PatColor = Convert.ToInt32(newRegStyle.patternColor._TextBoxInput.Text.Split(':')[0]); } if (newRegStyle.patternHeight.Text == "") { this.m_featureStyle.RegInfo.PatHeight = 0.0; } else { this.m_featureStyle.RegInfo.PatHeight = Convert.ToDouble(newRegStyle.patternHeight.Text); } if (newRegStyle.patternID._TextBoxInput.Text.Split(':')[0] == "") { this.m_featureStyle.RegInfo.PatID = 0; } else { this.m_featureStyle.RegInfo.PatID = Convert.ToInt32(newRegStyle.patternID._TextBoxInput.Text.Split(':')[0]); } if (newRegStyle.patternPenWidth.Text == "") { this.m_featureStyle.RegInfo.OutPenWidth = 0.0; } else { this.m_featureStyle.RegInfo.OutPenWidth = Convert.ToDouble(newRegStyle.patternPenWidth.Text); } if (newRegStyle.patternWidth.Text == "") { this.m_featureStyle.RegInfo.PatWidth = 0.0; } else { this.m_featureStyle.RegInfo.PatWidth = Convert.ToDouble(newRegStyle.patternWidth.Text); } break; } sf.fGeom = sfGeo; sf.FID = m_featureID; fInfo.GInfo = this.m_featureStyle; fInfo.FSet = sf; fInfo.GdbIndex = ActiveLayerObj.ActiveGdbIndex; fInfo.LayerIndex = ActiveLayerObj.ActiveLayerIndex; return(fInfo); }
private void GetTypeForEdit(object sender, UploadStringCompletedEventArgs e) { SFclsGeomType geoType = ActiveLayerObj.OnGetGeomType(e); if (GraphicsLayer != null && m_graphics != null) { SFeatureGeometry geoObj = m_targetGeo as SFeatureGeometry; int n = 0; if (geoObj != null) { if (geoObj.LinGeom != null && geoObj.LinGeom.Length > 0) { List <Point> pntArr = new List <Point>(); for (int i = 0; i < geoObj.LinGeom.Length; i++) { for (int j = 0; j < geoObj.LinGeom[i].Line.Arcs.Length; j++) { for (int k = 0; k < geoObj.LinGeom[i].Line.Arcs[j].Dots.Length; k++) { geoObj.LinGeom[i].Line.Arcs[j].Dots[k].x = m_graphics.Points[n].X; geoObj.LinGeom[i].Line.Arcs[j].Dots[k].y = m_graphics.Points[n++].Y; } } } } if (geoObj.PntGeom != null && geoObj.PntGeom.Length > 0) { geoObj.PntGeom[0].Dot.x = m_graphics.Points[0].X; geoObj.PntGeom[0].Dot.y = m_graphics.Points[0].Y; } if (geoObj.RegGeom != null && geoObj.RegGeom.Length > 0) { List <Point> pntArr = new List <Point>(); for (int i = 0; i < geoObj.RegGeom[0].Rings.Length; i++) { for (int j = 0; j < geoObj.RegGeom[0].Rings[i].Arcs.Length; j++) { for (int k = 0; k < geoObj.RegGeom[0].Rings[i].Arcs[j].Dots.Length; k++) { geoObj.RegGeom[0].Rings[i].Arcs[j].Dots[k].x = m_graphics.Points[n].X; geoObj.RegGeom[0].Rings[i].Arcs[j].Dots[k].y = m_graphics.Points[n++].Y; } } } } } GraphicsLayer.RemoveGraphics(m_graphics); m_graphics = null; } CAppendFeature fIno = GetMapFeatureInfo(geoType); if (fIno == null) { return; } ActiveLayerObj.UpdateFeature(fIno, new UploadStringCompletedEventHandler((s, evt) => { if (m_layerDataViewer != null) { m_layerDataViewer.UpdateRecord(fIno.FSet.AttValue); } GetEditOperResult(s, evt); })); }