Esempio n. 1
0
        private static void ParseLayerTree(IEnumerator <Layer> layers, LayerNode parentNode)
        {
            while (layers.MoveNext())
            {
                Layer currentLayer = layers.Current;

                //ノード作成&追加
                LayerNode newNode = new LayerNode(currentLayer);
                parentNode.AddChildNode(newNode);


                //レイヤ種類を取得
                LayerSectionInfo sec = currentLayer.AdditionalInfo
                                       .OfType <LayerSectionInfo>().FirstOrDefault();

                LayerSectionType secType = LayerSectionType.Layer;
                if (sec != null)
                {
                    secType = sec.SectionType;
                }

                //レイヤ種類別処理
                switch (secType)
                {
                case LayerSectionType.SectionDivider:
                    //フォルダ終了(逆順に並んでいるため、こちらが先に来る)


                    //ひとつ下の階層として以降のレイヤーを処理
                    newNode.Layer = null;
                    newNode.AddChildNode(new LayerNode(currentLayer));
                    ParseLayerTree(layers, newNode);


                    break;

                case LayerSectionType.OpenFolder:
                case LayerSectionType.ClosedFolder:
                    //フォルダ開始(逆順に並んでいるため、こちらが後に来る)

                    parentNode.Name = currentLayer.Name;

                    //処理終了(再帰脱出条件)
                    return;

                case LayerSectionType.Layer:
                default:
                    //通常レイヤ

                    break;
                }
            }
        }
Esempio n. 2
0
        public static LayerSectionType GetSectionType(this Layer layer)
        {
            LayerSectionInfo sec = layer.AdditionalInfo
                                   .OfType <LayerSectionInfo>().FirstOrDefault();

            LayerSectionType secType = LayerSectionType.Layer;

            if (sec != null)
            {
                secType = sec.SectionType;
            }

            return(secType);
        }