login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Tijdbalk

Offline Fenrir - 23/03/2005 16:11 (laatste wijziging 23/03/2005 19:47)
Avatar van FenrirPHP expert Ik probeer een tijdbalk-tekenaar te maken. Ik bedoel een tijdbalk voor geschiedenis.

Ik doe het met GD. Ik wil dat er gebeurtenissen opkomen (met tekst), maar ze mogen niet door elkaar staan:

1567: gebeurtenis 1
1568: gebeurtenis 2

Die twee overlappen elkaar op de tijdbalk, omdat de kort na elkaar gebeuren. Ik wil dan dat gebeurtenis 2 naar beneden schuift.

dit is mijn code:

  1. <?php
  2.  
  3.  
  4. include 'var_info.function.php';
  5.  
  6. $jaartallen = array(
  7. array('jaartal' => -234, 'gebeurtenis' => 'gebeurtenis 1'),
  8. array('jaartal' => 655, 'gebeurtenis' => 'gebeurtenis 2 gebeurtenis 2 gebeurtenis 2tenis 2 gebeurtenis 2tenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 '),
  9. array('jaartal' => 656, 'gebeurtenis' => 'gebeurtenis 3'),
  10. );
  11.  
  12. $rijen = array();
  13.  
  14. $jaartalbreedte = 100;
  15.  
  16. $jaartallen = array_reverse($jaartallen);
  17.  
  18. $max = -1000000000;
  19. $min = 1000000000;
  20.  
  21. $aantal = count($jaartallen);
  22. for($i = 0; $i < $aantal; $i++)
  23. {
  24. $bbox = imagettfbbox(20, 0, 'verdana.ttf', $jaartallen[$i]['gebeurtenis']);
  25. $jaartallen[$i]['breedte'] = $bbox[2] - $bbox[0];
  26. $jaartallen[$i]['start'] = $jaartallen[$i]['jaartal'] * $jaartalbreedte;
  27. $jaartallen[$i]['eind'] = $jaartallen[$i]['start'] + $jaartallen[$i]['breedte'];
  28.  
  29. if($jaartallen[$i]['start'] < $min)
  30. {
  31. $min = $jaartallen[$i]['start'];
  32. }
  33.  
  34. if($jaartallen[$i]['eind'] > $max)
  35. {
  36. $max = $jaartallen[$i]['eind'];
  37. }
  38. }
  39.  
  40. for($i = 0; $i < $aantal; $i++)
  41. {
  42. $jaartallen[$i]['start'] -= $min;
  43. $jaartallen[$i]['eind'] -= $min;
  44. }
  45.  
  46. for($i = 0; $i < $aantal; $i++)
  47. {
  48. $goed = false;
  49.  
  50. $count = count($rijen);
  51. if($count != 0)
  52. {
  53. for($j = 0; $j < $count; $j++)
  54. {
  55. if(!$goed)
  56. {
  57. $count2 = count($rijen[$j]);
  58. for($k = 0; $k < $count2; $k++)
  59. {
  60. $goed2 = true;
  61. if($jaartallen[$i]['gebeurtenis'] != $rijen[$j][$k]['gebeurtenis'])
  62. {
  63. if($jaartallen[$i]['start'] >= $rijen[$j][$k]['start'] && $jaartallen[$i]['eind'] <= $rijen[$j][$k]['eind'])
  64. {
  65. echo 'overlap: start1:', $jaartallen[$i]['start'], ' start2:', $rijen[$j][$k]['start'], ' <br />';
  66. $goed2 = false;
  67. }else
  68. {
  69. $rijen[$j][] = $jaartallen[$i];
  70. //echo 'geen overlap: start1:', $jaartallen[$i]['start'], ' start2:', $rijen[$j][$k]['start'], ' <br />';
  71. }
  72. }
  73.  
  74. if($goed2 == true)
  75. {
  76. echo 'rij', $j, ' is goed<br />';
  77. $goed = true;
  78. }
  79. }
  80. }
  81. }
  82.  
  83. if(!$goed)
  84. {
  85. echo 'nieuwe rij<br />';
  86. $rijen[count($rijen)][0] = $jaartallen[$i];
  87. }
  88. }else
  89. {
  90. $rijen[0][] = $jaartallen[$i];
  91. }
  92. }
  93.  
  94. var_info($jaartallen);
  95. var_info($rijen);
  96.  
  97. ?>


nu krijg ik deze output:
  1. rij0 is goed
  2. rij0 is goed
  3. rij0 is goed
  4. <?php
  5.  
  6. 0 =>
  7. 'jaartal' => 656,
  8. 'gebeurtenis' => 'gebeurtenis 3',
  9. 'breedte' => 174,
  10. 'start' => 89000,
  11. 'eind' => 89174,
  12. ),
  13. 1 =>
  14. 'jaartal' => 655,
  15. 'gebeurtenis' => 'gebeurtenis 2 gebeurtenis 2 gebeurtenis 2tenis 2 gebeurtenis 2tenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 ',
  16. 'breedte' => 1673,
  17. 'start' => 88900,
  18. 'eind' => 90573,
  19. ),
  20. 2 =>
  21. 'jaartal' => -234,
  22. 'gebeurtenis' => 'gebeurtenis 1',
  23. 'breedte' => 174,
  24. 'start' => 0,
  25. 'eind' => 174,
  26. ),
  27. )
  28.  
  29. ?> <?php
  30.  
  31. 0 =>
  32. 0 =>
  33. 'jaartal' => 656,
  34. 'gebeurtenis' => 'gebeurtenis 3',
  35. 'breedte' => 174,
  36. 'start' => 89000,
  37. 'eind' => 89174,
  38. ),
  39. 1 =>
  40. 'jaartal' => 655,
  41. 'gebeurtenis' => 'gebeurtenis 2 gebeurtenis 2 gebeurtenis 2tenis 2 gebeurtenis 2tenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 ',
  42. 'breedte' => 1673,
  43. 'start' => 88900,
  44. 'eind' => 90573,
  45. ),
  46. 2 =>
  47. 'jaartal' => -234,
  48. 'gebeurtenis' => 'gebeurtenis 1',
  49. 'breedte' => 174,
  50. 'start' => 0,
  51. 'eind' => 174,
  52. ),
  53. 3 =>
  54. 'jaartal' => -234,
  55. 'gebeurtenis' => 'gebeurtenis 1',
  56. 'breedte' => 174,
  57. 'start' => 0,
  58. 'eind' => 174,
  59. ),
  60. ),
  61. )
  62.  
  63. ?>


Nu staan ze dus allemaal naast elkaar, maar ze overlappen, dus ze moeten naar beneden.

  1. 0 =>
  2. 0 =>
  3. 'jaartal' => 656,
  4. 'gebeurtenis' => 'gebeurtenis 3',
  5. 'breedte' => 174,
  6. 'start' => 89000,
  7. 'eind' => 89174,
  8. ),
  9. 1 =>
  10. 'jaartal' => 655,
  11. 'gebeurtenis' => 'gebeurtenis 2 gebeurtenis 2 gebeurtenis 2tenis 2 gebeurtenis 2tenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 gebeurtenis 2 ',
  12. 'breedte' => 1673,
  13. 'start' => 88900,
  14. 'eind' => 90573,
  15. ),
  16. 2 =>
  17. 'jaartal' => -234,
  18. 'gebeurtenis' => 'gebeurtenis 1',
  19. 'breedte' => 174,
  20. 'start' => 0,
  21. 'eind' => 174,
  22. ),
  23. 3 =>
  24. 'jaartal' => -234,
  25. 'gebeurtenis' => 'gebeurtenis 1',
  26. 'breedte' => 174,
  27. 'start' => 0,
  28. 'eind' => 174,
  29. ),
  30. ),
  31. )


Dat is de array rijen, en daarin staat alles in rij 0, maar eigenlijk zou gebeurtenis 2 gebeurtenis 3 overlappen, dus gebeurtenis 3 moet naar beneden.

Weten jullie wat er fout is?

Alvast bedankt,
Jules

EDIT:
Ehh, dit is wel een ultralange post geworden 

2 antwoorden

Gesponsorde links
Offline riekele - 23/03/2005 16:29
Avatar van riekele PHP beginner ik snap het niet echt eerst wil je dat ze naar onder gaan dan staan ze onder elkaar maar is het weer niet goed 
Offline Fenrir - 23/03/2005 19:48 (laatste wijziging 23/03/2005 19:49)
Avatar van Fenrir PHP expert O, dat was fout van mij.
Ik heb het veranderd, ze moeten dus niet allemaal naast elkaar, maar degenen die elkaar overlappen moeten naar beneden opschuiven, zodat de tekst niet door elkaar staat.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.199s