new plotter

This commit is contained in:
Sergey Solovyev 2013-01-19 01:35:27 +04:00
parent fc2d89c1ed
commit 6af5239c6e

View File

@ -56,9 +56,6 @@ public class CalculatorGraph2dView extends View implements GraphView {
@NotNull @NotNull
private final Paint textPaint = new Paint(); private final Paint textPaint = new Paint();
@NotNull
private final Paint fillPaint = new Paint();
@NotNull @NotNull
private GraphViewHelper graphViewHelper = GraphViewHelper.newDefaultInstance(); private GraphViewHelper graphViewHelper = GraphViewHelper.newDefaultInstance();
@NotNull @NotNull
@ -239,6 +236,76 @@ public class CalculatorGraph2dView extends View implements GraphView {
graphsData.checkBoundaries(graphHeight, yMin, yMax); graphsData.checkBoundaries(graphHeight, yMin, yMax);
final int tickDigits = drawGridAndAxis(canvas);
{
// TOUCH POSITION
if (lastTouchXPxs != NO_TOUCH && lastTouchYPxs != NO_TOUCH) {
paint.setColor(graphViewHelper.getPlotViewDef().getGridColor());
paint.setAlpha(100);
canvas.drawLine(lastTouchXPxs, 0, lastTouchXPxs, heightPxs, paint);
canvas.drawLine(0, lastTouchYPxs, widthPxs, lastTouchYPxs, paint);
final Point2d lastTouch = dimensions.toGraphCoordinates(lastTouchXPxs, lastTouchYPxs);
final String touchLabel = "[" + formatTick(lastTouch.getX(), tickDigits + 1) + ", " + formatTick(lastTouch.getY(), tickDigits + 1) + "]";
canvas.drawText(touchLabel, 0, touchLabel.length(), lastTouchXPxs - 40, lastTouchYPxs - 40, textPaint);
// restore alpha
paint.setAlpha(255);
}
}
final float ratio = dimensions.getGraphToViewRatio();
matrix.reset();
matrix.preTranslate(-dimensions.getX0(), -dimensions.getY0());
matrix.postScale(1/ratio, -1/ratio);
matrix.postTranslate(widthPxs / 2, heightPxs / 2);
paint.setAntiAlias(false);
{
//GRAPH
final List<PlotFunction> plotFunctions = graphViewHelper.getPlotFunctions();
// create path once
final Path path = new Path();
for (int i = 0; i < plotFunctions.size(); i++) {
final PlotFunction plotFunction = plotFunctions.get(i);
final GraphData graph = graphsData.get(i);
graphCalculator.computeGraph(plotFunction.getXyFunction(), xMin, xMax, graph, graphsData, dimensions);
graphToPath(graph, path);
path.transform(matrix);
AbstractCalculatorPlotFragment.applyToPaint(plotFunction.getPlotLineDef(), paint);
canvas.drawPath(path, paint);
}
}
graphsData.setLastXMin(xMin);
graphsData.setLastXMax(xMax);
}
private int drawGridAndAxis(@NotNull Canvas canvas) {
final float graphHeight = dimensions.getGraphHeight();
final float xMin = dimensions.getXMin();
final float yMin = dimensions.getYMin(graphHeight);
final float yMax = dimensions.getYMax(graphHeight, yMin);
final float widthPxs = dimensions.getVWidthPxs();
final float heightPxs = dimensions.getVHeightPxs();
// set background // set background
canvas.drawColor(graphViewHelper.getPlotViewDef().getBackgroundColor()); canvas.drawColor(graphViewHelper.getPlotViewDef().getBackgroundColor());
@ -264,8 +331,8 @@ public class CalculatorGraph2dView extends View implements GraphView {
} }
final float tickStep = getTickStep(dimensions.getGWidth()); final float tickStep = getTickStep(dimensions.getGWidth());
final int tickDigits = countTickDigits(tickStep); final int tickDigits = countTickDigits(tickStep);
{ {
// GRID // GRID
@ -316,62 +383,7 @@ public class CalculatorGraph2dView extends View implements GraphView {
canvas.drawLine(x0px, 0, x0px, heightPxs, paint); canvas.drawLine(x0px, 0, x0px, heightPxs, paint);
canvas.drawLine(0, y0px, widthPxs, y0px, paint); canvas.drawLine(0, y0px, widthPxs, y0px, paint);
} }
return tickDigits;
{
// TOUCH POSITION
if (lastTouchXPxs != NO_TOUCH && lastTouchYPxs != NO_TOUCH) {
paint.setColor(graphViewHelper.getPlotViewDef().getGridColor());
paint.setAlpha(100);
canvas.drawLine(lastTouchXPxs, 0, lastTouchXPxs, heightPxs, paint);
canvas.drawLine(0, lastTouchYPxs, widthPxs, lastTouchYPxs, paint);
final Point2d lastTouch = dimensions.toGraphCoordinates(lastTouchXPxs, lastTouchYPxs);
final String touchLabel = "[" + formatTick(lastTouch.getX(), tickDigits + 1) + ", " + formatTick(lastTouch.getY(), tickDigits + 1) + "]";
canvas.drawText(touchLabel, 0, touchLabel.length(), lastTouchXPxs - 40, lastTouchYPxs - 40, textPaint);
// restore alpha
paint.setAlpha(255);
}
}
matrix.reset();
matrix.preTranslate(-dimensions.getX0(), -dimensions.getY0());
matrix.postScale(1/ratio, -1/ratio);
matrix.postTranslate(widthPxs / 2, heightPxs / 2);
paint.setAntiAlias(false);
{
//GRAPH
final List<PlotFunction> functionPlotDefs = graphViewHelper.getPlotFunctions();
// create path once
final Path path = new Path();
for (int i = 0; i < functionPlotDefs.size(); i++) {
final PlotFunction fpd = functionPlotDefs.get(i);
final GraphData graph = graphsData.get(i);
graphCalculator.computeGraph(fpd.getXyFunction(), xMin, xMax, graph, graphsData, dimensions);
graphToPath(graph, path);
path.transform(matrix);
AbstractCalculatorPlotFragment.applyToPaint(fpd.getPlotLineDef(), paint);
canvas.drawPath(path, paint);
}
}
graphsData.setLastXMin(xMin);
graphsData.setLastXMax(xMax);
} }
/* /*