tagging release
[dasher.git] / Src / DasherCore / OneDimensionalFilter.cpp
blob4f3d1784e1e70c95984bf87af61196e7f4f1ae2a
1 #include "../Common/Common.h"
2 #include "OneDimensionalFilter.h"
4 COneDimensionalFilter::COneDimensionalFilter(Dasher::CEventHandler * pEventHandler, CSettingsStore *pSettingsStore, CDasherInterfaceBase *pInterface, CDasherModel *m_pDasherModel)
5 : CDefaultFilter(pEventHandler, pSettingsStore, pInterface, m_pDasherModel, 4, _("One Dimensional Mode")) {
8 void COneDimensionalFilter::ApplyTransform(myint &iDasherX, myint &iDasherY) {
10 iLastY = iDasherY;
12 double disty,circlesize,yfullrange,yforwardrange,angle,ellipse_eccentricity,ybackrange,yb,x;
14 // The distance between the Y coordinate and the centreline in pixels
15 disty=(myint)GetLongParameter(LP_OY)-iDasherY;
17 circlesize= (myint)GetLongParameter(LP_MAX_Y)/2.5;
18 yforwardrange= (myint)GetLongParameter(LP_MAX_Y)/3.2; // Was 1.6
19 yfullrange= yforwardrange*1.6;
20 ybackrange= yfullrange-yforwardrange;
21 ellipse_eccentricity=6;
23 if (disty>yforwardrange) {
24 // If the distance between y-coord and centreline is > radius,
25 // we should be going backwards, off the top.
26 yb=(disty-yforwardrange)/ybackrange;
28 if (yb>1) {
29 x=0;
30 iDasherY=myint(GetLongParameter(LP_OY));
32 else {
33 angle=(yb*3.14159)*(yb+(1-yb)*(ybackrange/yforwardrange/ellipse_eccentricity));
35 x=(-sin(angle)*circlesize/2)*ellipse_eccentricity;
36 iDasherY=myint(-(1+cos(angle))*circlesize/2+(myint)GetLongParameter(LP_OY));
39 else if (disty <-(yforwardrange)) {
40 // Backwards, off the bottom.
41 yb=-(disty+yforwardrange)/ybackrange;
43 if (yb>1) {
44 x=0;
45 iDasherY=myint((myint)GetLongParameter(LP_OY));
47 else {
48 angle=(yb*3.14159)*(yb+(1-yb)*(ybackrange/yforwardrange/ellipse_eccentricity));
50 x=(-sin(angle)*circlesize/2)*ellipse_eccentricity;
51 iDasherY=myint((1+cos(angle))*circlesize/2+(myint)GetLongParameter(LP_OY));
55 else {
56 angle=((disty*3.14159/2)/yforwardrange);
57 x=cos(angle)*circlesize;
58 iDasherY=myint(-sin(angle)*circlesize+(myint)GetLongParameter(LP_OY));
60 x=(myint)GetLongParameter(LP_OX)-x;
62 iDasherX = myint(x);