PureBasic

Forums PureBasic
Nous sommes le Dim 25/Oct/2020 3:11

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 13 messages ] 
Auteur Message
 Sujet du message: Graph_Code
MessagePosté: Jeu 11/Juil/2019 12:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
bon j'ai finalement decidé de vous refiler mon petit gadget

Image



Rappel , il sert a voir surtout , les appels de procedures , (gros rectangle bleu a droite )

la zone Grise représente le listing
la zone rouge foncé représente l'emplacement de la boucle des events (s'il y en a une ..)
les petites zone bleues représente l'emplacement des procedures ...
les petites zone "carré" rose, représente l'emplacement des boucles For-Next
les petites zone "ligne" jaune-orange représente l'emplacement des IF-Endif ...

le but de ce Gadget, est surtout de voir les liens vers les procédures
si ça part de la zone Grise , ce sont des appels a partir du listing
si ça part d'une Procedure (Gros Rectangle BLeu) c'est que l'appel a lieu a partir de la procedure
un lien qui part d'une procedure, et qui y reviens, est typique d'un appel Recursif

bien sur plusieurs appels peuvent Partir ou arriver d'une procedure ....
les Procedures sans Liens ... sont des procedures qui ne sont pas utilisées....

Note : ne chargez pas de trop Gros listing .. il pourrai y avoir un bug d'affichage (chevauchements des liens sur les Bloc de procedures...
dans ce cas precis , il faut changer la ligne 621
Code:
Spr_procedure()\posx.l=600
qui donne la position X des blocs de procedures
en augmentant sa valeur ... il est actuellement reglé pour que la majorités des listing s'affichent comme il faut ...



voici le code :

Code:


;***********************************************
;Titre  :*graph_Code2
;Auteur  : Dobro
;Date  :10/07/2019
;Heure  :13:02:30
;Version Purebasic :  PureBasic 5.70 LTS (Windows - x86)
;Version de l'editeur :EPB PHOENIX V2.68
; Libairies necessaire : Aucune
;***********************************************



Enumeration
      #win
      #Panel
      #Cont
      #load
      #text_procedure
      #text_For
      #text_If
EndEnumeration

Enumeration
      ; ***** ces sprites n'utilisent qu'une seule images *****
      #Spr_attente
      #spr_listing
      #spr_boucle
      #spr_procedure_appel
      #spr_procedure_list
      #spr_procedure_appel_arr
      #spr_procedure_appel_arrd
      #spr_boucle_for
      #spr_boucle_next
      #spr_IF
      #spr_Endif
      
      ; ***********************************************
      #spr_procedure ; doit rester le dernier puisque le numero va augmenter en fonction du nombre de procedure et que l'image du sprite change (Texte)
EndEnumeration

Declare Button_action()
Declare.s Load()
Declare Dessine (listing.s)
Declare Cherche_mot(ligne.s,mot_a_chercher.s)


Global compteur_procedure,name_file.s, Flag_procedure

structure Spr_listing
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
      name.s
EndStructure
Global NewList Spr_listing.Spr_listing()
;
structure Spr_boucle
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
      name.s
EndStructure
Global  NewList Spr_boucle.Spr_boucle()

structure spr_procedure
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
      name.s
      name_par.s
      num_ligne_deb.i
      num_ligne_fin.i
EndStructure
Global NewList spr_procedure.spr_procedure()
;
structure spr_procedure_list
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
      name.s
      name_par.s
      num_ligne_deb.i
      num_ligne_fin.i
EndStructure
Global NewList spr_procedure_list.spr_procedure_list()
;

;
structure spr_procedure_appel
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
      name.s
      numero_ligne.l
      arrx.i ; les coordonées de la procedure pointé !!
      arry.i
      long1.i
      couleur_fil.i
      type.b ; determine l'image employé pour afficher l'entrée
      Entree.i
EndStructure
Global NewList spr_procedure_appel.spr_procedure_appel()


structure spr_procedure_appel_arr ; pour le sprite d'arrivé de la ligne
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
EndStructure
Global NewList spr_procedure_appel_arr.spr_procedure_appel_arr()
;

structure spr_boucle_for_next
num_sprite.l
posx.l
posy.l
hauteur.l
Largeur.l
couleur.l
name.s
num_ligne_deb.i
num_ligne_fin.i
decal_for.l
decal_next.l
EndStructure
Global NewList spr_boucle_for_next.spr_boucle_for_next()
;
structure spr_If
      num_sprite.l
      posx.l
      posy.l
      hauteur.l
      Largeur.l
      couleur.l
      name.s
      num_ligne_deb.i
      num_ligne_fin.i
      decal_if.l
      decal_endif.l
EndStructure
Global NewList spr_If.spr_If()

Structure Spr_attente
      posx.l
      posy.l
EndStructure
global NewList Spr_attente.Spr_attente()







;- Les couleurs
global couleur_fond=$0
global couleur_listing=Rgb(125,125,125)
global couleur_boucle=RGB(118,58,0)
global couleur_appel=RGB(255,255,0)
global couleur_entree=RGB(0,255,0)
global couleur_procedures=RGB(0,111,209)
Global  Flag_affichage=#false


Global Flag_creation_sprite_procedure_List=#false
Global Flag_creation_sprite_procedure_appel=#false
Global Flag_creation_sprite_Fleche_appel_arr=#false
Global Flag_creation_sprite_Fleche_appel_arrd=#false


;********** attention tout ceci existe aussi dans "LOAD" , pour initialiser une valeur, il faut allez dans "LOAD" ****************************************
Global Compteur_fil=15  ; determine l'ecartement horizontal du depart des lignes plus c'est grand, plus ça s'eloigne du listing (a gauche)
Global Compteur_fil2=15 ; determine l'ecartement horizontal du depart des lignes a partir des procedures (a droite )
Global compteur_1=8 ; determine l'ecartement entre les lignes horizontale  a gauche des procedures et aide a eloigner les procedures si beaucoups d'appels evite ainsi le chevauchement des sprites..
Global compteur_2=8 ; determine l'ecartement entre les lignes horizontale  a droite des procedures
; ****************************************************************************************************************************************

Global Compteur_de_for=0
Global Compteur_de_if=0



;- Ouverture de la fenètre et de l'écran
hwnd = OpenWindow(#win, 0, 0, 1024,800, "GraphCode  By Dobro      ",#PB_Window_TitleBar | #PB_Window_ScreenCentered|#PB_Window_SystemMenu  )

;- Initialisation de DirectX
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
      MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
      CloseWindow(#win) : End
EndIf
larg=8000
haut=8000
ButtonGadget(#load,10,760, 150,30,"Load")
BindGadgetEvent(#load, @Button_action())

TextGadget(#text_procedure, 200, 760,250, 30, "procedure")
TextGadget(#text_For, 200+250, 760,250, 30, "Nb de For")
TextGadget(#text_If, 200+500, 760,250, 30, "Nb de If")


ScrollAreaGadget(#Panel,10, 10,1010,750, larg,haut, 30)
hCont = ContainerGadget(#Cont,10,10,larg,haut,#PB_Container_Double)
OpenWindowedScreen(hCont,  0, 0,larg,haut, 0, 0,0)
CloseGadgetList()

CreateSprite(#Spr_attente,128,64)
If issprite(#Spr_attente)
      StartDrawing(SpriteOutput(#Spr_attente))
            BackColor(Rgb(255,255,255))
            DrawText(10,1, "Je dessine...", RGB(0, 0, 255))
      StopDrawing()
Endif




Procedure Button_action()
      listing.s=Load()
      dessine(listing.s)
EndProcedure

Dep = 8
;- début de la boucle
Repeat
      Select WaitWindowEvent(20)
      Case #PB_Event_Gadget     
            Select EventGadget()
                  ;Case #load
                  ;listing.s=Load()
                  
                  ;dessine(listing.s)
                  
            EndSelect
      Case #PB_Event_CloseWindow
            End
      EndSelect
      
      ; ***************************************************************************************************************
      ;-affichage
      
      
      ;-aff listing
      IF ListSize(spr_listing())
            If IsSprite(#spr_listing)
                  DisplaySprite (#spr_listing,spr_listing()\posx.l,spr_listing()\posy.l)
            Endif
      Endif
      
      ;-aff boucle
      If ListSize(Spr_boucle())
            If IsSprite(#Spr_boucle)
                  if ListSize(Spr_boucle())>0
                        DisplaySprite (#Spr_boucle,Spr_boucle()\posx.l,Spr_boucle()\posy.l)
                  Endif
            Endif
      Endif
      
      ;-aff boucle for
      
      If ListSize(spr_boucle_for_next()) >0
            If IsSprite(spr_boucle_for_next()\num_sprite.l) ;>2
                  ForEach spr_boucle_for_next();>3
                        DisplaySprite (spr_boucle_for_next()\num_sprite.l,spr_boucle_for_next()\posx.l,spr_boucle_for_next()\num_ligne_deb);>4
                  Next  ;>3
            Endif;>2
      ;
            If IsSprite(spr_boucle_for_next()\num_sprite.l) ;>2
                  ForEach spr_boucle_for_next();>3
                        DisplaySprite (spr_boucle_for_next()\num_sprite.l,spr_boucle_for_next()\posx.l,spr_boucle_for_next()\num_ligne_fin);>4
                  Next  ;>3
            Endif;>2
      Endif;>1
      
      ;-aff IF ENDIF
      If ListSize(spr_If()) >0
                  If IsSprite(spr_IF()\num_sprite.l) ;>2
                        ForEach spr_IF();>3
                              DisplaySprite (spr_IF()\num_sprite.l,spr_IF()\posx.l,spr_IF()\num_ligne_deb);>4
                        Next  ;>3
                  Endif;>2
            ;
                  If IsSprite(spr_IF()\num_sprite.l) ;>2
                        ForEach spr_IF();>3
                              DisplaySprite (spr_IF()\num_sprite.l,spr_IF()\posx.l,spr_IF()\num_ligne_fin);>4
                        Next  ;>3
                  Endif;>2
            Endif;>1
            
            
            
            ;-aff procedures
            IF ListSize(Spr_procedure())
                  If IsSprite(Spr_procedure()\num_sprite.l)
                        ForEach Spr_procedure()
                              DisplaySprite(Spr_procedure()\num_sprite.l,Spr_Procedure()\posx.l,Spr_Procedure()\posy.l)
                        Next
                  Endif
            Endif
            ;-aff procedures_list
            IF ListSize(Spr_procedure_list())
                  If IsSprite(Spr_procedure_list()\num_sprite.l)
                        ForEach Spr_procedure_list()
                              DisplaySprite(Spr_procedure_list()\num_sprite.l,Spr_Procedure_list()\posx.l,Spr_Procedure_list()\posy.l)
                        Next
                  Endif
            Endif
            ;RandomSeed(13)
            
            ;-aff les Appels des procedures et les Arrivée ainsi que la ligne
            IF ListSize(Spr_procedure_appel())
                  If IsSprite(Spr_procedure_appel()\num_sprite.l)
                        
                        ForEach Spr_procedure_appel()
                              Foreach spr_procedure()
                                    
                                    ;{ **************Event Gadget suplementaire pour eviter le Freeze*************
                                    Select WaitWindowEvent(20)
                                    Case #PB_Event_Gadget     
                                          Select EventGadget()
                                          EndSelect
                                    Case #PB_Event_CloseWindow
                                          End
                                    EndSelect
                                    
                                    ;}
                                    ;- affiche le sprite d'appel
                                    If ListSize(Spr_procedure_appel())
                                          if Issprite(Spr_procedure_appel()\num_sprite.l)
                                                DisplaySprite(Spr_procedure_appel()\num_sprite.l,Spr_Procedure_appel()\posx.l,Spr_Procedure_appel()\posy.l-2)
                                          Endif
                                    Endif
                                    if ListSize(spr_procedure())>0
                                          IF spr_procedure()\name.s =Spr_procedure_appel()\name.s
                                                StartDrawing(ScreenOutput())
                                                      ; part a l'horizontale
                                                      LineXY(Spr_procedure_appel()\posx,Spr_procedure_appel()\posy, Spr_procedure_appel()\posx+spr_procedure_appel()\long1,Spr_procedure_appel()\posy , spr_procedure_appel()\couleur_fil.i)
                                                      
                                                      ; ça monte ou descend
                                                      LineXY(Spr_procedure_appel()\posx+spr_procedure_appel()\long1,Spr_procedure_appel()\posy, Spr_procedure_appel()\posx+spr_procedure_appel()\long1,spr_procedure_appel()\entree, spr_procedure_appel()\couleur_fil.i)
                                                      
                                                      ; fini la ligne vers la procedure
                                                      LineXY(Spr_procedure_appel()\posx+spr_procedure_appel()\long1,spr_procedure_appel()\entree, Spr_procedure_appel()\arrx.i,spr_procedure_appel()\entree ,spr_procedure_appel()\couleur_fil.i)
                                                      ;LineXY(Spr_procedure_appel()\posx,Spr_procedure_appel()\posy, spr_procedure()\posx, spr_procedure()\posy , couleur_liens_procedures) ; anciennes ligne qui font les diagonales
                                                StopDrawing()
                                                index=ListIndex(Spr_procedure_appel())
                                                SelectElement(Spr_procedure_appel_arr(),index)
                                                
                                                ;-dessin des petites fleches
                                                if issprite(spr_procedure_appel_arr()\num_sprite.l)
                                                      DisplaytransparentSprite(spr_procedure_appel_arr()\num_sprite.l,Spr_Procedure_appel_arr()\posx.l,spr_procedure_appel()\entree-3); le "-3" recentre la sprite sur la ligne
                                                Endif
                                          Endif
                                    Endif
                              Next
                        Next
                  Endif
            Endif
            FlipBuffers()
            
            ; ***************************************************************************************************************
            
      Forever
      
      ;- *********** Procedures ZONE ***************²
      
      Procedure.s Load()
            ;-LOAD
            ClearScreen(couleur_fond)
            ClearList(Spr_Procedure())
            ClearList(Spr_Procedure_appel())
            ClearList(Spr_Procedure_appel_arr())
            ClearList( spr_boucle())
            ClearList( spr_listing())
            ClearList(spr_procedure_list())
            ClearList(spr_boucle_for_next())
            ClearList(spr_If())
            
            Compteur_de_for=0
            Compteur_de_if=0
            
            Compteur_fil=80 ; determine l'ecartement horizontal du depart des lignes
            Compteur_fil2=32 ; pareil mais coté droit des procedures
            
            compteur_1=8 ; determine l'ecartement entre les lignes horizontale  a gauche des procedures et aide a eloigner les procedures si beaucoups d'appels evite ainsi le chevauchement des sprites..
            compteur_2=8 ; determine l'ecartement entre les lignes horizontale  a droite des procedures
            
            
            Dep =8: compteur_procedure=0
            file.s=OpenFileRequester("ouvrir un PB",GetCurrentDirectory(),"*.pb",1)
            if file.s<>""
                  name_file.s=GetFilePart(file.s,#PB_FileSystem_NoExtension)
                  SetWindowTitle(#win,  "GraphCode  By Dobro      "+name_file.s)
                  If OpenFile(0, file.s)    ; Ouvre un fichier existant ou en crée un nouveau s'il n'existait pas
                        
                        While Eof(0) = 0           ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
                              listing.s=listing.s+ReadString(0,#PB_UTF8 )+chr(10)   ; Affiche ligne par ligne le contenu du fichier
                        Wend 
                        CloseFile(0);>
                        SetGadgetAttribute( #Panel,#PB_ScrollArea_X ,0  )
                        SetGadgetAttribute(#Panel, #PB_ScrollArea_Y ,0  )
                        
                  EndIf
                  ProcedureReturn listing.s
            Else
                  listing.s=""
                  ProcedureReturn listing.s
            Endif
      EndProcedure
      ;
      Procedure Dessine (listing.s)
            AddElement(Spr_attente())
            Spr_attente()\posx.l = -128
            Spr_attente()\posy.l=50
            
            ;-create listing
            nb_ligne=CountString(listing.s,chr(10))
            AddElement(spr_listing())
            Spr_listing()\hauteur.l=nb_ligne*2
            ;debug "numero de ligne fin de listing :"+str(nb_ligne)
            Spr_listing()\num_sprite.l=#spr_listing
            Spr_listing()\posx.l=10
            Spr_listing()\posy.l=10
            Spr_listing()\couleur.l=couleur_listing
            Spr_listing()\largeur.l=200
            Spr_listing()\name.s=name_file.s
            ;-create_sprite_listing
            CreateSprite(Spr_listing()\num_sprite.l,Spr_listing()\largeur.l,Spr_listing()\hauteur.l)
            If issprite(Spr_listing()\num_sprite.l)
                  StartDrawing(SpriteOutput(Spr_listing()\num_sprite.l))
                        Box(0,0,Spr_listing()\largeur.l,Spr_listing()\hauteur.l,Spr_listing()\couleur.l)
                        BackColor(Rgb(255,255,255))
                        DrawText(10,1, Spr_listing()\name.s, RGB(0, 0, 255))
                  StopDrawing()
            Endif
            ;- **********************************
            ;-Passe 1
            ;- **********************************
            
            For i=1 to nb_ligne
                  yoyo=yoyo+1
                  Ligne.s=StringField(listing.s,i,chr(10))
                  gros_decal=CountString(Ligne.s,chr(9))*10 ; fonctionne aussi
                  Ligne.s=trim(Ligne.s) :Ligne.s=Trim(Ligne.s,chr(9))
                  if Ligne.s<>""
                        
                        Spr_attente()\posx.l=Spr_attente()\posx.l+1
                        IF Spr_attente()\posx.l>WindowWidth(#win)
                              Spr_attente()\posx.l=-128
                        Endif
                        
                        ;********* Traitement **********
                        ;- recherche la boucle principale
                        If FindString(Lcase(Ligne.s),"windowevent",1,#PB_String_NoCase) >0
                              flag_c_boucle=#True
                              AddElement(Spr_boucle())
                              Spr_boucle()\posy.l=i*2
                        Endif
                        
                        IF Lcase(left(Ligne.s,5))="until" or Lcase(left(Ligne.s,7))="forever";or Lcase(left(Ligne.s,12))="endprocedure"
                        ;debug "numero de ligne fin de boucle :"+str(i)
                        ;calldebugger
                        If flag_c_boucle=#True
                              Flag_c_boucle=#False
                              Spr_boucle()\hauteur.l=(i*2 - Spr_boucle()\posy.l):compteur_boucle=0
                              Spr_boucle()\num_sprite.l=#spr_boucle
                              Spr_boucle()\posx.l=20
                              
                              Spr_boucle()\couleur.l=couleur_boucle
                              Spr_boucle()\largeur.l=180
                              Spr_boucle()\name.s="Boucle"
                              ;-Create_sprite_boucle principale
                              CreateSprite(Spr_boucle()\num_sprite.l,Spr_boucle()\largeur.l,Spr_boucle()\hauteur.l)
                              
                              StartDrawing(SpriteOutput(Spr_boucle()\num_sprite.l))
                                    Box(0,0,Spr_boucle()\largeur.l,Spr_boucle()\hauteur.l,Spr_boucle()\couleur.l)
                                    DrawingMode(#PB_2DDrawing_Transparent )
                                    DrawText(1,1, Spr_boucle()\name.s,  RGB(255,255,255))
                              StopDrawing()
                        Endif
                  Endif
                  ; *********** boucle For  ***************
                  ;-recherche boucle For
                  If Left( Lcase(Ligne.s),4)="for "
                        AddElement(spr_boucle_for_next())
                        spr_boucle_for_next()\posy.l=i*2
                        spr_boucle_for_next()\hauteur.l=8
                        spr_boucle_for_next()\num_sprite.l=#spr_boucle_for
                        spr_boucle_for_next()\posx.l=20+gros_decal;decal_for.l ;gros_decal;
                        spr_boucle_for_next()\couleur.l=rgb(255,120,255)
                        spr_boucle_for_next()\largeur.l=8
                        spr_boucle_for_next()\num_ligne_deb=i*2
                        spr_boucle_for_next()\name.s="Boucle_for"
                        Compteur_de_for=Compteur_de_for+1
                        decal_for.l=decal_for+5
                        SetGadgetText(#text_For, "Nbr de For :"+str(Compteur_de_For))
                        ;-Create_sprite_boucle_for
                        CreateSprite(#spr_boucle_for,spr_boucle_for_next()\largeur.l,spr_boucle_for_next()\hauteur.l)
                        StartDrawing(SpriteOutput(#spr_boucle_for))
                              Box(0,0,spr_boucle_for_next()\largeur.l,spr_boucle_for_next()\hauteur.l,spr_boucle_for_next()\couleur.l)
                              DrawingMode(#PB_2DDrawing_Transparent )
                        StopDrawing()
                  Endif
                  ;-recherche Next
                  IF Lcase(left(Ligne.s,5))="next "
                  AddElement(spr_boucle_for_next())
                  
                  spr_boucle_for_next()\posy.l=i*2
                  spr_boucle_for_next()\hauteur.l=8
                  spr_boucle_for_next()\num_sprite.l=#spr_boucle_next
                  decal_for.l=decal_for.l-5
                  spr_boucle_for_next()\posx.l=20+gros_decal;decal_for.l;gros_decal;
                  
                  spr_boucle_for_next()\couleur.l=rgb(255,0,255)
                  spr_boucle_for_next()\largeur.l=8
                  spr_boucle_for_next()\name.s="Boucle_next"
                  spr_boucle_for_next()\num_ligne_fin=i*2
                  
                  ;-Create_sprite_boucle_Next
                  CreateSprite(#spr_boucle_next,spr_boucle_for_next()\largeur.l,spr_boucle_for_next()\hauteur.l)
                  StartDrawing(SpriteOutput(#spr_boucle_next))
                  Box(0,0,spr_boucle_for_next()\largeur.l,spr_boucle_for_next()\hauteur.l,spr_boucle_for_next()\couleur.l)
                  DrawingMode(#PB_2DDrawing_Transparent )
            StopDrawing()
            
      Endif
      
      ; *********** IF/ENdif***************
      ;-recherche Endif
      If Left( Lcase(Ligne.s),5)="endif"
      AddElement(spr_if())
      spr_If()\posy.l=i*2
      spr_If()\hauteur.l=3
      spr_If()\num_sprite.l=#spr_Endif
      decal_If=decal_If-5
      spr_If()\posx.l=20+gros_decal;decal_IF;gros_decal;
      spr_If()\couleur.l=rgb(255,100,0)
      spr_If()\largeur.l=25
      spr_If()\num_ligne_fin=i*2
      spr_If()\name.s="Endif"
      
      ;-Create_sprite_for
      CreateSprite(#spr_endif,spr_If()\largeur.l,spr_If()\hauteur.l)
      StartDrawing(SpriteOutput(#spr_endif))
      Box(0,0,spr_If()\largeur.l,spr_If()\hauteur.l,spr_If()\couleur.l)
      DrawingMode(#PB_2DDrawing_Transparent )
StopDrawing()
Endif
;-recherche If
IF Lcase(left(Ligne.s,3))="if "
      AddElement(spr_If())
      
      spr_If()\posy.l=i*2
      spr_If()\hauteur.l=3
      spr_If()\num_sprite.l=#spr_If
      spr_If()\posx.l=20+gros_decal;decal_IF ;gros_decal
      spr_If()\couleur.l=rgb(255,150,0)
      spr_If()\largeur.l=25
      spr_If()\name.s="If"
      spr_If()\num_ligne_deb=i*2
      decal_IF=decal_IF+5
      Compteur_de_If=Compteur_de_If+1
      SetGadgetText(#text_If, "Nbr de IF :"+str(Compteur_de_If))
      ;-Create_sprite_Next
      CreateSprite(#spr_IF,spr_If()\largeur.l,spr_If()\hauteur.l)
      StartDrawing(SpriteOutput(#spr_If))
            Box(0,0,spr_If()\largeur.l,spr_If()\hauteur.l,spr_If()\couleur.l)
            DrawingMode(#PB_2DDrawing_Transparent )
      StopDrawing()
      
Endif

;********************************************************************************
;-Les procedures

If Lcase(left(Ligne.s,9))="procedure" and  Lcase(left(Ligne.s,15))<>"procedurereturn" ;|

      compteur_procedure=compteur_procedure+1 ;>
AddElement(Spr_procedure())
Spr_Procedure()\name_par.s=stringfield(Ligne.s,1,"(")+"("
Spr_Procedure()\name_par.s=RemoveString(Spr_Procedure()\name_par.s,"procedure",#PB_String_NoCase)
Spr_Procedure()\name_par.s=RemoveString(Spr_Procedure()\name_par.s,".s",#PB_String_NoCase)
Spr_Procedure()\name_par.s=RemoveString(Spr_Procedure()\name_par.s,".l",#PB_String_NoCase)
Spr_Procedure()\name_par.s=RemoveString(Spr_Procedure()\name_par.s,".i",#PB_String_NoCase)
Spr_Procedure()\name_par.s=RemoveString(Spr_Procedure()\name_par.s,".f",#PB_String_NoCase)
Spr_Procedure()\name_par.s=Trim(Spr_Procedure()\name_par.s)
;
;
Spr_Procedure()\name.s=stringfield(Ligne.s,1,"(")
Spr_Procedure()\name.s=RemoveString(Spr_Procedure()\name.s,"procedure",#PB_String_NoCase)
Spr_Procedure()\name.s=RemoveString(Spr_Procedure()\name.s,".s",#PB_String_NoCase)
Spr_Procedure()\name.s=RemoveString(Spr_Procedure()\name.s,".l",#PB_String_NoCase)
Spr_Procedure()\name.s=RemoveString(Spr_Procedure()\name.s,".i",#PB_String_NoCase)
Spr_Procedure()\name.s=RemoveString(Spr_Procedure()\name.s,".f",#PB_String_NoCase)
Spr_Procedure()\name.s=Trim(Spr_Procedure()\name.s)
Spr_Procedure()\num_ligne_deb.i=i*2 ; recup le numero de ligne du debut de la procedure
flag_c_procedure=#True


;-create Sprite Procedure
Spr_procedure()\num_sprite.l=#spr_procedure+compteur_procedure
Spr_Procedure()\posy.l=Spr_Procedure()\posy.l+compteur_procedure*90
Spr_procedure()\posx.l=600
Spr_procedure()\couleur.l=couleur_procedures
Spr_procedure()\Largeur.l=200
Spr_procedure()\hauteur.l=60
;
CreateSprite(Spr_procedure()\num_sprite.l,spr_procedure()\largeur.l,Spr_procedure()\hauteur.l)
StartDrawing(SpriteOutput(Spr_procedure()\num_sprite.l))
      Box(0,0,Spr_procedure()\largeur.l,Spr_procedure()\hauteur.l,Spr_procedure()\couleur.l)
      DrawingMode(#PB_2DDrawing_Transparent )
      DrawText(1,1, Spr_Procedure()\name.s, $0)
StopDrawing()
SetGadgetText(#text_procedure, "Nbr Procedures :"+str(compteur_procedure))

AddElement(spr_procedure_list())
spr_procedure_list()\num_ligne_deb.i=Spr_Procedure()\num_ligne_deb.i
spr_procedure_list()\num_sprite.l=#spr_procedure_list
spr_procedure_list()\posy.l=spr_procedure_list()\num_ligne_deb.i
spr_procedure_list()\posx.l=20
spr_procedure_list()\couleur.l=couleur_procedures
spr_procedure_list()\Largeur.l=(Spr_listing()\largeur.l-spr_procedure_list()\posx.l)
spr_procedure_list()\hauteur.l=5


;-create Sprite procedure_list
If Flag_creation_sprite_Procedure_list=#false
      Flag_creation_sprite_Procedure_list=#True
      CreateSprite(Spr_procedure_list()\num_sprite.l,spr_procedure_list()\largeur.l,Spr_procedure_list()\hauteur.l)
      StartDrawing(SpriteOutput(Spr_procedure_list()\num_sprite.l))
            Box(0,0,Spr_procedure_list()\largeur.l,Spr_procedure_list()\hauteur.l,Spr_procedure_list()\couleur.l)
            DrawingMode(#PB_2DDrawing_Transparent )
            ;;;DrawText(1,1, Spr_Procedure_list()\name.s, $0)
      StopDrawing()
Endif
Endif

If Lcase(left(Ligne.s,12))="endprocedure" ;
Spr_Procedure()\num_ligne_fin.i=i*2
spr_procedure_list()\num_ligne_deb.i=Spr_Procedure()\num_ligne_fin.i
Endif

;********************************************************************************
Endif
If Flag_c_boucle=#true
      compteur_boucle=i
Endif

If yoyo=>10
      yoyo=0
      DisplayTransparentSprite(#Spr_attente,Spr_attente()\posx.l,Spr_attente()\posy.l)
      FlipBuffers() :ClearScreen($0)
Endif

Next i

yoyo=0
Spr_attente()\posx.l=-128
DisplayTransparentSprite(#Spr_attente,Spr_attente()\posx.l,Spr_attente()\posy.l)
FlipBuffers() :ClearScreen($0)




;- **********************************
;-Passe 2
;- **********************************
For i=1 to nb_ligne
      yoyo=yoyo+1
      Spr_attente()\posx.l=Spr_attente()\posx.l+1
      IF Spr_attente()\posx.l>WindowWidth(#win)
            Spr_attente()\posx.l=-128
      Endif
      
      Ligne.s=StringField(listing.s,i,chr(10))
      Ligne.s=trim(Ligne.s) :Ligne.s=Trim(Ligne.s,chr(9))
      if Ligne.s<>""
            ;-appel des procedures
            ;-entrée dans procedure detecté
            If Left(Lcase(Ligne.s),9)="procedure" ; on entre dans une procedure
                  
                  ; on recupe le nom de la procedure "mere"
                  nom_de_la_procedure_mere.s=stringfield(Ligne.s,1,"(")
                  nom_de_la_procedure_mere.s=RemoveString(nom_de_la_procedure_mere.s,"procedure",#PB_String_NoCase)
                  nom_de_la_procedure_mere.s=RemoveString(nom_de_la_procedure_mere.s,".s",#PB_String_NoCase)
                  nom_de_la_procedure_mere.s=RemoveString(nom_de_la_procedure_mere.s,".l",#PB_String_NoCase)
                  nom_de_la_procedure_mere.s=RemoveString(nom_de_la_procedure_mere.s,".i",#PB_String_NoCase)
                  nom_de_la_procedure_mere.s=RemoveString(nom_de_la_procedure_mere.s,".f",#PB_String_NoCase)
                  nom_de_la_procedure_mere.s=Trim(nom_de_la_procedure_mere.s)
                  Flag_procedure=#true
                  ; on recup les coordonées de la procedure "Mere"
                  ForEach Spr_procedure()
                        If spr_procedure()\name.s=nom_de_la_procedure_mere.s
                              position_y=spr_procedure()\posy.l                 
                              position_x=spr_procedure()\posx.l
                              largeur_procedure=Spr_procedure()\Largeur.l
                        Endif
                  Next
            Endif
            If Left(Lcase(Ligne.s),12)="endprocedure"
            Flag_procedure=#False
            
      Endif
      
      ;-appel de procedure detecté
      If left( Lcase(Ligne.s),9)<>"procedure" and  Left(Lcase(Ligne.s),7)<>"declare"
            
            ForEach Spr_procedure()
                  if Cherche_mot(Lcase(Ligne.s),Spr_Procedure()\name_par.s)=#true
                        compteur_procedure_appel=compteur_procedure_appel+1
                        ; if Spr_Procedure()\name_par.s="toto("
                        ; calldebugger
                        ; Endif
                        
                        
                        If Flag_procedure=#false ;- l'appel a lieu dans le listing
                              compteur_1=compteur_1+6
                              if compteur_1>40:compteur_1=8:Endif
                              AddElement(spr_procedure_appel())
                              spr_procedure_appel()\num_sprite.l=#spr_procedure_appel
                              spr_procedure_appel()\posy.l=i *2                   
                              spr_procedure_appel()\posx.l=(Spr_listing()\largeur.l-20)
                              spr_procedure_appel()\couleur.l=couleur_appel
                              spr_procedure_appel()\Largeur.l=5
                              spr_procedure_appel()\hauteur.l=5
                              spr_procedure_appel()\name.s=Spr_Procedure()\name.s
                              spr_procedure_appel()\numero_ligne.l=i*2
                              spr_procedure_appel()\arrx.i=Spr_Procedure()\posx.l
                              spr_procedure_appel()\arry.i=Spr_Procedure()\posy.l
                              spr_procedure_appel()\long1=Compteur_fil ;random(random(100,31),30)
                              Compteur_fil=compteur_fil+10
                              spr_procedure_appel()\couleur_fil.i=RGB(random(255,127),random(255,127),random(255,127))
                              spr_procedure_appel()\type=#False
                              spr_procedure_appel()\entree=Spr_Procedure()\posy.l+compteur_1
                              
                              ; creation sprite
                              AddElement(spr_procedure_appel_arr())
                              spr_procedure_appel_arr()\num_sprite.l=#spr_procedure_appel_arr
                              spr_procedure_appel_arr()\posy.l=Spr_Procedure()\posy.l                 
                              spr_procedure_appel_arr()\posx.l=Spr_Procedure()\posx.l
                              spr_procedure_appel_arr()\couleur.l=spr_procedure_appel()\couleur_fil.i
                              spr_procedure_appel_arr()\Largeur.l=7
                              spr_procedure_appel_arr()\hauteur.l=7
                              
                        Else ;- l'appel a lieu au sein d'une procedure
                              compteur_2=compteur_2+6
                              if compteur_2>40:compteur_2=8:Endif
                              AddElement(spr_procedure_appel())
                              spr_procedure_appel()\num_sprite.l=#spr_procedure_appel
                              ; ici on prend les coordonée de la procedure mere pour le dessins de l'appel
                              spr_procedure_appel()\posy.l=position_y   
                              spr_procedure_appel()\posx.l=spr_procedure()\posx.l+largeur_procedure
                              spr_procedure_appel()\couleur.l=couleur_appel
                              spr_procedure_appel()\Largeur.l=5
                              spr_procedure_appel()\hauteur.l=5
                              spr_procedure_appel()\name.s=Spr_Procedure()\name.s ; vers la procedure de destination
                              spr_procedure_appel()\numero_ligne.l=i
                              
                              spr_procedure_appel()\arrx.i=Spr_Procedure()\posx.l+largeur_procedure
                              spr_procedure_appel()\arry.i=Spr_Procedure()\posy.l
                              
                              
                              spr_procedure_appel()\long1=Compteur_fil2;random(random(150,16),15)
                              Compteur_fil2=compteur_fil2+15
                              spr_procedure_appel()\couleur_fil.i=RGB(random(255,50),random(255,50),random(255,50))
                              spr_procedure_appel()\type=#true
                              spr_procedure_appel()\entree=Spr_Procedure()\posy.l+compteur_2
                              
                              ; creation sprite
                              AddElement(spr_procedure_appel_arr())
                              spr_procedure_appel_arr()\num_sprite.l=#spr_procedure_appel_arrd
                              spr_procedure_appel_arr()\posy.l=Spr_Procedure()\posy.l                 
                              spr_procedure_appel_arr()\posx.l=spr_procedure_appel()\arrx.i
                              spr_procedure_appel_arr()\couleur.l=spr_procedure_appel()\couleur_fil.i
                              spr_procedure_appel_arr()\Largeur.l=7
                              spr_procedure_appel_arr()\hauteur.l=7
                              
                        Endif
                        
                        ;-create Sprite Procedure appel depart
                        If Flag_creation_sprite_procedure_appel=#false ; comme ça on ne creer le sprite qu'une seule fois ;)
                              Flag_creation_sprite_procedure_appel=#True
                              CreateSprite(spr_procedure_appel()\num_sprite.l,spr_procedure_appel()\largeur.l,spr_procedure_appel()\hauteur.l)
                              StartDrawing(SpriteOutput(spr_procedure_appel()\num_sprite.l))
                                    Box(0,0,spr_procedure_appel()\largeur.l,spr_procedure_appel()\hauteur.l,spr_procedure_appel()\couleur.l)
                                    ;DrawText(1,1, spr_procedure_appel()\name.s, RGB(0, 255, 0))
                              StopDrawing()
                        Endif
                        ;
                        ;-create Sprite Fleche arrivée gauche
                        If Flag_creation_sprite_Fleche_appel_arr=#false ; comme ça on ne creer le sprite qu'une seule fois ;)
                              Flag_creation_sprite_Fleche_appel_arr=#True
                              spr_procedure_appel_arr()\num_sprite.l=#spr_procedure_appel_arr
                              CreateSprite(spr_procedure_appel_arr()\num_sprite.l,spr_procedure_appel_arr()\largeur.l,spr_procedure_appel_arr()\hauteur.l)
                              StartDrawing(SpriteOutput(spr_procedure_appel_arr()\num_sprite.l))
                                    xsprdess.s="0,1,2,3,2,1,0"
                                    ;CallDebugger
                                    for u=1 to 7
                                          vv=val(StringField(xsprdess.s,u,","))
                                          plot(vv,u-1,spr_procedure_appel_arr()\couleur.l)
                                    Next u
                              StopDrawing()
                        Endif
                        
                        ;- create Sprite Fleche arrivée droite
                        If Flag_creation_sprite_Fleche_appel_arrd=#false ; comme ça on ne creer le sprite qu'une seule fois ;)
                              Flag_creation_sprite_Fleche_appel_arrd=#True
                              spr_procedure_appel_arr()\num_sprite.l=#spr_procedure_appel_arrd
                              CreateSprite(spr_procedure_appel_arr()\num_sprite.l,spr_procedure_appel_arr()\largeur.l,spr_procedure_appel_arr()\hauteur.l)
                              StartDrawing(SpriteOutput(spr_procedure_appel_arr()\num_sprite.l))
                                    xsprdess.s="3,2,1,0,1,2,3"
                                    ;CallDebugger
                                    for u=1 to 7
                                          vv=val(StringField(xsprdess.s,u,","))
                                          plot(vv,u-1,spr_procedure_appel_arr()\couleur.l)
                                    Next u
                              StopDrawing()
                        Endif
                  Endif
            Next
      Endif
Endif

if yoyo>=10
      yoyo=0
      DisplayTransparentSprite(#Spr_attente,Spr_attente()\posx.l,Spr_attente()\posy.l)
      FlipBuffers() :ClearScreen($0)
Endif
Next i

Spr_attente()\posx.l=-1280
debug  #Spr_attente
EndProcedure



Procedure Cherche_mot(ligne.s,mot_a_chercher.s)
      ; by Dobro
      pos = FindString(lcase(ligne.s),lcase(mot_a_chercher.s),1,#PB_String_NoCase)
      ; recherche arriere
      if pos>0
            For i=1 to 35
                  car.s=mid(ligne.s,pos-i,1)
                  cc=asc(car.s)
                  If (cc >64 and cc<91) or (cc>47 and cc<58) or (cc>96 and cc<123) or (cc>223 and cc<255) or cc=95 ; si c'est une lettre on continue
                  else
                        Dep=pos-i
                        Break
                  Endif
            Next i
            
            ;recherche avant
            For i=1 to 50
                  car.s=mid(ligne.s,Dep+i,1)
                  cc=asc(car.s)
                  If (cc >64 and cc<91) or (cc>47 and cc<58) or (cc>96 and cc<123) or (cc>223 and cc<255) or cc=95 or cc=32; si c'est une lettre on continue
                        longueur=longueur+1
                  Else
                        Break
                  Endif
            Next i
            
            ;debug Mid(Ligne.s,Dep+1,longueur)
            ; renvoi le mot
            ;ProcedureReturn Mid(Ligne.s,Dep+1,longueur)
            ;renvoi la position et la longueur
            ;ProcedureReturn str(Dep+1)+","+str(longueur)
            ;renvoi Vrais ou faux
            mot_trouve.s=Mid(Ligne.s,Dep+1,longueur)
            long=len(mot_a_chercher.s)
            ;calldebugger
            ; if longueur<long
            ; ;ProcedureReturn #False
            ; Endif
            
            if longueur>0
                  ;CallDebugger
                  mot_a_chercher.s=Left(mot_a_chercher.s,Len(mot_a_chercher.s)-1)
                  
                  ;debug mot_trouve.s
                  ;debug mot_a_chercher.s
                  If lCase(mot_trouve.s)=Lcase(mot_a_chercher.s)
                        ProcedureReturn #True
                  Else
                        ProcedureReturn #False
                  Endif
            endif
      Else
            ProcedureReturn #False
      Endif         
EndProcedure
; Epb

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 12:49 
Hors ligne

Inscription: Jeu 05/Fév/2009 17:58
Messages: 980
Merci Zorro


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 13:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Sam 23/Sep/2006 18:32
Messages: 6714
Localisation: Isere
Marche bien ici
J'ai testé avec un petit code de 4 procédures
On se demande d’où t'es venu cette idée de coder ça, mais c'est cool :wink:
Ca existe peut être dans des gros IDE ?
Merci du partage 8)

_________________
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 13:55 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
bah , les idées me tombent dessus, comme la fiantes des pigeons :lol:

Pour ceux qui ont EPB , il suffit de compiler Graph_code , et le poser dans le dossier "Outils" de EPB
pour avoir celui-ci, dispo dans le menu "outils"

Ps sur certains "gros" code, il peut arriver que l'affichage ne se fasse pas tout de suite
utilisez la molette pour rafraichir l'ecran ... ou bien patientez un moment ..

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 14:10 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3494
@Zobrro tu devrais utilisé les courbes de bezier pour le lien entre "les nodes"


@Kcc
Oui, pour ta question sur "les gros ide", ca existe depuis longtemps, par exemple , sous godot , tu as le visual designer pour les shaders ,voici ce que j'ai fait :

Image

ce qui donne :
https://images-ext-2.discordapp.net/external/8hKfYI8XDHma0m0HJPpCeQymZO-vwNm_5ADdNfF9rY8/%3Fcid%3D73b8f7b15c30ddb45965525841fa985c/https/media2.giphy.com/media/wII5nx92tX4VjjOv0B/giphy.mp4


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 15:52 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
@G-Rom
ce serai cool de respecter au minimum mon pseudo ;)

ce sont des nodes en fait ?

j'utilise ça avec blender 2.80 :)

moi je me contente d'afficher un graph du listing, j'en suis pas a pourvoir Coder avec :)

sous Blender 2.8 les nodes pour definir une matiere c'est le top ... perso j'adore :)

il y a MicroDevWeb qui tente un truc dans le genre

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 18:37 
Hors ligne

Inscription: Dim 10/Jan/2010 5:29
Messages: 3494
Oui, après tu les appellent comme tu veut.
j'ai pas regarder ton code, mais je les définirais simplement ainsi :

Code:
Structure sNode
  title.s
  List *in.sNode()
  List *out.sNode()
  value.d[32]
  *operation
EndStructure


ou le pointeur pointe vers une fonction qui execute ce que doit faire le noeud et envois le resultat aux *out , etc...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Jeu 11/Juil/2019 20:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
oui donc tu parle bien de "node" pour programmer ....

Blender 2.80 utilise des Nodes pour Definir des parametres d'une matiere ....

mon programme lui n'a rien a voir avec ça :)
c'est simplement une façon de représenter les appels au procedures d'un listing ...
un Graph quoi :)
par contre Microdevweb apparemment bosse sur des Nodes
viewtopic.php?f=4&t=17746

mais son image n'est plus apparente dans son message

exemple de nodes sous blender

ici un cube tout simple , j'applique un shader de "Verre" bleu , puis une texture voronoi sur le deplacement :) (voir les nodes dessous )
ensuite j'ai juste ajouté une lumiere point Rose a l'interieur :)

je pouvais pas blairer Blender (je n'utilisai QUE C4D) , mais depuis sa version 2.80 j'adore !! :)
je m’émerveille devant un truc tout con (mon cube) :)
Image

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Ven 12/Juil/2019 11:43 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1733
Localisation: Belgique
@Zorro,

Je bosse sur une nouvelle version plus propre et le plus générique possible. Je devrai la publiée d'ici quelques jours.

_________________
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Ven 12/Juil/2019 12:16 
Hors ligne
Avatar de l’utilisateur

Inscription: Mar 31/Mai/2016 9:06
Messages: 2154
bonne nouvelle, et bon courage a toi :)

je suis juste curieux de savoir quel moyen (Librairie ? ) tu utilises pour generer tes Nodes ???
le GDI ??

_________________
Image
Image
Site: http://michel.dobro.free.fr/
Devise :"dis moi ce dont tu as besoin, je t'expliquerai comment t'en passer"


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Ven 12/Juil/2019 12:24 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 29/Juin/2011 14:11
Messages: 1733
Localisation: Belgique
@Zorro,

Juste Vector

_________________
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Lun 15/Juil/2019 13:06 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3673
Localisation: Encore ?
Zorro a écrit:
il y a MicroDevWeb qui tente un truc dans le genre
Perso, le truc dans le genre je l'ai pondu sur le site DarkBasic en 2003...


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Graph_Code
MessagePosté: Lun 15/Juil/2019 19:28 
Hors ligne

Inscription: Ven 29/Juin/2007 17:50
Messages: 3673
Localisation: Encore ?
Et le plus difficile à faire, uniquement sur ce que j'ai pu faire (appels des procédures), c'est le choix de cheminement : c'est du pathfinding.

J'avais, de souvenir, évité ça en restant sur de l'arborescent. Ça aide déjà pas mal pour retrouver l'origine des appels. Mais ça se limite quand même pour informer. Et puis ça bugue si les récursivités ne sont pas détectées.

Les courbes, je n'en parle même pas : c'est le plus rapproché de la perception humaine. Mais c'est pour éviter quoi ? (Beaucoup de calculs surtout quand on veut anticiper l'évitement des noeuds, ces beaux meli-melo pas classe...)
C'est design mais ça se limite. Et puis à l'époque, avant de faire un aa sur des courbes...


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 13 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 12 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye