/// <summary> /// 反序列化点图像 /// 从mwsr中获得点信息并翻译,应用到图层上。 /// </summary> public void DeserializePointImageScheme(int newHandle, XmlElement root) { Program.frmMain.MapMain.LockWindow(MapWinGIS.tkLockMode.lmLock); try { MapWinGIS.Utility.ImageUtils imgUtil = new MapWinGIS.Utility.ImageUtils(); bool found = false; Interfaces.ShapefilePointImageScheme csh = new Interfaces.ShapefilePointImageScheme(newHandle); Hashtable TranslationTable = new Hashtable(); foreach (XmlElement xe1 in root) { if (xe1.Name == "PointImageScheme") { found = true; csh.FieldIndex = long.Parse(xe1.Attributes["FieldIndex"].InnerText); foreach (XmlElement xe2 in xe1.ChildNodes) { if (xe2.Name == "ImageData") { foreach (XmlElement xe3 in xe2.ChildNodes) { long origIndex = long.Parse(xe3.Attributes["ID"].InnerText); string imgtype; imgtype = xe3["Image"].Attributes["Type"].InnerText; System.Drawing.Image img = (System.Drawing.Image)(ConvertStringToImage(xe3["Image"].InnerText, imgtype)); MapWinGIS.Image ico = new MapWinGIS.Image(); ico.Picture = (stdole.IPictureDisp)imgUtil.ImageToIPictureDisp(img); if (ico != null) { ico.TransparencyColor = (uint)ico.Value[0, 0]; } int newidx = System.Convert.ToInt32(Program.frmMain.MapMain.set_UDPointImageListAdd(newHandle, ico)); TranslationTable.Add(origIndex, newidx); img = null; } } else if (xe2.Name == "ItemData") { foreach (XmlElement xe3 in xe2.ChildNodes) { if (xe3.Name == "Item") { string tag = xe3.Attributes["MatchValue"].InnerText; long imgIndex = long.Parse(xe3.Attributes["ImgIndex"].InnerText); long actualIndex = -1; if (TranslationTable.Contains(imgIndex)) { actualIndex = System.Convert.ToInt64(TranslationTable[imgIndex]); } else { actualIndex = imgIndex; } if (actualIndex != -1 && tag != "") { csh.Items.Add(tag, actualIndex); } MapWinGIS.Shapefile sf; sf = (MapWinGIS.Shapefile)(Program.frmMain.m_Layers[newHandle].GetObject()); if (sf == null) { Program.g_error = "获取Shapefile 对象失败。"; return; } if (actualIndex != -1) { for (int j = 0; j < sf.NumShapes; j++) { if (sf.CellValue[(int)csh.FieldIndex, j].ToString() == tag) { Program.frmMain.MapMain.set_ShapePointImageListID(newHandle, j, (int)actualIndex); if (Program.frmMain.MapMain.get_ShapePointType(newHandle, j) != MapWinGIS.tkPointType.ptImageList) { Program.frmMain.MapMain.set_ShapePointType(newHandle, j, MapWinGIS.tkPointType.ptImageList); } Program.frmMain.MapMain.set_ShapePointSize(newHandle, j, 1); } } } sf = null; } } } else if (xe2.Name == "ItemVisibility") { foreach (XmlElement xe3 in xe2.ChildNodes) { if (xe3.Name == "Item") { string tag = xe3.Attributes["MatchValue"].InnerText; bool vis = bool.Parse(xe3.Attributes["Visible"].InnerText); csh.ItemVisibility.Add(tag, vis); MapWinGIS.Shapefile sf; sf = (MapWinGIS.Shapefile)(Program.frmMain.m_Layers[newHandle].GetObject()); if (sf == null) { Program.g_error = "获取Shapefile 对象失败."; return; } for (int j = 0; j < sf.NumShapes; j++) { if (sf.CellValue[(int)csh.FieldIndex, j].ToString() == tag) { Program.frmMain.MapMain.set_ShapeVisible(newHandle, j, vis); } } sf = null; } } } } break; } } if (found) { Program.frmMain.Legend.Layers.ItemByHandle(newHandle).PointImageScheme = csh; } TranslationTable.Clear(); GC.Collect(); } catch (Exception ex) { MapWinGIS.Utility.Logger.Dbg("DEBUG: " + ex.ToString()); } finally { Program.frmMain.MapMain.LockWindow(MapWinGIS.tkLockMode.lmUnlock); } }
/// <summary> /// 序列化点图像 /// 未实现 /// </summary> public void SerializePointImageScheme(Interfaces.ShapefilePointImageScheme PointImgScheme, XmlDocument doc, XmlElement root) { }