/// <summary> /// Update the marquee bounds based on the given event data. /// </summary> /// <param name="e">A PInputEventArgs that contains the event data.</param> protected virtual void UpdateMarquee(PInputEventArgs e) { RectangleF r = RectangleF.Empty; if (marqueeParent is PCamera) { r = PUtil.AddPointToRect(r, canvasPressPt); r = PUtil.AddPointToRect(r, e.CanvasPosition); } else { r = PUtil.AddPointToRect(r, presspt); r = PUtil.AddPointToRect(r, e.Position); } r = marquee.GlobalToLocal(r); marquee.Reset(); SetSafeMarqueePen(r.Width, r.Height); marquee.AddRectangle(r.X, r.Y, r.Width, r.Height); r = RectangleF.Empty; r = PUtil.AddPointToRect(r, presspt); r = PUtil.AddPointToRect(r, e.Position); allItems.Clear(); PNodeFilter filter = CreateNodeFilter(r); foreach (PNode parent in selectableParents) { PNodeList items; if (parent is PCamera) { items = new PNodeList(); PCamera cameraParent = (PCamera)parent; for (int i = 0; i < cameraParent.LayerCount; i++) { cameraParent.GetLayer(i).GetAllNodes(filter, items); } } else { items = parent.GetAllNodes(filter, null); } foreach (PNode node in items) { allItems.Add(node, true); } } }
/// <summary> /// Gets a list containing the subset of this node and all of its descendent nodes /// that are accepted by the given node filter. /// </summary> /// <param name="filter">The filter used to determine the subset.</param> /// <param name="results">The list used to collect the subset; can be null.</param> /// <returns> /// A list containing the subset of this node and all its descendents accepted by /// the filter. /// </returns> /// <remarks> /// If the filter is null then all nodes will be accepted. If the results parameter is not /// null then it will be used to store this subset instead of creating a new list. /// </remarks> public virtual PNodeList GetAllNodes(PNodeFilter filter, PNodeList results) { if (results == null) { results = new PNodeList(); } if (filter == null || filter.Accept(this)) { results.Add(this); } if (filter == null || filter.AcceptChildrenOf(this)) { int count = ChildrenCount; for (int i = 0; i < count; i++) { children[i].GetAllNodes(filter, results); } } return results; }