Program: 11446
Project: 11446
Buggy source:
@Override public GlimpseLayout getLayout() throws Exception {
  GlimpseLayout layout=new GlimpseAxisLayout2D(new Axis2D());
  layout.addGlimpseMouseAllListener(new AxisMouseListener2D());
  TextureAtlas atlas=new TextureAtlas(256,256);
  final IconPainter iconPainter=new IconPainter();
  iconPainter.addIconGroup("String_Node_Str",atlas);
  iconPainter.addIconGroup("String_Node_Str",atlas);
  iconPainter.setPickingEnabled(layout);
  iconPainter.addSpatialSelectionListener(new SpatialSelectionListener<PickResult>(){
    @Override public void selectionChanged(    Collection<PickResult> newSelectedPoints){
      logInfo(logger,"String_Node_Str",newSelectedPoints);
    }
  }
);
  TextureAtlasExample.loadTextureAtlas(atlas);
  iconPainter.addIcons("String_Node_Str","String_Node_Str",new float[]{0,20,30,40},new float[]{0,20,30,40},new float[]{(float)Math.PI / 3,(float)-Math.PI / 3,0,0},new float[]{1,1,1,1});
  layout.addGlimpseMouseListener(new GlimpseMouseListener(){
    float rot=0;
    @Override public void mouseEntered(    GlimpseMouseEvent event){
    }
    @Override public void mouseExited(    GlimpseMouseEvent event){
    }
    @Override public void mousePressed(    GlimpseMouseEvent event){
      float x=(float)event.getAxisCoordinatesX();
      float y=(float)event.getAxisCoordinatesY();
      if (event.isButtonDown(MouseButton.Button1)) {
        iconPainter.addIcon("String_Node_Str","String_Node_Str",x,y,rot,0.5f);
      }
 else       if (event.isButtonDown(MouseButton.Button2)) {
        iconPainter.addIcon("String_Node_Str","String_Node_Str",x,y,rot,0.5f);
      }
 else       if (event.isButtonDown(MouseButton.Button3)) {
        iconPainter.addIcon("String_Node_Str","String_Node_Str",x,y,rot,1);
      }
      rot+=Math.PI / 12;
    }
    @Override public void mouseReleased(    GlimpseMouseEvent event){
    }
  }
);
  TooltipPainter tooltipPainter=new TooltipPainter(atlas);
  tooltipPainter.setText("String_Node_Str");
  tooltipPainter.setFixedWidth(100);
  tooltipPainter.setClampToScreenEdges(false);
  tooltipPainter.setOffset(0,0);
  tooltipPainter.setIcons(Arrays.<Object>asList("String_Node_Str","String_Node_Str","String_Node_Str"));
  tooltipPainter.setLocationAxisCoords(0,0);
  layout.addPainter(new BackgroundPainter().setColor(GlimpseColor.getGray()));
  layout.addPainter(new NumericXYAxisPainter());
  layout.addPainter(iconPainter);
  layout.addPainter(tooltipPainter);
  layout.addPainter(new FpsPainter());
  return layout;
}

Fixed version (ground truth):
@Override public GlimpseLayout getLayout() throws Exception {
  GlimpseLayout layout=new GlimpseAxisLayout2D(new Axis2D());
  layout.addGlimpseMouseAllListener(new AxisMouseListener2D());
  TextureAtlas atlas=new TextureAtlas(256,256);
  final IconPainter iconPainter=new IconPainter();
  iconPainter.addIconGroup("String_Node_Str",atlas);
  iconPainter.addIconGroup("String_Node_Str",atlas);
  iconPainter.setPickingEnabled(layout);
  iconPainter.addSpatialSelectionListener(new SpatialSelectionListener<PickResult>(){
    @Override public void selectionChanged(    Collection<PickResult> newSelectedPoints){
      logInfo(logger,"String_Node_Str",newSelectedPoints);
    }
  }
);
  TextureAtlasExample.loadTextureAtlas(atlas);
  iconPainter.addIcons("String_Node_Str","String_Node_Str",new float[]{0,20,30,40},new float[]{0,20,30,40},new float[]{(float)Math.PI / 3,(float)-Math.PI / 3,0,0},new float[]{1,1,1,1});
  layout.addGlimpseMouseListener(new GlimpseMouseListener(){
    float rot=0;
    @Override public void mouseEntered(    GlimpseMouseEvent event){
    }
    @Override public void mouseExited(    GlimpseMouseEvent event){
    }
    @Override public void mousePressed(    GlimpseMouseEvent event){
      float x=(float)event.getAxisCoordinatesX();
      float y=(float)event.getAxisCoordinatesY();
      if (event.isButtonDown(MouseButton.Button1)) {
        iconPainter.addIcon("String_Node_Str","String_Node_Str",x,y,rot,0.5f);
      }
 else       if (event.isButtonDown(MouseButton.Button2)) {
        iconPainter.addIcon("String_Node_Str","String_Node_Str",x,y,rot,0.5f);
      }
 else       if (event.isButtonDown(MouseButton.Button3)) {
        iconPainter.addIcon("String_Node_Str","String_Node_Str",x,y,rot,1);
      }
      rot+=Math.PI / 12;
    }
    @Override public void mouseReleased(    GlimpseMouseEvent event){
    }
  }
);
  layout.addPainter(new BackgroundPainter().setColor(GlimpseColor.getGray()));
  layout.addPainter(new NumericXYAxisPainter());
  layout.addPainter(iconPainter);
  layout.addPainter(new FpsPainter());
  return layout;
}