FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
KGF_dll - nouvelles versions - Page 35 Emptypar Pedro Sam 23 Nov 2024 - 15:50

» Un autre pense-bête...
KGF_dll - nouvelles versions - Page 35 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
KGF_dll - nouvelles versions - Page 35 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
KGF_dll - nouvelles versions - Page 35 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
KGF_dll - nouvelles versions - Page 35 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
KGF_dll - nouvelles versions - Page 35 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
KGF_dll - nouvelles versions - Page 35 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
KGF_dll - nouvelles versions - Page 35 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
KGF_dll - nouvelles versions - Page 35 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
KGF_dll - nouvelles versions - Page 35 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
KGF_dll - nouvelles versions - Page 35 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
KGF_dll - nouvelles versions - Page 35 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
KGF_dll - nouvelles versions - Page 35 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
KGF_dll - nouvelles versions - Page 35 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
KGF_dll - nouvelles versions - Page 35 Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
-55%
Le deal à ne pas rater :
Friteuse sans huile – PHILIPS – Airfryer HD9200/90 Série 3000
49.99 € 109.99 €
Voir le deal

 

 KGF_dll - nouvelles versions

Aller en bas 
+13
The Gamer
Nardo26
silverman
Minibug
Pedro
mindstorm
pascal10000
Jicehel
papydall
Jean Claude
JL35
Yannick
Klaus
17 participants
Aller à la page : Précédent  1 ... 19 ... 34, 35, 36 ... 40  Suivant
AuteurMessage
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 2:19

Nouvelle version:
KGF.dll V5.09 du 08/10/2015

Nouveautés:
- nouvelle fonction IsPointInPolygon
- nouvelle fonction IsPointInCircle



Modules modifiés:
KGF.dll
KGF.chm


La doc, l'aide en ligne et les sources sont à jour.

On avait déjà la fonction IsPointInRectangle (dans la section 'Gestion de la souris"). Les deux nouvelles fonctions complètent cette fonctionnalité, avec la possibilité de tester sur un polygone fermé (non croisé) jusqu'à 100 coins, ou un cercle d'un rayon quelconque. Voici une démo: choisir entre polygone et cercle, puis cliquez dans l'écran, dedans ou dehors:
Code:
' test_IsPointInPolygon.bas

label click0, poly, cercle

dim i%,x%,y%,n%, res%, form%

data 7,100,30,180,150,120,300,30,60,90,400,250,80,100,30


full_space 0
on_click 0,click0

dlist 1

button 2 : caption 2,"Polygone" : on_click 2,poly
button 3 : caption 3,"Cercle" : on_click 3,cercle : top 3,25

dll_on "KGF.dll"
end

poly:
color 0,255,255,255
restore
read n%
clear 1
for i%=1 to n%
  read x%
  read y%
  item_add 1,str$(x%)+","+str$(y%)
  if i%=1
    2d_poly_from x%,y%
  else
    2d_poly_to x%,y%
  end_if
next i%
form% = 0
return

cercle:
color 0,254,255,255
2d_circle 300,300,50
form% = 1
return

click0:
  x% = mouse_x_left_down(0)
  y% = mouse_y_left_down(0)
  select form%
    case 0
      res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(1))
    case 1
      res% = dll_call5("IsPointInCircle",x%,y%,300,300,50)
  end_select
  select res%
    case -1
      message "Ce n'est pas un polygone"
    case 0
      message "Le point est en-dehors"
    case 1
      message "Le point est dedans"
  end_select
  return


Dernière édition par Klaus le Jeu 8 Oct 2015 - 4:08, édité 1 fois
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 3:37

De plus en plus fort Klaus!

Non seulement tu nous gratifie de deux super fonctions
mais en plus tu es même arrivé à remonter le temps !


version du 10/10 sortie le 08/10 là c' est inégalable.
lol!

PS : Pour le cercle, le point est toujours en dehors... scratch
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 4:09

Oups... les deux points sont corrigés ! Recharge la DLL...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 5:22

Ok Klaus, cela fonctionne.
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 7:22

super ça. jpcr, tu n'as plus d'excuses .... Smile
Revenir en haut Aller en bas
jpcr

jpcr


Nombre de messages : 276
Age : 57
Localisation : Val de Marne (94)
Date d'inscription : 06/05/2011

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 9:14

damned, oui je suis coincé la...

merci a vous tous !!
Revenir en haut Aller en bas
http://jeanpierre.creis.free.fr/Panoramic/Panoramic.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 12:02

Pour jpcr, et pour tous ceux qui s'intéressent à la détection d'un point dans un polygone, j'ai fait une petite démo un peu particulière.

Ce programme télécharge une capture d'écran officielle du jeu Warcraft et l'affiche dans un picture qui remplit l'écran. Ce picture sert de zone sensitive pour un clic. On peut y définir autant de zones actives que nécessaire. Un clic dans une de ces zones actives est alors reconnu et affiché, alors qu'un clic en-dehors de ces zones actives est signalé comme "zone neutre".

Pour aider la création des zones actives, j'ai intégré dans ce programme un mode "définition" qui est activé en ligne 7 par la variable def%. En ligne 9 et 10, il faut aussi adapter les chemins pour que ce soit conforme à vos configurations. En mode "définition", une deuxième fenêtre apapraît à droite du terrain de jeu, avec un mémo full_space. On est prêt pour définir une zone en forme de polygone. Pour cela, il suffit de cliquer sur les points qui représentent les coins du polygone souhaité. On voit les coordonnées de ces points apparaître dans le mémo, à droite, au fur et à mesure des clics, et le polygone se dessine progressivement dans l'image, par un trait noir de 1 pixel de large. Ne fermez pas le polygone - le programme s'en chargera lui-même ! Lorsque le polygone est prêt (sans le fermer !), il suffit de surligner le contenu du mémo et le mettre en mémoire par ctrl/C. Ensuite, on arrête le programme par la croix rouge, on retourne dans le source et on intègre le polygone à la suite des DATA existants, en respectant la structure: un entier contenant le nombre de points du nouveau polygone, suivi des DATA des points, insérés par ctrl/V et précédées de "data " pour chaque ligne. Ne pas oublier me mettre à jour le tout premier mot DATA de la liste qui contient le nombre de polygones définis ! Il faut aussi ajouter le signalement du polygone dans la routine clic en ajoutant un nouveau CASE pour le polygone créé.

Et voilà. Il suffit alors d'enlever le mode "Edition" dans la ligne 7 en mettant la valeur 0, et on peut exploiter.

Voici le code:
Code:
' zones_actives_dans_image_warcraft.bas

label clic

dim res%, x%, y%, nzones%, ncoins%, i%, j%

dim def% : def% = 0 : ' <======== mettre 1 ici pour passer en mode "définition" !
dim url$ : url$ = "http://jolstatic.fr/www/captures/2212/5/100245.jpg"
dim img$ : img$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\warcraft.jpg"
dim dll$ : dll$ = "KGF.dll"

width 0,970 : height 0,654
picture 1 : width 1,950 : height 1,594

dll_on dll$
res% = dll_call2("DownloadFile",adr(url$),adr(img$))
res% = dll_call1("LoadAnyImageFile",adr(img$))
clipboard_paste 1

if def%=1
  form 100 : left 100,width(0)+5 : height 100,height(0) : width 100,300
  memo 101 : parent 101,100 : full_space 101
end_if

2d_target_is 1
on_click 1,clic

' nombre de zones
data 3
' grande étoile
data 18
data 665,292
data 671,308
data 659,345
data 672,353
data 674,378
data 689,372
data 704,374
data 720,382
data 724,362
data 729,352
data 738,348
data 739,340
data 733,331
data 724,309
data 725,281
data 705,295
data 693,264
data 682,299
' charriot
data 26
data 111,478
data 127,480
data 136,472
data 135,463
data 154,458
data 170,465
data 176,461
data 170,451
data 171,436
data 167,435
data 160,446
data 136,442
data 145,431
data 139,425
data 94,432
data 91,435
data 88,431
data 81,431
data 79,447
data 68,454
data 60,473
data 76,470
data 86,448
data 96,443
data 106,443
data 107,448
' tête du gardien
data 7
data 519,342
data 524,338
data 531,339
data 533,349
data 527,351
data 525,351
data 521,346

if object_exists(100)=0
  read nzones%
  for i%=1 to nzones%
    read ncoins%
    dlist 200 + i%
    for j%=1 to ncoins%
      read x%
      read y%
      item_add 200+i%,str$(x%)+","+str$(y%)
    next j%
    item_add 200+i%,item_read$(200+i%,1)
  next i%
end_if


end

clic:
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  if object_exists(100)=1
    if count(101)=0
      2d_poly_from x%,y%
    else
      2d_poly_to x%,y%
    end_if
    item_add 101,str$(x%)+","+str$(y%)
    return
  end_if
  for i%=1 to nzones%
    res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(200+i%))
    if res%=1
      select i%
        case 1
          message "Grande étoile"
        case 2
          message "Charriot"
        case 3
          message "Tête du gardien"
      end_select
      return
    end_if
  next i%
  message "Partie neutre de l'image"
  return

Les 3 zones actives prédéfinies sont:
- la grande étoile à droite
- le charriot caché derrière des rochers en bas à gauche
- la tête du gardien (attention: il y a un piège !)
J'espère que ça vous amusera...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 13:28

Bonjour Klaus.
Tu es une providence pour Panoramic et les panoramiciens !

Bon,j’ai testé les deux nouvelles fonctions : IsPointInpolygone / IsPointInCircle.
C’est très utile, merci.

J’ai remarqué dans le code exemple que tu as donné : OBJECT_INTERNAL(1).
J’avoue que je ne connaissais pas cette variable système (honte à moi !).
J’ai revu l’aide Panoramic pour en savoir plus, mais …

Et puis je me suis posé la question de pouvoir déterminer si un point est à l’intérieur d’une ellipse.
Le cercle n'est qu'un cas particulier de l'ellipse, donc mon code fait d'une pierre deux coups.

Et voici le fruit de ma réflexion :

Code:

rem ============================================================================
rem          IsPointInEllipse
rem ============================================================================
label click0
dim x,y,xc,yc,x2,y2,pi,p,a,r,r1,r2
pi = 4*atn(1) : p = pi/180
xc = 350 : yc = 350  : ' Coordonnées du centre de l'ellipse
full_space 0
on_click 0,click0
 r1 = 200 : r2 = 100 : Tracer_Ellipse(xc,yc,r1,r2)  : ' Ellipse large
' r1 = 200 : r2 = 200 : Tracer_Ellipse(xc,yc,r1,r2)  : ' Cercle
' r1 = 200 : r2 = 300 : Tracer_Ellipse(xc,yc,r1,r2)  : ' Ellipse haute
end
rem ============================================================================
' Tracer une ellipse
' xc,yc : coordonnées du centre de l'ellipse
' r1 et r2 respectivement demi-diamètres horizontal et vertical de l'ellipse
' Si r1 = r2 alors léellipse est un cercle
SUB Tracer_Ellipse(xc,yc,r1,r2)
    dim_local x,y
    2d_poly_from xc+r1,yc
    for a = 0 to 2*pi step p
        x = xc + r1*cos(a) : y = yc +r2*sin(a) : 2d_poly_to x,y
    next a
END_SUB
rem ============================================================================
' Déterminer si le clixk est ç l'intérieur ou à l'extérieur de l'ellipse
click0:
   x = mouse_x_left_down(0)
   y = mouse_y_left_down(0)
' Soustraire des coordonnées du point cliqué celles du centre de l'ellipse
   x = x - xc : y = y - yc
' Diviser les coordonnées x par le demi-diamètre horizontal et y par le demi-diamètre vertical
   x = x/r1 : y = y/r2
' Calculer la quantité : r = x² + y²
   r = x*x + y*y
' Selon la valeur de r par rapport à l'unité
   if r > 1
       message "Le point est en dehors de l'ellipse"
   else
       if r = 1
          message "Le point est sur le contours de l'ellipse"
       else
          message "Le point est à l'intérieur de l'ellipse"
       end_if
   end_if
  
return
rem ============================================================================

Essayez respectivement avec les lignes 10 ou 11 ou 12
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Jicehel

Jicehel


Nombre de messages : 5947
Age : 52
Localisation : 77500
Date d'inscription : 18/04/2011

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 13:29

Magnifique Klaus... c'est super...je me tais et je m'incline .... Wink
Revenir en haut Aller en bas
jpcr

jpcr


Nombre de messages : 276
Age : 57
Localisation : Val de Marne (94)
Date d'inscription : 06/05/2011

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 14:04

que dire ?

un grand merci pour tout ce que tu nous apporte Klaus !!

mais aussi a tous les autres qui nous offrent de nombreux programmes ou répondent a nos questions précisement et rapidement !!!


jp
Revenir en haut Aller en bas
http://jeanpierre.creis.free.fr/Panoramic/Panoramic.html
papydall

papydall


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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 14:33

C’est ce qui fait la beauté du forum et la bonté des forumistes ! I love you
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: re   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 18:01

Là, je suis sur le c... !
Bravo !

flash n' a plus qu' à bien se tenir !
Laughing
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 18:54

Nouvelle version:
KGF.dll V5.10 du 08/10/2015

Nouveautés:
- nouvelle fonction IsPointInElipse

Modules modifiés:
KGF.dll
KGF.chm


La doc, l'aide en ligne et les sources sont à jour.

Un grand MERCI à Papydall qui a fourni les formules sous forme de programme Panoramic. Bien qu'on puisse faire cela en Panoramic pur (comme l'a démontré papydall), j'ai voulu offrir une palette complète de fonctions dans ce domaine. Maintenant, on a le test si un point est dans un rectangle, polygone, cercle ou ellipse.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 19:18

klaus a écrit:
Un grand MERCI à Papydall qui a fourni les formules sous forme de programme Panoramic. Bien qu'on puisse faire cela en Panoramic pur (comme l'a démontré papydall), j'ai voulu offrir une palette complète de fonctions dans ce domaine. Maintenant, on a le test si un point est dans un rectangle, polygone, cercle ou ellipse.

sunny king I love you king sunny
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 20:46

Et voici cette fonction intégrée dans le programme de démo:
Code:
' test_IsPointInPolygon.bas

label click0, poly, cercle, ellipse

dim i%,x%,y%,n%, res%, form%, sx,sy,xc%,yc%, a, pi, p, r1, r2
pi = 4*atn(1)
p = pi/180

data 7,100,60,180,180,120,330,30,90,90,430,250,110,100,60


full_space 0
on_click 0,click0

dlist 1

button 2 : caption 2,"Polygone" : on_click 2,poly
button 3 : caption 3,"Cercle"  : on_click 3,cercle  : top 3,25
button 4 : caption 4,"Ellipse"  : on_click 4,ellipse : top 4,50

dll_on "KGF.dll"
end

poly:
  color 0,255,255,255
  restore
  read n%
  clear 1
  for i%=1 to n%
    read x%
    read y%
    item_add 1,str$(x%)+","+str$(y%)
    if i%=1
      2d_poly_from x%,y%
    else
      2d_poly_to x%,y%
    end_if
  next i%
  form% = 0
  return

cercle:
  color 0,254,255,255
  2d_circle 300,300,50
  form% = 1
  return

ellipse:
  color 0,255,254,255
    xc% = 450
    yc% = 375
    r1 = 150
    r2 = 75
    2d_poly_from xc%+r1,yc%
    for a = 0 to 2*pi step p
        sx = xc% + r1*cos(a) : sy = yc% +r2*sin(a) : 2d_poly_to sx,sy
    next a
  form% = 2
  return

click0:
  x% = mouse_x_left_down(0)
  y% = mouse_y_left_down(0)
  select form%
    case 0
      res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(1))
    case 1
      res% = dll_call5("IsPointInCircle",x%,y%,300,300,50)
    case 2
      res% = dll_call6("IsPointInEllipse",x%,y%,300,300,600,450)
  end_select
  select res%
    case -1
      message "Ce n'est pas un polygone"
    case 0
      message "Le point est en-dehors"
    case 1
      message "Le point est dedans"
  end_select
  return
 
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyJeu 8 Oct 2015 - 23:51

Testée et approuvée.
Vielen Dank, Klaus! Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyVen 9 Oct 2015 - 2:03

Nouvelle version:
KGF.dll V5.11 du 08/10/2015

Nouveautés:
- nouvelle fonction GetInnerPolygonPoint
- nouvelle fonction FloodfillPictureToBorderColor


Modules modifiés:
KGF.dll
KGF.chm


La doc, l'aide en ligne et les sources sont à jour.

La fonction GetInnerPolygonPoint permet de déterminer un point qui est avec certitude à l'intérieur d'un polygone quelconque non croisé. Et la fonction FloodfillPictureToBorderColor est similaire à la commande 2D_FLOOD, mais, à partir d'un point de départ, elle remplace tous les pixels d'un picture par une couleur de remplissage, jusqu'à rencontrer une couleur de bordure. On peut ainsi dessiner, par exemple, on polygone ou une ellipse dans une photo, et remplir l'intérieur par une couleur choisie, quelque soit le contenu de l'intérieur. Ceci diffère du fonctionnement de la commande 2D_FLOOD qui, à partir d'un point de départ, remplace tous les pixels ayant la même couleur, par une couleur de rempissage, en s'arrêtant à chaque couleur différente rencontrée.

En guise de démonstration, j'ai ajouté un bouton "Montrer" en haut à gauche de la fenêtre du programme de test des zones actives, montrant une capture de Warcraft. Ce bouton va permettre de visualiser les 3 zones actives, et son libellé change à "Cacher". Un autre clic sur ce bouton va restaurer l'image initiale. Pour chacune des 3 zones actives de ce programme, on appelle ces deux nouvelles fonctions pour trouver un point à l'intérieur du polygone définissant la zone active, puis pour la remplir d'une couleur fixe.

Voici cette version:
Code:
' zones_actives_dans_image_warcraft.bas

label clic, montrer

dim res%, x%, y%, nzones%, ncoins%, i%, j%, vis%, xp%, yp%, clr%

dim def% : def% = 0 : ' <======== mettre 1 ici pour passer en mode "définition" !
dim url$ : url$ = "http://jolstatic.fr/www/captures/2212/5/100245.jpg"
dim img$ : img$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\warcraft.jpg"
dim dll$ : dll$ = "KGF.dll"

width 0,970 : height 0,654
picture 1 : width 1,950 : height 1,594

dll_on dll$
res% = dll_call2("DownloadFile",adr(url$),adr(img$))
res% = dll_call1("LoadAnyImageFile",adr(img$))
clipboard_paste 1

if def%=1
  form 100 : left 100,width(0)+5 : height 100,height(0) : width 100,300
  memo 101 : parent 101,100 : full_space 101
else
  button 101 : caption 101,"Montrer" : on_click 101,montrer
end_if

2d_target_is 1
on_click 1,clic

' nombre de zones
data 3
' grande étoile
data 18
data 665,292
data 671,308
data 659,345
data 672,353
data 674,378
data 689,372
data 704,374
data 720,382
data 724,362
data 729,352
data 738,348
data 739,340
data 733,331
data 724,309
data 725,281
data 705,295
data 693,264
data 682,299
' charriot
data 26
data 111,478
data 127,480
data 136,472
data 135,463
data 154,458
data 170,465
data 176,461
data 170,451
data 171,436
data 167,435
data 160,446
data 136,442
data 145,431
data 139,425
data 94,432
data 91,435
data 88,431
data 81,431
data 79,447
data 68,454
data 60,473
data 76,470
data 86,448
data 96,443
data 106,443
data 107,448
' tête du gardien
data 7
data 519,342
data 524,338
data 531,339
data 533,349
data 527,351
data 525,351
data 521,346

if object_exists(100)=0
  read nzones%
  for i%=1 to nzones%
    read ncoins%
    dlist 200 + i%
    for j%=1 to ncoins%
      read x%
      read y%
      item_add 200+i%,str$(x%)+","+str$(y%)
    next j%
    item_add 200+i%,item_read$(200+i%,1)
  next i%
end_if


end

clic:
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  if object_exists(100)=1
    if count(101)=0
      2d_poly_from x%,y%
    else
      2d_poly_to x%,y%
    end_if
    item_add 101,str$(x%)+","+str$(y%)
    return
  end_if
  for i%=1 to nzones%
    res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(200+i%))
    if res%=1
      select i%
        case 1
          message "Grande étoile"
        case 2
          message "Charriot"
        case 3
          message "Tête du gardien"
      end_select
      return
    end_if
  next i%
  message "Partie neutre de l'image"
  return
 
montrer:
  if nzones%=0
    message "Rien à montrer"
    return
  end_if
  if vis%=0
    clr% = (255*256+255)*256
    clipboard_copy 1
    res% = dll_call0("LoadPicture")
    res% = dll_call1("SetImmediateMode",1)
    for i%=1 to nzones%
      coordonnees(i%,1)
      2d_poly_from x%,y%
      for j%=2 to count(200+i%)
        coordonnees(i%,j%)
        2d_poly_to x%,y%
      next j%
      coordonnees(i%,1)
      2d_poly_to x%,y%
      display
      clipboard_copy 1
      res% = dll_call0("LoadPicture")
      pause 100
      res% = dll_call4("GetInnerPolygonPoint",object_internal(200+i%),5,adr(xp%),adr(yp%))
' message item_read$(200+i%,1)+"/"+item_read$(200+i%,2)+": "+str$(xp%)+","+str$(yp%)
      res% = dll_call4("FloodfillPictureToBorderColor",xp%,yp%,clr%,0)
      clipboard_paste 1
    next i%
    vis% = 1
    caption 101,"Cacher"
  else
    res% = dll_call0("SavePicture")
    res% = dll_call1("LoadAnyImageFile",adr(img$))
    clipboard_paste 1
    vis% = 0
    caption 101,"Montrer"
  end_if
  return
 
sub coordonnees(n%,i%)
  dim_local s$, k%
  s$ = item_read$(200+n%,i%)
  k% = instr(s$,",")
  x% = val(left$(s$,k%-1))
  y% = val(mid$(s$,k%+1,len(s$)))
end_sub
 
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyVen 9 Oct 2015 - 13:25

Doc de KGF.dll


RandomValue

Citation :
Cette fonction retourne une valeur entière aléatoire dans une un intervalle entre 1 et une valeur maximale: 1 <= x <= maxi. L'appel a le format suivant:

Pour l’exemple donné
Code:

dim res%
dll_on "kgf.dll"
res% = DLL_call1("RandomValue",6)
message "Valeur aléatoire: "+str$(res%)

Il retourne toujours 1, mieux vaut toujours randomiser la graine avant le 1er appel et l'exemple devient :
Code:

dim res%
dll_on "kgf.dll"
res% = DLL_call1("RandomValue",0-1)  : '  randomize
res% = DLL_call1("RandomValue",6)
message "Valeur aléatoire: "+str$(res%)

Fonctions binaires

bin_ROL
Citation :
Cette fonction travaille sur une valeur binaire de 32 bits. Ce sont les valeurs représentées en Panoramic par des entiers, du type n% La rotation à gauche signifie que l'ensemble des bits sera décalé à gauche et le (supprimer ce le) que les bits sortant à gauche seront réinjectés à droite, de façon cyclique. L'appel a le format suivant:
Exemple :
Code:

dim res%, val%
dll_on "kgf.dll"
val% = 17
res% = dll_call2("bin_ROL",val%,3%)
message "Résultat: "+str$(res%)

Enlever le % après 3
Code:
 res% = dll_call2("bin_ROL",val%,3)

Mêmes remarques pour bin_ROR , bin_SHL, bin_SHR, bin_WROL, bin_WROR, bin_WSHL, bin_WSHR, bin_BROL, bin_BROR, bin_BSHL, bin_BSHR

Le copier / coller n'a pas que des avantages ! Laughing
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyVen 9 Oct 2015 - 13:56

Merci, Papydall ! Tout est corrigé, et ce sera mis en place avec la prochaine version.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyVen 9 Oct 2015 - 14:01

J'ai fait une petite amélioration technique dans la fonction GetInnerPolygonPoint. La distribution est faite, mais il n'y a pas de changement de version.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
papydall

papydall


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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyVen 9 Oct 2015 - 14:09

C'est noté.
Revenir en haut Aller en bas
http://papydall-panoramic.forumarabia.com/
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptySam 10 Oct 2015 - 22:35

Tiens, c'est curieux... Pas de réaction sur la version KGF.dll V5.11 du 08/10/2015 ? Avec les nouvelles fonctions GetInnerPolygonPoint et FloodfillPictureToBorderColor ? Pour les amateurs de jeu en 2d, c'est pourtant sympa de pouvoir visualiser, d'un coup, les zones "sensibles" d'une image puis de les cacher ? Et même en traitement de photos, ça peut être intéressant. Car enfin, la commande 2D_FLOOD ne marche que pour des zones d'une couleur unie, et elle produit un résultat désagréable même sur un léger dégradé. Là, on peut "verser" une couleur dans une zone délimitée par une couleur spécifique, quelque soit le contenu de cette zone, et même sur une photo. Ce résultat est spéctaculaire dans le programme de démo publiée hier à 2h03, par me bouton "Montrer" en haut à gauche de l'écran...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
chatmath75

chatmath75


Nombre de messages : 4
Localisation : Paris 7ème
Date d'inscription : 05/10/2015

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptySam 10 Oct 2015 - 22:42

Attention certain jeux vidéos comme VIRUS tirée du film comporte des graphique très mauvais. J'apprécie énormément les jeux vidéos lol! lol! lol! lol! lol! lol!
Revenir en haut Aller en bas
JL35




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

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptySam 10 Oct 2015 - 22:50

? quel rapport ?

@Klaus,
effectivement je n'avais pas fait gaffe, mais cette fonction (FloodFillPictureToBorderColor) m'intéresse beaucoup en photo pour remplir une zone d'une couleur donnée, jusqu'ici je n'avais pas de solution, sauf à le faire pixel par pixel, mais ça met un temps fou...
Je vais intégrer ça vite fait ! Merci en tout cas.

PS testé et approuvé ! Super.
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 EmptyDim 11 Oct 2015 - 14:03

Nouvelle version:
KGF.dll V5.12 du 011/10/2015

Nouveautés:
- nouvelle fonction WindowAddPolygonRegion

Modules modifiés:
KGF.dll
KGF.chm


La doc, l'aide en ligne et les sources sont à jour, y compris les corrections de la doc par Papydall.

Cette nouvelle fonction étend les possibilités de gestion des régiions Windows par Panoramic. En guise de démonstration, j'ai utilisé le programme des "zones sensibles" sur image Warcraft. Un nouveau bouton "Percer" apparaît en haut ) gauche de la fenêtre. Un clic sur ce bouton "perce" la fenêtre selon les formes des zones sensibles. Ce sont de véritables trous: l'image de l'écran en-dessous transparaît à-travers, et on peut même cliquer à travers un de ces trous, si un bouton ou un champs apparaît ainsi ! Un autre clic sur ce nouveau bouton "rebouche" ces trous. Voici la démo:
Code:
' zones_actives_dans_image_warcraft.bas

label clic, montrer, percer

dim res%, x%, y%, nzones%, ncoins%, i%, j%, vis%, xp%, yp%, clr%
dim trou%, reg0%, reg1%, reg2%, dx%, dy%
dim fgauche%, fhaut%, flargeur%, fhauteur%
dim cgauche%, chaut%, clargeur%, chauteur%

dim def% : def% = 0 : ' <======== mettre 1 ici pour passer en mode "définition" !
dim url$ : url$ = "http://jolstatic.fr/www/captures/2212/5/100245.jpg"
dim img$ : img$ = "C:\Users\klausgunther\Documents\Mes projets\Mes projets Delphi\KGF\warcraft.jpg"
dim dll$ : dll$ = "KGF.dll"

width 0,970 : height 0,654
picture 1 : width 1,950 : height 1,594

dll_on dll$
res% = dll_call2("DownloadFile",adr(url$),adr(img$))
res% = dll_call1("LoadAnyImageFile",adr(img$))
clipboard_paste 1

if def%=1
  form 100 : left 100,width(0)+5 : height 100,height(0) : width 100,300
  memo 101 : parent 101,100 : full_space 101
else
  button 101 : caption 101,"Montrer" : on_click 101,montrer
  button 102 : caption 102,"Percer"  : on_click 102,percer  : top 102,25
end_if

2d_target_is 1
on_click 1,clic

' nombre de zones
data 3
' grande étoile
data 18
data 665,292
data 671,308
data 659,345
data 672,353
data 674,378
data 689,372
data 704,374
data 720,382
data 724,362
data 729,352
data 738,348
data 739,340
data 733,331
data 724,309
data 725,281
data 705,295
data 693,264
data 682,299
' charriot
data 26
data 111,478
data 127,480
data 136,472
data 135,463
data 154,458
data 170,465
data 176,461
data 170,451
data 171,436
data 167,435
data 160,446
data 136,442
data 145,431
data 139,425
data 94,432
data 91,435
data 88,431
data 81,431
data 79,447
data 68,454
data 60,473
data 76,470
data 86,448
data 96,443
data 106,443
data 107,448
' tête du gardien
data 7
data 519,342
data 524,338
data 531,339
data 533,349
data 527,351
data 525,351
data 521,346

res% = DLL_call5("GetFormMetrics",handle(0),adr(fgauche%),adr(fhaut%),adr(flargeur%),adr(fhauteur%))
res% = DLL_call5("GetFormClientMetrics",handle(0),adr(cgauche%),adr(chaut%),adr(clargeur%),adr(chauteur%))

dx% = cgauche% - fgauche%
dy% = chaut% - fhaut%

if object_exists(100)=0
  read nzones%
  for i%=1 to nzones%
    read ncoins%
    dlist 200 + i%
    dlist 300 + i%
    for j%=1 to ncoins%
      read x%
      read y%
      item_add 200+i%,str$(x%)+","+str$(y%)
      item_add 300+i%,str$(x%+dx%)+","+str$(y%+dy%)
    next j%
    item_add 200+i%,item_read$(200+i%,1)
    item_add 300+i%,item_read$(300+i%,1)
  next i%
end_if


end

clic:
  x% = mouse_x_left_down(1)
  y% = mouse_y_left_down(1)
  if object_exists(100)=1
    if count(101)=0
      2d_poly_from x%,y%
    else
      2d_poly_to x%,y%
    end_if
    item_add 101,str$(x%)+","+str$(y%)
    return
  end_if
  for i%=1 to nzones%
    res% = dll_call3("IsPointInPolygon",x%,y%,object_internal(200+i%))
    if res%=1
      select i%
        case 1
          message "Grande étoile"
        case 2
          message "Charriot"
        case 3
          message "Tête du gardien"
      end_select
      return
    end_if
  next i%
  message "Partie neutre de l'image"
  return
  
montrer:
  if nzones%=0
    message "Rien à montrer"
    return
  end_if
  if vis%=0
    clr% = (255*256+255)*256
    clipboard_copy 1
    res% = dll_call0("LoadPicture")
    res% = dll_call1("SetImmediateMode",1)
    for i%=1 to nzones%
      coordonnees(i%,1)
      2d_poly_from x%,y%
      for j%=2 to count(200+i%)
        coordonnees(i%,j%)
        2d_poly_to x%,y%
      next j%
      coordonnees(i%,1)
      2d_poly_to x%,y%
      display
      clipboard_copy 1
      res% = dll_call0("LoadPicture")
      pause 100
      res% = dll_call4("GetInnerPolygonPoint",object_internal(200+i%),5,adr(xp%),adr(yp%))
' message item_read$(200+i%,1)+"/"+item_read$(200+i%,2)+": "+str$(xp%)+","+str$(yp%)
      res% = dll_call4("FloodfillPictureToBorderColor",xp%,yp%,clr%,0)
      clipboard_paste 1
    next i%
    vis% = 1
    caption 101,"Cacher"
  else
    res% = dll_call0("SavePicture")
    res% = dll_call1("LoadAnyImageFile",adr(img$))
    clipboard_paste 1
    vis% = 0
    caption 101,"Montrer"
  end_if
  return
  
percer:
  if nzones%=0
    message "Rien à percer"
    return
  end_if
  if trou%=0
    reg1% = 0
    for i%=1 to nzones%
      res% = dll_call2("WindowAddPolygonRegion",adr(reg1%),object_internal(300+i%))
      reg2% = DLL_call3("WindowRegionHole",handle(0),1,adr(reg1%))
      res% = DLL_call2("WindowRegionAsWindow",handle(0),adr(reg2%))
    next i%
    trou% = 1
    caption 102,"Reboucher"
  else
    reg1% = 0
    for i%=1 to nzones%
      res% = dll_call2("WindowAddPolygonRegion",adr(reg1%),object_internal(300+i%))
      res% = DLL_call3("WindowRegionHole",handle(0),0,adr(reg1%))
      res% = DLL_call2("WindowRegionAsWindow",handle(0),adr(reg2%))
    next i%
    trou% = 0
    caption 102,"Percer"
  end_if
  return
  
sub coordonnees(n%,i%)
  dim_local s$, k%
  s$ = item_read$(200+n%,i%)
  k% = instr(s$,",")
  x% = val(left$(s$,k%-1))
  y% = val(mid$(s$,k%+1,len(s$)))
end_sub

Quel utilisation ? Par exemple en créant un jeu façon puzzle, et des actions comme le lancer d'une boule ou un clic de souris font "disparaitre" une pièce du puzzle... A vous d'imaginer l'utilisation. On peut faire toutes sortes de combinaisons de rectangles, ellipses et polygones pour définir une région qu'on peut appliquer à une fenêtre. Soit pour lui donner cette forme, soit pour percer un trou de cette forme, soit pour reboucher un trou de cette forme.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





KGF_dll - nouvelles versions - Page 35 Empty
MessageSujet: Re: KGF_dll - nouvelles versions   KGF_dll - nouvelles versions - Page 35 Empty

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Revenir en haut 
Page 35 sur 40Aller à la page : Précédent  1 ... 19 ... 34, 35, 36 ... 40  Suivant
 Sujets similaires
-
» KGF_dll - nouvelles versions
» Nouvelles versions
» Synedit_Editor - nouvelles versions
» KGF_dll - nouvelles versions
» KGF_dll - nouvelles versions

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: