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 |
|
|
| Dessin 2D: largeur de trait (résolu !) | |
| | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Dessin 2D: largeur de trait (résolu !) Mer 20 Juin 2018 - 21:02 | |
| Y a-t'il moyen de connaître la largeur de trait courante (fixée par 2D_PEN_WIDTH n) ? Je suis dans une sub qui dessine, la largeur de trait est fixée dans le programme appelant, et j'ai besoin de la connaître..
J'ai essayé w = 2D_PEN_WIDTH(N), mais ça ne marche pas ...
Dernière édition par JL35 le Ven 22 Juin 2018 - 17:24, édité 1 fois | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Mer 20 Juin 2018 - 21:08 | |
| Salut JL35, 2D_PEN_WIDTH(N), ben non ça n'existe pas encore.
Seul moyen, à mon avis, c'est d'utiliser une variable (PenWidh%) qui stocke la valeur à chaque fois que le programme utilise 2D_PEN_WIDTH N.
A+
rectification: 2D_PEN_WIDTH n'est pas affecté à un objet.
Dernière édition par Jean Claude le Jeu 21 Juin 2018 - 10:52, édité 1 fois | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Mer 20 Juin 2018 - 22:16 | |
| Salut Jean Claude,
Bien sûr il y a des moyens... mais je voudrais que la sub soit indépendante de l'appelant.
Bon, je vais essayer de trouver un artifice... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Mer 20 Juin 2018 - 23:31 | |
| C’est un peu tiré par les cheveux, mais ça marche ! - Code:
-
rem ============================================================================ picture 10 : full_space 10 : 2d_target_is 10 2d_pen_width 5 : message "Largeur du trait : " + str$(Pen_Width()) 2d_pen_width 20 : message "Largeur du trait : " + str$(Pen_Width()) 2d_pen_width 1 : message "Largeur du trait : " + str$(Pen_Width()) end rem ============================================================================ FNC Pen_Width() dim_local i,c,w 2d_pen_color 0,0,0 : 2d_line 100,100,200,100 for i = 100-10 to 100+10 c = color_pixel_blue(10,110,i) if c <> 255 then w = w + 1 next i 2d_pen_color 255,255,255 : 2d_line 100,100,200,100 result w
END_FNC rem ============================================================================
Quant à son utilisation dans une SUB, ça dépend si on a des cheveux ou si on est chauve ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 7:48 | |
| C'est une vrai astuce Papydall, il fallait y penser...
A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 9:30 | |
| Oui papydall, c'est bien la solution à laquelle j'avais pensé au départ. Mais... tu pollues le picture cible (qui peut contenir une image, ou autre) en y traçant un trait. Je pense à une solution sans pollution, je regarde ça. Edit: J'ai bien une solution, mais qui ne me satisfait qu'à moitié. Je trace une ligne sur le picture après avoir sauvegardé la zone dans un IMAGE, je mesure puis je restitue la zone ensuite: - Code:
-
DIM wt% PICTURE 1: FULL_SPACE 1: color 1,128,255,255 2D_TARGET_IS 1: 2D_PEN_WIDTH 13 Eptrait() MESSAGE STR$(wt%) END
SUB Eptrait() ' Epaisseur de trait courante dans la cible 2d, rendue dans wt% DIM_LOCAL im%,p%,y% p% = NUMBER_2D_TARGET: IF VARIABLE("wt%") = 0 THEN DIM wt% im%=950: IMAGE im%: 2D_IMAGE_COPY im%,0,0,15,25 2D_PEN_COLOR 1,1,1: 2D_LINE 0,12,5,12 wt% = 0: y% = 0 WHILE COLOR_PIXEL_RED(p%,0,y%)<>1: y%=y%+1: END_WHILE WHILE COLOR_PIXEL_RED(p%,0,y%)=1: wt% = wt%+1: y%=y%+1: END_WHILE 2D_IMAGE_PASTE im%,0,0: DELETE im% END_SUB Inconvénient: Je récupère la largeur de trait, mais je perds la couleur implicite... @papydall, Je l'ai appelé Eptrait, puisque tu as le copyright sur Pen_width... | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 11:02 | |
| Bonjour à tous, Pas facile... @JL35, J'ai trouvé, peut-être, une anomalie avec l'utilisation de 2D_IMAGE_COPY im%,0,0, 5,25 , ne faudrait-il pas 2D_IMAGE_COPY im%,0,0, 0,25 vu que tu recolles à la position 0,0. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 11:22 | |
| ??? Mais non Jean Claude, pas d'anomalie dans le IMAGE_COPY... Simplement je trace un trait de 5 pixels de long, mais si le trait est épais (20 pixels) sa longueur réelle est plus importante: 15 pixels, du fait qu'il n'est pas droit à l'extrémité mais arrondi, et il dépasse la valeur théorique. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 11:30 | |
| Bon et bien je n'ai pas trouvé... Juste une question: Un CLS 2D_CLEAR ne serait-il pas nécéssaire avant d'afficher la copie de l'IMAGE ? A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 11:33 | |
| Non, ça marche comme j'ai mis plus haut. C'est la largeur du trait qui m'avait trompé ci-dessous, 2 traits de 40 pixels de large, épaisseurs 2 et 20 pixels: | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 11:39 | |
| Oui je viens de tester à nouveau, de 1 à 20 tout fonctionne. A+ | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 14:25 | |
| Dommage qu'on ne puisse pas récupérer avec les instructions inverses les données courantes: épaisseur de trait (2D_PEN_WIDTH()), couleur de trait (2D_PEN_COLOR()) etc. mais bon, ce n'est sans doute pas très demandé. C'est bien enregistré quelque part, mais pas accessible.
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 15:19 | |
| Finalement on peut récupérer la largeur de trait en conservant la couleur courante (que l'on peut également récupérer au besoin en l'extrayant de la sub): - Code:
-
DIM wt%,rt%,gt%,bt% PICTURE 1: FULL_SPACE 1: color 1,180,255,255 2D_TARGET_IS 1: 2D_PEN_WIDTH 20: 2D_PEN_COLOR 0,0,255 Eptrait() MESSAGE STR$(wt%) END ' ============================================================ SUB Eptrait() ' Epaisseur de trait courante dans la cible 2d, rendue dans wt% ' (on pourrait au besoin récupérer également la couleur de trait rt%,gt%,bt%) DIM_LOCAL im%,p%,y%,wp%,hp%,rt%,gt%,bt% p% = NUMBER_2D_TARGET: IF VARIABLE("wt%") = 0 THEN DIM wt% wp% = 15: hp% = 25 im%=950: IMAGE im%: 2D_IMAGE_COPY im%,0,0,wp%+10,hp%+10 2D_LINE 0,0,wp%,0: rt% = COLOR_PIXEL_RED(p%,0,0): gt%=COLOR_PIXEL_GREEN(p%,0,0) bt%=COLOR_PIXEL_BLUE(p%,0,0): ' couleur de trait actuelle 2D_PEN_COLOR 1,1,1: 2D_LINE 0,12,5,12 wt% = 0: y% = 0 WHILE COLOR_PIXEL_RED(p%,0,y%)<>1: y%=y%+1: END_WHILE WHILE COLOR_PIXEL_RED(p%,0,y%)=1: wt% = wt%+1: y%=y%+1: END_WHILE 2D_IMAGE_PASTE im%,0,0: DELETE im% 2D_PEN_COLOR rt%,gt%,bt% END_SUB ' ============================================================ C'est un peu acrobatique et tiré par les cheveux comme dit papydall (quoique moi je ne risque plus grand chose de ce côté-là), mais ça marche, à défaut d'autre chose. | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 17:28 | |
| - JL35 a écrit:
- C'est un peu acrobatique et tiré par les cheveux comme dit papydall (quoique moi je ne risque plus grand chose de ce côté-là), mais ça marche, à défaut d'autre chose.
@JL35 Une surprise pour toi : Essaie ton dernier code avec 2D_PEN_WIDTH 2 2D_PEN_WIDTH 4 2D_PEN_WIDTH 6 Maintenant s'il te reste encore un ou deux cheveux, tu peux t'en servir ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 17:48 | |
| Mince alors, papydall, il a fallu que tu essaies juste les 3 valeurs qui ne marchent pas ! Bon, je vais me recoiffer... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 18:02 | |
| Pour les autres valeurs, c’est OK. Moi je cherche le KO, nuance ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 18:10 | |
| Je sais bien, mauvais esprit ! Mais Eureka ! (comme disait Archimède, enfin, je crois, je l'ai peu connu), j'ai trouvé ! C'est toujours à cause de ces arrondis en début et fin de ligne, je ne faisais pas mon test assez loin dans la ligne. Voici donc : - Code:
-
DIM wt%,rt%,gt%,bt% PICTURE 1: FULL_SPACE 1: color 1,180,255,255 2D_TARGET_IS 1: 2D_PEN_WIDTH 12: 2D_PEN_COLOR 0,0,255 Eptrait() MESSAGE STR$(wt%) END ' ============================================================ SUB Eptrait() ' Epaisseur de trait courante dans la cible 2d, rendue dans wt% ' (on pourrait au besoin récupérer également la couleur de trait rt%,gt%,bt%) DIM_LOCAL im%,p%,y%,wp%,hp%,rt%,gt%,bt% p% = NUMBER_2D_TARGET: IF VARIABLE("wt%") = 0 THEN DIM wt% wp% = 15: hp% = 25 im%=950: IMAGE im%: 2D_IMAGE_COPY im%,0,0,wp%+10,hp%+10 2D_LINE 0,0,wp%,0: rt% = COLOR_PIXEL_RED(p%,0,0): gt%=COLOR_PIXEL_GREEN(p%,0,0) bt%=COLOR_PIXEL_BLUE(p%,0,0): ' couleur de trait actuelle 2D_PEN_COLOR 1,1,1: 2D_LINE 0,12,5,12 wt% = 0: y% = 0 WHILE COLOR_PIXEL_RED(p%,3,y%)<>1: y%=y%+1: END_WHILE WHILE COLOR_PIXEL_RED(p%,3,y%)=1: wt% = wt%+1: y%=y%+1: END_WHILE 2D_IMAGE_PASTE im%,0,0: DELETE im% 2D_PEN_COLOR rt%,gt%,bt% END_SUB ' ============================================================ A toi de jouer papydall (je ne crie pas victoire tout de suite, avec toi on ne sait jamais...) | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 19:24 | |
| - JL35 a écrit:
- A toi de jouer papydall (je ne crie pas victoire tout de suite, avec toi on ne sait jamais...)
Bon, je me fais complice : dans le cas où ça cloche, on sera deux à assumer … - Code:
-
rem ============================================================================ rem Pen_Width() rem Fonction pour récuperer la largeur du tracé définie par la commande 2D_PEN_WIDTH rem JL35 / PAPYDALL rem ============================================================================ rem Appel : Pen_Width() ' Exemple d'utilisation PICTURE 10 : FULL_SPACE 10 : color 10,180,255,255 : 2D_TARGET_IS 10 : 2D_PEN_WIDTH 5 2d_pen_width Pen_Width() + 15 : 2d_circle 300,200,150 font_size 10,16 print_target_is 10 : print_locate 200,180 : print "Epaisseur du trait : " + str$(Pen_Width())
END rem ============================================================================ ' Retourne la largeur du tracé FNC Pen_Width() DIM_LOCAL im%,p%,y%,wt% p% = NUMBER_2D_TARGET im% = 9999 : IMAGE im% : 2D_IMAGE_COPY im%,0,0,25,35 2D_PEN_COLOR 1,1,1 : 2D_LINE 0,12,5,12 wt% = 0: y% = 0 WHILE COLOR_PIXEL_RED(p%,3,y%) <> 1 : y% = y% + 1 : END_WHILE WHILE COLOR_PIXEL_RED(p%,3,y%) = 1 : wt% = wt% + 1 : y% = y% + 1 : END_WHILE 2D_IMAGE_PASTE im%,0,0 : DELETE im% RESULT wt% END_FNC rem ============================================================================
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 20:02 | |
| Bonsoir, Je vous laisse à vos responsabilités respectives pour quelques jours, car à la retraite on a le temps de rien donc je pars en vacances. NA! Au passage: je trouve que WIDTH n'est pas adapté comme nom anglais à épaisseur (thickness). Car en fait on parle bien d'une épaisseur, soit à l'horizontale (j'aime) HEIGHT et à la verticale (J'aime moins) WIDTH. Bon, c'est juste pour être désagréable... A bientôt ! | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 20:40 | |
| Oui papydall, mais tu perds la couleur du tracé dans le 2D_TARGET ! On appelle la fonction et on a changé de couleur... ce que j'ai essayé de sauvegarder avec mon système. (j'utilise une sub parce que je suis sur une vieille version de l'éditeur qui n'a pas encore les fonctions... , mais le principe est le même) @ Jean Claude tu es sûr que tu as bien terminé tous tes travaux pharaoniques, avant de songer à partir en vacances ? Pour les noms de fonctions, tu pinailles un peu, quand le trait est vertical c'est bien une largeur ! | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 20:46 | |
| - JL35 a écrit:
- tu es sûr que tu as bien terminé tous tes travaux pharaoniques, avant de songer à partir en vacances ?
Oui, ça c'est fait et je suis très content du résultat de mon travail ! Je me souviens de ton avertissement de ne pas se rater... Bon ! il faut que je résiste à ce forum qui m'accapare... à bientôt. | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 21:13 | |
| Eh bien Jean Claude, Bonnes Vacances ! | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Jeu 21 Juin 2018 - 23:34 | |
| @ JC Quand on est en vacances, on n’a plus la moindre seconde comme temps libre. Profite bien de tes vacances. Tu nous raconteras tout ça au retour avec des beaux codes.
| |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Ven 22 Juin 2018 - 14:21 | |
| La couleur est correctement conservée avec ce code: - Code:
-
dim j,colorpen
form 55 : 2d_target_is 55 : left 55,500 : top 55,40 : 2d_pen_width 10 :'
picture 123 : 2d_target_is 123 :' full_space 123
for j=1 to 20 2d_pen_width j 2D_PEN_COLOR int(rnd(254)+1),int(rnd(254)+1),int(rnd(254)+1) 2d_line 10,10,10,50 :' trace un trait de couleur aléatoire colorpen = Eptrait(123) :' retrouve l'épaisseur du trait 2d_line 50,10,50,50 :' la couleur du stylo a été conservée message "Eptrait = "+str$(colorpen) :' affichage next j to_foreground 0 : message "Epaisseur du trait dans le form 0 : "+str$(Eptrait(0)) :' en anvant plan car l'objet à tester est un form !!! to_foreground 55 : message "Epaisseur du trait dans le form 55 : "+str$(Eptrait(55)) :' en anvant plan car l'objet à tester est un form !!!
END fnc Eptrait(current_2d) ' NB : Si 'current_2d' est un form, celui-ci doit OBLIGATOIREMENT être en avant-plan, sinon le resultat sera égal à 0 dim_local free_image1,free_image2,r,v,b,i,wt%,c,save_current_2d save_current_2d=number_2d_target free_image1=998 : image free_image1 free_image2=999 : image free_image2 2d_target_is current_2d 2d_image_copy free_image1,0,0,21,21 :' sauvegarde le fond de l'image 2d_image_copy free_image2,screen_x,screen_y,screen_x+21,screen_y+21 :' capture une zone vide, toute blanche ' 2d_point 0,0 :' sauvegarde la couleur du stylo r=color_pixel_red(current_2d,0,0) v=color_pixel_green(current_2d,0,0) b=color_pixel_blue(current_2d,0,0) ' 2d_image_paste free_image2,0,0 :' efface la zone de travail 2D_PEN_COLOR 1,1,1 : 2D_line 10,10,10,11 :' trace un trait noir d'épaisseur X ' for i = 0 to 19 :' retrouve l'épaisseur X du trait c = color_pixel_blue(current_2d,i,10) if c = 1 wt% = wt% + 1 end_if next i ' 2d_image_paste free_image1,0,0 :' restaure le fond de l'image delete free_image1 delete free_image2 2D_PEN_COLOR r,v,b :' restaure la couleur du stylo 2d_target_is save_current_2d result wt% end_fnc
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) Ven 22 Juin 2018 - 16:08 | |
| C'est ce que j'ai fait dans ma sub d'hier à 18h10. Commencer par tracer un trait dans la couleur courante, mémoriser sa couleur, mesurer la largeur de trait d'une couleur donnée (1,1,1), et restaurer la couleur d'origine. Ta méthode semble est un peu plus rigoureuse que la mienne, puisque tu traces le trait de mesure témoin sur fond rigoureusement blanc. | |
| | | Contenu sponsorisé
| Sujet: Re: Dessin 2D: largeur de trait (résolu !) | |
| |
| | | | Dessin 2D: largeur de trait (résolu !) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |