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
» Planétarium virtuel.
par Jack Hier à 20:59

» ajouter des blancs dans un TXT
par lepetitmarocain Mer 15 Aoû 2018 - 13:00

» 11 (en analyse): commandes sur TAB et SUB_MENU.
par Jack Mar 14 Aoû 2018 - 14:10

» 10 (en analyse): Erreur sur variable locale.
par Jack Mar 14 Aoû 2018 - 14:05

» Métamatière, éternité et renouvellement
par Oscaribout Mar 14 Aoû 2018 - 12:40

» De retour...
par Yannick Lun 13 Aoû 2018 - 15:11

» bug SEVERE fnc+sub : (35)name already defined
par Oscaribout Dim 12 Aoû 2018 - 23:55

» Encadrement
par Jean Claude Dim 12 Aoû 2018 - 11:53

» Des rectangles...
par JL35 Dim 12 Aoû 2018 - 10:53

» TRIGGER_KEY_COMBINED_TOUCH
par Jean Claude Mar 7 Aoû 2018 - 20:58

» ITEM_SELECT N,L pour synedit
par Jean Claude Mar 7 Aoû 2018 - 19:11

» amélioration panoramic
par silverman Dim 5 Aoû 2018 - 18:34

» Commande file_readln.
par Pedro Alvarez Dim 5 Aoû 2018 - 17:08

» Klaus ?
par Jack Sam 4 Aoû 2018 - 22:48

» Défragmentation du disque dur
par JL35 Sam 4 Aoû 2018 - 21:06

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Août 2018
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier

Partagez | 
 

 Dessins élémentaires

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6311
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 : 5983
Age : 68
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 : 6311
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
» pour nos dessins et photos

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: