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
» Compilateur FBPano
par jean_debord Aujourd'hui à 10:54

» demande pour recuperer un text speciale
par pascal10000 Hier à 22:04

» Casse-tête : Echanger les positions des cavaliers
par papydall Hier à 19:51

» KGF_dll - nouvelles versions
par Klaus Hier à 14:29

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

» Déterminer le Handle de l’objet ayant le focus
par papydall Dim 16 Juil 2017 - 3:15

» Déterminer le HANDLE du Bureau
par papydall Dim 16 Juil 2017 - 1:59

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
CalendrierCalendrier

Partagez | 
 

 KGF_prerelease

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2  Suivant
AuteurMessage
Klaus

avatar

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

MessageSujet: KGF_prerelease   Mar 22 Mar 2016 - 0:35

KGF_prerelease.dll:

Je suis en train de créer un objet KGraphic. Le début est visible par ce petit programme, en chargeant KGF_prerelease.dll sur mon WebDav, dossiers DLLs:
Code:
' test_KGraphic.bas

label creer, supprimer
label form1, form2, form3, form4, form5
label sauver1, sauver2, sauver3, charger3

dim res%, KG%, bmp$, jpg$

dll_on "KGF_prerelease.dll"
width 0,800
panel 1 : top 1,10 : left 1,20 : width 1,500 : height 1,300
color 1,127,255,255
dlist 2
  item_add 2,"5,5"
  item_add 2,"35,235"
  item_add 2,"350,18"
  item_add 2,"90,140"
  
button 11 : top 11,10 : left 11,550 : width 11,120 : caption 11,"Créer KGraphic"
  on_click 11,creer
button 12 : top 12,40 : left 12,550 : width 12,120 : caption 12,"Supprimer KGraphic"
  on_click 12,supprimer
button 13 : top 13,70 : left 13,570 : width 13,160 : caption 13,"Rectangle rouge bord noir"
  on_click 13,form1
button 14 : top 14,100 : left 14,570 : width 14,160 : caption 14,"Carré bleu arrondi bord jaune"
  on_click 14,form2
button 15 : top 15,130 : left 15,570 : width 15,160 : caption 15,"Oval violet bord noir"
  on_click 15,form3
button 16 : top 16,160 : left 16,570 : width 16,160 : caption 16,"Rectangle transparent bord noir"
  on_click 16,form4
button 17 : top 17,190 : left 17,570 : width 17,160 : caption 17,"Polygone jaune"
  on_click 17,form5
button 18 : top 18,220 : left 18,550 : width 18,120 : caption 18,"Copier -> presse-papier"
  on_click 18,sauver1
button 19 : top 19,220 : left 19,550 : width 19,120 : caption 19,"Copier -> BMP"
  on_click 19,sauver2
button 20 : top 20,250 : left 20,550 : width 20,120 : caption 20,"Copier -> JPG"
  on_click 20,sauver3
button 21 : top 21,280 : left 21,550 : width 21,120 : caption 21,"Charger JPG"
  on_click 21,charger3

alpha 31 : top 31,350 : left 31,10 : font_size 31,16 : font_bold 31
  caption 31,"Taper ctrl/Z pour annuler une étape..."
  
end

creer:
  if KG%<>0
    message "Cet objet existe déjà"
    return
  end_if
  KG% = dll_call6("CreateKGraphic",handle(1),20,20,400,250,0)
  return

supprimer:
  KG% = dll_call1("DeleteKGraphic",KG%)
  if KG%<0
    message "Erreur"
    KG% = 0
  end_if
  return
  
form1:
  if KG%=0
    message "KGraphic inexistant"
    return
  end_if
  res% = dll_call4("SetKGraphicPen",KG%,0,3,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255)
  res% = dll_call5("DrawKGrapicShape",KG%,0,40*65536+30,320*65536+180,0)
  return
  
form2:
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256+255)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,1,10*65536+90,280*65536+150,30*65536+20)
  return
  
form3:
  res% = dll_call4("SetKGraphicPen",KG%,0,5,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,2,80*65536+50,120*65536+180,0)
  return
  
form4:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,0)
  res% = dll_call5("DrawKGrapicShape",KG%,3,190*65536+140,120*65536+60,0)
  return
  
form5:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,255*256+255)
  res% = dll_call3("DrawKGraphicPolygon",KG%,1,object_internal(2))
  return
  
sauver1:
  res% = dll_call3("SaveKGraphicImage",KG%,0,0)
  return
  
sauver2:
  bmp$ = "KGraphic.bmp"
  res% = dll_call3("SaveKGraphicImage",KG%,1,adr(bmp$))
  return
  
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  return

charger3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return
Qu'est-ce que vous en pensez ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 0:51

Testé et ...

Very good !
Copier -> BMP : OK
Copier -> JPG  No  non
Et par conséquent :
Charger JPG  No non  plus
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 1:09

Bizarre. J'ai retesté: chez moi, il crée bien un fichier KGraphic.jpg contenant l'image visible dans l'objet. Et donc, le chargement fonctionne aussi.

Je vais faire des investigations si certaines ressources sont spécifiques à une version de Windows. As-tu un message d'erreur ? Sinon, pourrais-tu afficher res% comme ceci:
Code:
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  message "JPG: "+str$(res%)
  return

D'ailleurs, tu peux "jouer" avec le code, comme par exemple ceci:
Code:
charger3:
  if object_exists(51)=0 then open_dialog 51 : filter 51,"Fichiers JPG|*.jpg"
  jpg$ = file_name$(51)
  if jpg$="_" then return
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return
et tu sélectionnes une photo quelconque...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 1:28

Ok Klaus.
Le fichier image a été enregistré dans un autre dossier et moi je l’ai cherché ailleurs.
C’est tout à fait intéressant.
Bravo

Cadeau:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 2:49

Merci d'avoir testé, Papdall !

Je suis en train d'ajouter un peu de souplesse à ces fonctions.

Et je travaille sur une présentation 3D. Ca marche déjà pour des rectangles pleins et des rectangles transparents. Par contre, je n'ai pas d'idée comment représenter des ellipses. L'idée générale était d'avoir un Angle3D et un DeltaZ, avec Angle3d variant en degrés de entre 0 et 90 degrés, ces limites étant exclus. Donc, une ellipse devrait être représentée comme un segment d'un "tuyau" aplati. Mais j'ai des problèmes pour calculer cela. Idem d'ailleurs pour des rectangles à coins arrondis - pas évident.

Pour le rectangle plein, ça donne ça, avec un angle de 30° et un DeltaZ de 50 pixels:
" />
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 4:52

J'ai mis une nouvelle version en ligne, pour faire des histogrammes en forme de lignes rompues, en 3D:
" />

Voici le code:
Code:
' test_KGraphic.bas

label creer, supprimer
label form1, form2, form3, form4, form5, form6
label sauver1, sauver2, sauver3, charger3, cacher, mode3d

dim res%, KG%, bmp$, jpg$, v%, m3d%
v% = 1

dll_on "KGF.dll"
width 0,800
panel 1 : top 1,10 : left 1,20 : width 1,500 : height 1,300
color 1,127,255,255
dlist 2
  item_add 2,"5,5"
  item_add 2,"35,235"
  item_add 2,"350,18"
  item_add 2,"90,140"
dlist 3
  item_add 3,"10,220"
  item_add 3,"70,40"
  item_add 3,"130,200"
  item_add 3,"200,120"
  item_add 3,"270,160"
  item_add 3,"340,80"

button 11 : top 11,10 : left 11,550 : width 11,120 : caption 11,"Créer KGraphic"
  on_click 11,creer
button 12 : top 12,40 : left 12,550 : width 12,120 : caption 12,"Supprimer KGraphic"
  on_click 12,supprimer
button 13 : top 13,70 : left 13,570 : width 13,170 : caption 13,"Rectangle rouge bord noir"
  on_click 13,form1
button 14 : top 14,100 : left 14,570 : width 14,170 : caption 14,"Rectangle bleu arrondi bord jaune"
  on_click 14,form2
button 15 : top 15,130 : left 15,570 : width 15,170 : caption 15,"Oval violet bord noir"
  on_click 15,form3
button 16 : top 16,160 : left 16,570 : width 16,170 : caption 16,"Rectangle transparent bord noir"
  on_click 16,form4
button 17 : top 17,190 : left 17,570 : width 17,170 : caption 17,"Polygone jaune"
  on_click 17,form5
button 24 : top 24,220 : left 24,570 : width 24,170 : caption 24,"Histogramme bleu"
  on_click 24,form6

button 18 : top 18,250 : left 18,550 : width 18,120 : caption 18,"Copier -> presse-papier"
  on_click 18,sauver1
button 19 : top 19,280 : left 19,550 : width 19,120 : caption 19,"Copier -> BMP"
  on_click 19,sauver2
button 20 : top 20,310 : left 20,550 : width 20,120 : caption 20,"Copier -> JPG"
  on_click 20,sauver3
button 21 : top 21,340 : left 21,550 : width 21,120 : caption 21,"Charger JPG"
  on_click 21,charger3
button 22 : top 22,370 : left 22,550 : width 22,120 : caption 22,"Cacher/Montrer"
  on_click 22,cacher
button 23 : top 23,400 : left 23,550 : width 23,120 : caption 23,"3D/2D"
  on_click 23,mode3d

alpha 31 : top 31,350 : left 31,10 : font_size 31,16 : font_bold 31
  caption 31,"Taper ctrl/Z pour annuler une étape..."
  
end

creer:
  if KG%<>0
    message "Cet objet existe déjà"
    return
  end_if
  KG% = dll_call6("CreateKGraphic",handle(1),20,20,400,250,0)
  return

supprimer:
  KG% = dll_call1("DeleteKGraphic",KG%)
  if KG%<0
    message "Erreur"
    KG% = 0
  end_if
  return
  
form1:
  if KG%=0
    message "KGraphic inexistant"
    return
  end_if
  res% = dll_call4("SetKGraphicPen",KG%,0,3,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255)
  res% = dll_call5("DrawKGrapicShape",KG%,0,20*65536+30,320*65536+180,0)
  return
  
form2:
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256+255)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,1,10*65536+90,280*65536+150,30*65536+20)
  return
  
form3:
  res% = dll_call4("SetKGraphicPen",KG%,0,5,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,2,80*65536+50,120*65536+180,0)
  return
  
form4:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,0)
  res% = dll_call5("DrawKGrapicShape",KG%,3,190*65536+140,120*65536+60,0)
  return
  
form5:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,255*256+255)
  res% = dll_call3("DrawKGraphicPolygon",KG%,1,object_internal(2))
  return
  
form6:
  res% = dll_call4("SetKGraphicPen",KG%,0,1,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
'   res% = dll_call4("KGraphicFunction",KG%,9,30,50) : ' 30°, profondeur 50 pixels (par défaut)  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  return

sauver1:
  res% = dll_call3("SaveKGraphicImage",KG%,0,0)
  return
  
sauver2:
  bmp$ = "KGraphic.bmp"
  res% = dll_call3("SaveKGraphicImage",KG%,1,adr(bmp$))
  return
  
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  return

charger3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return

cacher:
  v% = 1 - v%
  res% = dll_call4("KGraphicFunction",KG%,7,v%,0)
  return
  
mode3d:
  m3d% = 1 - m3d%
  res% = dll_call4("KGraphicFunction",KG%,8,m3d%,0)
  return


Pour obtenir ce résultat, cliquer, dans l'ordre, sur:
- Créer KGraphic
- 2D/3D
- Histogramme bleu

Voici la petite section qui réalise cela:
Code:
form6:
  res% = dll_call4("SetKGraphicPen",KG%,0,1,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
'   res% = dll_call4("KGraphicFunction",KG%,9,30,50) : ' 30°, profondeur 50 pixels (par défaut)  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  return
La ligne en commentaire sert à paramétrer l'angle et la profondeur de la 3ème dimension. Elle est en commentaire car les valeurs indiquées sont celles par défaut.

P.S.

As-tu essayé de superposer plusieurs graphismes, puis faire ctrl/Z de façon répétée ? Je suis assez fier de cette réalisation.

Autre information: la création de l'objet KGraphic retourne une valeur qui sert d'identifiant pour l'objet. En créant plusieurs variables, on peut créer plusieurs objets KGraphic et les placer où l'on veut. Et chaque objet a son propre historique des modifications, pour ctrl/Z...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 7:27

Ça marche.
Nickel
Chrome
Après avoir rectifié tout de même la ligne 10
Code:

dll_on "KGF.dll"

En

Code:

dll_on "KGF_prerelease.dll"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 7:38

J’ai posté dans Vos sources, vos utilitaires à partager un petit code qui permet de tracer un ellipsoïde.
Jettes-y un œil, ça te donnera peut-être des idées.


Voici ce que ça peut donner:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 12:55

Citation :
J’ai posté dans Vos sources, vos utilitaires à partager un petit code qui permet de tracer un ellipsoïde.
C'est joli, mais ce n'est pas tout à fait ce que je cherche à faire. Ce que je veux, c'est représenter une "tranche" de "tuyau" posée verticalement, un peu comme ceci:
, sans les portions effacées des lignes, bien sûr.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mar 22 Mar 2016 - 21:26

Si ça peut te convenir:
 

Code:

rem ============================================================================
rem             Tranche de tuyau
rem ============================================================================

width 0,800 : height 0,800
picture 10 : width 10,width(0)-100 : height 10,height(0)-100
top 10,20 : left 10,50 : 2d_target_is 10 : 2d_pen_width 10

degrees

Tranche_Tuyau(300,300,90,180,150,50)
Tranche_Tuyau(500,200,00,135,100,50)
Tranche_Tuyau(300,600,135,180,200,50)
Tranche_Tuyau(650,800+200,100,120,600,100)
Tranche_Tuyau(150,100,0,180,50,10)
Tranche_Tuyau(400,400,260,300,250,10)
 end
SUB Tranche_Tuyau(xc,yc,Angle_Deb,Angle_Fin,Rayon1,Rayon2)
    dim_local a,x,y
    for a = Angle_Deb to Angle_Fin
        2d_fill_color mod(a,255),abs(a-255),abs(255-a)
        2d_pen_color  mod(a,255),abs(a-255),abs(255-a)
        x = rayon1*cos(a) : y = rayon1*sin(a)
        2d_circle xc+x,yc-y,rayon2
   next a
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Mer 23 Mar 2016 - 2:35

Ce que je voudrais, c'est ça: (le rectangle aux coins arrondis est un bonus...)


Code:
Code:
dim x%, y%
picture 1 : full_space 1 : 2d_target_is 1
color 1,255,255,255
tuyau()
rectanglearrondi()
end

sub tuyau()
2d_fill_color 255,127,127
2d_pen_color 0,0,255
2d_pen_width 3
for x%=200 to 100 step -1
    2d_circle x%,400-x%,50
next x%
end_sub

sub rectanglearrondi()
2d_fill_color 255,127,127
2d_pen_color 255,127,127
for x%=300 to 500
  for y%=100 to 200
    2d_circle x%,y%,30
  next y%
next x%
end_sub

Le résultat est celui que je souhaite, mais c'est terriblement inefficace. Cela produit par écrasements successifs de cercles à répétition. Et comment faire pour des ellipses ?

Non. Il doit y avoir in moyen de tracer 2 ellipses ou cercles, décalés de dx pixels vers la droite et de dy pixels vers le haut, et de déterminer les segments de droites (segments de tangentes, en fait !) qui permettent de relier les deux, afin de produire l'effet visuel de 3D.

EDIT

Je précise qu'au départ, on connaît le rectangle englobant l'ellipse, sous forme des coordonnées du coin en haut à gauche et de la largeur et hauteur du rectangle englobant l'ellipse, donc 2a et 2b, si a et b sont les deux "rayons" de l'ellipse.

EDIT bis

J'ai trouvé une formule qui donne les équations des deux tangentes possibles à une ellipse, avec une pente p donnée (en fait, des tangentes parallèles à une droite quelconque, dont on ne retient que la pente p):
y = p*x + sqr(a²*p²-b²)   et   y = p*x - sqr(a²*p²-b²)
Mais il reste deux points à résoudre:
- mon ellipse n'est pas normalisé autour de 0, donc elle a une équation générale de
(x-u)²/a² + (y-v)²/b² = 1
- comment trouver maintenant points de contact entre les deux tangentes et les deux ellipses, celle de base et une autre décalée de n pixels vers la droite et vers le haut, selon la pente p (pour un angle entre 0° et 90°, limites exclues) ? Etant donné que l'axe y est descendant de 0 en haut vers +n en bas, la pente est forcément négative pour produire un dessin comme celui ci-dessus.
Là, je sèche.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mer 23 Mar 2016 - 20:07

Salut Klaus

J’ai bien compris le problème.
• Tracer deux ellipses (ou cercles) , décalés de dx pixels vers la droite et de dy pixels vers le haut, : ça c’est facile
• Il est parfaitement simple de déterminer les deux équations des deux tangentes communes aux deux ellipses connaissant leur pente P
• La pente est la même que celle de la droite qui relie les deux centres des ellipses : très facile à déterminer.
• Il n’est pas nécessaire de déterminer les points de tangence (point de contact) entre les tangentes et les ellipses, puisqu’il est simple de déterminer les équations des tangentes sous forme : y =px + q
• Il suffit de tracer ces deux tangentes.
• Eventuellement « nettoyer » le dessin : effacer tout ce qui est superflu.


J’ai ma petite idée pour faire ça.
D’ailleurs, j’ai commencé le codage, mais on m’appelle à des choses vraiment sérieuses : ma petite fille fête aujourd’hui  son anniversaire.
Et je suis très faible devant mes petits-enfants.
Je posterai ma solution tard dans la soirée, après que la fête se termine et que tout le monde fait dodo.
A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Mer 23 Mar 2016 - 22:30

Comme promis, voici ce que je propose.
Le code est suffisamment documenté et assez clair.
S’il répond à tes besoins, tu peux bien sûr l’adapter à ta guise.

Code:

rem ============================================================================
rem          Tuyau Pour Klaus
rem            Par Papydall
rem     Tracé d une portion de tuyau
rem ============================================================================
rem Essayer avec différentes formes en jouant sur les variables a et b
rem a et b sont respectivement le demi-axe majeur (rayon horizontal) et demi-axe
rem mineur (rayon vertical)
rem Si a = b : l ellipse est un cercle
rem Si a > b : ellipse large
rem Si a < b : ellipse haute

rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
' Initialisations
dim a,b,echelle,x1,y1,x2,y2,dx,dy,r1,r2,pente,q
dim pi2,p
pi2 = 2*pi : p = pi/180 : ' on travaille en radians
echelle = 30  : ' nombre de pixels pour une unité sur les axes (à modifier selon besoin)
a = 3 : b = 2 : ' demi-axe majeur (rayon horizontal) et demi-axe mineur (rayon vertical)
r1 = a*echelle  : r2 = b*echelle  : ' Rayons en pixels
x1 = 05*echelle : y1 = 10*echelle : ' coordonnées du centre de la 1ère ellipse
dx = 10*echelle : dy = -5*echelle : ' Déplacement X et Y pour le centre de 2ème ellipse
x2 = x1 + dx    :  y2 = y1 + dy   : ' coordonnées du centre de la 2ème ellipse

rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
' Tracé
Ellipse(x1,y1,r1,r2) : ' tracer la 1ère ellipse
Ellipse(x2,y2,r1,r2) : ' tracer la 2ème ellipse
Determiner_Pente(x1,y1,x2,y2) : ' calculer la pente de la tangente commune aux deux ellipses
Equation_De_La_Tengente(r1,r2,pente) : ' Déterminer les équations  de deux tangentes
Nettoyer_Dessin()  : ' Effacer tout ce qui est superflu
end
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================
' Tracer une ellipse
' Paramètres :
' xc,yc : coordonnées du centre de l'ellipse
' r1 et r2 demi-axe horizontal et demi-axe vertical
SUB Ellipse(xc,yc,r1,r2)
    dim_local a,x,y
    2d_poly_from xc+r1,yc
    for a = 0 to pi2 step p
        x = r1*cos(a) : y = r2*sin(a) : 2d_poly_to xc+x,yc+y
    next a
END_SUB
rem ============================================================================
' Déterminer les 2 tangentes à l'ellipse en fonction de la pente d'une droite donnée
' Paramètres d'entrée :
' r1 et r2 sont respectivement le rayon horizontal et le rayon vertical de l'ellipse
' p désigne la pente d'une droite
' Paramètres de sortie :
' tangente_1 et tangente_2 : les deux équations des deux tangentes à l'ellipse dont la pente est p

SUB Equation_De_La_Tengente(r1,r2,pente)
    dim_local radical
    radical = r1 * r1 * pente * pente + r2 * r2
    q = sqr(radical)/echelle
    
' Les équations de deux tangentes sont:
' tangente_1 : y = pente * x + q
' tangente_2 : y = pente * x - q
    
    Tracer_Tangentes(pente,q) : ' On demande le tracé des deux tangentes

END_SUB
rem ============================================================================
' Paramètres d'entrée :
' x1,y1 : coordonnées du centre de l'ellipse 1
' x2,y2 : coordonnées du centre de l'ellipse 2
' Les deux tangentes ont la même pente puisqu'elles sont parallèles, et elles
' sont également parallèles à la droite joignant les deux centres des ellipses,
' donc la pente cherchée est celle de droite reliant les deux centres
' Paramètre de sortie :
' p : pente de la droite reliant les deux centres des ellipses
SUB Determiner_Pente(x1,y1,x2,y2)
    dim_local infini
    infini = power(10,10) : ' valeur arbitraire pour l'infini
    if x2 = x1
       pente = infini : ' tangente veticale dont la pente est égale à l'infini
    else
       pente = (y1-y2) / (x2-x1)
    end_if
END_SUB
rem ============================================================================
' Les équations de deux tangentes sont
' tangente_1 : y = p*x + q
' tangente_2 : y = p*x - q
SUB Tracer_Tangentes(p,q)
    dim_local x,y,xp1,xp2,yp1,yp2,a,b
    a = p*echelle : b = q*echelle

' Tracer la 1ère tangente
  ' On choisit arbitrairement deux valeurs de X pour le tracé de la tangente
    x = -10 : xp1 = x1+x*echelle : y = a*x + b : yp1 = y1-y
    x =  15 : xp2 = x1+x*echelle : y = a*x + b : yp2 = y1-y
    2d_line xp1,yp1,xp2,yp2
' Tracer la 2ème tangente
    ' On choisit arbitrairement deux valeurs de X pour le tracé de la tangente
    x = -10 : xp1 = x1+x*echelle : y = a*x - b : yp1 = y1-y
    x =  15 : xp2 = x1+x*echelle : y = a*x - b : yp2 = y1-y
    2d_line xp1,yp1,xp2,yp2

END_SUB
rem ============================================================================
SUB Nettoyer_Dessin()
    message "On va nettoyer ce dessin"
    2d_flood x1,y1,255,255,0 : 2d_flood x2,y2,255,0,0
    2d_flood x1+dx/2,y1+dy/2,255,0,0
    2d_pen_color 255,000,000 : Ellipse(x2,y2,r1,r2)
    2d_pen_color 255,255,000 : Ellipse(x1,y1,r1,r2)
    2d_pen_color 240,240,240 : Tracer_Tangentes(pente,q)
END_SUB
rem ============================================================================
rem &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
rem ============================================================================

Je retourne à mon  boulot de Papy.
Le boulot est dur, mais j’adore !

A+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Jeu 24 Mar 2016 - 1:06

Le rendu est exactement ce que je voulais obtenir. Merci infiniment, Papydall. Maintenant, il faut que le plonge dans le code pour en comprendre le fonctionnement, et puis le transformer en Delphi afin de l'intégrer dans la DLL...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Jeu 24 Mar 2016 - 2:06

Tu me rassures Klaus.
Merci.
J’ai du solliciter mes souvenirs et connaissances mathématiques acquises depuis très longtemps.
Ça m’a fait  beaucoup de plaisir de constater que la mécanique n’est pas si rouillée que je ne le craignais.

Toi-même, tu fais beaucoup de choses qui profitent à tout le monde.
Bonne continuation !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Jeu 24 Mar 2016 - 13:41

En attendant de finit l'iintégration des "tuyaux", j'ai réalisé l'affichage de textes sous forme de matrices de LEDs. Il y a une nouvelle version de KGF_prerelease.dll sur le WebDav, et voici le programme de démo avec cette fonction:
Code:
' test_KGraphic.bas

label creer, supprimer
label form1, form2, form3, form4, form5, form6, form7
label sauver1, sauver2, sauver3, charger3, cacher, mode3d

dim res%, KG%, bmp$, jpg$, v%, m3d%, txt$
v% = 1

dll_on "KGF_prerelease.dll"
width 0,800 : height 0,600
panel 1 : top 1,10 : left 1,20 : width 1,500 : height 1,300
color 1,127,255,255
dlist 2
  item_add 2,"5,5"
  item_add 2,"35,235"
  item_add 2,"350,18"
  item_add 2,"90,140"
dlist 3
  item_add 3,"10,220"
  item_add 3,"70,40"
  item_add 3,"130,200"
  item_add 3,"200,120"
  item_add 3,"270,160"
  item_add 3,"340,80"

button 11 : top 11,10 : left 11,550 : width 11,120 : caption 11,"Créer KGraphic"
  on_click 11,creer
button 12 : top 12,40 : left 12,550 : width 12,120 : caption 12,"Supprimer KGraphic"
  on_click 12,supprimer
button 13 : top 13,70 : left 13,570 : width 13,170 : caption 13,"Rectangle rouge bord noir"
  on_click 13,form1
button 14 : top 14,100 : left 14,570 : width 14,170 : caption 14,"Rectangle bleu arrondi bord jaune"
  on_click 14,form2
button 15 : top 15,130 : left 15,570 : width 15,170 : caption 15,"Oval violet bord noir"
  on_click 15,form3
button 16 : top 16,160 : left 16,570 : width 16,170 : caption 16,"Rectangle transparent bord noir"
  on_click 16,form4
button 17 : top 17,190 : left 17,570 : width 17,170 : caption 17,"Polygone jaune"
  on_click 17,form5
button 24 : top 24,220 : left 24,570 : width 24,170 : caption 24,"Histogramme bleu"
  on_click 24,form6
button 25 : top 25,250 : left 25,570 : width 25,170 : caption 25,"Texte LED"
  on_click 25,form7

button 18 : top 18,280 : left 18,550 : width 18,120 : caption 18,"Copier -> presse-papier"
  on_click 18,sauver1
button 19 : top 19,310 : left 19,550 : width 19,120 : caption 19,"Copier -> BMP"
  on_click 19,sauver2
button 20 : top 20,340 : left 20,550 : width 20,120 : caption 20,"Copier -> JPG"
  on_click 20,sauver3
button 21 : top 21,370 : left 21,550 : width 21,120 : caption 21,"Charger JPG"
  on_click 21,charger3
button 22 : top 22,400 : left 22,550 : width 22,120 : caption 22,"Cacher/Montrer"
  on_click 22,cacher
button 23 : top 23,430 : left 23,550 : width 23,120 : caption 23,"3D/2D"
  on_click 23,mode3d

alpha 31 : top 31,350 : left 31,10 : font_size 31,16 : font_bold 31
  caption 31,"Taper ctrl/Z pour annuler une étape..."
 
end

creer:
  if KG%<>0
    message "Cet objet existe déjà"
    return
  end_if
  KG% = dll_call6("CreateKGraphic",handle(1),20,20,400,250,0)
  return

supprimer:
  KG% = dll_call1("DeleteKGraphic",KG%)
  if KG%<0
    message "Erreur"
    KG% = 0
  end_if
  return
 
form1:
  if KG%=0
    message "KGraphic inexistant"
    return
  end_if
  res% = dll_call4("SetKGraphicPen",KG%,0,3,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255)
  res% = dll_call5("DrawKGrapicShape",KG%,0,20*65536+30,320*65536+180,0)
  return
 
form2:
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256+255)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,1,10*65536+90,280*65536+150,30*65536+20)
  return
 
form3:
  res% = dll_call4("SetKGraphicPen",KG%,0,5,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,2,80*65536+50,120*65536+180,0)
  return
 
form4:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,0)
  res% = dll_call5("DrawKGrapicShape",KG%,3,190*65536+140,120*65536+60,0)
  return
 
form5:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,255*256+255)
  res% = dll_call3("DrawKGraphicPolygon",KG%,1,object_internal(2))
  return
 
form6:
  res% = dll_call4("SetKGraphicPen",KG%,0,1,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
'  res% = dll_call4("KGraphicFunction",KG%,9,30,50) : ' 30°, profondeur 50 pixels (par défaut)  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  return
 
form7:
  res% = dll_call4("KGraphicFunction",KG%,10,0,0)
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256+255)
  txt$ = "Klaus"
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,6,1)
  return

sauver1:
  res% = dll_call3("SaveKGraphicImage",KG%,0,0)
  return
 
sauver2:
  bmp$ = "KGraphic.bmp"
  res% = dll_call3("SaveKGraphicImage",KG%,1,adr(bmp$))
  return
 
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  return

charger3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return

cacher:
  v% = 1 - v%
  res% = dll_call4("KGraphicFunction",KG%,7,v%,0)
  return
 
mode3d:
  m3d% = 1 - m3d%
  res% = dll_call4("KGraphicFunction",KG%,8,m3d%,0)
  return


Le texte affiché est "Klaus" en italique (3ème paramètre de la fonction DrawKGraphicTextAsLED). Il y a les majuscules et minuscules, les lettres accentuées, les chiffres et signes de ponctuation ainsi que les principaux caractères spéciaux. C'est une police de mon cru, établie selon des images trouvées sur le net. J'ai placé dans le dossier DLLs un programme Afficheur.exe (écrit en Delphi) qui permet de charger la police (elle s'appelle klaus.kpl), d'afficher un caractère selon son code ASCII ou le caractère lui-même, de modifier le dessin, de l'enregistrer et de réécrire la police. Le programme de démo utilise la police telle qu'elle est enregistrée dans KGF_prerelease.dll comme ressource (KGraphicFunction code 10). Mais avec cet utilitaire, on peut modifier la police et l'enregistrer sous un autre nom, et spécifier ce nom dans la fonction DrawKGraphicTextAsLED. Le fichier actuel klaus.kpl est également dans le dossier DLLs, bien qu'il soit extrait automatiquement de KGF_prerelease.dll au premier lancement de la fonction d'impression du texte.

Voici le rendu, pour un diamètre de points de 6 pixels et un écart entre points de 1 pixel, en italique:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Ouf_ca_passe

avatar

Nombre de messages : 191
Age : 68
Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France
Date d'inscription : 21/12/2015

MessageSujet: SYNEDIT   Jeu 24 Mar 2016 - 14:06

Bonjour les PANORAMICIEN(NE)S

Je ne sais pas si SYNEDIT a quelque chose à voir avec KGF.dll (objet de ce fil de discussion).
Je n'en suis pas encore arrivé-là de ma compréhension
mais je n'ai jamais réussi à installer SYNEDIT sur mon ordi.
Encore ce matin, il arrête l'installation avec une violation.

Suis-je seul à qui cela arrive ?
Je travaille (c'est beaucoup dire) sur Windows 10, en résolution full HD,
Processeur Intel Core i7 3630QM

Merci d'avance pour vos réponses
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Jeu 24 Mar 2016 - 17:59

@Ouf_ca_passe

Pour le moment laisse tomber SYNEDIT (il n'est pas pour les débutants  Laughing ), et utilise PANORAMIC_EDITOR  I love you

@Klaus

Serait-il possible d'écrire le texte sur plusieurs lignes?
Comme ceci :

Salut
Klaus
Bye Bye


Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Jeu 24 Mar 2016 - 18:11

A propos de rectangles à coins arrondis, je te remets une sub qui sait bien arrondir les angles.


Code:

rem ============================================================================
rem               Superellipse
rem             Equation de Lamé
rem               Par Papydall
rem  Pour tracer des rectangles à coins arrondis
rem ============================================================================
rem Les courbes de Lamé (ou superellipses) sont définies par leur équation cartésienne
rem sous la forme :
rem           ____________________________________
rem          |                                    |
rem          |   (abs(x/a))^n + (abs(y/b))^n = 1  |
rem          |____________________________________|
rem
rem Pour le tracé de ces types de fonctions, on utilise plutôt la forme paramétrique
rem beaucoup plus facile à manipuler:
rem
rem          _________________________________
rem         |                                 |
rem         |      x(t) = ± a*(cos(t)^2/n     |
rem         |      y(t) = ± a*(sin(t)^2/n     |
rem         |_________________________________|
rem
rem avec t : angle en radian variant entre 0 à 2*pi radians avec un pas de pi/180
rem ou   t : angle en degré  variant entre 0 à 360 degrés avec un pas de 1
rem Dans la sub ci-dessus, elle se présente sous la forme Panoramicienne :

rem       _____________________________________________
rem      |                                             |
rem      |  x = r*a*power(abs(cos(t)),2/n)*sgn(cos(t)) |
rem      |  y = r*b*power(abs(sin(t)),2/n)*sgn(sin(t)) |
rem      |_____________________________________________|
rem
rem ============================================================================
dim x,y,xc,yc,n,pas

pas = pi/180
xc = width(0)/2 : yc = height(0)/2 -20 : ' Coordonnées du centre du tracé
2d_pen_width 2             : ' modifier l'épaisseur du tracé

   Superellipse(1,1,10,100)   : ' <=== supercercle qui tend vers un carré
        pause 1000 : cls
   Superellipse(0.5,1,10,200) : ' <=== superellipse haute qui tend vers un rectangle haut
        pause 1000 : cls
   Superellipse(1,.5,20,200)  : ' <=== superellipse large qui tend vers un rectangle large
end
rem ============================================================================
' a et b : paramètres agissant respectivement sur les rayons horizontal et vertical
' Si a = b : c'est un supercercle
' Si a > b : c'est une superellipse large
' Si a < b : c'est une superellipse haute
' Pour des grandes valeurs de n ça tend vers le rectangle/carré

SUB Superellipse(a,b,n,r)
    dim_local t
    2d_poly_from xc+r*a,yc : ' coordonnées du début du tracé
' Le tracé proprement dit
    for t = 0 to 2*pi + pas  step pas
        x = r*a*power(abs(cos(t)),2/n)*sgn(cos(t))
        y = r*b*power(abs(sin(t)),2/n)*sgn(sin(t))
        2d_poly_to xc + x,yc + y
    next t
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Jeu 24 Mar 2016 - 18:53

J'ai pris notre de la super-ellipse, et je t'en remercie.

Pour le texte multi-ligne, c'était très simple: ajout d'un code fonction 11 à KGraphicFunction, par lequel on spécifie les coordonnées du point de départ d'impression. Voici le résultat:


Et voici le code adapté:
Code:
' test_KGraphic.bas

label creer, supprimer
label form1, form2, form3, form4, form5, form6, form7
label sauver1, sauver2, sauver3, charger3, cacher, mode3d

dim res%, KG%, bmp$, jpg$, v%, m3d%, txt$
v% = 1

dll_on "KGF_prerelease.dll"
width 0,800 : height 0,600
panel 1 : top 1,10 : left 1,20 : width 1,500 : height 1,300
color 1,127,255,255
dlist 2
  item_add 2,"5,5"
  item_add 2,"35,235"
  item_add 2,"350,18"
  item_add 2,"90,140"
dlist 3
  item_add 3,"10,220"
  item_add 3,"70,40"
  item_add 3,"130,200"
  item_add 3,"200,120"
  item_add 3,"270,160"
  item_add 3,"340,80"

button 11 : top 11,10 : left 11,550 : width 11,120 : caption 11,"Créer KGraphic"
  on_click 11,creer
button 12 : top 12,40 : left 12,550 : width 12,120 : caption 12,"Supprimer KGraphic"
  on_click 12,supprimer
button 13 : top 13,70 : left 13,570 : width 13,170 : caption 13,"Rectangle rouge bord noir"
  on_click 13,form1
button 14 : top 14,100 : left 14,570 : width 14,170 : caption 14,"Rectangle bleu arrondi bord jaune"
  on_click 14,form2
button 15 : top 15,130 : left 15,570 : width 15,170 : caption 15,"Oval violet bord noir"
  on_click 15,form3
button 16 : top 16,160 : left 16,570 : width 16,170 : caption 16,"Rectangle transparent bord noir"
  on_click 16,form4
button 17 : top 17,190 : left 17,570 : width 17,170 : caption 17,"Polygone jaune"
  on_click 17,form5
button 24 : top 24,220 : left 24,570 : width 24,170 : caption 24,"Histogramme bleu"
  on_click 24,form6
button 25 : top 25,250 : left 25,570 : width 25,170 : caption 25,"Texte LED"
  on_click 25,form7

button 18 : top 18,280 : left 18,550 : width 18,120 : caption 18,"Copier -> presse-papier"
  on_click 18,sauver1
button 19 : top 19,310 : left 19,550 : width 19,120 : caption 19,"Copier -> BMP"
  on_click 19,sauver2
button 20 : top 20,340 : left 20,550 : width 20,120 : caption 20,"Copier -> JPG"
  on_click 20,sauver3
button 21 : top 21,370 : left 21,550 : width 21,120 : caption 21,"Charger JPG"
  on_click 21,charger3
button 22 : top 22,400 : left 22,550 : width 22,120 : caption 22,"Cacher/Montrer"
  on_click 22,cacher
button 23 : top 23,430 : left 23,550 : width 23,120 : caption 23,"3D/2D"
  on_click 23,mode3d

alpha 31 : top 31,350 : left 31,10 : font_size 31,16 : font_bold 31
  caption 31,"Taper ctrl/Z pour annuler une étape..."
  
end

creer:
  if KG%<>0
    message "Cet objet existe déjà"
    return
  end_if
  KG% = dll_call6("CreateKGraphic",handle(1),20,20,400,250,0)
  return

supprimer:
  KG% = dll_call1("DeleteKGraphic",KG%)
  if KG%<0
    message "Erreur"
    KG% = 0
  end_if
  return
  
form1:
  if KG%=0
    message "KGraphic inexistant"
    return
  end_if
  res% = dll_call4("SetKGraphicPen",KG%,0,3,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255)
  res% = dll_call5("DrawKGrapicShape",KG%,0,20*65536+30,320*65536+180,0)
  return
  
form2:
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256+255)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,1,10*65536+90,280*65536+150,30*65536+20)
  return
  
form3:
  res% = dll_call4("SetKGraphicPen",KG%,0,5,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,2,80*65536+50,120*65536+180,0)
  return
  
form4:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,0)
  res% = dll_call5("DrawKGrapicShape",KG%,3,190*65536+140,120*65536+60,0)
  return
  
form5:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,255*256+255)
  res% = dll_call3("DrawKGraphicPolygon",KG%,1,object_internal(2))
  return
  
form6:
  res% = dll_call4("SetKGraphicPen",KG%,0,1,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
'   res% = dll_call4("KGraphicFunction",KG%,9,30,50) : ' 30°, profondeur 50 pixels (par défaut)  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  return
  
form7:
  res% = dll_call4("KGraphicFunction",KG%,10,0,0)
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256+255)
  txt$ = "Salut"
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,6,1)
  txt$ = "Klaus"
  res% = dll_call4("KGraphicFunction",KG%,11,0,60)
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,6,1)
  return

sauver1:
  res% = dll_call3("SaveKGraphicImage",KG%,0,0)
  return
  
sauver2:
  bmp$ = "KGraphic.bmp"
  res% = dll_call3("SaveKGraphicImage",KG%,1,adr(bmp$))
  return
  
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  return

charger3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return

cacher:
  v% = 1 - v%
  res% = dll_call4("KGraphicFunction",KG%,7,v%,0)
  return
  
mode3d:
  m3d% = 1 - m3d%
  res% = dll_call4("KGraphicFunction",KG%,8,m3d%,0)
  return


EDIT

Je rappelle qu'on peut créer autant d'objets KGraphic que nécessaire. Il suffit d'avoir des variables KG...% différentes.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Sam 26 Mar 2016 - 12:37

Nouvelle version.

On peut maintenant activer/désactiver la gestion du retour en arrière par ctrl/Z, ainsi qu'effacer l'historique des retours en arrière. La nouvelle version KGF_prerelease.dll est sur le WebDav, dossier DLLs.

Voici le programme de démo. Créer l'objet KGraphic, puis choisir "Texte LED". Une horloge avec date heure s'affiche. Cliquez plusieurs fois. Puis, faites quelques autres graphismes qui vont se superposer. Puis plusieurs fois ctrl/Z: on revient progressivement en arrière, jusqu'à la dernière horloge affichée, et ça s'arrête.
Code:
' test_KGraphic.bas

label creer, supprimer
label form1, form2, form3, form4, form5, form6, form7
label sauver1, sauver2, sauver3, charger3, cacher, mode3d

dim res%, KG%, bmp$, jpg$, v%, m3d%, txt$
v% = 1

dll_on "KGF.dll"
width 0,1000 : height 0,600
panel 1 : top 1,10 : left 1,20 : width 1,700 : height 1,300
color 1,127,255,255
dlist 2
  item_add 2,"5,5"
  item_add 2,"35,235"
  item_add 2,"350,18"
  item_add 2,"90,140"
dlist 3
  item_add 3,"10,220"
  item_add 3,"70,40"
  item_add 3,"130,200"
  item_add 3,"200,120"
  item_add 3,"270,160"
  item_add 3,"340,80"

button 11 : top 11,10 : left 11,750 : width 11,120 : caption 11,"Créer KGraphic"
  on_click 11,creer
button 12 : top 12,40 : left 12,750 : width 12,120 : caption 12,"Supprimer KGraphic"
  on_click 12,supprimer
button 13 : top 13,70 : left 13,770 : width 13,170 : caption 13,"Rectangle rouge bord noir"
  on_click 13,form1
button 14 : top 14,100 : left 14,770 : width 14,170 : caption 14,"Rectangle bleu arrondi bord jaune"
  on_click 14,form2
button 15 : top 15,130 : left 15,770 : width 15,170 : caption 15,"Oval violet bord noir"
  on_click 15,form3
button 16 : top 16,160 : left 16,770 : width 16,170 : caption 16,"Rectangle transparent bord noir"
  on_click 16,form4
button 17 : top 17,190 : left 17,770 : width 17,170 : caption 17,"Polygone jaune"
  on_click 17,form5
button 24 : top 24,220 : left 24,770 : width 24,170 : caption 24,"Histogramme bleu"
  on_click 24,form6
button 25 : top 25,250 : left 25,770 : width 25,170 : caption 25,"Texte LED"
  on_click 25,form7

button 18 : top 18,280 : left 18,750 : width 18,120 : caption 18,"Copier -> presse-papier"
  on_click 18,sauver1
button 19 : top 19,310 : left 19,750 : width 19,120 : caption 19,"Copier -> BMP"
  on_click 19,sauver2
button 20 : top 20,340 : left 20,750 : width 20,120 : caption 20,"Copier -> JPG"
  on_click 20,sauver3
button 21 : top 21,370 : left 21,750 : width 21,120 : caption 21,"Charger JPG"
  on_click 21,charger3
button 22 : top 22,400 : left 22,750 : width 22,120 : caption 22,"Cacher/Montrer"
  on_click 22,cacher
button 23 : top 23,430 : left 23,750 : width 23,120 : caption 23,"3D/2D"
  on_click 23,mode3d

alpha 31 : top 31,350 : left 31,10 : font_size 31,16 : font_bold 31
  caption 31,"Taper ctrl/Z pour annuler une étape..."
  
end

creer:
  if KG%<>0
    message "Cet objet existe déjà"
    return
  end_if
  KG% = dll_call6("CreateKGraphic",handle(1),20,20,650,250,0)
  return

supprimer:
  KG% = dll_call1("DeleteKGraphic",KG%)
  if KG%<0
    message "Erreur"
    KG% = 0
  end_if
  return
  
form1:
  if KG%=0
    message "KGraphic inexistant"
    return
  end_if
  res% = dll_call4("SetKGraphicPen",KG%,0,3,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255)
  res% = dll_call5("DrawKGrapicShape",KG%,0,20*65536+30,320*65536+180,0)
  return
  
form2:
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256+255)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,1,10*65536+90,280*65536+150,30*65536+20)
  return
  
form3:
  res% = dll_call4("SetKGraphicPen",KG%,0,5,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,2,80*65536+50,120*65536+180,0)
  return
  
form4:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,0)
  res% = dll_call5("DrawKGrapicShape",KG%,3,190*65536+140,120*65536+60,0)
  return
  
form5:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,255*256+255)
  res% = dll_call3("DrawKGraphicPolygon",KG%,1,object_internal(2))
  return
  
form6:
  res% = dll_call4("SetKGraphicPen",KG%,0,1,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
'   res% = dll_call4("KGraphicFunction",KG%,9,30,50) : ' 30°, profondeur 50 pixels (par défaut)  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  return
  
form7:
  res% = dll_call4("KGraphicFunction",KG%,10,0,0)
  res% = dll_call4("KGraphicFunction",KG%,11,0,0)
  res% = dll_call4("KGraphicFunction",KG%,12,0,0)
   res% = dll_call4("KGraphicFunction",KG%,13,0,1)   : ' interdire le ctrl/z, effacer historique !
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256+255)
  txt$ = time$
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,6,1)
  txt$ = date$
  res% = dll_call4("KGraphicFunction",KG%,11,40,60)
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,4,1)
   res% = dll_call4("KGraphicFunction",KG%,13,1,1)   : ' autoriser le ctrl/z, effacer historique !
  return

sauver1:
  res% = dll_call3("SaveKGraphicImage",KG%,0,0)
  return
  
sauver2:
  bmp$ = "KGraphic.bmp"
  res% = dll_call3("SaveKGraphicImage",KG%,1,adr(bmp$))
  return
  
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  return

charger3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return

cacher:
  v% = 1 - v%
  res% = dll_call4("KGraphicFunction",KG%,7,v%,0)
  return
  
mode3d:
  m3d% = 1 - m3d%
  res% = dll_call4("KGraphicFunction",KG%,8,m3d%,0)
  return


Voici le résultat:
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Laurent (Minibug)

avatar

Nombre de messages : 2353
Age : 50
Localisation : Vienne (86)
Date d'inscription : 10/02/2012

MessageSujet: Re: KGF_prerelease   Dim 27 Mar 2016 - 1:11

Ça semble intéressant toutes ses options graphiques...
Il faudrait qu'un de ces jours je prenne le temps de regarder ! Wink

Si tu continu comme cela Klaus, tu vas nous faire un Photoshop bis Laughing Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: KGF_prerelease   Dim 27 Mar 2016 - 3:51

Tu peux même obtenir:


avec ce code:
Code:
' test_KGraphic.bas

label creer, supprimer
label form1, form2, form3, form4, form5, form6, form7
label sauver1, sauver2, sauver3, charger3, cacher, mode3d

dim res%, KG%, bmp$, jpg$, v%, m3d%, txt$
v% = 1

dll_on "KGF.dll"
width 0,1000 : height 0,600
panel 1 : top 1,10 : left 1,20 : width 1,700 : height 1,300
color 1,127,255,255
dlist 2
  item_add 2,"5,5"
  item_add 2,"35,235"
  item_add 2,"350,18"
  item_add 2,"90,140"
dlist 3
  item_add 3,"10,220"
  item_add 3,"70,40"
  item_add 3,"130,200"
  item_add 3,"200,120"
  item_add 3,"270,160"
  item_add 3,"340,80"

button 11 : top 11,10 : left 11,750 : width 11,120 : caption 11,"Créer KGraphic"
  on_click 11,creer
button 12 : top 12,40 : left 12,750 : width 12,120 : caption 12,"Supprimer KGraphic"
  on_click 12,supprimer
button 13 : top 13,70 : left 13,770 : width 13,170 : caption 13,"Rectangle rouge bord noir"
  on_click 13,form1
button 14 : top 14,100 : left 14,770 : width 14,170 : caption 14,"Rectangle bleu arrondi bord jaune"
  on_click 14,form2
button 15 : top 15,130 : left 15,770 : width 15,170 : caption 15,"Oval violet bord noir"
  on_click 15,form3
button 16 : top 16,160 : left 16,770 : width 16,170 : caption 16,"Rectangle transparent bord noir"
  on_click 16,form4
button 17 : top 17,190 : left 17,770 : width 17,170 : caption 17,"Polygone jaune"
  on_click 17,form5
button 24 : top 24,220 : left 24,770 : width 24,170 : caption 24,"Histogramme bleu"
  on_click 24,form6
button 25 : top 25,250 : left 25,770 : width 25,170 : caption 25,"Texte LED"
  on_click 25,form7

button 18 : top 18,280 : left 18,750 : width 18,120 : caption 18,"Copier -> presse-papier"
  on_click 18,sauver1
button 19 : top 19,310 : left 19,750 : width 19,120 : caption 19,"Copier -> BMP"
  on_click 19,sauver2
button 20 : top 20,340 : left 20,750 : width 20,120 : caption 20,"Copier -> JPG"
  on_click 20,sauver3
button 21 : top 21,370 : left 21,750 : width 21,120 : caption 21,"Charger JPG"
  on_click 21,charger3
button 22 : top 22,400 : left 22,750 : width 22,120 : caption 22,"Cacher/Montrer"
  on_click 22,cacher
button 23 : top 23,430 : left 23,750 : width 23,120 : caption 23,"3D/2D"
  on_click 23,mode3d

alpha 31 : top 31,350 : left 31,10 : font_size 31,16 : font_bold 31
  caption 31,"Taper ctrl/Z pour annuler une étape..."

open_dialog 41 : filter 41,"Image JPG|*.jpg"
 
end

creer:
  if KG%<>0
    message "Cet objet existe déjà"
    return
  end_if
  KG% = dll_call6("CreateKGraphic",handle(1),20,20,650,250,0)
  return

supprimer:
  KG% = dll_call1("DeleteKGraphic",KG%)
  if KG%<0
    message "Erreur"
    KG% = 0
  end_if
  return
 
form1:
  if KG%=0
    message "KGraphic inexistant"
    return
  end_if
  res% = dll_call4("SetKGraphicPen",KG%,0,3,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255)
  res% = dll_call5("DrawKGrapicShape",KG%,0,20*65536+30,320*65536+180,0)
  return
 
form2:
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256+255)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,1,10*65536+90,280*65536+150,30*65536+20)
  return
 
form3:
  res% = dll_call4("SetKGraphicPen",KG%,0,5,0)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
  res% = dll_call5("DrawKGrapicShape",KG%,2,80*65536+50,120*65536+180,0)
  return
 
form4:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,0)
  res% = dll_call5("DrawKGrapicShape",KG%,3,190*65536+140,120*65536+60,0)
  return
 
form5:
  res% = dll_call4("SetKGraphicPen",KG%,0,2,255*256+255)
  res% = dll_call3("DrawKGraphicPolygon",KG%,1,object_internal(2))
  return
 
form6:
  res% = dll_call4("SetKGraphicPen",KG%,0,1,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,127*256*256)
'  res% = dll_call4("KGraphicFunction",KG%,9,30,50) : ' 30°, profondeur 50 pixels (par défaut)  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  res% = dll_call3("DrawKGraphicPolygon",KG%,0,object_internal(3))
  return
 
form7:
  res% = dll_call4("KGraphicFunction",KG%,10,0,0)
  res% = dll_call4("KGraphicFunction",KG%,11,0,0)
'  res% = dll_call4("KGraphicFunction",KG%,12,0,0)
  res% = dll_call4("KGraphicFunction",KG%,13,0,1)  : ' interdire le ctrl/z, effacer historique !
  res% = dll_call4("SetKGraphicPen",KG%,0,3,255*256*256)
  res% = dll_call3("SetKGraphicBrush",KG%,0,255*256+255)
  txt$ = time$
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,6,1)
  txt$ = date$
  res% = dll_call4("KGraphicFunction",KG%,11,40,60)
  res% = dll_call5("DrawKGraphicTextAsLED",KG%,adr(txt$),1,4,1)
  res% = dll_call4("KGraphicFunction",KG%,13,1,1)  : ' autoriser le ctrl/z, effacer historique !
  return

sauver1:
  res% = dll_call3("SaveKGraphicImage",KG%,0,0)
  return
 
sauver2:
  bmp$ = "KGraphic.bmp"
  res% = dll_call3("SaveKGraphicImage",KG%,1,adr(bmp$))
  return
 
sauver3:
  jpg$ = "KGraphic.jpg"
  res% = dll_call3("SaveKGraphicImage",KG%,2,adr(jpg$))
  return

charger3:
  jpg$ = "KGraphic.jpg"
  jpg$ = file_name$(41)
  if jpg$="_" then return
  res% = dll_call3("LoadKGraphicImage",KG%,2,adr(jpg$))
  return

cacher:
  v% = 1 - v%
  res% = dll_call4("KGraphicFunction",KG%,7,v%,0)
  return
 
mode3d:
  m3d% = 1 - m3d%
  res% = dll_call4("KGraphicFunction",KG%,8,m3d%,0)
  return


J'ai ajouté un Open_Dialog sur le bouton "Charger JPG" et j'ai désactivé l'effacement total avant impression du texte LED.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

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

MessageSujet: Re: KGF_prerelease   Dim 27 Mar 2016 - 5:02

@Klaus
Une fois de plus, tu m’as eu avec la ligne 10
Code:
dll_on "KGF.dll"
Au lieu de
Code:
dll_on "KGF_prerelease.dll"

On revient toujours à son premier amour. I love you


Edit :
<CTRL> <Z> est inopérant sur Texte LED et sur Charger JPG


Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Jicehel

avatar

Nombre de messages : 5841
Age : 44
Localisation : 77500
Date d'inscription : 19/04/2011

MessageSujet: Re: KGF_prerelease   Dim 27 Mar 2016 - 10:34

En tout cas bravo Klaus.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: KGF_prerelease   

Revenir en haut Aller en bas
 
KGF_prerelease
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant

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: