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
) {
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
;
30 iDasherY
=myint(GetLongParameter(LP_OY
));
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
;
45 iDasherY
=myint((myint
)GetLongParameter(LP_OY
));
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
));
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
;