French Dessiner avec le doigt et connaitre précisément les points touchés

Fillmore

Member
Licensed User
Longtime User
Bonjour à tous,

je cherche à faire une application qui permet de tracer une courbe avec le doigt. Pas de problème pour ça avec le panel_touch et le didacticiel "Signature". Cependant, j'ai besoin de savoir précisément quelles zones sont traversées par la courbe. Si je fais un tracé rapide, le relevé des points n'est pas assez précis et certaine zone apparaissent comme non traversée. J'ai bien fait un calcul de tous les points constituant chaque petite droite pour savoir si la courbe traversait la zone, mais ça ne fonctionne pas dans tous les cas.
Question : peut-on rendre plus précise la fonction Panel_touch pour que le relevé de position se fasse plus souvent ?
Ou sinon, y a-t-il un moyen de détecter lorsque mon doigt passe sur un objet (label par exemple).
Si quelqu'un a une idée... Merci bien !

Bon dimanche à tous.

Fred
 

Informatix

Expert
Licensed User
Longtime User
Bonjour à tous,

je cherche à faire une application qui permet de tracer une courbe avec le doigt. Pas de problème pour ça avec le panel_touch et le didacticiel "Signature". Cependant, j'ai besoin de savoir précisément quelles zones sont traversées par la courbe. Si je fais un tracé rapide, le relevé des points n'est pas assez précis et certaine zone apparaissent comme non traversée. J'ai bien fait un calcul de tous les points constituant chaque petite droite pour savoir si la courbe traversait la zone, mais ça ne fonctionne pas dans tous les cas.
Question : peut-on rendre plus précise la fonction Panel_touch pour que le relevé de position se fasse plus souvent ?
Ou sinon, y a-t-il un moyen de détecter lorsque mon doigt passe sur un objet (label par exemple).
Si quelqu'un a une idée... Merci bien !

Bon dimanche à tous.

Fred
Utilise ma bibliothèque GestureDetector. Il y a deux fonctions getHistoricalX et getHistoricalY qui te donneront les points intermédiaires entre deux événements.
 

Fillmore

Member
Licensed User
Longtime User
Pendant que j'y suis... Est-ce que Gesture detector peut détecter lorsque le doigt je passe sur un objet ? J'ai besoin de connaitre les coordonées traversées pour savoir si l'objet en question est traversé, mais peut-être que l'objet peut réagir directement lorsqu'il est touché, ce serait plus simple.
Merci encore.

Fred
 

Informatix

Expert
Licensed User
Longtime User
Pendant que j'y suis... Est-ce que Gesture detector peut détecter lorsque le doigt je passe sur un objet ? J'ai besoin de connaitre les coordonées traversées pour savoir si l'objet en question est traversé, mais peut-être que l'objet peut réagir directement lorsqu'il est touché, ce serait plus simple.
Merci encore.

Fred
Les évènements de toucher sont envoyés à l'objet qui a reçu le premier évènement (touch down, action = 0). Donc quand tu fais passer ton doigt au dessus d'autres vues, celles-ci ne peuvent recevoir aucun évènement. Il faut vérifier si les coordonnées du toucher sont dans la zone d'affichage d'une vue (c'est ce que fait un panel pour déléguer l'évènement à un de ses enfants).
 

Fillmore

Member
Licensed User
Longtime User
Ok, c'est ce qui me semblait. C'est juste compliqué du coup quand ma vue est animée (en rotation notamment). Concernant la fonction GetHistoricalX, elle renvoie un nombre ou un ensemble de nombre ? Comment je l'appelle ? : If GetHistoricalX > 500 and GetHistoricalX < 600 then blablabla ?
Merci

Fred
 

Fillmore

Member
Licensed User
Longtime User
Dac, j'avais pas vu ça. Je vais tatonner, c'est de toute façon le meilleur moyen d'apprendre. Encore merci.

Fred
 

Fillmore

Member
Licensed User
Longtime User
En fait qq chose m'échappe... Si j'ai 20 points par exemple, où sont-il rangés ? dans gd.GetHistoricalX(0 à 19) ?
Merci
 

Fillmore

Member
Licensed User
Longtime User
Bon, j'ai fait ça, mais mon label ne change pas de couleur quand je passe dessus. Le PtrIndex, c'est pour le multitouch je pense ? J'ai mis 0, mais c'est peut-être pas bon...
Un peu perdu sur le coup...

Désolé...

B4X:
Sub Gesture_onTouch(Action As Int, X As Float, Y As Float, MotionEvent As Object) As Boolean


historic=GD.getHistorySize(MotionEvent)

For t=0 To historic-1
   


If GD.getHistoricalX(MotionEvent,0,t)>= labelcg.Left And GD.getHistoricalX(MotionEvent,0,t)<= labelcg.Left+labelcg.Width  And GD.getHistoricaly(MotionEvent,0,t)>=labelcg.top And GD.getHistoricaly(MotionEvent,0,t)<=labelcg.Top+labelcg.Height Then

        labelcg.Color=Colors.Green
 
    End If

Next

Return True
End Sub
 

Informatix

Expert
Licensed User
Longtime User
Une autre solution est d'associer un GestureDetector à toutes les vues et de renvoyer False dans l'évènement Touch (la vue rejette l'évènement; celui-ci et les évènements ultérieurs deviennent alors détectables par d'autres vues). Pas testé.
 

Fillmore

Member
Licensed User
Longtime User
En fait, le log ne renvoie rien, j'ai mis une action a faire en tête de routine ('Gesture_ontouch') et elle ne se réalise pas. JE pense que la routine n'est même pas visitée...
 

Fillmore

Member
Licensed User
Longtime User
C'est bon, j'avais un autre fonction qui interceptait le touch avant la tienne. Maintenant ça fonctionne.
Si je ne veux dessiner que d'un seul doigt, c'est avec "Painters" que ça se passe ? Je n'utilise que le painter(0) ?

Merci encore et bonne journée.

Fred
 

Nicoch

New Member
Celui-ci est un peu hors sujet mais j'adore l'idée tablette graphique XP-PEN avec stylet .
Permet de numériser directement ses dessins en les dessinant sur papier.
Possibilité également de réaliser des calques pour faciliter ses retouches sur Photoshop.
 
Top