Ik heb wat code gemaakt om een hostogram in 3D te laten tekenen in VB. Het is voor een DU Meter die elke seconde word ge-update. Onderstaande code simuleert dit door elke seconde 60 "blokjes" te tekenen. In de praktijk zal dit een array van 60 getallen worden.
Voor volgende code is nodig:
- een PictureBox met autoredraw=true en scalemode= twip
- een timer op 1000ms.
Het tekenen zelf gaat echter te traag om praktisch te zijn. het duurt ongeveer 0,5 seconde op mijn AMD 2000+. Dit moet toch ook in enkele miliseconden kunnen op een of andere manier
Er kan alvast nog 1 optimalisatie doorgevoerd worden door bij tekenen de VOLGENDE waarde ook mee te sturen en enkel de voorkant te tekenen vanaf het punt waar de volgende waarde start... maar vrees dat dat niet voldoende zal zijn...

Voor volgende code is nodig:
- een PictureBox met autoredraw=true en scalemode= twip
- een timer op 1000ms.
Het tekenen zelf gaat echter te traag om praktisch te zijn. het duurt ongeveer 0,5 seconde op mijn AMD 2000+. Dit moet toch ook in enkele miliseconden kunnen op een of andere manier
Er kan alvast nog 1 optimalisatie doorgevoerd worden door bij tekenen de VOLGENDE waarde ook mee te sturen en enkel de voorkant te tekenen vanaf het punt waar de volgende waarde start... maar vrees dat dat niet voldoende zal zijn...

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| Public Sub Draw3d(mm As Integer, xx As Integer)
Dim mX As Integer
Dim mY As Integer
For mY = 1500 To xx Step -1
picBar.Line (mm + 70, mY)-(mm + 70 + 150, mY - 150), RGB(10, 10, 100)
Next
For mX = mm + 20 To mm + 70
picBar.Line (mX, xx)-(mX + 150, mY - 150), RGB(10, 10, 200)
Next
picBar.Line (mm + 20, xx)-(mm + 70, 1500), RGB(10, 100, 200), BF
End Sub
Private Sub Timer1_Timer()
Picture1.Picture = LoadPicture("")
For i = 1 To 60
Randomize
Draw3d i * 50, Int(Rnd * (1490 - 200 + 1)) + 200
Next
Picture1.Picture = Picture1.Image
End Sub |
[ Voor 4% gewijzigd door WhiteDog op 24-09-2003 08:56 ]
