fr.emn.spiraclock
Class Spiral

java.lang.Object
  extended by fr.emn.spiraclock.Spiral

public class Spiral
extends java.lang.Object

A class that draws a spiral, together with marks & sectors.

All methods have been optimized to be fast.


Field Summary
static int A_360
           
static int A_90
           
(package private)  java.awt.Color backgroundColor
           
(package private) static float[] cc1
           
(package private) static float[] cc2
           
(package private)  java.awt.Point center
           
(package private) static int[] cos_table
           
(package private) static double DEFAULT_INTERVAL
           
(package private) static java.awt.Color defaultColor
           
(package private)  long endAngle
           
(package private)  double interval
           
(package private)  int majorMark
           
(package private) static java.awt.Color markColor
           
(package private)  double markDistance
           
(package private) static int MAX_STEP
           
(package private) static int MIN_STEP
           
(package private)  int minorMark
           
(package private) static java.awt.Color outlineColor
           
(package private)  java.awt.geom.GeneralPath outlinePath
           
(package private)  java.awt.Color outlineShadowColor
           
(package private)  java.awt.Polygon outlineShape
           
(package private)  int[] outlinex
           
(package private)  int[] outliney
           
(package private)  double p_a
           
(package private)  double p_b
           
(package private)  java.awt.Polygon poly
           
(package private)  double radius0
           
(package private)  double radius1
           
(package private)  java.awt.Color[] sectorColors
           
(package private)  int sectorCount
           
(package private)  int[] sectorEnds
           
(package private)  boolean[] sectorFades
           
(package private)  double[] sectorPos
           
(package private)  double[] sectorSizes
           
(package private)  int[] sectorStarts
           
(package private) static double SHADOW_OFFSET
           
(package private)  int shadowOffset
           
(package private)  int size
           
(package private) static java.awt.Color spiralColor
           
(package private) static java.awt.Color[] spiralGrays
           
(package private)  java.awt.geom.GeneralPath spiralPath
           
(package private)  long startAngle
           
(package private)  int startAngle_mod
           
(package private) static int[] step_table
           
(package private)  float strength
           
 
Constructor Summary
Spiral(int majorMark, int minorMark)
           
 
Method Summary
 int angleOf(java.awt.Point comp)
           
(package private) static double cos(double r, long angle)
           
(package private) static int cos(int r, long angle)
           
 long getAngle()
          Reinterval the starting absolute angle of the spiral
 int getAngleMatching(java.awt.Point comp)
          (slow) Used for picking.
 int getAngleSize()
          Reinterval the difference between ending absolute angle and starting absolute angle.
 double getInterval()
          Reinterval the interval in pixels between 2 spiral branchs
 int getMajorMark()
          0 = none
 int getMinorMark()
          0 = none
protected  java.awt.Polygon getSector(int aStart, int aEnd, double aPos, double aSize, boolean includePast)
           
 void locate(java.awt.Point mid, int size)
          Sets the center & size of the spiral
(package private) static java.awt.Color mix(java.awt.Color c1, java.awt.Color c2, float amount)
           
 int paint(java.awt.Graphics2D g, int detail, java.awt.Color darking, float coef)
          PENDING: Graphics are not satisfactory in anti-aliased mode: Marks & Hands must be painted using double coordinates.
protected  void paintMarks(java.awt.Graphics2D g, int detail, java.awt.Color darking, float coef)
          Paint marks.
protected  void paintOutline(java.awt.Graphics2D g, int detail, java.awt.Color darking, float coef)
          Paints the overall shape of the spiral, and its shadow.
protected  void paintSectors(java.awt.Graphics2D g, int detail, java.awt.Color darking, float coef)
          Paints 'sectors' on the spiral, given sectorStarts[] and sectorEnds[] arrays.
protected  void paintSpiral(java.awt.Graphics2D g, int detail, java.awt.Color darking, float coef)
          Paints the branchs of the spiral.
 void setAngle(long angle)
          Sets the starting absolute angle of the spiral
 void setBackground(java.awt.Color bg)
           
 void setInterval(double newinterval)
           
 void setMajorMark(int angle)
           
 void setMinorMark(int angle)
           
 void setSectors(int[] start_angles, int[] end_angles, boolean[] fades, int number)
          Angles are relative here.
(package private) static double sin(double r, long angle)
           
(package private) static int sin(int r, long angle)
           
 int toAngle(double radius)
          The inverted spiral equation.
 void toComponent(double r, int rel_angle, java.awt.geom.Point2D rect)
          Converts polar coordinates into component rectangular coordinates.
 void toPolar(java.awt.Point comp, java.awt.geom.Point2D polar)
           
 double toRadius(int rel_angle)
          The spiral equation.
(package private) static void toRect(double r, long angle, java.awt.geom.Point2D rect)
           
(package private) static void toRect(int r, long angle, java.awt.Point rect)
           
(package private) static java.awt.Color transp(java.awt.Color c1, float opacity)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

A_360

public static final int A_360
See Also:
Constant Field Values

A_90

public static final int A_90
See Also:
Constant Field Values

MIN_STEP

static final int MIN_STEP
See Also:
Constant Field Values

MAX_STEP

static final int MAX_STEP
See Also:
Constant Field Values

SHADOW_OFFSET

static final double SHADOW_OFFSET
See Also:
Constant Field Values

DEFAULT_INTERVAL

static final double DEFAULT_INTERVAL
See Also:
Constant Field Values

outlineColor

static final java.awt.Color outlineColor

defaultColor

static final java.awt.Color defaultColor

spiralColor

static final java.awt.Color spiralColor

markColor

static final java.awt.Color markColor

backgroundColor

java.awt.Color backgroundColor

outlineShadowColor

java.awt.Color outlineShadowColor

majorMark

int majorMark

minorMark

int minorMark

markDistance

double markDistance

interval

double interval

startAngle

long startAngle

endAngle

long endAngle

startAngle_mod

int startAngle_mod

sectorStarts

int[] sectorStarts

sectorEnds

int[] sectorEnds

sectorColors

java.awt.Color[] sectorColors

sectorSizes

double[] sectorSizes

sectorPos

double[] sectorPos

sectorFades

boolean[] sectorFades

sectorCount

int sectorCount

center

final java.awt.Point center

size

int size

step_table

static final int[] step_table

cos_table

static final int[] cos_table

spiralGrays

static java.awt.Color[] spiralGrays

cc1

static final float[] cc1

cc2

static final float[] cc2

strength

float strength

outlineShape

java.awt.Polygon outlineShape

outlinePath

java.awt.geom.GeneralPath outlinePath

spiralPath

java.awt.geom.GeneralPath spiralPath

outlinex

int[] outlinex

outliney

int[] outliney

shadowOffset

int shadowOffset

poly

java.awt.Polygon poly

radius0

double radius0

radius1

double radius1

p_a

double p_a

p_b

double p_b
Constructor Detail

Spiral

public Spiral(int majorMark,
              int minorMark)
Method Detail

setBackground

public void setBackground(java.awt.Color bg)

getMajorMark

public int getMajorMark()
0 = none


setMajorMark

public void setMajorMark(int angle)

getMinorMark

public int getMinorMark()
0 = none


setMinorMark

public void setMinorMark(int angle)

setSectors

public void setSectors(int[] start_angles,
                       int[] end_angles,
                       boolean[] fades,
                       int number)
Angles are relative here.


locate

public void locate(java.awt.Point mid,
                   int size)
Sets the center & size of the spiral


getInterval

public double getInterval()
Reinterval the interval in pixels between 2 spiral branchs


setInterval

public void setInterval(double newinterval)

getAngle

public long getAngle()
Reinterval the starting absolute angle of the spiral


setAngle

public void setAngle(long angle)
Sets the starting absolute angle of the spiral


getAngleSize

public int getAngleSize()
Reinterval the difference between ending absolute angle and starting absolute angle.

Depends on branch interval.


toRadius

public double toRadius(int rel_angle)
The spiral equation.


toAngle

public int toAngle(double radius)
The inverted spiral equation.


toComponent

public void toComponent(double r,
                        int rel_angle,
                        java.awt.geom.Point2D rect)
Converts polar coordinates into component rectangular coordinates.


angleOf

public int angleOf(java.awt.Point comp)

toPolar

public void toPolar(java.awt.Point comp,
                    java.awt.geom.Point2D polar)

getAngleMatching

public int getAngleMatching(java.awt.Point comp)
(slow) Used for picking. This method reinterval the relative angle of the spiral branch matching the given component coordinates. Works for every kind of spiral.


paint

public int paint(java.awt.Graphics2D g,
                 int detail,
                 java.awt.Color darking,
                 float coef)
PENDING: Graphics are not satisfactory in anti-aliased mode: Marks & Hands must be painted using double coordinates. Polygons must be replaced by GeneralPaths, if it is not too slow. PaintSpiral() is bad in antialiased mode, despite the use of Line2Ds. why ?


paintSpiral

protected void paintSpiral(java.awt.Graphics2D g,
                           int detail,
                           java.awt.Color darking,
                           float coef)
Paints the branchs of the spiral.


paintOutline

protected void paintOutline(java.awt.Graphics2D g,
                            int detail,
                            java.awt.Color darking,
                            float coef)
Paints the overall shape of the spiral, and its shadow.


paintSectors

protected void paintSectors(java.awt.Graphics2D g,
                            int detail,
                            java.awt.Color darking,
                            float coef)
Paints 'sectors' on the spiral, given sectorStarts[] and sectorEnds[] arrays.


getSector

protected java.awt.Polygon getSector(int aStart,
                                     int aEnd,
                                     double aPos,
                                     double aSize,
                                     boolean includePast)

paintMarks

protected void paintMarks(java.awt.Graphics2D g,
                          int detail,
                          java.awt.Color darking,
                          float coef)
Paint marks.


mix

static java.awt.Color mix(java.awt.Color c1,
                          java.awt.Color c2,
                          float amount)

transp

static java.awt.Color transp(java.awt.Color c1,
                             float opacity)

toRect

static void toRect(int r,
                   long angle,
                   java.awt.Point rect)

toRect

static void toRect(double r,
                   long angle,
                   java.awt.geom.Point2D rect)

cos

static int cos(int r,
               long angle)

sin

static int sin(int r,
               long angle)

cos

static double cos(double r,
                  long angle)

sin

static double sin(double r,
                  long angle)