Newer
Older
GHFX_REFACTOR / FrmLayerControl.cs
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);
//            }
//        }

    }
}