Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 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 | | Calendrier |
|
|
| Logiciel de dessin (esquissage) en 8 lignes seulement!! | |
| | |
Auteur | Message |
---|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 8:19 | |
| Bonjour à tous les panoramiciens Bon je remet ici le même source que j'ai corrigé et débarrassé de quelques instructions qui ne servaient à rien. D'abord celui avec lequel il faut cliquer en premier le bouton gauche pour commencer à tracer le trait, puis le bouton droit pour arrêter le trait. - Code:
-
dim xd,yd,xf,yf,xv,yv,cok,cno label trait,fin full_space 0:picture 1:full_space 1 image 100:on_close 0,fin timer 99:timer_interval 99,1:on_timer 99,trait end
trait: timer_off 99:cok=mouse_left_down(1) if cok=1 xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) else timer_on 99:return end_if ' 2d_pen_width 1:2d_pen_color 0,0,200:2d_pen_dash 2d_pen_width 3:2d_pen_color 0,0,200 2d_image_copy 100,0,0,width(1),height(1) while cok=1 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xv or yf<>yv 2d_image_paste 100,0,0:2d_line xd,yd,xf,yf:xv=xf:yv=yf:wait 500 end_if if mouse_right_up(1)=1 then exit_while end_while timer_on 99 return
fin: terminate Ensuite celui avec lequel, on maintient le bouton gauche enfoncé pour tracer le trait, puis quand on le relache le trait stoppe. - Code:
-
dim xd,yd,xf,yf,xv,yv,cok,cno label trait,fin full_space 0:picture 1:full_space 1 image 100:on_close 0,fin timer 99:timer_interval 99,1:on_timer 99,trait end
trait: timer_off 99:cok=mouse_left_down(1) if cok=1 xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) else timer_on 99:return end_if ' 2d_pen_width 1:2d_pen_color 0,0,200:2d_pen_dash 2d_pen_width 3:2d_pen_color 0,0,200 2d_image_copy 100,0,0,width(1),height(1) while cok=1 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xv or yf<>yv 2d_image_paste 100,0,0:2d_line xd,yd,xf,yf:xv=xf:yv=yf:wait 500 end_if if mouse_left_up(1)=1 then exit_while end_while timer_on 99 return
fin: terminate
bien entendu, vous pouvez ajuster la valeur du wait qui est à 500. A vous de voir! Vous pouvez toujours remplacer le line par rectangle! Bonne journée à tous! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 10:03 | |
| J'peux pas tester (boulot), mais je le fais ce soir | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 15:06 | |
| Oui bignono, c'est très intéressant, pour tracer une droite. Parlons de ton second exemple (j'ai juste mis le wait à 100, c'est bien mieux). Je clique du gauche, je maintiens enfoncé et je déplace la souris, l'extrémité de la droite suit, et se fixe quand je relâche le bouton. Très bien, ça permet de tracer avec précision et de manière intuitive une ligne droite.
Mais je parlais de cliquer, puis tracer une ligne courbe ou des boucles en continu, puis relâcher pour arrêter.
Là on n'a que des droites. Mais je confirme, c'est très intéressant, pour faire des polygones, des figures ouvertes ou fermées composées de lignes droites. | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 15:16 | |
| | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 16:07 | |
| @jicehel j'ai pas encore regardé ta page @bignono j'ai un peu bricolé ton code génial pour dessiner un trait libre, finalement c'est pas mal ton truc: - Code:
-
dim xd,yd,xf,yf,xv,yv,typ label trait, libre width 0, 800:picture 1:full_space 1 2d_pen_width 3:2d_pen_color 0,0,200 image 100 timer 99:timer_interval 99,1 typ = 1: ' droite typ = 2: ' trait libre select typ case 1: on_timer 99, trait case 2: on_timer 99, libre end_select end
trait: timer_off 99: if mouse_left_down(1)=0 then timer_on 99: return xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) 2d_image_copy 100,0,0,width(1),height(1) while mouse_left_up(1)=0 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xv or yf<>yv 2d_image_paste 100,0,0:2d_line xd,yd,xf,yf:xv=xf:yv=yf:wait 100 end_if end_while timer_on 99 return
libre: timer_off 99: if mouse_left_down(1)=0 then timer_on 99: return xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) 2d_image_copy 100,0,0,width(1),height(1) while mouse_left_up(1)=0 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xd or yf<>yd 2d_line xd,yd,xf,yf:xd=xf:yd=yf:wait 100 end_if end_while timer_on 99 return | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 16:28 | |
| Pas mal pour entraîner les seniors au maniement de la souris | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 16:38 | |
| Tu parles en connaissance de cause ? Vachement bien ce petit bout de code de bignono, tiens, en un peu plus élaboré: - Code:
-
dim xd,yd,xf,yf,xv,yv,typ, i% label attente, trait, rectangle, libre width 0, 800: color 0,128,255,255 picture 1:top 1, 35: height 1, height(0)-75: width 1, width(0)-16 container_option 2: height 2,35: WIDTH 2, 340: caption 2," Figures " option 3: parent 3, 2: top 3, 15: left 3, 10: caption 3, "Trait" option 4: parent 4, 2: top 4, 15: left 4, 90: caption 4, "Rect.vide" option 5: parent 5, 2: top 5, 15: left 5, 170: caption 5, "Rect.plein" option 6: parent 6, 2: top 6, 15: left 6, 250: caption 6, "Libre" mark_on 4 2d_target_is 1: 2d_pen_width 3:2d_pen_color 0,0,200 image 100 timer 99:timer_interval 99,100: on_timer 99, attente
end
attente: if mouse_left_down(1)=0 then return FOR i% = 3 TO 6 IF CHECKED(i%) = 1 THEN typ = i%-2: EXIT_FOR NEXT i% SELECT typ CASE 1: GOSUB trait CASE 2: GOSUB rectangle: ' vide CASE 3: GOSUB rectangle: ' plein CASE 4: GOSUB libre ' ... etc. END_SELECT RETURN
trait: timer_off 99 xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) 2d_image_copy 100,0,0,width(1),height(1) while mouse_left_up(1)=0 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xv or yf<>yv 2d_image_paste 100,0,0: 2d_line xd,yd,xf,yf:xv=xf:yv=yf:wait 100 end_if end_while timer_on 99 return
rectangle: timer_off 99 xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) 2d_image_copy 100,0,0,width(1),height(1) while mouse_left_up(1)=0 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xv or yf<>yv 2d_image_paste 100,0,0 IF checked(5) = 1 2d_rectangle xd,yd,xf,yf: ' plein ELSE 2D_LINE xd,yd,xf,yd: 2d_poly_to xf,yf: 2d_poly_to xd,yf: 2d_poly_to xd,yd END_IF xv=xf:yv=yf:wait 100 end_if end_while timer_on 99 return
libre: timer_off 99 xd=mouse_x_left_down(1):yd=mouse_y_left_down(1) 2d_image_copy 100,0,0,width(1),height(1) while mouse_left_up(1)=0 xf=mouse_x_position(1):yf=mouse_y_position(1) if xf<>xd or yf<>yd 2d_line xd,yd,xf,yf:xd=xf:yd=yf:wait 100 end_if end_while timer_on 99 return bizarrement, j'ai mis le timer_interval à 100 et le wait à 100, mais si on essaie d'autres valeurs ça n'a pas l'air de changer grand chose... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 16:43 | |
| Ha çà évolue, t'es parti pour recommencer un logiciel de dessin | |
| | | lodchjo
Nombre de messages : 162 Age : 53 Localisation : Anvers Date d'inscription : 26/12/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 16:49 | |
| Ce qui a commencé par 8 lignes a bien evolué, j'en suis content! Et le trait libre marche bien aussi. Dommage du scintillement, mais pt-être qu'un jour, Jack trouvera la solution! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 16:52 | |
| Le scintillement, je ne le trouve pas trop gênant... et ça me paraît presque normal, vu lle nombre de fois qu'il faut rafraîchir l'écran. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 18:19 | |
| Bonsoir à tous, Eh ben, je m'absente quelques heures, et quand je reviens, mon petit bout de code est génial, et en plus JL35 il en a déjà fait un petit programme de dessin! Vous perdez pas votre temps les gars! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 18:26 | |
| C'est bien connu, quand on a de bonnes bases... (et aussi pas grand chose d'autre à faire ) | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 18:43 | |
| Ah! t'as pas grand chose d'autre à faire? Ben ça tombe bien! Je ne sais pas comment faire pour tracer un rectangle en biais. C'est à dire à lui faire faire une rotation! Quand avec mon bout de code tu traces une ligne simple, tu peux avec la souris déterminer son point d'arrivée à n'importe quel point de ton espace de dessin. Moi ce que je cherche à faire, c'est si j'ai un rectangle d'une hauteur fixe (par exemple 150 pixels), il faut qu'en bougeant ma souris, j'allonge ce rectangle à la longueur que je désire, mais aussi le mettre dans la position que je veux! Saisis-tu le problème? Pour moi c'est pas simple, et il faut que je calcule l'angle dans le quel se trouve le pointeur de ma souris. A+ et te prend pas la tête avec mes problèmes! Merci | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 20:00 | |
| - Citation :
- Ah! t'as pas grand chose d'autre à faire? Ben ça tombe bien! Je ne sais pas comment faire pour tracer un rectangle en biais.
Hihi ! pauvre JL35 | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 20:50 | |
| Je voulais dire pas grand chose à faire à part m'amuser ! si c'est pour bosser là c'est autre chose ! Je vois à peu près ce que tu veux dire, mais ce n'est sûrement pas simple... déjà tu opères comment ? Pour allonger, tu saisi un des côtés et tu tires dessus, mais pour tourner ? tu saisis un des coins et tu fais tourner ?
Si c'est juste pour dessiner un rectangle en biais, c'est facile, mais le faire tourner en temps réel... ? | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 21:09 | |
| En tout cas, le test fonctionne bien | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 21:14 | |
| JL35, Ah! bien tout à l'heure j'ai réussi à retrouver un petit programme que tu avais fait dans un échange avec cosmos: tracer un rectangle de travers https://panoramic.1fr1.net/t1558-tracer-un-rectangle-de-travers.Ton point central de rotation, c'est le premier point x,y en haut à gauche de ton rectangle. Moi, il faut que je le calcule avant, car il est au centre de la hauteur représentée par le point x,y en haut à gauche du rectangle et celui qui est en bas à gauche (x,y' si je puis dire.). Bon je pense que je vais pouvoir me débrouiller avec ce code et faire quelquechose qui me convienne. Pour le faire tourner avec la souris, avec mon petit code de dessin, il ne devrait pas y avoir de problème. Si je fais comme avec ma ligne, les coordonnées de la souris seront l'autre extrémité du rectangle. Enfin on verra. Merci a+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 21:30 | |
| Je ne me souvenais plus de ça, mais je viens de faire la même chose: - Code:
-
dim x0,y0,xb,yb,xc,yc,xd,yd,lg,ha,a,pi pi = 4*atn(1) picture 1: full_space 1 x0= 100: y0= 150 lg = 300: ha = 200 a = 20: ' rotation de 20 degrés a = a*pi/180: ' en radians 2d_target_is 1 2D_rectangle x0,y0,x0+lg,y0+ha: ' rectangle initial ' rotation de a radians autour du point x0,y0 xb = x0 + lg*COS(a): yb = y0 - lg*SIN(a) xd = x0 + ha*SIN(a): yd = y0 + ha*COS(a) xc = xd + lg*COS(a): yc = yd - lg*SIN(a)
2D_LINE x0,y0,xb,yb: 2d_poly_to xc,yc: 2d_poly_to xd,yd: 2d_poly_to x0,y0 si j'ai bien compris, ton rectangle doit tourner autour du point milieu du côté gauche... dis-moi si tu as besoin, je regarderai à nouveau. | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 21:36 | |
| Oui, tu as tout compris. Il aura une hauteur fixe, et sa longueur dépendra des coordonnées x et y de la souris. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 22:04 | |
| comme ça alors: - Code:
-
dim x0,y0,xa,ya,xb,yb,xc,yc,xd,yd,lg,ha,a,pi pi = 4*atn(1) picture 1: full_space 1 x0= 100: y0= 150 lg = 300: ha = 200 a = 20: ' rotation de 20 degrés a = a*pi/180: ' en radians 2d_target_is 1 2D_rectangle x0,y0,x0+lg,y0+ha: ' rectangle initial
' rotation de a radians autour du point x0,y0 xb = x0 + lg*COS(a): yb = y0 - lg*SIN(a) xd = x0 + ha*SIN(a): yd = y0 + ha*COS(a) xc = xd + lg*COS(a): yc = yd - lg*SIN(a) ' 2D_LINE x0,y0,xb,yb: 2d_poly_to xc,yc: 2d_poly_to xd,yd: 2d_poly_to x0,y0
' rotation de a radians autour du milieu du côté gauche xa = x0 - (ha*SIN(a))/2: ya = y0 + (ha*(1-COS(a)))/2 xd = x0 + (ha*SIN(a))/2: yd = y0 + (ha*(1+COS(a)))/2 xc = xd + lg*COS(a): yc = yd - lg*SIN(a) xb = xa + lg*COS(a): yb = ya - lg*SIN(a) 2d_line xa,ya,xb,yb: 2d_poly_to xc,yc: 2d_poly_to xd,yd: 2d_poly_to xa,ya end | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 22:20 | |
| Oui JL35, c'est tout à fait ça, mais il y a un mais! Toi tu calcules les 4 points du rectangle. Sauf que j'en ai 6! je m'explique: En premier lieu, un petit dessin pour comprendre mon problème. Au départ, je clique avec la souris, et j'obtiens mon point A. Il est aisé de déduire les points B et F qui font pour B=A-1/2 hauteur et F=A+1/2 hauteur. Après, quand je vais relacher le bouton de la souris, c'est les coordonnées du point D que je vais obtenir, à partir duquel il faut déduire les points C et E suivant l'angle défini. Voilà le problème! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 22:43 | |
| Tu n'as pas trouvé plus compliqué ? oui, faut voir... Pour les coordonnées du point D ça paraît simple. Si xa et ya sont les coordonnées de A et xf,yf les coordonnées de D, on a (lg étant la longueur AD du rectangle et a l'angle de rotation): - Code:
-
xf = xa + lg*COS(a) yf = ya - lg*SIN(a) OUi, mais peut-être que tu ne connais pas la longueur du rectangle ? est-ce qu'elle est fixe, ou bien est-ce que tu étires le rectangle en longueur en même temps que tu le fais tourner ? Qu'est-ce qui reste fixe en dimensions là-dedans ? la hauteur du côté ou tout le rectangle ? Je m'y perds un peu. En tout cas mon petit exemple ci-dessus était idiot, on a déjà xf et yf (position finale de la souris), il faut déduire les deux coins à droite. Je reprends: si xf,yf sont les coordonnées du point D, xe,ye celles du point E et xc,yc celles du point C (ta figure plus haut), h étant la hauteur du côté du rectangle, on a: - Code:
-
xe = xf + h*SIN(a)/2 ye = yf + h*COS(a)/2 xc = xf - h*SIN(a)/2 yc = yf - h*COS(a)/2
Dernière édition par JL35 le Mer 15 Fév 2012 - 23:08, édité 2 fois | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 23:05 | |
| le point A c'est les coordonnées du clic gauche de la souris, la hauteur du rectangle reste fixe, et on l'étire avec la souris sur la longueur et on le fait tourner aussi. Quand on relache le bouton de la souris on a le point D! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 23:07 | |
| C'est bien ce que craignais, tout bouge, la longueur du rectangle aussi... Finalement, ce qui manque c'est l'angle de rotation. Bon, on doit pouvoir le calculer... Ca doit être: - Code:
-
a = ATN((ya-yf)/(xf-xa)) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! Mer 15 Fév 2012 - 23:27 | |
| Bande de matheux !! Bon, là, je vous laisse jouer, moi, je suis hors jeu ... | |
| | | Contenu sponsorisé
| Sujet: Re: Logiciel de dessin (esquissage) en 8 lignes seulement!! | |
| |
| | | | Logiciel de dessin (esquissage) en 8 lignes seulement!! | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |