diff --git a/InterpolationGenerator.js b/InterpolationGenerator.js
new file mode 100644
index 0000000000000000000000000000000000000000..38d8af09095f0360cf95668148816c37b85c546a
--- /dev/null
+++ b/InterpolationGenerator.js
@@ -0,0 +1,14 @@
+var stop=0
+var sleep = function(time) {
+    var startTime = new Date().getTime() + parseInt(time, 10);
+    while(new Date().getTime() < startTime) {}
+};
+WorkerScript.onMessage = function(message) {
+    var count = message.duration/16;//16ms each data
+    var step = (message.newSpeed-message.oldSpeed)/count;
+    for(var i=1;i<=count;i++)
+    {
+        WorkerScript.sendMessage({ 'speed': message.oldSpeed+step*i ,'end':0})
+        sleep(16);
+    }
+}
diff --git a/MyShapeGauge.qml b/MyShapeGauge.qml
index 5f456d6990bdf24a04b5510a7f275c1ab8527f87..a29ecfdbd350b1b8878b8af7c4bf0df72220cbe0 100644
--- a/MyShapeGauge.qml
+++ b/MyShapeGauge.qml
@@ -4,6 +4,7 @@ import QtQuick.Shapes 1.0
 Item {
     id:shapeItem
     property real  engineSpeedAngle: 0
+//    property real tmpEngineSpeedAngle: 0
     Image {
         id: leftGauge
         x:19
@@ -20,6 +21,41 @@ Item {
         source:"qrc:/images/Tachometer_Scale.png"
         opacity:1
     }
+//    property real lastSpeed: right_mark_Point.rotation
+//    onEngineSpeedAngleChanged: {
+//        rotator.from = lastSpeed;
+//        rotator.to = engineSpeedAngle;
+//        lastSpeed = engineSpeedAngle;
+//        rotator.running=true;
+
+//        rotator2.from = lastSpeed;
+//        rotator2.to = engineSpeedAngle;
+//        lastSpeed = engineSpeedAngle;
+//        rotator2.running=true;
+
+//    }
+//    SequentialAnimation{
+//        running: true
+//        loops: Animation.Infinite
+//        RotationAnimator{
+//            id:rotator
+//            target: right_mark_Point
+//            from: -90
+//            to:90
+//            duration: 2000
+//        }
+//        RotationAnimator{
+//            id:rotator2
+//            target: right_mark_Point
+//            from: 90
+//            to:-90
+//            duration: 2000
+//        }
+//    }
+
+
+
+
 //    Shape{
 //        id:leftShape
 //        anchors.fill: leftGauge
@@ -31,9 +67,9 @@ Item {
 //            fillColor: "transparent"
 //            PathAngleArc{
 //                radiusX: 306
-//                radiusY: 288
-//                centerX: leftShape.width/2
-//                centerY: leftShape.height/2+83
+//                radiusY: 306
+//                centerX: 318
+//                centerY: 320
 //                startAngle: 150
 //                sweepAngle: engineSpeedAngle+120
 //            }
@@ -45,6 +81,12 @@ Item {
         y:22
         visible: true
         rotation: engineSpeedAngle
+//        Behavior on rotation {
+//            RotationAnimator{
+//                duration: 100
+//            }
+//        }
+
         transformOrigin:Item.Bottom
         source:"qrc:/images/pointer_long.png"
         opacity:1
@@ -76,9 +118,9 @@ Item {
 //            fillColor: "transparent"
 //            PathAngleArc{
 //                radiusX: 306
-//                radiusY: 288
-//                centerX: rightShape.width/2
-//                centerY: rightShape.height/2+83
+//                radiusY: 306
+//                centerX: 318
+//                centerY: 320
 //                startAngle: 150
 //                sweepAngle: engineSpeedAngle+120
 //            }
@@ -92,5 +134,10 @@ Item {
         rotation: engineSpeedAngle
         transformOrigin:Item.Bottom
         source:"qrc:/images/pointer_short.png"
+//        Behavior on rotation {
+//            RotationAnimation{
+//                duration: 100
+//            }
+//        }
     }
 }
diff --git a/main.cpp b/main.cpp
index fea655b57dd8d4cd3e11a26fa9bb3ed7dee3f8a3..1ace6dd34702618f029e6016ffda65f4841c095b 100644
--- a/main.cpp
+++ b/main.cpp
@@ -8,19 +8,21 @@
 #include"datamodel.h"
 #include"mycircle.h"
 #include"myeventfilter.h"
+QGuiApplication* g_app;
 void setSpeed(DataModel* model)
 {
     qDebug()<<"running thread";
     bool forward=true;
     qreal speed=0;
+    qreal step=9;
     while (true) {
         if(forward)
         {
-            speed+=1;
+            speed+=step;
         }
         else
         {
-            speed-=1;
+            speed-=step;
         }
         model->setSpeed(speed);
         if(forward && speed>=90)
@@ -31,7 +33,7 @@ void setSpeed(DataModel* model)
         {
             forward=true;
         }
-        QThread::msleep(16);
+        QThread::msleep(100);
     }
 
 }
@@ -45,11 +47,16 @@ int main(int argc, char *argv[])
     }
 
     DataModel model;
-    QtConcurrent::run(setSpeed,&model);
+
+
     QGuiApplication app(argc, argv);
+    g_app = &app;
+
+    QtConcurrent::run(setSpeed,&model);
+
     qmlRegisterType<MyCircle>("MyControl",1,0,"Circle");
-    MyEventFilter eventFilter;
-    app.installEventFilter(&eventFilter);
+//    MyEventFilter eventFilter;
+//    app.installEventFilter(&eventFilter);
     QQmlApplicationEngine engine;
 
     engine.rootContext()->setContextProperty("Model",&model);
@@ -61,6 +68,7 @@ int main(int argc, char *argv[])
             QCoreApplication::exit(-1);
     }, Qt::QueuedConnection);
     engine.load(url);
+
     QQuickWindow* window =static_cast<QQuickWindow*>(engine.rootObjects().at(0)) ;
     QElapsedTimer *pTimer = new QElapsedTimer();
     pTimer->start();
diff --git a/main.qml b/main.qml
index eac892c463e6e45893b356b8a48f36243704e83e..0743a5aa7671e0b31c0dfb49680435655c9beba1 100644
--- a/main.qml
+++ b/main.qml
@@ -1,7 +1,7 @@
-import QtQuick 2.12
-import QtQuick.Window 2.12
+import QtQuick 2.11
+import QtQuick.Window 2.11
 import MyControl 1.0
-import QtQuick.Shapes 1.15
+import QtQuick.Shapes 1.0
 Window {
     width: 1920
     height: 720
@@ -12,31 +12,48 @@ Window {
         color: "black"
     }
 
+
     MyShapeGauge{
         id:shapeGauge
-        engineSpeedAngle:Model.speed
-    }
-//    MySGGauge{
-//        id:sgGauge
-//    }
-
-    SequentialAnimation{
-        running: false
-        loops: Animation.Infinite
-        PropertyAnimation{
-            target: shapeGauge
-            property: "engineSpeedAngle"
-            from: -90
-            to:90
-            duration: 10000
-        }
-        PropertyAnimation{
-            target: shapeGauge
-            property: "engineSpeedAngle"
-            from: 90
-            to:-90
-            duration: 10000
+        engineSpeedAngle: Model.speed
+        Behavior on engineSpeedAngle{
+            NumberAnimation{
+                duration: 150
+            }
         }
+
+        //        property real duration: 0
+        //        property real tmpEngineSpeedAngle: Model.speed
+        //        onTmpEngineSpeedAngleChanged:{
+
+        //            duration =  Math.abs(engineSpeedAngle-tmpEngineSpeedAngle)*4000/224;
+        //            engineSpeedAngle = tmpEngineSpeedAngle;
+        //        }
+        //        Behavior on engineSpeedAngle {
+        //            NumberAnimation{
+        //                duration: duration
+        //            }
+        //        }
     }
 
+
+
+//    SequentialAnimation{
+//        running: true
+//        loops: Animation.Infinite
+//        PropertyAnimation{
+//            target: shapeGauge
+//            property: "engineSpeedAngle"
+//            from: -90
+//            to:90
+//            duration: 3000
+//        }
+//        PropertyAnimation{
+//            target: shapeGauge
+//            property: "engineSpeedAngle"
+//            from: 90
+//            to:-90
+//            duration: 3000
+//        }
+//    }
 }
diff --git a/myeventfilter.cpp b/myeventfilter.cpp
index ca898583e287d8e9ef52bb64372ed5f0483672a6..9bf821045b9b9135c1b8527dfb4ee118feffd814 100644
--- a/myeventfilter.cpp
+++ b/myeventfilter.cpp
@@ -7,9 +7,11 @@ MyEventFilter::MyEventFilter(QObject *parent) : QObject(parent)
 bool MyEventFilter::eventFilter(QObject *watched, QEvent *event)
 {
 //    qDebug()<<"enter event filter";
-    if(event->type() == QEvent::UpdateRequest)
+    if(event->type() == QEvent::StateMachineSignal)
     {
-        qDebug()<<"paint..."<<m_timer.restart()<<"ms";
+//        qDebug()<<"paint..."<<m_timer.restart()<<"ms";
+        return QObject::eventFilter(watched,event);
     }
-    QObject::eventFilter(watched,event);
+//    return QObject::eventFilter(watched,event);
+    return true;
 }
diff --git a/qml.qrc b/qml.qrc
index 55d10f62f3e9589307c7202be14d501c1461b234..eca0b096a3bd275f06fff797975ce234386bcbf2 100644
--- a/qml.qrc
+++ b/qml.qrc
@@ -59,5 +59,6 @@
         <file>images/Turbocharged_Scale.png</file>
         <file>images/water_white.png</file>
         <file>MySGGauge.qml</file>
+        <file>InterpolationGenerator.js</file>
     </qresource>
 </RCC>