Voor een hobby projectje heb ik een form waar ik met GDI+ wat wijzertjes op teken. Dat wijzertje is een System.Drawing Ellipse en twee Line's. Die voeg ik samen in een GraphicsPath. Ik stel vervolgens mijn draaipunt in.
Nu wordt er om de 100ms (de updatetijd als het ware van mijn form) de refresh method aangeroepen van het object waar ik in teken. Op dat moment wordt er vanuit een double waarin de snelheid staat (bv 120.00) en een double waarin het toerental staat (bv 4000.00) een hoek uitgerekend die mijn wijzer moet aannemen.
Bijvoorbeeld:
Vervolgens doe ik (in het geval van de KM wijzer, de RPM wijzer is hetzelfde):
Dit alles moet dus om de 100ms gebeuren. Daarnaast worden ook om de 100ms labels van een nieuwe text voorzien.
Werken doet het wel, met één meter vloeiend zonder label updates, dat is al 100% CPU! Als ik de rest erbij doe gaat het nog wel snel en foutloos maar niet vloeiend.
Is die rotateat method met de transform de boosdoener? Is er een efficientere manier?
Screenshot:
http://home.planet.nl/~jpabst/Scr/sc_per4.jpg
Dat van die labels snap ik wel, de controls zijn transperant en daar is Forms uit .NET niet zo efficient mee dus die zal ik dan zelf moeten tekenen... Is dus ook niet de vraag.
Nu wordt er om de 100ms (de updatetijd als het ware van mijn form) de refresh method aangeroepen van het object waar ik in teken. Op dat moment wordt er vanuit een double waarin de snelheid staat (bv 120.00) en een double waarin het toerental staat (bv 4000.00) een hoek uitgerekend die mijn wijzer moet aannemen.
Bijvoorbeeld:
Visual Basic .NET:
1
2
3
4
| dblPercentageHoekKM = dblSnelheid / 2.4 + 4.166666666666667 dblHoekKM = (dblPercentageHoekKM / 100) * 360 dblPercentageHoekRPM = dblToeren / 120 + 12.5 dblHoekRPM = (dblPercentageHoekRPM / 100) * 360 |
Vervolgens doe ik (in het geval van de KM wijzer, de RPM wijzer is hetzelfde):
Visual Basic .NET:
1
2
3
4
| Dim gdiMatrixKM As New Matrix(1, 0, 0, 1, 1, 1) gdiMatrixKM.RotateAt(dblHoekKM, gdiDraaipuntKM) gdiGraphicsPathKM.Transform(gdiMatrixKM) gdiGraphics.DrawPath(Pens.Red, gdiGraphicsPathKM) |
Dit alles moet dus om de 100ms gebeuren. Daarnaast worden ook om de 100ms labels van een nieuwe text voorzien.
Werken doet het wel, met één meter vloeiend zonder label updates, dat is al 100% CPU! Als ik de rest erbij doe gaat het nog wel snel en foutloos maar niet vloeiend.
Is die rotateat method met de transform de boosdoener? Is er een efficientere manier?
Screenshot:
http://home.planet.nl/~jpabst/Scr/sc_per4.jpg
Dat van die labels snap ik wel, de controls zijn transperant en daar is Forms uit .NET niet zo efficient mee dus die zal ik dan zelf moeten tekenen... Is dus ook niet de vraag.