/****************************************************************************************
* Copyright (c) 2014 Michael Goldbach <michael@wildplot.com> *
* *
* This program is free software; you can redistribute it and/or modify it under *
* the terms of the GNU General Public License as published by the Free Software *
* Foundation; either version 3 of the License, or (at your option) any later *
* version. *
* *
* This program is distributed in the hope that it will be useful, but WITHOUT ANY *
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A *
* PARTICULAR PURPOSE. See the GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License along with *
* this program. If not, see <http://www.gnu.org/licenses/>. *
****************************************************************************************/
package com.wildplot.android.rendering;
import com.wildplot.android.rendering.graphics.wrapper.*;
import com.wildplot.android.rendering.interfaces.Drawable;
import com.wildplot.android.rendering.interfaces.Legendable;
/**
* The LinesPoints objects draw points from a data array and connect them with lines on.
* These LinesPoints are drawn onto a PlotSheet object
*/
public class Lines implements Drawable, Legendable {
private boolean mHasShadow = false;
private float mShadowRadius = 0.0f;
private float mShadowDx= 0.0f;
private float mShadowDy = 0.0f;
private ColorWrap mShadowColor = ColorWrap.BLACK;
private String mName = "";
private boolean mNameIsSet = false;
private PlotSheet plotSheet;
private double[][] pointList;
private ColorWrap color;
public void setSize(float size) {
this.size = size;
}
private float size;
/**
* Constructor for points connected with lines without drawn points
* @param plotSheet the sheet the lines and points will be drawn onto
* @param pointList x- , y-positions of given points
* @param color point and line color
*/
public Lines(PlotSheet plotSheet, double[][] pointList, ColorWrap color) {
this.plotSheet = plotSheet;
this.pointList = pointList;
this.color = color;
}
/* (non-Javadoc)
* @see rendering.Drawable#paint(java.awt.Graphics)
*/
@Override
public void paint(GraphicsWrap g) {
ColorWrap oldColor = g.getColor();
RectangleWrap field = g.getClipBounds();
g.setColor(color);
StrokeWrap oldStroke = g.getStroke();
g.setStroke(new BasicStrokeWrap(this.size)); // set stroke width of 10
if(mHasShadow){
//g.setShadow(mShadowRadius, mShadowDx, mShadowDy, mShadowColor);
}
float[] coordStart = plotSheet.toGraphicPoint(pointList[0][0],pointList[1][0],field);
float[] coordEnd = coordStart;
for(int i = 0; i< pointList[0].length; i++) {
coordEnd = coordStart;
coordStart = plotSheet.toGraphicPoint(pointList[0][i],pointList[1][i],field);
if(mHasShadow){
StrokeWrap oldShadowLessStroke = g.getStroke();
g.setStroke(new BasicStrokeWrap(this.size*1.5f)); // set stroke width of 10
ColorWrap shadowColor = new ColorWrap(mShadowColor.getRed(), mShadowColor.getGreen(), mShadowColor.getBlue(), 80);
g.setColor(shadowColor);
g.drawLine(coordStart[0] + mShadowDx, coordStart[1] + mShadowDy, coordEnd[0] + mShadowDx, coordEnd[1] + mShadowDy);
g.setColor(color);
g.setStroke(oldShadowLessStroke);
}
g.drawLine(coordStart[0], coordStart[1], coordEnd[0], coordEnd[1]);
//drawPoint(pointList[0][i], pointList[1][i], canvas, paint, field);
}
if(mHasShadow){
//g.unsetShadow();
}
g.setStroke(oldStroke);
g.setColor(oldColor);
}
/**
* Draw points as karo
* @param x x-value of a point
* @param y y-value of a point
* @param g graphic object where to draw
* @param field given Rect field
*/
public void drawPoint(double x, double y, GraphicsWrap g, RectangleWrap field) {
float[] coordStart = plotSheet.toGraphicPoint(x, y,field);
g.drawRect(coordStart[0]-3, coordStart[1]-3, coordStart[0]-3+6, coordStart[1]-3+6);
// g.drawLine(coordStart[0]-3, coordStart[1]-3, coordStart[0]+3, coordStart[1]-3);
// g.drawLine(coordStart[0]+3, coordStart[1]-3, coordStart[0]+3, coordStart[1]+3);
// g.drawLine(coordStart[0]+3, coordStart[1]+3, coordStart[0]-3, coordStart[1]+3);
// g.drawLine(coordStart[0]-3, coordStart[1]+3, coordStart[0]-3, coordStart[1]-3);
}
/*
* (non-Javadoc)
* @see rendering.Drawable#isOnFrame()
*/
public boolean isOnFrame() {
return false;
}
@Override
public void abortAndReset() {
// TODO Auto-generated method stub
}
@Override
public boolean isClusterable() {
return true;
}
@Override
public boolean isCritical() {
return false;
}
@Override
public ColorWrap getColor() {
return color;
}
@Override
public String getName() {
return mName;
}
@Override
public boolean nameIsSet() {
return mNameIsSet;
}
public void setName(String name){
mName = name;
mNameIsSet = true;
}
public void setShadow(float radius, float dx, float dy, ColorWrap color){
mHasShadow =true;
mShadowRadius = radius;
mShadowDx = dx;
mShadowDy = dy;
mShadowColor = color;
}
public void unsetShadow(){
mHasShadow = false;
}
}