@Override public void draw(float fXCenter, float fYCenter, GL2 gl, GLU glu) { HashMap<PartialDisc, PDDrawingStrategySelected> mapSelectedDrawingStrategies = new HashMap<PartialDisc, PDDrawingStrategySelected>(); parentIndicatorType = SelectionType.NORMAL; initDrawingStrategies(mapSelectedDrawingStrategies); PartialDisc pdCurrentRootElement = radialHierarchy.getCurrentRootElement(); gl.glLoadIdentity(); gl.glTranslatef(fXCenter, fYCenter, 0); float fHierarchyOuterRadius = Math.min( fXCenter * RadialHierarchyRenderStyle.USED_SCREEN_PERCENTAGE, fYCenter * RadialHierarchyRenderStyle.USED_SCREEN_PERCENTAGE); float fDiscWidth = fHierarchyOuterRadius / iDisplayedHierarchyDepth; pdCurrentRootElement.drawHierarchyFull(gl, glu, fDiscWidth, iDisplayedHierarchyDepth); // The selected elements have to be drawn (again using their own drawing // strategy) at last for // correct antialiasing for (PartialDisc pdSelected : mapSelectedDrawingStrategies.keySet()) { PDDrawingStrategySelected dsCurrent = mapSelectedDrawingStrategies.get(pdSelected); dsCurrent.drawPartialDisc(gl, glu, pdSelected); } if (parentIndicatorType != SelectionType.NORMAL) { gl.glPushClientAttrib(GL.GL_COLOR_BUFFER_BIT); if (parentIndicatorType == SelectionType.SELECTION) gl.glColor3fv(SelectionType.SELECTION.getColor().getRGB(), 0); else gl.glColor3fv(SelectionType.MOUSE_OVER.getColor().getRGB(), 0); GLPrimitives.renderCircle(glu, fDiscWidth / 2.0f, 100); GLPrimitives.renderCircleBorder(gl, glu, fDiscWidth / 2.0f, 100, 2); gl.glPopAttrib(); } LabelManager.get() .drawAllLabels(gl, glu, fXCenter * 2.0f, fYCenter * 2.0f, fHierarchyOuterRadius); LabelManager.get().clearLabels(); radialHierarchy.setNewSelection(false); }