public IInspectTree3DNode <T> Build3D <T> (IInspectTree3DNode <T> node3D, InspectTreeState state) { node3D.BuildPrimaryPlane(state); state.PushGeneration(); foreach (var child in GetRenderedChildren(state)) { var child3d = node3D.BuildChild(child, state); node3D.Add(child3d); } state.PopGeneration(); return(node3D); }
IEnumerable <InspectTreeNode> GetRenderedChildren(InspectTreeState state) { // exploit the fact that Layers can't have Subview or Layer set // to walk the children in collapsed layer format var layer = View.Layer; var children = Children.OfType <InspectTreeNode>(); foreach (var child in children) { if (state.CollapseLayers && layer != null && child.View == layer) { foreach (var sublayer in child.Children.OfType <InspectTreeNode> ()) { yield return(sublayer); } yield break; } else { yield return(child); } } }