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
» Objet 3D_PLANE, réalisation d'un dé en 3D
par Marc Aujourd'hui à 0:33

» Cacher la barre des tâches
par Klaus Hier à 21:27

» Une "base de connaissance" - pour jouer ou plus si affinité
par Minibug Hier à 10:29

» quel est ce comportement de Panoramic_editor
par Oscaribout Hier à 0:22

» Des FORM(s) Colorés
par Jean Claude Dim 20 Mai 2018 - 20:58

» Recherches dans un fichier texte
par JL35 Dim 20 Mai 2018 - 20:18

» Problème d'affichage des pages du forum (Résolu)
par Jean Claude Dim 20 Mai 2018 - 20:00

» Créer une application *.exe
par Yannick Ven 18 Mai 2018 - 20:01

» [RÉSOLU] Priorité affichage des objets : comment la définir?
par papydall Ven 18 Mai 2018 - 18:22

» Aucune différence entre ON_CLICK et ON_DOUBLE_CLICK
par Jean Claude Jeu 17 Mai 2018 - 8:37

» [Résolu] Récuperer les fonctions systeme de Panoramic
par Minibug Mar 15 Mai 2018 - 23:21

» Est-ce qu'un fichier est inclus dans l'application ?
par Yannick Mar 15 Mai 2018 - 12:04

» Création d'une application avec Panoramic_Editor
par Klaus Mar 15 Mai 2018 - 0:36

» Pour faire patienter
par Minibug Lun 14 Mai 2018 - 21:25

» Une copie de Panoramic Editeur
par Minibug Lun 14 Mai 2018 - 19:55

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2018
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 Dessins élémentaires

Aller en bas 
AuteurMessage
JL35



Nombre de messages : 6257
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 : 5906
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 : 6257
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
» Avis le Royaume des Souvenirs en Dessins Animés

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: