FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» quel est ce comportement de Panoramic_editor
par Oscaribout Aujourd'hui à 3:02

» bug BORDER_HIDE : bloque la commande full_space
par silverman Aujourd'hui à 1:19

» Découpe dans une image
par JL35 Hier à 22:00

» FNC IsDateValide(d$) pour vérifier la validité d'une date
par papydall Hier à 18:57

» Pour faire plaisir à jjn4.
par Pedro Alvarez Hier à 8:13

» Pour faire plaisir à Marc37.
par Marc Jeu 22 Fév 2018 - 21:46

» Couleur d'une variable qui n'est pas un mot-clé
par bignono Jeu 22 Fév 2018 - 14:03

» Un catalogue de photos de fleurs, avec KBDD, affichage HTML
par Klaus Mer 21 Fév 2018 - 22:44

» KGF_dll - nouvelles versions
par Klaus Mer 21 Fév 2018 - 22:30

» Mah-Jong anglais
par jjn4 Mer 21 Fév 2018 - 14:22

» Partie fractionnaire d'un flottant
par silverman Mer 21 Fév 2018 - 14:19

» bug CREATE_HIDE : corruption de form
par silverman Mer 21 Fév 2018 - 13:32

» Racine carrée d’un nombre par l’algorithme de Héron
par Ouf_ca_passe Mer 21 Fév 2018 - 9:52

» Méthode manuelle d'extraction de la racine carrée
par pascal10000 Mer 21 Fév 2018 - 7:47

» [annulé]ON_MOVE n,l ne fonctionne que sur le form 0
par silverman Mar 20 Fév 2018 - 16:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Février 2018
LunMarMerJeuVenSamDim
   1234
567891011
12131415161718
19202122232425
262728    
CalendrierCalendrier

Partagez | 
 

 Dessins élémentaires

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6152
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Dessins élémentaires   Lun 29 Jan 2018 - 15:25

Une autre petite sub pour dessiner rapidement des figures élémentaires sur un picture (contenant ou non une image).
Figures de base: trait, rectangle, cercle.
On peut choisir soit une des 16 couleurs de base, soit une couleur quelconque définie par R,G,B.
Pour le remplissage de zones entourées d'une couleur donnée, j'ai fait appel à une fonction de KGF.dll de l'ami Klaus, je ne sais pas faire en Panoramic pur (si la zone n'est pas de couleur uniforme).
Il faut donc ajuster le chemin de Kgf.dll en tête de la sub.
Il n'y a qu'un seul droit à l'erreur (annuler la dernière figure tracée).
Code:
dim f$: f$ = "c:\graph\jpg\goldgate.jpg"
width 0,660: height 0,520: border_small 0
picture 1: width 1,640: height 1,480: file_load 1,f$
DesPic(1)
END
' ==============================================================================
SUB DesPic(p%)
  ' Dessin de formes élémentaires sur le picture p%
  IF LABEL("Clk") = 0 THEN LABEL Clk
  IF LABEL("Anud") = 0 THEN LABEL Anud
  IF LABEL("Typf") = 0 THEN LABEL Typf
  IF LABEL("Colf") = 0 THEN LABEL Colf
  IF LABEL("Hlp") = 0 THEN LABEL Hlp
  IF LABEL("Qqit") = 0 THEN LABEL Qqit
  DIM_LOCAL fm%,co%,cf%,fig%,ff%,x%,y%,x1%,y1%,ct%,cc%,sp%,ry%,i%,j%,k%,r%,g%,b%,sc%,bc%
  DIM_LOCAL rt%,gt%,bt%,rf%,gf%,bf%,pm%,kgf$,a$,cr$
  kgf$ = "C:\PANORAMIC\KGF\KGF.dll": ' <==== A AJUSTER =========================
  cr$ = CHR$(13)+CHR$(10)
  fm% = 900
  FORM fm%: BORDER_SMALL fm%: LEFT fm%,WIDTH(0): WIDTH fm%,220: HEIGHT fm%,210
            ON_CLOSE fm%,Qqit: CAPTION fm%,"         -   OUTILS   DE   DESSIN   -"
            FONT_BOLD fm%: COLOR fm%,190,255,255
  i%=fm%+1: CONTAINER_OPTION i%: PARENT i%,fm%: WIDTH i%,WIDTH_CLIENT(fm%)
            HEIGHT i%,55: COLOR i%,255,255,128: co% = i%
  i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,5: LEFT i%,5: CAPTION i%,"Trait"
  i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,20: LEFT i%,5: CAPTION i%,"Rectangle vide"
  i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,35: LEFT i%,5: CAPTION i%,"Rectangle plein"
  i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,5: LEFT i%,110: CAPTION i%,"Cercle vide"
  i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,20: LEFT i%,110: CAPTION i%,"Cercle plein"
  i%=i%+1: OPTION i%: PARENT i%,co%: TOP i%,35: LEFT i%,110: CAPTION i%,"Remplissage"
           FOR j% = co%+1 TO i%: ON_CLICK j%,Typf: NEXT j%
           MARK_ON co%+1: fig% = 1: ' trait
  i%=i%+1: ALPHA i%: PARENT i%,fm%: TOP i%,HEIGHT(co%)+5: LEFT i%,5: CAPTION i%,"Ép. trait:"
  i%=i%+1: SPIN i%: PARENT i%,fm%: TOP i%,TOP(i%-1)+15: LEFT i%,5: WIDTH i%,45: sp% = i%
           MIN sp%,1: MAX sp%,20: POSITION sp%,1
  i%=i%+1: ALPHA i%: PARENT i%,fm%: TOP i%,TOP(i%-2): LEFT i%,65: CAPTION i%,"Coul. trait"
  i%=i%+1: PICTURE i%: PARENT i%,fm%: TOP i%,TOP(i%-1)+15: LEFT i%,LEFT(i%-1)+5
           WIDTH i%,50: HEIGHT i%,22: 2D_FILL_COLOR 0,0,0: COLOR i%,0,0,0
           ON_CLICK i%,Colf: ct%=i%
  i%=i%+1: ALPHA i%: PARENT i%,fm%: TOP i%,TOP(i%-2): LEFT i%,135: CAPTION i%,"Coul. rempl."
  i%=i%+1: PICTURE i%: PARENT i%,fm%: TOP i%,TOP(i%-1)+15: LEFT i%,LEFT(i%-1)+5
           WIDTH i%,50: HEIGHT i%,22: COLOR i%,255,255,255: ON_CLICK i%,Colf: cf% = i%
  i%=i%+1: PICTURE i%: PARENT i%,fm%: TOP i%,TOP(i%-1)+25: LEFT i%,4: WIDTH i%,WIDTH(co%)-8
           HEIGHT i%,20: k% = WIDTH(co%)/16: 2D_TARGET_IS i%: 2D_FILL_ON
           FOR j% = 0 TO 15
               SELECT j%
                   CASE 0: 2D_FILL_COLOR 0,0,0:        ' Noir
                   CASE 1: 2D_FILL_COLOR 0,0,128:      ' Bleu
                   CASE 2: 2D_FILL_COLOR 0,128,0:      ' Vert
                   CASE 3: 2D_FILL_COLOR 0,128,128:    ' Cyan
                   CASE 4: 2D_FILL_COLOR 128,0,0:      ' Rouge
                   CASE 5: 2D_FILL_COLOR 128,0,128:    ' Magenta
                   CASE 6: 2D_FILL_COLOR 128,64,0:     ' Brun
                   CASE 7: 2D_FILL_COLOR 192,192,192:  ' Blanc
                   CASE 8: 2D_FILL_COLOR 128,128,128:  ' Gris
                   CASE 9: 2D_FILL_COLOR 0,0,255:      ' Bleu clair
                   CASE 10: 2D_FILL_COLOR 0,255,0:     ' Vert clair
                   CASE 11: 2D_FILL_COLOR 0,255,255:   ' Cyan clair
                   CASE 12: 2D_FILL_COLOR 255,0,0:     ' Rouge clair
                   CASE 13: 2D_FILL_COLOR 255,0,255:   ' Magenta clair
                   CASE 14: 2D_FILL_COLOR 255,255,0:   ' Jaune
                   CASE 15: 2D_FILL_COLOR 255,255,255: ' Blanc intense
               END_SELECT
               2D_RECTANGLE j%*k%,0,(j%+1)*k%+1,19
           NEXT j%
           ON_CLICK i%,Colf
  i%=i%+1: ALPHA i%: PARENT i%,fm%: TOP i%,TOP(i%-1)+27: LEFT i%,1
           CAPTION i%,"R=              G=               B="
  i%=i%+1: SPIN i%: PARENT i%,fm%: TOP i%,TOP(i%-1)-3: LEFT i%,15: WIDTH i%,45: sc% = i%
  i%=i%+1: SPIN i%: PARENT i%,fm%: TOP i%,TOP(i%-1): LEFT i%,75: WIDTH i%,45
  i%=i%+1: SPIN i%: PARENT i%,fm%: TOP i%,TOP(i%-1): LEFT i%,135: WIDTH i%,45
           FOR j%=i%-2 TO i%: MIN i%,0: MAX i%,255: POSITION i%,0: NEXT j%
  i%=i%+1: BUTTON i%: PARENT i%,fm%: TOP i%,TOP(i%-1)-2: WIDTH i%,25: LEFT i%,LEFT(i%-1)+43
           CAPTION i%,"OK": ON_CLICK i%,Colf: bc%=i%
  i%=i%+1: BUTTON i%: PARENT i%,fm%: TOP i%,HEIGHT_CLIENT(fm%)-25: LEFT i%,3: WIDTH i%,25
           CAPTION i%,"?": FONT_SIZE i%,11: ON_CLICK i%,Hlp
  i%=i%+1: BUTTON i%: PARENT i%,fm%: TOP i%,TOP(i%-1)
           LEFT i%,LEFT(i%-1)+30: WIDTH i%,90: CAPTION i%,"Annul dernier": ON_CLICK i%,Anud
  i%=i%+1: BUTTON i%: PARENT i%,fm%: TOP i%,TOP(i%-1)
           LEFT i%,LEFT(i%-1)+95: CAPTION i%,"Quitter": ON_CLICK i%,Qqit
  i%=i%+1: PICTURE i%: PARENT i%,fm%: HIDE i%: pm%=i%: ' picture de manoeuvre
  2D_TARGET_IS p%
  WHILE ff% = 0
    IF MOUSE_LEFT_DOWN(p%) = 1
      x1% = MOUSE_X_POSITION(p%): y1% = MOUSE_Y_POSITION(p%)
      2D_FILL_OFF: 2D_PEN_WIDTH POSITION(sp%)
      CLIPBOARD_COPY p%
      rt% = COLOR_PIXEL_RED(ct%,2,2): gt% = COLOR_PIXEL_GREEN(ct%,2,2)
      bt% = COLOR_PIXEL_BLUE(ct%,2,2): 2D_PEN_COLOR rt%,gt%,bt%
      rf% = COLOR_PIXEL_RED(cf%,2,2): gf% = COLOR_PIXEL_GREEN(cf%,2,2)
      bf% = COLOR_PIXEL_BLUE(cf%,2,2): 2D_FILL_COLOR rf%,gf%,bf%
      WHILE MOUSE_LEFT_UP(p%) = 0
        x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%)
        CLIPBOARD_PASTE p%
        2D_FILL_OFF
        SELECT fig%
           CASE 1: j% = SCANCODE: SCANCODE = 0
                   IF j% = 160 AND x%<>x1% AND y%<>y1%: ' Maj gauche enfoncé
                       j% = ABS(y%-y1%)/ABS(x%-x1%)
                       IF j% > 1: ' angle >45°: -> verticale
                           x% = x1%
                       ELSE: ' horizontale
                           y% = y1%
                       END_IF
                   END_IF
                   2D_LINE x1%,y1%,x%,y%
           CASE 2: 2D_RECTANGLE x1%,y1%,x%,y%: ' rectangle vide
           CASE 3: 2D_FILL_ON: 2D_FILL_COLOR rf%,gf%,bf%
                   2D_RECTANGLE x1%,y1%,x%,y%: ' rectangle plein
           CASE 4: ry% = SQR((x%-x1%)*(x%-x1%)+(y%-y1%)*(y%-y1%)): ' cercle vide
                   2D_CIRCLE x1%,y1%,ry%
           CASE 5: ry% = SQR((x%-x1%)*(x%-x1%)+(y%-y1%)*(y%-y1%)): ' cercle plein
                   2D_FILL_ON: 2D_FILL_COLOR rf%,gf%,bf%
                   2D_CIRCLE x1%,y1%,ry%
           CASE 6: i% = 65536*bf%+256*gf%+rf%: ' couleur de remplissage (BGR)
                   j% = 65536*bt%+256*gt%+rt%: ' couleur de trait
                   CLIPBOARD_PASTE pm%
                   DLL_ON kgf$
                     k% = DLL_CALL0("LoadPicture"): ' presse-papier -> image interne
                     k% = DLL_CALL4("FloodfillPictureToBorderColor",x%,y%,i%,j%)
                     k% = DLL_CALL0("SavePicture"): ' image interne -> presse-papier
                   DLL_OFF
                   CLIPBOARD_PASTE p%
                   CLIPBOARD_COPY pm%: ' restore le clip pour annul éventuel
          END_SELECT
          PAUSE 50
      END_WHILE
    END_IF
  END_WHILE
  2D_TARGET_IS 0: DELETE fm%: EXIT_SUB
' ------------------------------------------------------------------------------
Clk:
  WHILE MOUSE_LEFT_DOWN(p%) = 0: PAUSE 100: END_WHILE
  x1% = MOUSE_X_POSITION(p%): y1% = MOUSE_Y_POSITION(p%)
  2D_FILL_OFF: 2D_PEN_WIDTH POSITION(sp%)
  CLIPBOARD_COPY p%
  rt% = COLOR_PIXEL_RED(ct%,2,2): gt% = COLOR_PIXEL_GREEN(ct%,2,2)
  bt% = COLOR_PIXEL_BLUE(ct%,2,2): 2D_PEN_COLOR rt%,gt%,bt%
  rf% = COLOR_PIXEL_RED(cf%,2,2): gf% = COLOR_PIXEL_GREEN(cf%,2,2)
  bf% = COLOR_PIXEL_BLUE(cf%,2,2): 2D_FILL_COLOR rf%,gf%,bf%
  WHILE MOUSE_LEFT_UP(p%) = 0
      x% = MOUSE_X_POSITION(p%): y% = MOUSE_Y_POSITION(p%)
      CLIPBOARD_PASTE p%
      2D_FILL_OFF
      SELECT fig%
         CASE 1: 2D_LINE x1%,y1%,x%,y%
         CASE 2: 2D_RECTANGLE x1%,y1%,x%,y%: ' rectangle vide
         CASE 3: 2D_FILL_ON: 2D_FILL_COLOR rf%,gf%,bf%
                 2D_RECTANGLE x1%,y1%,x%,y%: ' rectangle plein
         CASE 4: ry% = SQR((x%-x1%)*(x%-x1%)+(y%-y1%)*(y%-y1%)): ' cercle vide
                 2D_CIRCLE x1%,y1%,ry%
         CASE 5: ry% = SQR((x%-x1%)*(x%-x1%)+(y%-y1%)*(y%-y1%)): ' cercle plein
                 2D_FILL_ON: 2D_FILL_COLOR rf%,gf%,bf%
                 2D_CIRCLE x1%,y1%,ry%
         CASE 6: i% = 65536*bf%+256*gf%+rf%: ' couleur de remplissage (BGR)
                 j% = 65536*bt%+256*gt%+rt%: ' couleur de trait
                 CLIPBOARD_PASTE pm%
                 DLL_ON kgf$
                   k% = DLL_CALL0("LoadPicture"): ' presse-papier -> image interne
                   k% = DLL_CALL4("FloodfillPictureToBorderColor",x%,y%,i%,j%)
                   k% = DLL_CALL0("SavePicture"): ' image interne -> presse-papier
                 DLL_OFF
                 CLIPBOARD_PASTE p%
                 CLIPBOARD_COPY pm%: ' pour annul éventuel
      END_SELECT
      PAUSE 50
  END_WHILE
  GOTO Clk
RETURN
' ------------------------------------------------------------------------------
Anud:
  ' Annuler la dernière opération
  CLIPBOARD_PASTE p%
RETURN
' ------------------------------------------------------------------------------
Typf:
  k% = NUMBER_CLICK: fig% = k%-co%: ' type de figure
RETURN
' ------------------------------------------------------------------------------
Colf:
  k% = NUMBER_CLICK
  IF k% = ct%: ' couleur trait
      cc% = 1
  ELSE
      IF k% = cf%: ' couleur de remplissage
          cc% = 2
      ELSE: ' couleur choisie
          IF k% = bc%: ' bouton OK, couleur personnalisée
              r% = POSITION(sc%): g% = POSITION(sc%+1): b% = POSITION(sc%+2)
          ELSE
              i% = MOUSE_X_POSITION(cf%+1): j% = MOUSE_Y_POSITION(cf%+1)
              r% = COLOR_PIXEL_RED(cf%+1,i%,j%): g% = COLOR_PIXEL_GREEN(cf%+1,i%,j%)
              b% = COLOR_PIXEL_BLUE(cf%+1,i%,j%)
              POSITION sc%,r%: POSITION sc%+1,g%: POSITION sc%+2,b%
          END_IF
          IF cc% = 1: ' couleur trait
              rt%=r%: gt%=g%: bt%=b%: COLOR ct%,rt%,gt%,bt%
          ELSE: ' couleur fond
              IF cc% = 2 THEN rf%=r%: gf%=g%: bf%=b%: COLOR cf%,rf%,gf%,bf%
          END_IF
          cc% = 0
      END_IF
  END_IF
RETURN
' ------------------------------------------------------------------------------
Hlp:
  a$ = " - TRACÉ  DE  FIGURES   ÉLÉMENTAIRES -"+cr$
  a$=a$+"    ========================="+cr$+cr$
  a$=a$+"- Cocher le type de figure à tracer"+cr$+cr$
  a$=a$+"- Choisir l'épaisseur du tracé (1 à 20 pixels)"+cr$+cr$
  a$=a$+"- Choisir la couleur du tracé et la couleur de remplissage :"+cr$
  a$=a$+"  . Couleur standard: cliquer la couleur actuelle, puis la couleur désirée."+cr$
  a$=a$+"  . Couleur personnalisée: entrer les valeurs R,G,B, cliquer la couleur"+cr$
  a$=a$+"     actuelle, puis 'OK'."+cr$+cr$
  a$=a$+"NB:"+cr$
  a$=a$+" - Tracé de ligne: touche 'Maj' gauche enfoncée pour une ligne"+cr$
  a$=a$+"        parfaitement horizontale ou verticale."+cr$
  a$=a$+" - Remplissage: la zone cliquée entourée par la couleur de trait est remplie"+cr$
  a$=a$+"        par la couleur de remplissage."+cr$
  a$=a$+" - Il est possible d'annuler la dernière opération (une seule fois)."
  MESSAGE a$
RETURN
' ------------------------------------------------------------------------------
Qqit:
  ff% = 1: : 2D_TARGET_IS 0: DELETE fm%: EXIT_SUB
RETURN
END_SUB
' ==============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 5746
Age : 67
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: Dessins élémentaires   Mar 30 Jan 2018 - 3:35

JL35 a écrit:
Une autre petite sub pour dessiner rapidement des figures élémentaires sur un picture

On parle la même langue mais pas le même langage !
Une SUB d’environ 220 lignes de code dont chaque ligne contient souvent plusieurs instructions n’est pas si petite que ça, à mon humble avis !

Le titre du sujet est : « Dessins élémentaires » c’est bien « Elémentaire mon cher Watson »

Je te remercie, cher ami, pour le partage de ce code dont chacun peut arranger selon ses goûts et ses besoins.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
JL35



Nombre de messages : 6152
Localisation : 77
Date d'inscription : 29/11/2007

MessageSujet: Re: Dessins élémentaires   Mar 30 Jan 2018 - 12:58

C'est évidemment fait dans cet esprit, à ne pas prendre tel quel, mais adapter à ses goûts et ses besoins.
Et c'est l'intérêt d'une sub (même avec un léger embonpoint): c'est une boîte noire, avec des paramètres en entrée et un résultat en sortie, peu importe ce qu'il y a à l'intérieur.
Voilà, mon ami Sherlock !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Dessins élémentaires   

Revenir en haut Aller en bas
 
Dessins élémentaires
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Dessins] Dream city
» Forum Le royaume des souvenirs en Dessins Animés
» Affiche tes dessins manga !
» Informations complémentaires sur votre Bbox TV Fibre
» BK7M 581 Styles supplémentaires (clé USB Fournie à l'achat)

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: