Beispiel #1
0
        /// <summary>
        /// Adds the given objects to a layer</summary>
        /// <param name="parent">Layer's parent</param>
        /// <param name="insertingObject">Object(s) to insert in layer</param>
        public void Insert(object parent, object insertingObject)
        {
            if (parent == null)
            {
                parent = m_activeItem ?? this;
            }
            else if (!(parent is LayeringContext) && !(parent is LayerFolder))
            {
                return;
            }

            IEnumerable <DomNode> nodes = GetCompatibleNodes((IDataObject)insertingObject);

            if (nodes == null)
            {
                return;
            }

            // If the parent is the LayeringContext itself:
            // create a new layer for the objects about to be inserted
            LayerFolder layer = parent.As <LayerFolder>();

            if (layer == null && nodes.Count() > 0)
            {
                DomNode     node     = new DomNode(LayerFolderType);
                LayerFolder subLayer = node.As <LayerFolder>();
                subLayer.Name = "New Layer".Localize();
                Layers.Add(subLayer);
                layer = subLayer;
            }
            if (layer == null)
            {
                return;
            }

            foreach (DomNode node in nodes)
            {
                // Insert GameObjects
                Element gameObject = node.As <Element>();
                if (gameObject != null && !layer.Contains(gameObject))
                {
                    DomNode    refNode = new DomNode(ElementRefType);
                    ElementRef newRef  = refNode.As <ElementRef>();
                    newRef.Element = gameObject;
                    layer.ElementRefs.Add(newRef);
                }

                // Insert References
                ElementRef reference = node.As <ElementRef>();
                if (reference != null)
                {
                    if (reference.Element != null && !layer.Contains(reference.Element))
                    {
                        layer.ElementRefs.Add(reference);
                    }
                }

                // Insert Sub-Layers
                LayerFolder otherLayer = node.As <LayerFolder>();
                if (otherLayer != null)
                {
                    layer.Folders.Add(otherLayer);
                }
            }
        }