using System; using System.Collections.Generic; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Globe; using GeoScene.Engine; using System.Xml; namespace Cyberpipe { public partial class FrmLayerControl : Office2007Form { GSOGlobeControl globeControl1; GSOGlobeControl globeControl2; // TreeNode terrainManagerNode = null; // TreeNode layerManagerNode = null; // TreeNode terrainManagerNode1 = null; // TreeNode layerManagerNode1 = null; public FrmLayerControl(GSOGlobeControl ctl1,GSOGlobeControl ctl2) { InitializeComponent(); globeControl1 = ctl1; globeControl2 = ctl2; } // private void initLayerTree(out TreeNode treeNode, string strTreeNodeText) // { // treeNode=new TreeNode(); // treeNode.ImageIndex = 0; // treeNode.SelectedImageIndex = 0; // treeNode.Checked = false; // treeNode.Text = strTreeNodeText; // } // private void initTreeView() // { // layerTree1.Nodes.Clear(); // layerTree2.Nodes.Clear(); // // //加载layertree2 // initLayerTree(out layerManagerNode1, "图层管理"); // layerTree1.Nodes.Add(layerManagerNode1); // initLayerTree(out terrainManagerNode1, "地形管理"); // layerTree1.Nodes.Add(terrainManagerNode1); // // initLayerTree(out layerManagerNode, "图层管理"); // layerTree2.Nodes.Add(layerManagerNode); // initLayerTree(out terrainManagerNode, "地形管理"); // layerTree2.Nodes.Add(terrainManagerNode); // } // private void initNode(string nodeName) // { // TreeNode nodeGroupElse1 = new TreeNode(); // nodeGroupElse1.Text = nodeName; // layerTree1.Nodes[0].Nodes.Add(nodeGroupElse1); // // TreeNode nodeGroupElse = new TreeNode(); // nodeGroupElse.Text = nodeName == "供电" ? "电力" : nodeName; // layerTree2.Nodes[0].Nodes.Add(nodeGroupElse); // } // private void initTreeNode(XmlNodeList Params) // { // foreach (XmlNode paramsNode in Params) //layers // { // foreach (XmlNode layerNode in paramsNode) //layer // { // initNode(layerNode.Attributes["label"].Value); // } // } // // initNode("基础图层"); // initNode("其他"); // } // private void FrmLayerControl_Load(object sender, EventArgs e) // { // // initTreeView(); // try // { // XmlDocument doc = new XmlDocument(); // doc.Load(Application.StartupPath + "\\双屏设置.xml"); // XmlNodeList Params = doc.SelectNodes("/Params/layers"); // // initTreeNode(Params); // } // catch (Exception ex) // { // LogError.PublishError(ex); // } // // RefreshLayerAndTerrainTree(); // } private void FrmLayerControl_Load(object sender, EventArgs e) { layerTree1.Nodes.Clear(); layerTree2.Nodes.Clear(); TreeUtils.initTree(globeControl1, layerTree1, "实测数据"); TreeUtils.initTree(globeControl2, layerTree2, "施工数据"); } #region wxl重构树形结构代码 /// <summary> /// 构造tree,最多解析三层,可放在工具类中 /// <param name="gsoGlobeControl">所属地球</param> /// <param name="treeView">要加载的树</param> /// <param name="viewDatasrc">数据来源,实测数据/施工数据/规划数据/红线数据,为空则展示全部</param> // private void initTree(GSOGlobeControl gsoGlobeControl,TreeView treeView, string viewDatasrc) // { // treeView.Nodes.Clear(); // LayerConfig layerConfig = Utility.layerConfig; // List<DataSrc> datasrcs = layerConfig.datasrcs; // foreach (DataSrc datasrc in datasrcs) // { // if (viewDatasrc != null && !viewDatasrc.Trim().Equals("") && !datasrc.label.Equals(viewDatasrc)) continue; // TreeNode rootNode = treeView.Nodes.Add(datasrc.label); // List<LayerType> layerTypes = datasrc.layertypes; // foreach (LayerType layerType in layerTypes) // { // TreeNode secNode = rootNode.Nodes.Add(layerType.label); // List<Layer> layers = layerType.layers; // foreach (Layer layer in layers) // { // GSOLayer gsoLayer = gsoGlobeControl.Globe.Layers.GetLayerByCaption(layer.layer); // if (gsoLayer == null) continue;//将不存在的去除 // TreeNode node = new TreeNode(); // node.Tag = gsoLayer; // node.Text = layer.label; // node.Checked = gsoLayer.Visible; // if (gsoLayer.Visible) // { // secNode.Checked = true; // rootNode.Checked = true; // } // secNode.Nodes.Add(node); // } // } // } // } #endregion // private void addLayerTreeNode(int nLayerCount, int nTerrainCount, GSOGlobeControl globcontrol, // TreeView layerTree) // { // try // { // for (int i = 0; i < nLayerCount; i++) // { // GSOLayer layer = globcontrol.Globe.Layers[i]; // if (layer == null) continue; // string layerName = layer.Name; // TreeNode node = new TreeNode(); // node.Tag = layer; // node.ImageIndex = 0; // node.SelectedImageIndex = 0; // node.Text = layer.Caption; // node.Checked = layer.Visible; // // bool isContains = false; // for (int j = 0; j < layerTree.Nodes[0].Nodes.Count; j++) // { // if (!layerName.Contains("fttp:")) // { // switch (layerTree.Name) // { // case "layerTree1": // if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim()) || // layerName.Contains("施工") || // layerName.Contains("规划")) continue; // break; // case "layerTree2": // if (!layerName.Contains(layerTree.Nodes[0].Nodes[j].Text.Trim())) continue; // break; // default: // break; // } // // layerTree.Nodes[0].Nodes[j].Nodes.Add(node); // isContains = true; // break; // } // else // { // layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 2].Nodes.Add(node); // isContains = true; // break; // } // } // switch (layerTree.Name) // { // case "layerTree1": // if (layerName.Contains("tempLgdData") || layerName.Contains("城市") || // layerName.Contains("标注") || // isContains == true || layerName.Contains("施工") || layerName.Contains("规划") || // layerName.Contains("景观") || layerName.Contains("红线")) // continue; // break; // case "layerTree2": // if (isContains != false || layerName.Contains("tempLgdData2")) // continue; // break; // default: // break; // } // // layerTree.Nodes[0].Nodes[layerTree.Nodes[0].Nodes.Count - 1].Nodes.Add(node); // } // // for (int i = 0; i < nTerrainCount; i++) // { // GSOTerrain terrain = globcontrol.Globe.Terrains[i]; // if (terrain == null) continue; // TreeNode node = new TreeNode(); // node.Tag = terrain; // node.ImageIndex = 0; // node.SelectedImageIndex = 0; // node.Text = terrain.Caption; // node.Checked = terrain.Visible; // switch (layerTree.Name) // { // case "layerTree1": // terrainManagerNode1.Nodes.Add(node); // break; // case "layerTree2": // terrainManagerNode.Nodes.Add(node); // break; // default: // break; // } // } // } // catch (Exception ex) // { // LogError.PublishError(ex); // } // } // private void initTreeNodeCheckedStatus(TreeView layerTreeView) // { // //节点选中状态控制 // foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) // { // foreach (TreeNode childNode in node.Nodes) // { // GSOLayer layer = childNode.Tag as GSOLayer; // if (layer == null || layer.Visible != true) continue; // node.Checked = true; // break; // } // } // // foreach (TreeNode node in layerTreeView.Nodes[0].Nodes) // { // if (node.Checked != true) continue; // layerTreeView.Nodes[0].Checked = true; // break; // } // // foreach (TreeNode node in layerTreeView.Nodes[1].Nodes) // { // foreach (TreeNode childNode in node.Nodes) // { // GSOTerrain layer = childNode.Tag as GSOTerrain; // if (layer == null || layer.Visible != true) continue; // node.Checked = true; // break; // } // } // } // void exPandTreeNode() // { // layerManagerNode1.Expand(); // terrainManagerNode1.Expand(); // layerManagerNode.Expand(); // terrainManagerNode.Expand(); // } /// <summary> /// 刷新节点树 /// </summary> // private void RefreshLayerAndTerrainTree() // { // int nLayerCount1 = globeControl1.Globe.Layers.Count;//图层 // int nTerrainCount1 = globeControl1.Globe.Terrains.Count;//地形 // addLayerTreeNode(nLayerCount1, nTerrainCount1, globeControl1, layerTree1); // initTreeNodeCheckedStatus(layerTree1); // // int nLayerCount = globeControl2.Globe.Layers.Count; // int nTerrainCount = globeControl2.Globe.Terrains.Count; // addLayerTreeNode(nLayerCount, nTerrainCount, globeControl2, layerTree2); // initTreeNodeCheckedStatus(layerTree2); // // // 展开 // exPandTreeNode(); // } /// <summary> /// 节点树复选框选中状态改变事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { TreeUtils.treeNodeCheckedChange(globeControl2,e.Node); } } private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) { if (e.Action != TreeViewAction.Unknown) { TreeUtils.treeNodeCheckedChange(globeControl1, e.Node); } } // private void layerTree2_AfterCheck(object sender, TreeViewEventArgs e) // { // if (e.Action != TreeViewAction.Unknown) // { // if (e.Node.Tag != null) // { // if (e.Node.Tag is GSOLayer) // { // GSOLayer layer = e.Node.Tag as GSOLayer; // if (layer != null) // { // layer.Visible = e.Node.Checked; // globeControl2.Globe.Refresh(); // } // } // if (e.Node.Tag is GSOTerrain) // { // GSOTerrain feat = e.Node.Tag as GSOTerrain; // feat.Visible = e.Node.Checked; // globeControl2.Globe.Refresh(); // } // } // // CheckParentNode(e.Node); // if (e.Node.Nodes.Count > 0) // checkChildrenNodeLayertree2(e.Node, e.Node.Checked); // } // } /// <summary> /// 改变指定节点的子节点的选中状态 /// </summary> /// <param name="parentNode"></param> /// <param name="isChecked"></param> // private void checkChildrenNodeLayertree1(TreeNode parentNode, bool isChecked) // { // foreach (TreeNode childNode in parentNode.Nodes) // { // childNode.Checked = isChecked; // GSOLayer layer = childNode.Tag as GSOLayer; // if (layer != null) // { // layer.Visible = isChecked; // globeControl1.Globe.Refresh(); // } // if (childNode.Tag is GSOTerrain) // { // GSOTerrain feat = childNode.Tag as GSOTerrain; // feat.Visible = isChecked; // globeControl1.Globe.Refresh(); // } // if (childNode.Nodes.Count > 0) // checkChildrenNodeLayertree1(childNode, isChecked); // } // } /// <summary> /// 改变指定节点的子节点的选中状态 /// </summary> /// <param name="parentNode"></param> /// <param name="isChecked"></param> // private void checkChildrenNodeLayertree2(TreeNode parentNode, bool isChecked) // { // foreach (TreeNode childNode in parentNode.Nodes) // { // childNode.Checked = isChecked; // GSOLayer layer = childNode.Tag as GSOLayer; // if (layer != null) // { // layer.Visible = isChecked; // globeControl2.Globe.Refresh(); // } // if (childNode.Tag is GSOTerrain) // { // GSOTerrain feat = childNode.Tag as GSOTerrain; // feat.Visible = isChecked; // globeControl2.Globe.Refresh(); // } // if (childNode.Nodes.Count > 0) // checkChildrenNodeLayertree2(childNode, isChecked); // } // } /// <summary> /// 节点树选中状态改变事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> // private void layerTree1_AfterCheck(object sender, TreeViewEventArgs e) // { // if (e.Action != TreeViewAction.Unknown) // { // if (e.Node.Tag != null) // { // if (e.Node.Tag is GSOLayer) // { // GSOLayer layer = e.Node.Tag as GSOLayer; // if (layer != null) // { // layer.Visible = e.Node.Checked; // globeControl1.Globe.Refresh(); // } // } // if (e.Node.Tag is GSOTerrain) // { // GSOTerrain feat = e.Node.Tag as GSOTerrain; // feat.Visible = e.Node.Checked; // globeControl1.Globe.Refresh(); // } // } // // CheckParentNode(e.Node); // if (e.Node.Nodes.Count > 0) // checkChildrenNodeLayertree1(e.Node, e.Node.Checked); // } // } } }