private static void RecursiveAddAndVisualizePipeData(TreeList parentTree, List <LogicGroup> list, Dictionary <string, IFeatureClass> dicfc, IMapControl2 mapControl, IMap pMap) { if (parentTree == null || list == null) { return; } foreach (LogicGroup lg in list) { TreeNodeLogicGroup2D tnlg = new TreeNodeLogicGroup2D() { Name = string.IsNullOrEmpty(lg.Alias) ? lg.Name : lg.Alias }; tnlg.OwnNode = parentTree.AppendNode(new object[] { tnlg.Name }, (TreeListNode)null); tnlg.Visible = true; RecursiveAddAndVisualizePipeData(tnlg.OwnNode.TreeList, lg.LogicGroups, dicfc, mapControl, pMap); foreach (MajorClass mc in lg.MajorClasses) { Dictionary <string, DF2DFeatureClass> dict = new Dictionary <string, DF2DFeatureClass>(); //subclass所对应的<要素类ID,类>字典 Dictionary <string, IFeatureLayer> dicFLs = new Dictionary <string, IFeatureLayer>(); //subclass所对应的<要素类ID,图层>字典 TreeNodeMajorClass2D tnmc = new TreeNodeMajorClass2D() { Name = string.IsNullOrEmpty(mc.Alias) ? mc.Name : mc.Alias }; tnmc.Visible = true; tnmc.CustomValue = mc; tnlg.Add(tnmc); SetFeatureClassForGroup(mc, tnmc, dicfc, dict); VisualMapLayer(pMap, mapControl, dict, dicFLs); SetSubClass(mc, tnmc, dict, dicFLs); //AddSubClass(mc, tnlg, fcs, dict, dicFLs); } tnlg.CollapseAll(); } }
private void LayerCheckOnOffControl(IBaseLayer layer) { if (layer is TreeNodeComLayer) { TreeNodeComLayer node = layer as TreeNodeComLayer; node.CheckOn = node.Visible; List <IBaseLayer> childNodes = node.SelectAllSubLayers(); if (childNodes.Count > 0) { foreach (IBaseLayer cn in childNodes) { LayerCheckOnOffControl(cn); } } } else if (layer is TreeNodeLogicGroup2D) { TreeNodeLogicGroup2D lg = layer as TreeNodeLogicGroup2D; List <IBaseLayer> listBL = lg.SelectAllSubLayers(); if (listBL.Count > 0) { foreach (IBaseLayer bl in listBL) { LayerCheckOnOffControl(bl); } } } else if (layer is TreeNodeMajorClass2D) { TreeNodeMajorClass2D node = layer as TreeNodeMajorClass2D; node.CheckOn = node.Visible; List <IBaseLayer> childNodes = node.SelectAllSubLayers(); if (childNodes.Count > 0) { foreach (IBaseLayer cn in childNodes) { LayerCheckOnOffControl(cn); } } } else if (layer is TreeNodeSubClass2D) { TreeNodeSubClass2D node = layer as TreeNodeSubClass2D; node.CheckOn = node.Visible; } }
public override void OnExtentUpdated(object displayTransformation, bool sizeChanged, object newEnvelope) { DF2DApplication app = DF2DApplication.Application; if (app == null) { return; } double sMapScale = app.Current2DMapControl.MapScale; //List<TreeNodeComLayer> listTreeLayer = DF2DFeatureClassManager.Instance.GetAllTreeLayer(); List <DF2DFeatureClass> listFC = DF2DFeatureClassManager.Instance.GetAllFeatureClass(); List <DF2DRaster> listRaster = DF2DRasterManager.Instance.GetAllRaster(); #region 树控件栅格节点显示控制 foreach (DF2DRaster dfrd in listRaster) { IRasterLayer rl = dfrd.GetRasterLayer(); TreeNodeComLayer treeLayer = dfrd.GetTreeLayer(); if (treeLayer == null) { continue; } if (rl == null) { continue; } if (!treeLayer.CheckOn) { continue; } if (rl.MinimumScale != 0) { if (sMapScale >= rl.MinimumScale) { treeLayer.Visible = false; } else { treeLayer.Visible = true; } } else if (rl.MaximumScale != 0) { if (sMapScale <= rl.MaximumScale) { treeLayer.Visible = false; } else { treeLayer.Visible = true; } } else { treeLayer.Visible = true; } } #endregion foreach (DF2DFeatureClass dffc in listFC) { #region 控制树控件管线部分二级分类显示 string faccName = dffc.GetFacilityClassName(); if (faccName == "PipeLine") { string id = dffc.GetFeatureClass().FeatureClassID.ToString(); DF2DMajorClass dfmc = DF2DMajorClassManager.Instance.GetDFMCByFeatureClassID(id); if (dfmc != null) { ILayer lyr = dffc.GetLayer(); if (lyr != null) { TreeNodeMajorClass2D tnmc = dfmc.GetTNByFeatureClassID(id); if (!tnmc.CheckOn) { continue; } if (tnmc != null) { if (lyr.MinimumScale != 0) { if (sMapScale >= lyr.MinimumScale) { tnmc.Visible = false; } else { tnmc.Visible = true; } } else if (lyr.MaximumScale != 0) { if (sMapScale <= lyr.MaximumScale) { tnmc.Visible = false; } else { tnmc.Visible = true; } } else { tnmc.Visible = true; } } } } } #endregion #region 控制图层树背景图部分显示 IFeatureLayer fl = dffc.GetFeatureLayer(); TreeNodeComLayer treeLayer = dffc.GetTreeLayer(); if (treeLayer == null) { continue; } if (fl == null) { continue; } if (!treeLayer.CheckOn) { continue; } if (fl.MinimumScale != 0) { if (sMapScale >= fl.MinimumScale) { treeLayer.Visible = false; } else { treeLayer.Visible = true; } } else if (fl.MaximumScale != 0) { if (sMapScale <= fl.MaximumScale) { treeLayer.Visible = false; } else { treeLayer.Visible = true; } } else { treeLayer.Visible = true; } #endregion } }
public DF2DMajorClass(MajorClass mj, TreeNodeMajorClass2D treeLayer) { this.treeLayer = treeLayer; this.majorClass = mj; listLayer = new List <ILayer>(); }
public static void AddAndVisualizeTreelistPipe(TreeList parentTree, IMapControl2 mapControl) { try { if (parentTree == null) { return; } IMapDocument pMapDoc = new MapDocument(); string pFileName = Config.GetConfigValue("2DMxdPipe"); if (string.IsNullOrEmpty(pFileName) || !File.Exists(pFileName)) { return; } SplashScreenManager.Default.SendCommand(null, "正在加载二维管线数据......"); pMapDoc.Open(pFileName, null); IMap pMap = pMapDoc.get_Map(0); Dictionary <string, IFeatureClass> dicfc = new Dictionary <string, IFeatureClass>(); //初始化要<素类ID,要素类>字典 for (int i = 0; i < pMap.LayerCount; i++) //对地图图层进行遍历 { ILayer layer = pMap.get_Layer(i); ReadMapLayer(layer, dicfc);//读取该图层,并更新字典 } if (dicfc == null || dicfc.Count == 0) { return; } foreach (LogicGroup lg in LogicDataStructureManage2D.Instance.RootLogicGroups) { TreeNodeLogicGroup2D tnlg = new TreeNodeLogicGroup2D()//创建逻辑分组根节点 { Name = string.IsNullOrEmpty(lg.Alias) ? lg.Name : lg.Alias }; tnlg.OwnNode = parentTree.AppendNode(new object[] { tnlg.Name }, (TreeListNode)null); tnlg.Visible = true; RecursiveAddAndVisualizePipeData(tnlg.OwnNode.TreeList, lg.LogicGroups, dicfc, mapControl, pMap); foreach (MajorClass mc in lg.MajorClasses) //遍历当前逻辑分组的二级大类 { Dictionary <string, DF2DFeatureClass> dict = new Dictionary <string, DF2DFeatureClass>(); //MajorClass所对应的<要素类ID,类>字典 Dictionary <string, IFeatureLayer> dicFLs = new Dictionary <string, IFeatureLayer>(); //MajorClass所对应的<要素类ID,图层>字典 TreeNodeMajorClass2D tnmc = new TreeNodeMajorClass2D() { Name = string.IsNullOrEmpty(mc.Alias) ? mc.Name : mc.Alias }; tnmc.Visible = true; tnmc.CustomValue = mc; tnlg.Add(tnmc); SetFeatureClassForGroup(mc, tnmc, dicfc, dict); //设置MajorClass所对应的要素类 VisualMapLayer(pMap, mapControl, dict, dicFLs); //为地图控件加载相关的图层 SetSubClass(mc, tnmc, dict, dicFLs); //设置subclass包含的相关参数的值 //AddSubClass(mc, tnmc, dicfc,dict,dicFLs); DF2DMajorClass dfmc = new DF2DMajorClass(mc, tnmc);//应用于管线显示控制 DF2DMajorClassManager.Instance.Add(dfmc); } tnlg.CollapseAll(); } } catch (System.Exception ex) { return; } }