Program: 58470
Project: 58470
Buggy source:
private void renderOverviewToDetailRelations(GL gl){
  gl.glColor3f(0,0,0);
  gl.glLineWidth(1);
  for (  ContentVirtualArray va : leftHeatMapWrapper.getContentVAsOfHeatMaps()) {
    for (    Integer contentID : va) {
      Vec2f leftPos=leftHeatMapWrapper.getLeftLinkPositionFromContentID(contentID);
      if (leftPos == null)       continue;
      Vec2f rightPos=leftHeatMapWrapper.getRightLinkPositionFromContentID(contentID,va);
      if (rightPos == null)       continue;
      ArrayList<Vec3f> points=new ArrayList<Vec3f>();
      points.add(new Vec3f(heatMapLayoutLeft.getOverviewHeatMapPosition().x() + heatMapLayoutLeft.getOverviewHeatmapWidth() + leftPos.x(),heatMapLayoutLeft.getOverviewHeight() - leftPos.y(),0));
      points.add(new Vec3f(rightPos.x(),heatMapLayoutLeft.getDetailHeight() - rightPos.y(),0));
      NURBSCurve curve=new NURBSCurve(points,30);
      points=curve.getCurvePoints();
      gl.glBegin(GL.GL_LINE_STRIP);
      for (int i=0; i < points.size(); i++)       gl.glVertex3f(points.get(i).x(),points.get(i).y(),0);
      gl.glEnd();
    }
  }
  gl.glColor3f(0,0,0);
  gl.glLineWidth(1);
  for (  ContentVirtualArray va : rightHeatMapWrapper.getContentVAsOfHeatMaps()) {
    for (    Integer contentID : va) {
      Vec2f leftPos=rightHeatMapWrapper.getLeftLinkPositionFromContentID(contentID);
      if (leftPos == null)       continue;
      Vec2f rightPos=rightHeatMapWrapper.getRightLinkPositionFromContentID(contentID,va);
      if (rightPos == null)       continue;
      ArrayList<Vec3f> points=new ArrayList<Vec3f>();
      points.add(new Vec3f(leftPos.x(),heatMapLayoutRight.getOverviewHeight() - leftPos.y(),0));
      points.add(new Vec3f(rightPos.x(),heatMapLayoutRight.getDetailHeight() - rightPos.y(),0));
      NURBSCurve curve=new NURBSCurve(points,30);
      points=curve.getCurvePoints();
      gl.glBegin(GL.GL_LINE_STRIP);
      for (int i=0; i < points.size(); i++)       gl.glVertex3f(points.get(i).x(),points.get(i).y(),0);
      gl.glEnd();
    }
  }
}

Fixed version (ground truth):
private void renderOverviewToDetailRelations(GL gl){
  gl.glColor3f(0,0,0);
  gl.glLineWidth(1);
  for (  ContentVirtualArray va : leftHeatMapWrapper.getContentVAsOfHeatMaps()) {
    for (    Integer contentID : va) {
      Vec2f leftPos=leftHeatMapWrapper.getRightOverviewLinkPositionFromContentID(contentID);
      if (leftPos == null)       continue;
      Vec2f rightPos=leftHeatMapWrapper.getLeftDetailLinkPositionFromContentID(contentID);
      if (rightPos == null)       continue;
      ArrayList<Vec3f> points=new ArrayList<Vec3f>();
      points.add(new Vec3f(leftPos.x(),leftPos.y(),0));
      points.add(new Vec3f(rightPos.x(),rightPos.y(),0));
      NURBSCurve curve=new NURBSCurve(points,30);
      points=curve.getCurvePoints();
      gl.glBegin(GL.GL_LINE_STRIP);
      for (int i=0; i < points.size(); i++)       gl.glVertex3f(points.get(i).x(),points.get(i).y(),0);
      gl.glEnd();
    }
  }
  gl.glColor3f(0,0,0);
  gl.glLineWidth(1);
  for (  ContentVirtualArray va : rightHeatMapWrapper.getContentVAsOfHeatMaps()) {
    for (    Integer contentID : va) {
      Vec2f leftPos=rightHeatMapWrapper.getRightDetailLinkPositionFromContentID(contentID);
      if (leftPos == null)       continue;
      Vec2f rightPos=rightHeatMapWrapper.getLeftOverviewLinkPositionFromContentID(contentID);
      if (rightPos == null)       continue;
      ArrayList<Vec3f> points=new ArrayList<Vec3f>();
      points.add(new Vec3f(leftPos.x(),leftPos.y(),0));
      points.add(new Vec3f(rightPos.x(),rightPos.y(),0));
      NURBSCurve curve=new NURBSCurve(points,30);
      points=curve.getCurvePoints();
      gl.glBegin(GL.GL_LINE_STRIP);
      for (int i=0; i < points.size(); i++)       gl.glVertex3f(points.get(i).x(),points.get(i).y(),0);
      gl.glEnd();
    }
  }
}