You mean Java 5 :)

Tilman, you can specify 1.5 as the language version you are using in Netbeans, 
see https://blogs.oracle.com/roumen/entry/netbeans_4_1_tip_1

-- John

> On 8 Feb 2014, at 08:22, Andreas Lehmkuehler <andr...@lehmi.de> wrote:
> 
> Hi,
> 
> ~Tilman the 1.8 branch relies on Java 6 which doesn't support @Override 
> annotations for methods inherited when implementing an interface.
> 
> BR
> Andreas Lehmkühler
> 
> Am 08.02.2014 16:41, schrieb til...@apache.org:
>> Author: tilman
>> Date: Sat Feb  8 15:41:03 2014
>> New Revision: 1566032
>> 
>> URL: http://svn.apache.org/r1566032
>> Log:
>> PDFBOX-1887: Bugfixes + Optimization of Gouraud Shading
>> 
>> Modified:
>>     
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
>>     
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java
>> 
>> Modified: 
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
>> URL: 
>> http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java?rev=1566032&r1=1566031&r2=1566032&view=diff
>> ==============================================================================
>> --- 
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
>>  (original)
>> +++ 
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudShadingContext.java
>>  Sat Feb  8 15:41:03 2014
>> @@ -152,7 +152,7 @@ public abstract class GouraudShadingCont
>>       *
>>       * @throws IOException if something went wrong
>>       */
>> -    protected Vertex readVertex(ImageInputStream input, byte flag, long 
>> maxSrcCoord, long maxSrcColor,
>> +    protected Vertex readVertex(ImageInputStream input, byte flag, long 
>> maxSrcCoord, long maxSrcColor,
>>              PDRange rangeX, PDRange rangeY, PDRange[] colRangeTab) throws 
>> IOException
>>      {
>>          float[] colorComponentTab = new float[numberOfColorComponents];
>> @@ -165,7 +165,7 @@ public abstract class GouraudShadingCont
>>          {
>>              int color = (int) input.readBits(bitsPerColorComponent);
>>              colorComponentTab[n] = interpolate(color, maxSrcColor, 
>> colRangeTab[n].getMin(), colRangeTab[n].getMax());
>> -            LOG.debug("color[" + n + "]: " + color + "/" + 
>> String.format("%02x", color)
>> +            LOG.debug("color[" + n + "]: " + color + "/" + 
>> String.format("%02x", color)
>>                      + "-> color[" + n + "]: " + colorComponentTab[n]);
>>          }
>>          return new Vertex(flag, new Point2D.Double(dstX, dstY), 
>> colorComponentTab);
>> @@ -192,8 +192,6 @@ public abstract class GouraudShadingCont
>>                  // transform from shading to user space
>>                  ctm.createAffineTransform().transform(v.point, v.point);
>>                  // transform from user to device space
>> -                // move the 0,0-reference including the y-translation from 
>> user to device space
>> -                v.point.setLocation(v.point.getX(), pageHeight - 
>> v.point.getY());
>>                  xform.transform(v.point, v.point);
>>              }
>>              else
>> @@ -222,6 +220,7 @@ public abstract class GouraudShadingCont
>>      /**
>>       * {@inheritDoc}
>>       */
>> +    @Override
>>      public void dispose()
>>      {
>>          triangleList = null;
>> @@ -234,6 +233,7 @@ public abstract class GouraudShadingCont
>>      /**
>>       * {@inheritDoc}
>>       */
>> +    @Override
>>      public final ColorModel getColorModel()
>>      {
>>          return outputColorModel;
>> @@ -248,7 +248,7 @@ public abstract class GouraudShadingCont
>>       * @param dstMax max dst value
>>       * @return interpolated value
>>       */
>> -    private float interpolate(float src, float srcMax, float dstMin, float 
>> dstMax)
>> +    private float interpolate(float src, long srcMax, float dstMin, float 
>> dstMax)
>>      {
>>          return dstMin + (src * (dstMax - dstMin) / srcMax);
>>      }
>> @@ -256,71 +256,72 @@ public abstract class GouraudShadingCont
>>      /**
>>       * {@inheritDoc}
>>       */
>> +    @Override
>>      public final Raster getRaster(int x, int y, int w, int h)
>>      {
>> -        float[] values = new float[numberOfColorComponents];
>>          WritableRaster raster = 
>> getColorModel().createCompatibleWritableRaster(w, h);
>> -        if (!triangleList.isEmpty())
>> +        int[] data = new int[w * h * 4];
>> +        for (int row = 0; row < h; row++)
>>          {
>> -            int[] data = new int[w * h * 4];
>> -            for (int row = 0; row < h; row++)
>> +            for (int col = 0; col < w; col++)
>>              {
>> -                for (int col = 0; col < w; col++)
>> +                Point2D p = new Point(x + col, y + row);
>> +                GouraudTriangle triangle = null;
>> +                for (GouraudTriangle tryTriangle : triangleList)
>> +                {
>> +                    if (tryTriangle.contains(p))
>> +                    {
>> +                        triangle = tryTriangle;
>> +                        break;
>> +                    }
>> +                }
>> +                float[] values;
>> +                if (triangle != null)
>>                  {
>> -                    Point2D p = new Point(x + col, y + row);
>> +                    double[] weights = triangle.getWeights(p);
>> +                    values = new float[numberOfColorComponents];
>> +                    for (int i = 0; i < numberOfColorComponents; ++i)
>> +                    {
>> +                        values[i] = (float) (triangle.colorA[i] * weights[0]
>> +                                + triangle.colorB[i] * weights[1]
>> +                                + triangle.colorC[i] * weights[2]);
>> +                    }
>> +                }
>> +                else
>> +                {
>> +                    if (background != null)
>> +                    {
>> +                        values = background;
>> +                    }
>> +                    else
>> +                    {
>> +                        continue;
>> +                    }
>> +                }
>> 
>> -                    //TODO test optmization after ch14.pdf works:
>> -                    // check whether point is in combined java area
>> -                    for (GouraudTriangle triangle : triangleList)
>> +                //TODO handle function
>> +                // convert color values from shading colorspace to RGB
>> +                if (shadingColorSpace != null)
>> +                {
>> +                    if (shadingTinttransform != null)
>>                      {
>> -                        if (triangle.contains(p))
>> -                        {
>> -                            double[] weights = triangle.getWeights(p);
>> -                            for (int i = 0; i < numberOfColorComponents; 
>> ++i)
>> -                            {
>> -                                values[i] = (float) (triangle.colorA[i] * 
>> weights[0] + triangle.colorB[i] * weights[1]
>> -                                        + triangle.colorC[i] * weights[2]);
>> -                            }
>> -                            //TODO optimize: quit loop when triangle is 
>> found
>> -                        }
>> -                        else
>> +                        try
>>                          {
>> -                            if (background != null)
>> -                            {
>> -                                values = background;
>> -                            }
>> -                            else
>> -                            {
>> -                                continue;
>> -                            }
>> +                            values = shadingTinttransform.eval(values);
>>                          }
>> -
>> -                        //TODO handle function
>> -                        // convert color values from shading colorspace to 
>> RGB
>> -                        if (shadingColorSpace != null)
>> +                        catch (IOException exception)
>>                          {
>> -                            if (shadingTinttransform != null)
>> -                            {
>> -                                try
>> -                                {
>> -                                    values = 
>> shadingTinttransform.eval(values);
>> -                                }
>> -                                catch (IOException exception)
>> -                                {
>> -                                    LOG.error("error while processing a 
>> function", exception);
>> -                                }
>> -                            }
>> -                            values = shadingColorSpace.toRGB(values);
>> +                            LOG.error("error while processing a function", 
>> exception);
>>                          }
>> -
>> -                        int index = (row * w + col) * 4;
>> -                        data[index] = (int) (values[0] * 255);
>> -                        data[index + 1] = (int) (values[1] * 255);
>> -                        data[index + 2] = (int) (values[2] * 255);
>> -                        data[index + 3] = 255;
>>                      }
>> -
>> +                    values = shadingColorSpace.toRGB(values);
>>                  }
>> +
>> +                int index = (row * w + col) * 4;
>> +                data[index] = (int) (values[0] * 255);
>> +                data[index + 1] = (int) (values[1] * 255);
>> +                data[index + 2] = (int) (values[2] * 255);
>> +                data[index + 3] = 255;
>>              }
>>              raster.setPixels(0, 0, w, h, data);
>>          }
>> 
>> Modified: 
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java
>> URL: 
>> http://svn.apache.org/viewvc/pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java?rev=1566032&r1=1566031&r2=1566032&view=diff
>> ==============================================================================
>> --- 
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java
>>  (original)
>> +++ 
>> pdfbox/branches/1.8/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/shading/GouraudTriangle.java
>>  Sat Feb  8 15:41:03 2014
>> @@ -22,7 +22,7 @@ import java.awt.geom.Point2D;
>> 
>>  /**
>>   * Helper class to deal with Gouraud triangles for type 4 and 5 shading.
>> - *
>> + *
>>   * @author Tilman Hausherr
>>   */
>>  public class GouraudTriangle
>> @@ -31,34 +31,45 @@ public class GouraudTriangle
>>       * the polygon representing the triangle.
>>       */
>>      protected final Polygon polygon = new Polygon();
>> -    /**
>> +    /**
>>       * point A of the triangle.
>>       */
>>      protected final Point2D pointA;
>> -    /**
>> +    /**
>>       * point B of the triangle.
>>       */
>>      protected final Point2D pointB;
>> -    /**
>> +    /**
>>       * point C of the triangle.
>>       */
>>      protected final Point2D pointC;
>> -    /**
>> +    /**
>>       * the color of point A.
>>       */
>>      protected final float[] colorA;
>> -    /**
>> +    /**
>>       * the color of point B.
>>       */
>>      protected final float[] colorB;
>> -    /**
>> +    /**
>>       * the color of point C.
>>       */
>>      protected final float[] colorC;
>> -
>> -
>> +
>> +    /*
>> +     * intermediate constants
>> +     */
>> +    private final double xBminusA;
>> +    private final double yBminusA;
>> +    private final double xCminusA;
>> +    private final double yCminusA;
>> +    private final double xCminusB;
>> +    private final double yCminusB;
>> +    private final double area;
>> +
>>      /**
>>       * Constructor for using 3 points and their colors.
>> +     *
>>       * @param a point A of the triangle
>>       * @param aColor color of point A
>>       * @param b point B of the triangle
>> @@ -74,6 +85,16 @@ public class GouraudTriangle
>>          colorA = aColor;
>>          colorB = bColor;
>>          colorC = cColor;
>> +
>> +        // calculate constants
>> +        xBminusA = pointB.getX() - pointA.getX();
>> +        yBminusA = pointB.getY() - pointA.getY();
>> +        xCminusA = pointC.getX() - pointA.getX();
>> +        yCminusA = pointC.getY() - pointA.getY();
>> +        xCminusB = pointC.getX() - pointB.getX();
>> +        yCminusB = pointC.getY() - pointB.getY();
>> +        area = getArea(pointA, pointB, pointC);
>> +
>>          polygon.addPoint((int) Math.round(a.getX()), (int) 
>> Math.round(a.getY()));
>>          polygon.addPoint((int) Math.round(b.getX()), (int) 
>> Math.round(b.getY()));
>>          polygon.addPoint((int) Math.round(c.getX()), (int) 
>> Math.round(c.getY()));
>> @@ -81,17 +102,36 @@ public class GouraudTriangle
>> 
>>      /**
>>       * Check whether the point is within the triangle.
>> -     *
>> +     *
>>       * @param p Point
>> -     *
>> +     *
>>       * @return true if yes, false if no
>>       */
>>      public boolean contains(Point2D p)
>>      {
>> -        // if there is ever a need to optimize, go here
>> +        // inspiration:
>>          // http://stackoverflow.com/a/9755252/535646
>> +        // see also:
>>          // http://math.stackexchange.com/q/51326
>> -        return polygon.contains(p);
>> +        // 
>> http://www.gamedev.net/topic/295943-is-this-a-better-point-in-triangle-test-2d/
>> +        // java function can't be used because polygon takes integer 
>> coordinates
>> +
>> +        double xPminusA = p.getX() - pointA.getX();
>> +        double yPminusA = p.getY() - pointA.getY();
>> +
>> +        boolean signAB = (xBminusA * yPminusA - yBminusA * xPminusA) > 0;
>> +
>> +        if ((xCminusA * yPminusA - yCminusA * xPminusA > 0) == signAB)
>> +        {
>> +            return false;
>> +        }
>> +
>> +        if ((xCminusB * (p.getY() - pointB.getY()) - yCminusB * (p.getX() - 
>> pointB.getX()) > 0) != signAB)
>> +        {
>> +            return false;
>> +        }
>> +
>> +        return true;
>>      }
>> 
>>      /**
>> @@ -102,13 +142,13 @@ public class GouraudTriangle
>>      {
>>          // inspiration: http://stackoverflow.com/a/2145584/535646
>>          // test: http://www.mathopenref.com/coordtrianglearea.html
>> -        return Math.abs((a.getX() - c.getX()) * (b.getY() - a.getY()) - 
>> (a.getX() - b.getX())
>> +        return Math.abs((a.getX() - c.getX()) * (b.getY() - a.getY()) - 
>> (a.getX() - b.getX())
>>                  * (c.getY() - a.getY())) / 2;
>>      }
>> 
>>      /**
>>       * calculate color weights with barycentric interpolation.
>> -     *
>> +     *
>>       * @param p Point within triangle
>>       *
>>       * @return array of weights (between 0 and 1) for a b c
>> @@ -116,9 +156,11 @@ public class GouraudTriangle
>>      public double[] getWeights(Point2D p)
>>      {
>>          // 
>> http://classes.soe.ucsc.edu/cmps160/Fall10/resources/barycentricInterpolation.pdf
>> -        double area = getArea(pointA, pointB, pointC);
>> -        return new double[]{getArea(pointB, pointC, p) / area, 
>> getArea(pointA, pointC, p)
>> -                / area, getArea(pointA, pointB, p) / area};
>> +        return new double[]
>> +        {
>> +            getArea(pointB, pointC, p) / area, getArea(pointA, pointC, p)
>> +            / area, getArea(pointA, pointB, p) / area
>> +        };
>>      }
>> 
>>  }
> 

Reply via email to