Page 1 sur 2
[R] Courbe dynamique
Posté : ven. 10 mai 2013 21:51
par Hugues
Bonjour,
J'aimerai savoir s'il est possible de réaliser des courbes du genre comme ci-dessous? Je sais qu'il existe GDI... mais je ne suis pas sur qu'il puisse faire ce que je veux... C'est à dire tracer une courbe à partir un fichier *.csv, et ensuite avoir un curseur "dynamique" qui donne les valeurs correspondant au point de la courbe...
http://imagesia.com/curve_7zlk
Merci par avance pour votre aide!
Re: [..] Courbe dynamique
Posté : sam. 11 mai 2013 03:12
par mikell
Pourquoi pas ?
On lit le csv dans une array, on trace la courbe sur un Graphic
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
Dim $a[101][2]
$a[0][0] = 0
$a[0][1] = 50
For $i = 1 to 100
$a[$i][0] = $i*5 ; 0-500
$a[$i][1] = 50 + Random(-20, 30, 1)
Next
$hGUI = GUICreate("Graph", 530, 200)
$g = GUICtrlCreateGraphic(10, 10, 510, 90)
GUICtrlSetBkColor(-1, 0xeeeeff)
GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, 0, 50)
For $i = 1 to UBound($a)-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $a[$i][0], $a[$i][1])
Next
GUISetState()
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
Ensuite un slider en correspondance avec l'array
C'est surtout le look qui demanderait du travail, le moteur n'est pas très difficile à faire
Re: [..] Courbe dynamique
Posté : sam. 11 mai 2013 11:21
par Hugues
Ok, j'essaie ça.
Merci.
Re: [..] Courbe dynamique
Posté : sam. 11 mai 2013 16:58
par mikell
Exemple
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <Misc.au3>
Opt("GUIOnEventMode", 1)
Global $a[101][2] = [[0, 0]], $gui, $slider, $Ypos, $dot, $point, $valeur
For $i = 1 to 100
$a[$i][0] = $i*5
$a[$i][1] = Random(-20, 30, 1)
Next
$gui = GUICreate("Graph", 530, 200)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$g = GUICtrlCreateGraphic(10, 10, 500, 90)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, $a[0][0], 50+$a[0][1]) ; décalage de 50 px
GUICtrlSetGraphic($g, $GUI_GR_PENSIZE, 1)
For $i = 1 to UBound($a)-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $a[$i][0], 50-$a[$i][1])
Next
$slider = GUICtrlCreateSlider(5, 130, 515, 20, $TBS_NOTICKS+$TBS_TOP)
GUICtrlSetLimit(-1, 100, 0)
$bar = GuiCtrlCreateLabel("", 10, 10, 1, 90)
GUICtrlSetBkColor(-1, 0x8888ff)
$dot = GuiCtrlCreateLabel("", 10-1, 50+$a[0][1]+10-1, 3, 3)
GUICtrlSetBkColor(-1, 0xff0000)
GuiCtrlCreateLabel("point n° ", 60, 160, 40, 17)
$point = GuiCtrlCreateInput("0", 100, 160, 30, 17)
GuiCtrlCreateLabel("valeur : ", 140, 160, 40, 17)
$valeur = GuiCtrlCreateInput($a[0][1], 190, 160, 30, 17)
GuiCtrlCreateLabel("y_pos : ", 250, 160, 40, 17)
$Ypos = GuiCtrlCreateInput(50-$a[0][1], 300, 160, 30, 17)
GUISetState()
While 1
_ReadSlider()
Wend
;======================================
Func _ReadSlider()
If _IsPressed("01") Then
$info = GUIGetCursorInfo($gui)
If $info[4] = $slider Then
Do
$index = GuiCtrlRead($slider)
GUICtrlSetPos($bar, $index*5+10, 10)
GUICtrlSetPos($dot, $index*5+10-1, 50-$a[$index][1]+10-1)
GuiCtrlSetData($point, $index)
GuiCtrlSetData($valeur, $a[$index][1])
GuiCtrlSetData($Ypos, 50-$a[$index][1] )
Until not _IsPressed("01")
EndIf
EndIf
EndFunc
Func _Exit()
Exit
EndFunc
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 13:04
par Hugues
Me revoilà lol...
Je ne sais pas si je me suis tourné vers la bonne solution en utilisant cette fonction...
Maintenant il ne me reste plus qu'à faire un mixte des 2 fonctions mais ca va être chaud lol car je ne sais pas si dans la fonction _CSV2Array, on peut dire de lire les colonnes B et J pour les valeurs de ma courbes.
► Afficher le texte
Code : Tout sélectionner
#Include <File.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <Misc.au3>
#include <Constants.au3>
$Debug_LV = False ; Check ClassName being passed to ListView functions, set to True and use a handle to another control to see it work
Global $aTableau1, $Path, $Date, $Station, $PointMesure, $NomFichier, $Extension, $FullPathFile, $nb_col, $btn, $a
; # Déclaration du chemin # ===========================================================================================
$Path = @ScriptDir & "\Extraction\"
$NomFichier = "monfichier"
$Extension = ".csv"
$FullPathFile = $Path & $NomFichier & $Extension
; #FUNCTION _CSV2Array# ===================================================================
; Name ..........: _CSV2Array
; Description ...:
; AutoIt Version : V3.3.0.0
; Syntax ........: _CSV2Array($hFile[, $cSeperator = "auto"[, $bFilterString = True[, $iColumnMode = 0]]])
; Parameter(s): .: $hFile - Handle for the CSV file to Read
; $cSeperator - Optional: (Default = "auto") : Tries to find the separator char (; or , or TAB or | or space)
; | Data-seperator-char
; | Empty-string = Opt("GUIDataSeparatorChar")
; $bFilterString - Optional: (Default = True) : Removes leading and trailing " or '
; $iColumnMode - Optional: (Default = 0) :
; | 0: Sets error if lines have different columns and @extended to the csv-line number
; | 1: returns lines with different columns numbers comparing to the first line, too
; | 2: removing all columns > column numbers in the first line
; Return Value ..: Success - 2-dim Array
; Failure - 0
; @ERROR - 1: error file read
; @ERROR - 2: different number of columns / @EXTENDED = CSV-line
; - 3: parameter error
; Author(s) .....: Thorsten Willert
; Date ..........: Mon Dec 07 18:59:46 CET 2009
; ==============================================================================
Func _CSV2Array($hFile, $cSeperator = ";", $bFilterString = True, $iColumnMode = 0)
Local $s = FileRead($hFile)
If @error Then Return SetError(1)
If $cSeperator = Default Then $cSeperator = "auto"
If Not $cSeperator Then $cSeperator = Opt("GUIDataSeparatorChar")
; searching the line-seperator and splitting the lines into an array
Local $aLines
If StringInStr($s, @CRLF) Then
$aLines = StringSplit($s, @CRLF, 1)
ElseIf StringInStr($s, @CR) Then
$aLines = StringSplit($s, @CR)
Else
$aLines = StringSplit($s, @LF)
EndIf
; searching the delimiter in the first line
Local $aTMP
If $cSeperator = "auto" Then
Local $iMax = 0
Local $iC[5] = [0, 0, 0, 0, 0]
Local $sC[5] = [";", ",", @TAB, "|", " "]
$aTMP = StringRegExp($aLines[1], ";", 3)
If Not @error Then $iC[0] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], ",", 3)
If Not @error Then $iC[1] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], "\t", 3)
If Not @error Then $iC[2] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], "\|", 3)
If Not @error Then $iC[3] = UBound($aTMP)
$aTMP = StringRegExp($aLines[1], "[ ]", 3)
If Not @error Then $iC[4] = UBound($aTMP)
For $i = 4 To UBound($sC) - 1
If $iC[$i] > $iMax Then
$iMax = $iC[$i]
$cSeperator = $sC[$i]
EndIf
Next
EndIf
; creating 2-dim array based on the number of data in the first line
$aTMP = StringSplit($aLines[1], $cSeperator)
Local $iCol = $aTMP[0]
Local $aRet[$aLines[0]][$iCol]
; splitting and filling the lines
For $i = 1 To $aLines[0]
$aTMP = StringSplit($aLines[$i], $cSeperator)
If @error Then ContinueLoop
If $aTMP[0] > $iCol Then
Switch $iColumnMode
Case 0
Return SetError(2, $i)
Case 1
ReDim $aRet[$aLines[0] - 1][$aTMP[0]]
Case 2
$aTMP[0] = $iCol
Case Else
Return SetError(3)
EndSwitch
EndIf
For $j = 1 To $aTMP[0]
$aTMP[$j] = StringStripWS($aTMP[$j], 3)
; removing leading and trailing " or '
If $bFilterString Then $aTMP[$j] = StringRegExpReplace($aTMP[$j], '^("|'')(.*?)\1$', '$2')
$aRet[$i - 1][$j - 1] = $aTMP[$j]
Next ; /cols
Next ; /lines
Return $aRet
EndFunc ;==>_CSV2Array
$array = _CSV2Array($FullPathFile)
$nb_colonnes = UBound($array, 2)
$ligne1 = ""
For $i = 0 to UBound($array, 2)-1 ; nb de colonnes
$ligne1 &= $array[0][$i] & "|"
Next
$ligne1 = StringTrimRight($ligne1, 1) ; pour enlever le dernier "|"
$Nb_Lignes = _FileCountLines($FullPathFile)
;************************************************************************************************************
LancementGUI()
Func LancementGUI()
$array = _CSV2Array($FullPathFile)
$nb_colonnes = UBound($array, 2)
$ligne1 = ""
For $i = 0 to UBound($array, 2)-1 ; nb de colonnes
$ligne1 &= $array[0][$i] & "|"
Next
$ligne1 = StringTrimRight($ligne1, 1) ; pour enlever le dernier "|"
$nb_lignes = _FileCountLines($FullPathFile)
Local $msg2
$GUI1 = GUICreate("Mon titre: ", 1200, 800, -1, -1, -1, -1)
;**** Création de ma ListView ****
$hListView = GUICtrlCreateListView($ligne1, 5, 33, 1190, 750, BitOR($LVS_SHOWSELALWAYS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
GUICtrlSetBkColor($hListView, $GUI_BKCOLOR_LV_ALTERNATE)
Dim $aItems[$nb_lignes]
For $i = 0 To $nb_lignes - 2
For $j = 0 to $nb_colonnes - 1
$aItems[$i] &= $array[$i+1][$j] & "|"
Next
$aItems[$i] = StringTrimRight($aItems[$i], 1)
GUICtrlCreateListViewItem($aItems[$i], $hListView)
If Mod($i, 2) <> 0 Then GUICtrlSetBkColor(-1, 0xdddddd)
Next
For $c = 0 to $nb_colonnes - 1
_GUICtrlListView_SetColumn($hListView, $c, $array[0][$c]);;
GUICtrlSendMsg($hListView, $LVM_SETCOLUMNWIDTH, $c, 150)
Next
GUISetState()
While 1
$msg2 = GUIGetMsg()
If $msg2 = $GUI_EVENT_CLOSE Then ExitLoop
WEnd
EndFunc
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <Misc.au3>
Opt("GUIOnEventMode", 1)
Global $a[101][2] = [[0, 0]], $gui, $slider, $Ypos, $dot, $point, $valeur
For $i = 1 to 100
$a[$i][0] = $i*5
$a[$i][1] = Random(-20, 30, 1)
Next
$gui = GUICreate("Graph", 530, 200)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$g = GUICtrlCreateGraphic(10, 10, 500, 90)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, $a[0][0], 50+$a[0][1]) ; décalage de 50 px
GUICtrlSetGraphic($g, $GUI_GR_PENSIZE, 1)
For $i = 1 to UBound($a)-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $a[$i][0], 50-$a[$i][1])
Next
$slider = GUICtrlCreateSlider(5, 130, 515, 20, $TBS_NOTICKS+$TBS_TOP)
GUICtrlSetLimit(-1, 100, 0)
$bar = GuiCtrlCreateLabel("", 10, 10, 1, 90)
GUICtrlSetBkColor(-1, 0x8888ff)
$dot = GuiCtrlCreateLabel("", 10-1, 50+$a[0][1]+10-1, 3, 3)
GUICtrlSetBkColor(-1, 0xff0000)
GuiCtrlCreateLabel("point n° ", 60, 160, 40, 17)
$point = GuiCtrlCreateInput("0", 100, 160, 30, 17)
GuiCtrlCreateLabel("valeur : ", 140, 160, 40, 17)
$valeur = GuiCtrlCreateInput($a[0][1], 190, 160, 30, 17)
GuiCtrlCreateLabel("y_pos : ", 250, 160, 40, 17)
$Ypos = GuiCtrlCreateInput(50-$a[0][1], 300, 160, 30, 17)
GUISetState()
While 1
_ReadSlider()
Wend
;======================================
Func _ReadSlider()
If _IsPressed("01") Then
$info = GUIGetCursorInfo($gui)
If $info[4] = $slider Then
Do
$index = GuiCtrlRead($slider)
GUICtrlSetPos($bar, $index*5+10, 10)
GUICtrlSetPos($dot, $index*5+10-1, 50-$a[$index][1]+10-1)
GuiCtrlSetData($point, $index)
GuiCtrlSetData($valeur, $a[$index][1])
GuiCtrlSetData($Ypos, 50-$a[$index][1] )
Until not _IsPressed("01")
EndIf
EndIf
EndFunc
Func _Exit()
Exit
EndFunc
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 13:40
par mikell
Hum faudrait que tu postes le csv ou au moins un extrait significatif
A vue de nez le plus simple serait de sortir l'array avec _CSV2Array, et ensuite de créer l'array de coordonnées à 2 colonnes en extrayant de la 1ère array les colonnes voulues (ou en virant les autres)
On peut aussi se faire une _CSV2Array custom qui sortira direct l'array n° 2
Et faudra adapter l'échelle de la courbe (très fun ça ^^ )
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 13:46
par Hugues
Voilà un exemple de mon fichier *.csv (le nom des colonnes est absent:
Les valeurs pour ma courbes sont la 8ème colonne...
► Afficher le texte
Code : Tout sélectionner
1 30827009 0265260019-00 02/05/2013 05:06 1 0 0 19,42277 19,42277 1 1 26506 44 7 15 23 31
1 30827014 0265260019-00 02/05/2013 05:06 1 0 0 19,64388 19,64388 1 1 26507 95 7 15 23 31
1 30827016 0265260019-00 02/05/2013 05:07 1 0 0 19,89575 19,89575 1 1 26508 18 7 15 23 31
1 30827026 0265260019-00 02/05/2013 05:07 1 0 0 19,72271 19,72271 1 1 26510 16 7 15 23 31
1 30830850 0265260019-00 02/05/2013 06:10 1 0 0 19,99188 19,99188 1 1 26517 84 7 15 23 31
1 30830903 0265260019-00 02/05/2013 06:10 1 0 0 19,41316 19,41316 1 1 26518 30 7 15 23 31
1 30830971 0265260019-00 02/05/2013 06:10 1 0 0 20,48409 20,48409 1 1 26519 69 7 15 23 31
1 30831037 0265260019-00 02/05/2013 06:11 1 0 0 19,79 19,79 1 1 26526 76 7 15 23 31
1 30831068 0265260019-00 02/05/2013 06:11 1 0 0 20,12647 20,12647 1 1 26521 52 7 15 23 31
1 30831120 0265260019-00 02/05/2013 06:11 1 0 0 20,06879 20,06879 1 1 26528 65 7 15 23 31
1 30831154 0265260019-00 02/05/2013 06:12 1 0 0 20,05918 20,05918 1 1 26530 63 7 15 23 31
1 30831200 0265260019-00 02/05/2013 06:12 1 0 0 19,88998 19,88998 1 1 26533 57 7 15 23 31
1 30831234 0265260019-00 02/05/2013 06:12 1 0 0 20,45909 20,45909 1 1 26512 5 7 15 23 31
1 30831421 0265260019-00 02/05/2013 06:15 1 0 0 19,49776 19,49776 1 1 26534 35 7 15 23 31
1 30831450 0265260019-00 02/05/2013 06:15 1 0 0 20,18223 20,18223 1 1 26535 3 7 15 23 31
1 30831849 0265260019-00 02/05/2013 06:19 1 0 0 20,25337 20,25337 1 1 26536 62 7 15 23 31
1 30831892 0265260019-00 02/05/2013 06:19 1 0 0 19,55736 19,55736 1 1 26538 72 7 15 23 31
1 30832988 0265260019-00 02/05/2013 06:26 1 0 0 19,48814 19,48814 1 1 26539 92 7 15 23 31
1 30833067 0265260019-00 02/05/2013 06:26 1 0 0 19,79 19,79 1 1 26543 6 7 15 23 31
1 30833145 0265260019-00 02/05/2013 06:26 1 0 0 19,57851 19,57851 1 1 26544 82 7 15 23 31
1 30833225 0265260019-00 02/05/2013 06:27 1 0 0 19,57082 19,57082 1 1 26548 77 7 15 23 31
1 30833306 0265260019-00 02/05/2013 06:27 1 0 0 20,49754 20,49754 1 1 26550 38 7 15 23 31
1 30833379 0265260019-00 02/05/2013 06:27 1 0 0 19,8919 19,8919 1 1 26540 25 7 15 23 31
1 30833414 0265260019-00 02/05/2013 06:28 1 0 0 19,18629 19,18629 1 1 26514 88 7 15 23 31
1 30833480 0265260019-00 02/05/2013 06:28 1 0 0 19,84192 19,84192 1 1 26515 34 7 15 23 31
1 30833547 0265260019-00 02/05/2013 06:28 1 0 0 20,08994 20,08994 1 1 26524 33 7 15 23 31
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 14:00
par Hugues
Les colonnes qui m'interessent le plus sont:
Colonne 3 -> Réference
Colonne 4 -> Date et Heure
Colonne 8 -> Valeurs pour tracer de la courbe
Colonne 12 -> ID1
Colonne 13 -> ID2
Colonne 15 -> Tolérance inférieure
Colonne 16 -> Tolerance supérieure
Courbe désirée pour mémoire:
http://imagesia.com/curve_7zlk
Merci.
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 14:31
par mikell
Pour pouvoir tester vaudrait mieux que tu postes carrément le fichier, apparemment les séparateurs sont des tabulations et dans le texte posté le forum les transforme en espaces...
Et faudrait savoir si le nombre de lignes est variable ou pas
Mais effectivement faire une fonction custom parait un meilleur plan
Par exemple (valable pour ce que tu as posté) :
Code : Tout sélectionner
#Include <Array.au3>
$txt = FileRead("1.txt")
$res = StringRegExp($txt, '(?s)\s+(\d+,\d+).+?(?:\v|\Z)', 3)
_ArrayDisplay($res)
Mais pour extraire plusieurs données faut qqe chose de plus élaboré
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 16:15
par Hugues
Le nombre de colonne est toujours le même, mais effectivement pas le nombre de lignes.
Il s'agit sur requête sur un point de mesure.
Mon fichier peut contenir de 0 lignes à x lignes en fonction des dates de requêtes et des résultats trouvés.
Je suppose que je dois mettre mon fichier sur un site hebergeur pour le joindre?
Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 20:17
par mikell
Le fichier tu peux le mettre en pièce jointe dans ton message
A priori le nombre de lignes dans le fichier va correspondre aux graduations de l'axe x de la courbe, c'est pas un concept anodin pour envisager le paramétrage

Re: [..] Courbe dynamique
Posté : mar. 21 mai 2013 23:03
par Hugues
En effet, l'echelle de la courbe dependra du nombre de lignes de mon fichier, ainsi que les tolérances inférieure et supérieure...
Voici mon fichier:
http://cjoint.com/?CEvw76HJfTS
Re: [..] Courbe dynamique
Posté : mer. 22 mai 2013 14:00
par mikell
Les bonnes nouvelles s'accumulent ...
Extraire les parties du csv qui t'intéressent dans une array est facile, mais le problème principal va être l'affichage
Pour l'axe x de ta courbe la graduation minimale est de 1 px, 6559 lignes dans le csv => 6559 pixels de largeur pour la courbe
Donc va falloir ou bien fractionner le csv et afficher les parties successivement, ou bien faire en sorte de pouvoir faire défiler la courbe
Re: [..] Courbe dynamique
Posté : mer. 22 mai 2013 14:09
par Hugues
LOL, oui le problème reste l'affichage...
Car mon fichier peut avoir plus de lignes encor en fonction de l'étendue de la requête...
Pour ma part, le défilement de la courbe serait plus "sympa" pour l'aspect visuel

Re: [..] Courbe dynamique
Posté : mer. 22 mai 2013 14:28
par GhostLine
Sinon, il reste la solution de faire une moyenne des valeurs de X en X, où X est le ratio nombre de colonne / résolution de la largeur de l'écran, non ? Quitte à autoriser de zoomer dessus pour avoir plus de détails.
Re: [..] Courbe dynamique
Posté : mer. 22 mai 2013 16:24
par Hugues
J'ai esquissé un bout de programme (mixe de plusieurs trouvés et donné precedemment...

)
Par contre, bien sur l'echelle est mauvaise, je ne peux pas fermer mon gui, et le gui se ferme automatiquement lorsque l'on slid à fond vers la droite...
► Afficher le texte
Code : Tout sélectionner
#Include <File.au3>
#include <Array.au3>
#include <GUIConstantsEx.au3>
#include <SliderConstants.au3>
#include <Misc.au3>
Global $aTableau1
Global $MonFichierCSV = 'monfichier.csv'
_FileReadToArray($MonFichierCSV, $aTableau1) ; Lecture du fichier dans le tableau.
;_ArrayDisplay($aTableau1, 'Tableau1') ; Affichage du tableau1
Global $aTableau2[$aTableau1[0]][18] ; Préparation tableau2
For $i = 1 To $aTableau1[0] ; Boucle de lecture du tableau1
Local $aMiniTableau = StringSplit($aTableau1[$i], ";") ; Séparation des éléments
$aTableau2[$i - 1][0] = $aMiniTableau[1] ; Mémorisation dans le tableau2 de la valeur 1
$aTableau2[$i - 1][1] = $aMiniTableau[2] ; Mémorisation dans le tableau2 de la valeur 2
$aTableau2[$i - 1][2] = $aMiniTableau[3] ; Mémorisation dans le tableau2 de la valeur 3
$aTableau2[$i - 1][3] = $aMiniTableau[4] ; Mémorisation dans le tableau2 de la valeur 4
$aTableau2[$i - 1][4] = $aMiniTableau[5] ; Mémorisation dans le tableau2 de la valeur 5
$aTableau2[$i - 1][5] = $aMiniTableau[6] ; Mémorisation dans le tableau2 de la valeur 6
$aTableau2[$i - 1][6] = $aMiniTableau[7] ; Mémorisation dans le tableau2 de la valeur 7
$aTableau2[$i - 1][7] = $aMiniTableau[8] ; Mémorisation dans le tableau2 de la valeur 8
$aTableau2[$i - 1][8] = $aMiniTableau[9] ; Mémorisation dans le tableau2 de la valeur 9
$aTableau2[$i - 1][9] = $aMiniTableau[10] ; Mémorisation dans le tableau2 de la valeur 10
$aTableau2[$i - 1][10] = $aMiniTableau[11] ; Mémorisation dans le tableau2 de la valeur 11
$aTableau2[$i - 1][11] = $aMiniTableau[12] ; Mémorisation dans le tableau2 de la valeur 12
$aTableau2[$i - 1][12] = $aMiniTableau[13] ; Mémorisation dans le tableau2 de la valeur 13
$aTableau2[$i - 1][13] = $aMiniTableau[14] ; Mémorisation dans le tableau2 de la valeur 14
$aTableau2[$i - 1][14] = $aMiniTableau[15] ; Mémorisation dans le tableau2 de la valeur 15
$aTableau2[$i - 1][15] = $aMiniTableau[16] ; Mémorisation dans le tableau2 de la valeur 16
$aTableau2[$i - 1][16] = $aMiniTableau[17] ; Mémorisation dans le tableau2 de la valeur 17
$aTableau2[$i - 1][17] = $aMiniTableau[18] ; Mémorisation dans le tableau2 de la valeur 18
Next
;_ArrayDisplay($aTableau2, 'Tableau2') ; Affichage du tableau2
; $aTableau1[0] Correspond à mon nombre de ligne dans mon fichier *.csv
Global $a[$aTableau1[0]][2] = [[0, 0]], $gui, $slider, $Ypos, $dot, $point, $valeur
For $j = 2 To $aTableau1[0]-1
$a[$j][0] = $j
$a[$j][1] = $aTableau2[$j - 1][7] ; Valeur colonne 7
Next
$gui = GUICreate("Graph", 530, 200)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
$g = GUICtrlCreateGraphic(10, 10, 500, 90)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetColor(-1, 0)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, $a[0][0], 50+$a[0][1]) ; décalage de 50 px
GUICtrlSetGraphic($g, $GUI_GR_PENSIZE, 1)
For $i = 1 to UBound($a)-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $a[$i][0], 50-$a[$i][1])
Next
$slider = GUICtrlCreateSlider(5, 130, 515, 20, $TBS_NOTICKS+$TBS_TOP)
GUICtrlSetLimit(-1, $aTableau1[0], 0)
$bar = GuiCtrlCreateLabel("", 10, 10, 1, 90)
GUICtrlSetBkColor(-1, 0x8888ff)
$dot = GuiCtrlCreateLabel("", 10-1, 50+$a[0][1]+10-1, 3, 3)
GUICtrlSetBkColor(-1, 0xff0000)
GuiCtrlCreateLabel("point n° ", 60, 160, 40, 17)
$point = GuiCtrlCreateInput("0", 100, 160, 60, 17)
GuiCtrlCreateLabel("valeur : ", 140, 160, 100, 17)
$valeur = GuiCtrlCreateInput($a[0][1], 190, 160, 100, 17)
GuiCtrlCreateLabel("y_pos : ", 280, 160, 40, 17)
$Ypos = GuiCtrlCreateInput(50-$a[0][1], 320, 160, 30, 17)
GUISetState()
While 1
_ReadSlider()
Wend
;======================================
Func _ReadSlider()
If _IsPressed("01") Then
$info = GUIGetCursorInfo($gui)
If $info[4] = $slider Then
Do
$index = GuiCtrlRead($slider)
GUICtrlSetPos($bar, $index*5+10, 10)
GUICtrlSetPos($dot, $index*5+10-1, 50-$a[$index][1]+10-1)
GuiCtrlSetData($point, $index)
GuiCtrlSetData($valeur, $a[$index][1])
GuiCtrlSetData($Ypos, 50-$a[$index][1] )
Until not _IsPressed("01")
EndIf
EndIf
EndFunc
Func _Exit()
Exit
EndFunc
Re: [..] Courbe dynamique
Posté : mer. 22 mai 2013 22:43
par mikell
Pour faire défiler la courbe, voilà la recette
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 2)
Global $a[101][2] = [[0, 0]], $gui, $child, $slider, $Ypos, $dot, $point, $valeur
For $i = 1 to 100
$a[$i][0] = $i*10
$a[$i][1] = Random(-20, 30, 1)
Next
Global $decalage = 50 ; décalage d'affichage 50 px
$gui = GUICreate("Graph", 520, 200)
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
GUISetState()
$child = GUICreate("screen", 500, 90, 10, 10, BitOR($WS_POPUP, $WS_BORDER), _
BitOR($WS_EX_MDICHILD, $WS_EX_COMPOSITED), $gui)
$g = GUICtrlCreateGraphic(0, 0, 1000, 90)
GUICtrlSetBkColor(-1, 0xffffff)
GUICtrlSetGraphic($g, $GUI_GR_MOVE, $a[0][0], $decalage+$a[0][1])
GUICtrlSetGraphic($g, $GUI_GR_PENSIZE, 1)
For $i = 1 to UBound($a)-1
GUICtrlSetGraphic($g, $GUI_GR_COLOR, 0xff)
GUICtrlSetGraphic($g, $GUI_GR_LINE, $a[$i][0], $decalage-$a[$i][1])
Next
GUISetState()
While 1
If _IsPressed("01") Then
$info = GUIGetCursorInfo($child)
If $info[4] = $g Then
Do
$m0 = MouseGetPos()
$p = ControlGetPos($child, "", $g)
Sleep(10)
$m = MouseGetPos()
$newx = $p[0]+$m[0]-$m0[0]
If $newx < 0 and $newx > 500-1000 Then
ControlMove($child, "", $g, $p[0]+$m[0]-$m0[0], $p[1])
EndIf
Until not _IsPressed("01")
EndIf
EndIf
Wend
Func _Exit()
Exit
EndFunc
C'est pas compliqué, mais alors après.... pour les échelles de correspondance avec le slider, ya une chiée + 1 de savants calculs... bon courage...
Re: [..] Courbe dynamique
Posté : jeu. 23 mai 2013 11:47
par Hugues
Pour l'echelle, j'ai peut-etre une idée... mais je sais pas si elle est facile à exploitée...
En effet, dans mon fichier *.csv, il y a les tolérances mini/maxi pour ma valeur de point.
Donc je pourrais utiliser ces valeurs avec un offset +- pour avoir de la marge et celal me donnerai mon echelle verticale..?
Re: [..] Courbe dynamique
Posté : jeu. 23 mai 2013 13:42
par Hugues
Sinon question bête... Peut-on faire dialoguer AutoIt et Jfree?

Re: [..] Courbe dynamique
Posté : jeu. 23 mai 2013 14:36
par mikell
Pour Jfree j'ai des gros doutes vu que c'est en java mais tu peux toujours le tenter