private void drawHierarchy(Graphics g, ChartObject obj, bool shadows) { if (!sortGroupsByZ) { PainterVisitor painter = new PainterVisitor(g, shadows); obj.visitHierarchy(painter); } else { MethodCallVisitor visitor = new MethodCallVisitor(new VisitOperation(addToSortedList)); obj.visitHierarchy(visitor); foreach (ChartObject item in sortedByZ.Keys) item.Draw(g, shadows); sortedByZ.Clear(); } }