Outils pour utilisateurs

Outils du site


pymultilame

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Dernière révisionLes deux révisions suivantes
pymultilame [2018/08/28 07:58] – [blendertools] sergepymultilame [2021/08/21 15:47] – ↷ Liens modifiés en raison d'un déplacement. 216.244.66.228
Ligne 4: Ligne 4:
 **Des scripts pour les tâches de tous les jours** **Des scripts pour les tâches de tous les jours**
 </WRAP> </WRAP>
 +
 +=====Les sources sur GitHub=====
 +  * **[[https://github.com/sergeLabo/pymultilame|pymultilame sur GitHub]]**
  
 ===== pymultilame ===== ===== pymultilame =====
Ligne 17: Ligne 20:
 qui n'est plus maintenu. qui n'est plus maintenu.
  
-=== Comprend les rubriques ===+=== Rubriques proposées ===
  
   * Blender: Des scripts spécifiques pour le Blender Game Engine 2.7x et qui ne peuvent tourner que dans Blender   * Blender: Des scripts spécifiques pour le Blender Game Engine 2.7x et qui ne peuvent tourner que dans Blender
Ligne 28: Ligne 31:
 === Installation de Twisted pour python 3.x === === Installation de Twisted pour python 3.x ===
  
-  * [[https://ressources.labomedia.org/installation_de_twisted|Installation de Twisted pour python 3.x]]+  * [[archives:installation_de_twisted|Python: Installation de Twisted]]
  
 <code> <code>
 sudo pip3 install twisted sudo pip3 install twisted
 </code> </code>
 +
 === Installation de pymultilame === === Installation de pymultilame ===
  
-  * [[https://ressources.labomedia.org/creer_son_propre_package_python|Créer son propre package python]]+  * [[creer_son_propre_package_python|Python: Créer son propre package python]]
  
 <code> <code>
 sudo pip3 install -e git+https://github.com/sergeLabo/pymultilame.git#egg=pymultilame sudo pip3 install -e git+https://github.com/sergeLabo/pymultilame.git#egg=pymultilame
 </code> </code>
 +
 Mise à jour: Mise à jour:
  
Ligne 45: Ligne 50:
 sudo pip3 install --upgrade git+https://github.com/sergeLabo/pymultilame.git#egg=pymultilame sudo pip3 install --upgrade git+https://github.com/sergeLabo/pymultilame.git#egg=pymultilame
 </code> </code>
 +
 ==== Utilisation ==== ==== Utilisation ====
  
 <code python> <code python>
 +# Imports en python3
 from pymultilame import HttpDownload from pymultilame import HttpDownload
 from pymultilame import MyTools from pymultilame import MyTools
-from pymultilame import TcpClient+from pymultilame import TcpClient3
 from pymultilame import MyConfig from pymultilame import MyConfig
 from pymultilame import get_my_ip from pymultilame import get_my_ip
Ligne 62: Ligne 69:
 from pymultilame import TextureChange from pymultilame import TextureChange
  
-from pymultilame.blendertools import scene_change, droiteAffine, scene_change, print_str_args +from pymultilame import scene_change, droiteAffine, scene_change, print_str_args 
-from pymultilame.blendergetobject import get_all_objects, get_all_scenes, get_scene_with_name+from pymultilame import get_all_objects, get_all_scenes, get_scene_with_name 
 + 
 + 
 +# Imports en python2 
 + 
 +from pymultilame.myconfig2 import MyConfig2 
 +from pymultilame.tcpclient2 import TcpClient2
 </code> </code>
 +
 ==== Licence ==== ==== Licence ====
  
Ligne 73: Ligne 87:
 voir le fichier LICENSE voir le fichier LICENSE
  
-==== Documentation ====+=====Documentation génèrée avec pydoc3.5===== 
 +Le script qui génère cette doc est dans le module pymultilame. 
 +====blendergetobject==== 
 +<code txt> 
 +FUNCTIONS 
 +    get_all_objects() 
 +        Trouve tous les objets des scènes actives 
 +        Retourne un dict {nom de l'objet: blender object} 
 +     
 +    get_all_scenes() 
 +        Récupération des scènes 
 +     
 +    get_scene_with_name(scn) 
 +        Récupération de la scène avec le nom
  
-  * [[https://ressources.labomedia.org/creer_son_propre_package_python|Créer son propre package python]] +</code>
-  * [[https://ressources.labomedia.org/pymultilame|pymultilame]]+
  
-==== Conversion de README.md en dokuwiki ====+====blendersound==== 
 +<code txt> 
 +DESCRIPTION 
 +    Classe générique qui permet de gérer facilement le son 
 +    dans le Blender Game Engine BGE. 
 +     
 +    gl est le GameLogic, get with : from bge import logic as gl 
 +     
 +    Appel de cette classe où tous les sons sont dans une liste avec : 
 +        import aud 
 +     
 +        soundList = ["boum", ...] avec les fichiers boum.ogg etc... 
 +     
 +        Création de l'objet qui est un dictionnaire 
 +     
 +        gl.sound = EasyAudio(soundList) 
 +            soit { "boum": fabrique de boum.ogg, ....} 
 +        Joue le son boum 
 +            gl.sound["boum"].play() 
 +        Stop le son 
 +            gl.sound["boum"].stop() 
 +        Idem repeat, pause
  
-pour la page pymultilame du wiki+CLASSES 
 +        Factory 
 +     
 +    class EasyAudio(builtins.dict) 
 +      Crée une usine pour chaque son, dans un dict. 
 +       
 +      Method resolution order: 
 +          EasyAudio 
 +          builtins.dict 
 +          builtins.object 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, soundList, path, buffered=True) 
 +          soundList = ["boum", ...] 
 +          path example "//audio/comment/" 
 +     
 +    class Factory(builtins.object) 
 +      Class usine pour chaque son. 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, audio_file_path, buffered=True) 
 +          audio_file_path = "//audio/comment/boum.ogg" 
 +          buffered = Boolean 
 +       
 +      pause(self) 
 +          Pause 
 +       
 +      play(self, volume=1) 
 +          play the audio, this return a handle to control play/pause/stop 
 +       
 +      repeat(self, volume=1) 
 +          Repeat 
 +       
 +      set_pitch(self, pitch) 
 +          Hauteur 
 +       
 +      set_volume(self, vol) 
 +          Volume 
 +       
 +      stop(self) 
 +          Stop
  
-<code> 
-pandoc README.md -f markdown -t dokuwiki -s -o README.dokuwiki 
 </code> </code>
  
-=====La documentation issue des docstrings=====+====blendertempo==== 
 +<code txt> 
 +CLASSES 
 +        TempoFactory 
 +     
 +    class Tempo(builtins.dict) 
 +      Création des tempos définies dans une liste de tuple: 
 +          * tempo_liste [("intro", 60), ("print", 12), ("sound", 6)] 
 +      Chaque objet tempo: 
 +          * tempoDict Tempo(tempo_liste) 
 +      Update des tempo à insérer dans un script qui tourne à chaque frame: 
 +          * tempoDict.update() 
 +      Appel d'une tempo: 
 +          * tempoDict["intro"].tempo 
 +      Voir exemple test() du __main__ 
 +       
 +      Method resolution order: 
 +          Tempo 
 +          builtins.dict 
 +          builtins.object 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, tempoList) 
 +          Initialize self.  See help(type(self)) for accurate signature. 
 +       
 +      update(self) 
 +          D.update([E, ]**F) -> None.  Update D from dict/iterable E and F. 
 +          If E is present and has a .keys() method, then does:  for k in E: D[k] = E[k] 
 +          If E is present and lacks a .keys() method, then does:  for k, v in E: D[k] = v 
 +          In either case, this is followed by: for k in F:  D[k] = F[k] 
 +       
 +          
 +    class TempoFactory(builtins.object) 
 +      Les tempos sont en fait des compteurs qui sont mis à jour à chaque 
 +      frames de Blender avec update. 
 +      Pour une tempo de n, compte bien de 0 à n-1 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, periode=60) 
 +          Paramètres: 
 +          période: la tempo est remise à zéro si periode atteind, -1 infinite loop 
 +          pas: incrément de la tempo, par défaut=1, aucun intérêt de changer le pas 
 +          verrou: si verrou, pas d'incrémentation. 
 +       
 +      lock(self) 
 +          Verrou, je bloque 
 +       
 +      reset(self) 
 +          Remise à zéro de la tempo 
 +       
 +      unlock(self) 
 +          Pas de verrou, je peux incrémenter 
 +       
 +      update(self) 
 +          J'incrémente si pas de verrou. Si verrou, je ne fais rien
  
-====blendertools====+FUNCTIONS 
 +    test() 
 +        Tourne en dehors de Blender. 
 + 
 +</code> 
 + 
 +====blendertexture====
 <code txt> <code txt>
 +DESCRIPTION
 +    Class générique qui permet de changer la texture d'un objet.
 +    Ce script ne peut tourner que dans blender.
 +
 CLASSES CLASSES
-    class VirtualGl(builtins.object) +    class TextureChange(builtins.object) 
-     |  bge = blender game engine +     |  Classe générique utilisable dans d'autres projects, 
-     |  Cette class remplace +     |  pour changer une texture d'un objet.
-      from bge import logic +
-      en dehors du Game Engine. +
-      En fait, ne marche pas en dehors de Blender.+
      |        |  
-     |  Data descriptors defined here:+     |  Methods defined here:
      |        |  
-     |  __dict__ +     |  __init__(self, obj, old_tex) 
-          dictionary for instance variables (if defined)+          obj     = objet concerné 
 +          old_tex = image de la texture originale, ex "danseur2.png" 
 +          new_tex = "//textures/perso.png"
      |        |  
-     |  __weakref__ +     |  texture2old(self) 
-          list of weak references to the object (if defined)+          Effacement de l'objet python, pour retourner à l'ancienne texture. 
 +       
 +      texture_new(self, new_tex) 
 +          Application de la nouvelle image de la texture. 
 +           
 +          Répéter la fonction plusieurs fois (ex 5x) pour que 
 +          le changement marche. 
 +          Tous les object avec le matériau seront changés.
  
 +</code>
 +
 +====blendertools====
 +<code txt>
 FUNCTIONS FUNCTIONS
     droiteAffine(x1, y1, x2, y2)     droiteAffine(x1, y1, x2, y2)
Ligne 122: Ligne 285:
         End of sceneOld, load sceneNew.         End of sceneOld, load sceneNew.
         Scene must be str: if scene = scene python object, name is scene.name         Scene must be str: if scene = scene python object, name is scene.name
 +
 +</code>
 +
 +====blenderviewport====
 +<code txt>
 +FUNCTIONS
 +    disable_viewport(cam)
 +        Disable
 +    
 +    enable_full_viewport(cam)
 +        cam is blender object
 +    
 +    enable_half_viewport(cam1, cam2)
 +        cam1 and 2 are blender objects
 +    
 +    enable_quad_viewport(cam1, cam2, cam3, cam4)
 +        cam1 2 3 4 are blender objects
 +    
 +    enable_stereo_viewport(cam1, cam2)
 +        cam1 and 2 are blender objects
  
 </code> </code>
Ligne 129: Ligne 312:
 CLASSES CLASSES
     class PileFIFO(builtins.object)     class PileFIFO(builtins.object)
-      Pile FIFO pour faire statistiques sur dernières valeurs.+      Pile FIFO pour faire des statistiques 
 +     |  sur les dernières valeurs d'une variable.
      |        |  
       Methods defined here:       Methods defined here:
Ligne 145: Ligne 329:
           La dernière valeur est-elle cohérente par rapport aux précédentes ?           La dernière valeur est-elle cohérente par rapport aux précédentes ?
           à lancer après append et average_calcul           à lancer après append et average_calcul
 +
 +</code>
 +
 +====getmyip====
 +<code txt>
 +FUNCTIONS
 +    get_my_ip()
 +        Retourne l'adresse ip du pc sur le réseau local.
 +        Valable pour python 3.x
 +        Non valable sur android
 +
 +</code>
 +
 +====httpdownload====
 +<code txt>
 +DESCRIPTION
 +    Télécharge une url.
 +    Peut aussi l'enregister
 +
 +CLASSES
 +    class HttpDownload(builtins.object)
 +      Télécharge une url.
      |        |  
-      ---------------------------------------------------------------------- +     |  Retourne 
-     |  Data descriptors defined here:+          un string si text (html) 
 +          des bytes si fichier 
 +     |  Enregistre dans un fichier
      |        |  
-     |  __dict__ +     |  Usage: 
-          dictionary for instance variables (if defined)+          hd = HttpDownload(
 +          # recupère la réponse 
 +          resp = hd.get_response(url, timeout=2) 
 +          # ou enregistre           
 +          hd.save_response(u, timeout=2, name=name) 
 +          # ou les 2 
 +          resp = hd.save_response(u, timeout=2, name=name)
      |        |  
-     |  __weakref__ +     |  Methods defined here: 
-          list of weak references to the object (if defined)+       
 +      decode_or_not(self, response) 
 +          Decode utf-8 si text, rien si fichier. 
 +          Donc text = utf-8, fichier = bytes 
 +       
 +      get_response(self, someurl, timeout=2) 
 +          Retourne la réponse de la requête, decodée si str 
 +       
 +      request(self, someurl, timeout=2) 
 +          Télécharge une url. 
 +          Retourne des bytes: https://bit.ly/2wau8j1 ou string vide 
 +       
 +      save_response(self, someurl, timeout=2, name='toto'
 +          Enregistre la réponse de la requête à someurl, 
 +          dans un fichier name 
 +          Retourne aussi la réponse. 
 +          Si réponse None, ne fera rien, retourne None 
 + 
 +FUNCTIONS 
 +    save_data_in_file(data, fichier, mode) 
 +        Mode 'w' écrit un string dans le fichier 
 +        Mode 'wb' écrit des bytes dans le fichier 
 +        donc enregistre un fichier 
 +        w ecrase 
 +        a ajoute 
 + 
 +</code> 
 + 
 +====multicast==== 
 +<code txt> 
 +CLASSES 
 +    class Multicast(builtins.object
 +      Récupère des datas en Multicast. 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, ip, port, buffer_size=1024) 
 +          Initialize self.  See help(type(self)) for accurate signature. 
 +       
 +      create_sock(self) 
 +          Création d'un socket multicast self.sock. 
 +       
 +      receive(self) 
 +          Retourne les datas brutes reçue sur multicast. 
 +       
 +      send_to(self, msg, addr) 
 +          Envoi de msg à addr en multicast. 
 + 
 +</code> 
 + 
 +====myconfig==== 
 +<code txt> 
 +DESCRIPTION 
 +    Le fichier ini doit être défini avec son chemin absolu 
 +     
 +    Pour un projet python: 
 +        import os 
 +        dossier = os.path.dirname(os.path.abspath(__file__)) 
 +        ou 
 +        os.getcwd() 
 +     
 +    Pour un projet Blender, le chemin complet est trouvé avec: 
 +        bge.logic.expandPath() 
 + 
 +CLASSES 
 +    class MyConfig(builtins.object) 
 +      Charge la configuration depuis le fichier *.ini, 
 +      sauve les changement de configuration, 
 +      enregistre les changements par section, clé. 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, ini_file) 
 +          Charge la config depuis un fichier *.ini 
 +          Le cemin doit être donné avec son chemin absolu. 
 +       
 +      load_config(self) 
 +          Lit le fichier *.ini, et copie la config dans un dictionnaire. 
 +       
 +      save_config(self, section, key, value) 
 +          Sauvegarde dans le fichioer *.ini  avec section, key, value. 
 +          Uniquement int, float, str 
 + 
 +</code> 
 + 
 +====myconfig2==== 
 +<code txt> 
 +DESCRIPTION 
 +    Le fichier ini doit être défini avec son chemin absolu 
 +     
 +    Pour un projet python: 
 +        import os 
 +        dossier = os.path.dirname(os.path.abspath(__file__)) 
 +        ou 
 +        os.getcwd() 
 +     
 +    Pour un projet Blender, le chemin complet est trouvé avec: 
 +        bge.logic.expandPath() 
 + 
 +CLASSES 
 +      Uniquement python 2 
 +      Charge la configuration depuis le fichier *.ini, 
 +      sauve les changement de configuration, 
 +      enregistre les changements par section, clé. 
 +       
 +      Methods defined here: 
 +       
 +      __init__(self, ini_file) 
 +          Charge la config depuis un fichier *.ini 
 +          Le cemin doit être donné avec son chemin absolu. 
 +       
 +      load_config(self) 
 +          Lit le fichier *.ini, et copie la config dans un dictionnaire. 
 +       
 +      save_config(self, section, key, value) 
 +          Sauvegarde dans le fichioer *.ini  avec section, key, value. 
 +          Uniquement int, float, str 
 </code> </code>
  
Ligne 183: Ligne 514:
           exemple:           exemple:
               "network/http_download.py"               "network/http_download.py"
 +     |  
 +      get_all_sub_directories(self, root)
 +          Retourne la liste de tous les sous-répertoires, et du répertoire,
 +          y compris les __pycache__
      |        |  
       get_json_file(self, fichier)       get_json_file(self, fichier)
Ligne 197: Ligne 532:
      |        |  
       run_command_system(self, command)       run_command_system(self, command)
-          Excécute la command shell et reourne la sortie terminal+          Excécute la command shell. 
-          command = ['your_command', 'arg1', 'arg2', ...] +          command = liste
-          Ne marche pas: +
-              resp = subprocess.call(command.split())+
      |        |  
-      write_data_in_file(self, data, fichier) +      write_data_in_file(self, data, fichier, mode
-          Ecrit des data de type string dans le fichier, écrase l'existant+          Ecrit data dans le fichier. 
-       +          Mode 'w' écrit un string dans le fichier 
-      ---------------------------------------------------------------------- +          Mode 'wb' écrit des bytes dans le fichier 
-      Data descriptors defined here: +          w écrase 
-       +          a ajoute
-      __dict__ +
-          dictionary for instance variables (if defined) +
-       +
-      __weakref__ +
-          list of weak references to the object (if defined)+
  
 </code> </code>
  
-====http_download====+====tcpclient2====
 <code txt> <code txt>
-DESCRIPTION 
-    Télécharge une url. 
-    Peut aussi l'enregister 
- 
 CLASSES CLASSES
-    class HttpDownload(builtins.object) +      Uniquement python 2 
-     |  Télécharge une url.+     |  Envoi et réception sur le même socket en TCP.
      |        |  
-     |  Retourne +     |  Methods defined here:
-          - un string si text (html) +
-          - des bytes si fichier +
-      Enregistre dans un fichier+
      |        |  
-     |  Usage: +     |  __init__(selfipport)
-          hd = HttpDownload(+
-          # recupère la réponse +
-          resp = hd.get_response(url, timeout=2) +
-          # ou enregistre           +
-          hd.save_response(u, timeout=2, name=name) +
-          # ou les 2 +
-          resp = hd.save_response(utimeout=2name=name)+
      |        |  
-     |  Methods defined here:+     |  clear_buffer(self, buff) 
 +          N'a pas marché dans rezobox.
      |        |  
-     |  decode_or_not(self, response+     |  close_sock(self) 
-          Decode utf-8 si text, rien si fichier. +          Fermeture de la socket.
-          Donc text = utf-8, fichier = bytes+
      |        |  
-     |  get_response(self, someurl, timeout=2) +     |  connect_sock(self)
-          Retourne la réponse de la requête, decodée si str+
      |        |  
-     |  request(self, someurl, timeout=2+     |  create_socket(self) 
-          Télécharge une url+          Création du socket sans try, et avec connexion
-          Retourne des bytes: https://bit.ly/2wau8j1 ou string vide+          Reconnexion toutes les secondes 
 +          La différence entre python 2 et 3 est là
      |        |  
-     |  save_response(self, someurl, timeout=2, name='toto') +     |  listen(self, buff
-          Enregistre la réponse de la requête à someurl, +          Retourne les data brutes reçueset vide le buffer TCP
-          dans un fichier name +
-          Retourne aussi la réponse. +
-          Si réponse None, ne fera rienretourne None+
      |        |  
-     |  ---------------------------------------------------------------------- +     |  re_connect_sock(self)
-      Data descriptors defined here:+
      |        |  
-     |  __dict__ +     |  reconnect(self) 
-          dictionary for instance variables (if defined)+          Reconnexion.
      |        |  
-     |  __weakref__ +     |  send(self, msg) 
-          list of weak references to the object (if defined) +          Envoi d'un messageavec sendmsg doit être encodé avant.
- +
-FUNCTIONS +
-    save_data_in_file(datafichiermode) +
-        Mode 'w' écrit un string dans le fichier +
-        Mode 'wb' écrit des bytes dans le fichier +
-        donc enregistre un fichier +
-        w ecrase +
-        a ajoute+
  
 </code> </code>
  
-====tcpclient====+====tcpclient3====
 <code txt> <code txt>
 CLASSES CLASSES
-    class TcpClient(builtins.object)+    class TcpClient3(builtins.object) 
 +      Uniquement python 3
       Envoi et réception sur le même socket en TCP.       Envoi et réception sur le même socket en TCP.
      |        |  
Ligne 288: Ligne 591:
       __init__(self, ip, port)       __init__(self, ip, port)
           Initialize self.  See help(type(self)) for accurate signature.           Initialize self.  See help(type(self)) for accurate signature.
 +     |  
 +      clear_buffer(self, buff)
      |        |  
       close_sock(self)       close_sock(self)
Ligne 293: Ligne 598:
      |        |  
       connect_sock(self)       connect_sock(self)
-          Connexion de la socket, si ok retoune 1 sinon None 
      |        |  
       create_socket(self)       create_socket(self)
           Création du socket sans try, et avec connexion.           Création du socket sans try, et avec connexion.
      |        |  
-      listen(self) +      listen(self, buff
-          Retourne les data brutes reçues.+          Retourne les data brutes reçues, et vide le buffer TCP 
 +       
 +      re_connect_sock(self)
      |        |  
       reconnect(self)       reconnect(self)
Ligne 306: Ligne 612:
       send(self, msg)       send(self, msg)
           Envoi d'un message, avec send, msg doit être encodé avant.           Envoi d'un message, avec send, msg doit être encodé avant.
 +
 +</code>
 +
 +====udpclient====
 +<code txt>
 +DESCRIPTION
 +    Recréer un socket avant chaque envoi ou réception, résoud les problèmes
 +    de réseau, ça se reconnecte tout seul.
 +    Par contre, le port éphémère du recvfrom changera à chaque fois.
 +
 +CLASSES
 +    class UdpClient(builtins.object)
 +      Envoi et reception en UDP.
 +      Cette classe n'encode pas le message à envoyer.
      |        |  
-     |  ---------------------------------------------------------------------- +     |  Methods defined here:
-      Data descriptors defined here:+
      |        |  
-     |  __dict__ +     |  __init__(self, buffer_size=1024, timeout=0.01) 
-          dictionary for instance variables (if defined)+          Création d'un socket UDP. 
 +          buffer_size = entier, permet de vider le buffer à chaque lecture, 
 +          pour avoir toujours la dernière valeur. 
 +       
 +      bind(self, addr) 
 +          Quelle est la différence avec connect ? 
 +       
 +      close(self) 
 +       
 +      connect(self, addr) 
 +          Connexion à l'adresse pour recevoir addr = tuple. 
 +       
 +      listen(self) 
 +          Retourne les datas et l'adresse reçue.
      |        |  
-     |  __weakref__ +     |  send_to(self, req, address) 
-          list of weak references to the object (if defined)+          Envoi à l'adresse = (ip, port).
  
-FUNCTIONS 
-    sleep(...) 
-        sleep(seconds) 
-         
-        Delay execution for a given number of seconds.  The argument may be 
-        a floating point number for subsecond precision. 
 </code> </code>
-         + 
-{{tag>python sb}}+ 
 +{{tag>python sb realisations_logicielles}}