annotate layer/VerticalBinLayer.h @ 1233:1a7c2ca31579

Scale pen, place line ends in centres of bins, default to line mode
author Chris Cannam
date Thu, 26 Jan 2017 21:19:49 +0000
parents 261a00010918
children 4eafe5a1b655
rev   line source
Chris@1082 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1082 2
Chris@1082 3 /*
Chris@1082 4 Sonic Visualiser
Chris@1082 5 An audio file viewer and annotation editor.
Chris@1082 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1082 7 This file copyright 2006-2016 Chris Cannam and QMUL.
Chris@1082 8
Chris@1082 9 This program is free software; you can redistribute it and/or
Chris@1082 10 modify it under the terms of the GNU General Public License as
Chris@1082 11 published by the Free Software Foundation; either version 2 of the
Chris@1082 12 License, or (at your option) any later version. See the file
Chris@1082 13 COPYING included with this distribution for more information.
Chris@1082 14 */
Chris@1082 15
Chris@1082 16 #ifndef VERTICAL_BIN_LAYER_H
Chris@1082 17 #define VERTICAL_BIN_LAYER_H
Chris@1082 18
Chris@1110 19 #include "SliceableLayer.h"
Chris@1110 20
Chris@1082 21 /**
Chris@1082 22 * Interface for layers in which the Y axis corresponds to bin number
Chris@1082 23 * rather than scale value. Colour3DPlotLayer is the obvious example.
Chris@1111 24 * Conceptually these are always SliceableLayers as well, and this
Chris@1111 25 * subclasses from SliceableLayer to avoid a big inheritance mess.
Chris@1082 26 */
Chris@1110 27 class VerticalBinLayer : public SliceableLayer
Chris@1082 28 {
Chris@1082 29 public:
Chris@1082 30 /**
Chris@1082 31 * Return the y coordinate at which the given bin "starts"
Chris@1082 32 * (i.e. at the bottom of the bin, if the given bin is an integer
Chris@1082 33 * and the vertical scale is the usual way up). Bin number may be
Chris@1082 34 * fractional, to obtain a position part-way through a bin.
Chris@1082 35 */
Chris@1113 36 virtual double getYForBin(const LayerGeometryProvider *, double bin) const = 0;
Chris@1082 37
Chris@1082 38 /**
Chris@1082 39 * As getYForBin, but rounding to integer values.
Chris@1082 40 */
Chris@1113 41 virtual int getIYForBin(const LayerGeometryProvider *v, int bin) const {
Chris@1085 42 return int(round(getYForBin(v, bin)));
Chris@1085 43 }
Chris@1082 44
Chris@1082 45 /**
Chris@1082 46 * Return the bin number, possibly fractional, at the given y
Chris@1082 47 * coordinate. Note that the whole numbers occur at the positions
Chris@1082 48 * at which the bins "start" (i.e. the bottom of the visible bin,
Chris@1082 49 * if the vertical scale is the usual way up).
Chris@1082 50 */
Chris@1113 51 virtual double getBinForY(const LayerGeometryProvider *, double y) const = 0;
Chris@1082 52
Chris@1082 53 /**
Chris@1082 54 * As getBinForY, but rounding to integer values.
Chris@1082 55 */
Chris@1113 56 virtual int getIBinForY(const LayerGeometryProvider *v, int y) const {
Chris@1085 57 return int(floor(getBinForY(v, y)));
Chris@1085 58 }
Chris@1082 59 };
Chris@1082 60
Chris@1082 61 #endif
Chris@1082 62