Bonjour à tous,

Je me tourne à nouveau vers vous pour avoir des conseils.

J'essaie de faire un programme qui automatise un dessin, peu importe les postions de départ de x,y.

Je m'explique, je récupère des coordonnées dans un fichier.txt de cette façon:

165, 125
165, 265
365, 265
365, 345
525, 345
525, 265
625, 265
625, 165
525, 165
525, 125
185, 125

Je dessine la première forme complète avec ma boucle while ( qui fonctionne bien ). Après, il faut que je reparte de cette forme pour faire quelque chose de similaire au dessin ci dessous, avec un décalage de 20 pixels.

Nom : dessin1.jpg
Affichages : 195
Taille : 27,3 Ko

Le dessin ci dessus étant relativement simple et sans contrainte.

Ci dessous un dessin plus compliqué ( exemple du programme )

Nom : dessin2.png
Affichages : 200
Taille : 5,9 Ko

Plus compliqué car dans la zone en vert, elle n’apparaît plus dans la forme suivante car l'écart de 20 pixels n'est pas respecté. Donc on ne dessine pas les trois lignes.

Voici le code actuellement de la partie du programme concerné. ( et encore il me manque le petit retour à chaque ligne, entouré en vert ).

Nom : Dessin4.png
Affichages : 199
Taille : 6,1 Ko

Code:

Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
 
from tkinter import *
 
# Fenêtre
root = Tk()
Largeur = 1200
Hauteur = 800
 
canvas = Canvas(root, width=Largeur, height=Hauteur, background="white")
canvas.pack(side=LEFT, padx=5, pady=5)
root.resizable(width=False, height=False)
root.title('Heating Draw')
 
with open("valeur_x_y.txt", "r+") as file:
    liste_complet = file.readlines()
    liste_complet = ", ".join(liste_complet)
    liste_complet = liste_complet.replace("\n", "")
    liste_complet = liste_complet.split(", ")
    liste_complet = list(map(int, liste_complet))
    file.close()
 
i = 0
 
while(i <= len(liste_complet)-3):
    canvas.create_line(liste_complet[i], liste_complet[i+1], liste_complet[i+2], liste_complet[i+3], fill="red", width=3) # adding 1 to i for the next position
    i += 2
 
canvas.create_line(liste_complet[0] + 20, liste_complet[1] + 20, liste_complet[2] + 20, liste_complet[3] - 20, fill="red", width=3)
canvas.create_line(liste_complet[2] + 20, liste_complet[3] - 20, liste_complet[4] + 20, liste_complet[5] - 20, fill="red", width=3)
canvas.create_line(liste_complet[4] + 20, liste_complet[5] - 20, liste_complet[6] + 20, liste_complet[7] - 20, fill="red", width=3)
canvas.create_line(liste_complet[6] + 20, liste_complet[7] - 20, liste_complet[8] - 20, liste_complet[9] - 20, fill="red", width=3)
canvas.create_line(liste_complet[8] - 20, liste_complet[9] - 20, liste_complet[10] - 20, liste_complet[11] - 20, fill="red", width=3)
canvas.create_line(liste_complet[10] - 20, liste_complet[11] - 20, liste_complet[12] - 20, liste_complet[13] - 20, fill="red", width=3)
canvas.create_line(liste_complet[12] - 20, liste_complet[13] - 20, liste_complet[14] - 20, liste_complet[15] + 20, fill="red", width=3)
canvas.create_line(liste_complet[14] - 20, liste_complet[15] + 20, liste_complet[16] - 20, liste_complet[17] + 20, fill="red", width=3)
canvas.create_line(liste_complet[16] - 20, liste_complet[17] + 20, liste_complet[18] - 20, liste_complet[19] + 20, fill="red", width=3)
canvas.create_line(liste_complet[18] - 20, liste_complet[19] + 20, liste_complet[20] + 20, liste_complet[21] + 20, fill="red", width=3)
 
canvas.create_line(liste_complet[0] + 40, liste_complet[1] + 40, liste_complet[2] + 40, liste_complet[3] - 40, fill="red", width=3)
canvas.create_line(liste_complet[2] + 40, liste_complet[3] - 40, liste_complet[4] + 40, liste_complet[5] - 40, fill="red", width=3)
canvas.create_line(liste_complet[4] + 40, liste_complet[5] - 40, liste_complet[6] + 40, liste_complet[7] - 40, fill="red", width=3)
canvas.create_line(liste_complet[6] + 40, liste_complet[7] - 40, liste_complet[8] - 40, liste_complet[9] - 40, fill="red", width=3)
canvas.create_line(liste_complet[8] - 40, liste_complet[9] - 40, liste_complet[10] - 40, liste_complet[11] - 40, fill="red", width=3)
canvas.create_line(liste_complet[10] - 40, liste_complet[11] - 40, liste_complet[12] - 40, liste_complet[13] - 40, fill="red", width=3)
canvas.create_line(liste_complet[12] - 40, liste_complet[13] - 40, liste_complet[14] - 40, liste_complet[15] + 40, fill="red", width=3)
canvas.create_line(liste_complet[14] - 40, liste_complet[15] + 40, liste_complet[16] - 40, liste_complet[17] + 40, fill="red", width=3)
canvas.create_line(liste_complet[16] - 40, liste_complet[17] + 40, liste_complet[18] - 40, liste_complet[19] + 40, fill="red", width=3)
canvas.create_line(liste_complet[18] - 40, liste_complet[19] + 40, liste_complet[20] + 40, liste_complet[21] + 40, fill="red", width=3)
 
canvas.create_line(liste_complet[0] + 60, liste_complet[1] + 60, liste_complet[2] + 60, liste_complet[3] - 60, fill="red", width=3)
canvas.create_line(liste_complet[2] + 60, liste_complet[3] - 60, liste_complet[4] + 60, liste_complet[5] - 60, fill="red", width=3)
canvas.create_line(liste_complet[4] + 60, liste_complet[5] - 60, liste_complet[6] + 60, liste_complet[7] - 60, fill="red", width=3)
canvas.create_line(liste_complet[6] + 60, liste_complet[7] - 60, liste_complet[8] - 60, liste_complet[9] - 60, fill="red", width=3)
canvas.create_line(liste_complet[8] - 60, liste_complet[9] - 60, liste_complet[10] - 60, liste_complet[11] - 60, fill="red", width=3)
#canvas.create_line(liste_complet[10] - 60, liste_complet[11] - 60, liste_complet[12] - 60, liste_complet[13] - 60, fill="red", width=3)
#canvas.create_line(liste_complet[12] - 60, liste_complet[13] - 60, liste_complet[14] - 60, liste_complet[15] + 60, fill="red", width=3)
#canvas.create_line(liste_complet[14] - 60, liste_complet[15] + 60, liste_complet[16] - 60, liste_complet[17] + 60, fill="red", width=3)
canvas.create_line(liste_complet[16] - 60, liste_complet[17] + 60, liste_complet[18] - 60, liste_complet[19] + 60, fill="red", width=3)
canvas.create_line(liste_complet[18] - 60, liste_complet[19] + 60, liste_complet[20] + 60, liste_complet[21] + 60, fill="red", width=3)
 
root.mainloop()

Comme vous pouvez le remarqué, j'ai tapé toutes les lignes à la main pour comprendre comment procéder pour automatiser mais je suis complètement perdu.

J'ai bien comprit que je devais mettre des conditions pour tester la valeur de x,y par rapport au premier tracé ( boucle while ) et savoir si c'est un "+" ou un "-". Le décalage entre les différents tracé est donc de 20.

Voici mes questions:

Comment automatisé le retour ? ( photo 3 )
Comment faire pour faire mes conditions ? J'ai essayer de plusieurs façon différent mais rien ne fonctionne, il faut que le programme choisisse automatique de mettre un -20 ou + 20 suivant le première traçage de la boucle while ?
Comment faire ne pas tracé certaine ligne quand l'écartement entre les ligne est plus petit de 10 ? Voir photo 2

J'espère que vous avez comprit le fonctionnement et que j'ai été clair dans mes propos.

Je vous remercie.