Intégration de la documentation statique (suite)
This commit is contained in:
parent
0abb0ee951
commit
d31f7ea49e
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,287 @@
|
|||
import bpy # Blender
|
||||
import importlib
|
||||
import sys
|
||||
import time
|
||||
|
||||
###############################################################################
|
||||
# twin_doc-gen.py
|
||||
# @title: Script (bpy) de génération de la documentation statique de l'environnement 3D pour jumeau numérique
|
||||
# @project: Blender-EduTech
|
||||
# @lang: fr
|
||||
# @authors: Philippe Roy <philippe.roy@ac-grenoble.fr>
|
||||
# @copyright: Copyright (C) 2022 Philippe Roy
|
||||
# @license: GNU GPL
|
||||
###############################################################################
|
||||
|
||||
# UPBGE scene
|
||||
scene = bpy.context.scene
|
||||
# scene=bpy.data.scenes["Scene"]
|
||||
|
||||
# Cards description
|
||||
card_description ={}
|
||||
|
||||
# Documentation du sytème
|
||||
path = scene.objects['Doc']['path']
|
||||
name = scene.objects['Doc']['system']+'_doc'
|
||||
spec = importlib.util.spec_from_file_location(name, path)
|
||||
system = importlib.util.module_from_spec(spec)
|
||||
sys.modules[spec.name] = system
|
||||
spec.loader.exec_module(system)
|
||||
# system=importlib.import_module(scene.objects['Doc']['system']+'_doc') # Système
|
||||
system_card = system.get_system_card()
|
||||
card_description.update(system.get_card_description())
|
||||
|
||||
###############################################################################
|
||||
# Documentation Python
|
||||
###############################################################################
|
||||
|
||||
# "oop-card"
|
||||
python_card=["function-card", "alternative-card", "loop-card", "flow-card", "text-card", "list-card", "dict-card", "console-card", "sleep-card", "python-card"]
|
||||
#python_card=["function-card"]
|
||||
# python_card=["function-card" ,"alternative-card"]
|
||||
|
||||
# Fonction
|
||||
card_function_title="Fonction"
|
||||
card_function_text=" La définition d\"une fonction se fait avec \n \'def\'. La fonction peut renvoyer une \n valeur avec \'return\'. \n\n"
|
||||
card_function_text=card_function_text + " def fonction_1 (arguments) : \n instruction_1 \n instruction_2 \n ....\n return valeurs_renvoyées \n\n"
|
||||
card_function_text=card_function_text + " Les arguments sont des données \n transmises à la fonction."
|
||||
card_function_url=[["w3schools.com : functions","https://www.w3schools.com/python/python_functions.asp"]]
|
||||
card_description.update({"function-card" : [card_function_title, card_function_text, card_function_url]})
|
||||
|
||||
# Alternative
|
||||
card_alternative_title="Alternative"
|
||||
card_alternative_text=" L\"alternative permet d\"éxécuter des \n instructions en fonction d\"un test. \n"
|
||||
card_alternative_text=card_alternative_text + " Elle se programme en suivant la suite : \n \'if \' (si) ... \'else\' (sinon) ... \n\n"
|
||||
card_alternative_text=card_alternative_text + " if condition :\n"
|
||||
card_alternative_text=card_alternative_text + " instruction_1\n"
|
||||
card_alternative_text=card_alternative_text + " else : \n"
|
||||
card_alternative_text=card_alternative_text + " instruction_2\n\n"
|
||||
card_alternative_text=card_alternative_text + "Le \'else\' (sinon) est facultatif."
|
||||
card_alternative_url=[["w3schools.com : if ... else","https://www.w3schools.com/python/python_conditions.asp"]]
|
||||
card_description.update({"alternative-card" : [card_alternative_title, card_alternative_text, card_alternative_url]})
|
||||
|
||||
# Boucles
|
||||
card_loop_title="Boucles"
|
||||
card_loop_text=" Il y a deux types de boucle : \n - avec \'for\' pour définir un nombre de \n répétition (ici n), \n - avec \'while\' (tant que) pour prendre \n en compte une condition. \n \n"
|
||||
card_loop_text=card_loop_text + " for i in range (n) : \n instruction \n \n"
|
||||
card_loop_text=card_loop_text + " while condition : \n instruction"
|
||||
card_loop_url=[["w3schools.com : for","https://www.w3schools.com/python/python_for_loops.asp"],
|
||||
["w3schools.com : while","https://www.w3schools.com/python/python_while_loops.asp"]]
|
||||
card_description.update({"loop-card" : [card_loop_title, card_loop_text, card_loop_url]})
|
||||
|
||||
# Flux
|
||||
card_flow_title="Contrôle du flux"
|
||||
card_flow_text=""" Les structures (if, while, for) peuvent \n être gérées plus finement par les \n fonctions 'break', 'continue' et 'pass'. \n
|
||||
- 'break' : termine l"itération en cours et \n arrête la boucle.
|
||||
- 'continue' : termine l"itération en cours et \n reprend la boucle.
|
||||
- 'pass' : instruction vide."""
|
||||
card_flow_url=[["w3schools.com : break","https://www.w3schools.com/python/ref_keyword_break.asp"],
|
||||
["w3schools.com : continue","https://www.w3schools.com/python/ref_keyword_break.asp"],
|
||||
["w3schools.com : pass","https://www.w3schools.com/python/ref_keyword_pass.asp"]]
|
||||
card_description.update({"flow-card" : [card_flow_title, card_flow_text, card_flow_url]})
|
||||
|
||||
# Chaîne de caractères
|
||||
card_text_title="Chaîne de caractères"
|
||||
card_text_text=""" Une chaîne de caractères correspond à un \n texte (mot, phrase). Elle est délimitée \n par " ou ' : texte = 'Bonjour ! ' \n
|
||||
- texte1 + texte2 : concaténe plusieurs \n chaînes.
|
||||
- len(texte) : renvoie la longueur de texte.
|
||||
- "\\n" : caractère aller à la ligne.
|
||||
- texte[i] : renvoie le caractère du rang i de \n texte (commence à 0).
|
||||
- texte[2:5] : renvoie les caractères du rang \n 2 au rang 5.
|
||||
- texte.replace("a","b") : remplace les "a" en "b". """
|
||||
card_text_url=[
|
||||
["Doc. Python v3 Français : string","https://docs.python.org/fr/3/library/string.html"],
|
||||
["w3schools.com : strings","https://www.w3schools.com/python/python_strings.asp"]]
|
||||
card_description.update({"text-card" : [card_text_title, card_text_text, card_text_url]})
|
||||
|
||||
# Liste
|
||||
card_list_title="Liste"
|
||||
card_list_text=""" Une liste est une séquence d"éléments. \n Elle est délimitée par des crochets :
|
||||
liste = ['pomme', 7, 'rouge', True] \n
|
||||
- liste[i] : renvoie l"élément du rang i de la \n liste (commence à 0).
|
||||
- liste.append('neige') : ajoute 'neige' à la \n fin de la liste.
|
||||
- len(liste) : renvoie le nombre d"éléments.
|
||||
- liste.sort() : classe par ordre croissant la \n liste (alphabétiquement / numériquement).
|
||||
- liste.remove('rouge') : enlève la première \n occurence de la valeur."""
|
||||
card_list_url=[
|
||||
["Doc. Python v3 Français : list","https://docs.python.org/fr/3/library/stdtypes.html#sequence-types-list-tuple-range"],
|
||||
["w3schools.com : lists","https://www.w3schools.com/python/python_lists.asp"]]
|
||||
card_description.update({"list-card" : [card_list_title, card_list_text, card_list_url]})
|
||||
|
||||
# Dictionnaire
|
||||
card_dict_title="Dictionnaire"
|
||||
card_dict_text=""" Une liste est une collection d"éléments. \n Elle est délimitée par des accolades, \n chaque valeur comporte une clé unique :
|
||||
dico = {'nom' : 'Haddock', 'prénom' : \n 'Archibald', 'année' : 1940} \n
|
||||
- dico[clé] : renvoie la valeur liée à la clé.
|
||||
- dico.update('domicile' : 'Moulinsart') : met \n à jour les paires de clé/valeur.
|
||||
- len(dico) : renvoie le nombre d"éléments.
|
||||
- list(dico) : renvoie la liste des clés.
|
||||
- dico.pop("année") : enlève la valeur associée \n à la clé."""
|
||||
card_dict_url=[
|
||||
["Doc. Python v3 Français : dict","https://docs.python.org/fr/3/library/stdtypes.html#mapping-types-dict"],
|
||||
["w3schools.com : dictionaries","https://www.w3schools.com/python/python_dictionaries.asp"]]
|
||||
card_description.update({"dict-card" : [card_dict_title, card_dict_text, card_dict_url]})
|
||||
|
||||
# Objet (POO)
|
||||
card_oop_title="Programmation\norientée objet (POO)"
|
||||
card_oop_text="\nFIXME"
|
||||
card_oop_url=[["w3schools.com : classes & objects","https://www.w3schools.com/python/python_classes.asp"]]
|
||||
card_description.update({"oop-card" : [card_oop_title, card_oop_text, card_oop_url]})
|
||||
|
||||
# Console
|
||||
card_console_title="Console"
|
||||
card_console_text=" Si vous avez executé Ropy dans un \n terminal (avec l\"option \'-con\'), vous \n pouvez utiliser le terminal comme \n console de debuggage.\n\n"
|
||||
card_console_text= card_console_text + " print(\'Bonjour !\') \n -> Affiche le texte dans la console.\n\n"
|
||||
card_console_text= card_console_text + " variable = input () \n -> Permet la saisie, par exemple : \n"
|
||||
card_console_text= card_console_text + " entree = \'\'\n while entree == \'\' :\n entree = input ()"
|
||||
card_console_url=[["w3schools.com : print","https://www.w3schools.com/python/ref_func_print.asp"],
|
||||
["w3schools.com : input","https://www.w3schools.com/python/ref_func_input.asp"]]
|
||||
card_description.update({"console-card" : [card_console_title, card_console_text, card_console_url]})
|
||||
|
||||
# Temps
|
||||
card_sleep_title="Gestion du temps"
|
||||
card_sleep_text=" Vous pouvez créer des temporisations \n dans le déroulement du script.\n\n"
|
||||
card_sleep_text= card_sleep_text + " time.sleep(x) \n -> Marque d\"un temps d\"arrêt de \n x secondes.\n\n"
|
||||
card_sleep_text= card_sleep_text + " Il faudra préalablement importer la \n bibliothèque \'time\' avec \'import time\'."
|
||||
card_sleep_url=[["Doc. Python v3 Fr : sleep","https://docs.python.org/fr/3/library/time.html#time.sleep"]]
|
||||
card_description.update({"sleep-card" : [card_sleep_title, card_sleep_text, card_sleep_url]})
|
||||
|
||||
# Python
|
||||
card_python_title="Langage Python"
|
||||
card_python_text=""" Le Python est un langage de programmation \n interprété open source. Python vise à être \n visuellement épuré avec une syntaxe \n clairement séparée des mécanismes de \n bas niveau.\n
|
||||
Python possède beaucoup de bibliothèques \n spécialisées. Multiplateformes et \n multiparadigme, il est utilisé dans de \n nombreux contextes : scriptage, calcul \n numérique, prototypage, enseignement, \n ou encore comme langage de commande \n pour de nombreux logiciels."""
|
||||
|
||||
card_python_url=[["python.org","https://python.org"], ["AFPy","https://www.afpy.org"]]
|
||||
card_description.update({"python-card" : [card_python_title, card_python_text, card_python_url]})
|
||||
|
||||
###############################################################################
|
||||
# Génération statique des pages (fichiers *_doc-fr.blend)
|
||||
###############################################################################
|
||||
|
||||
# Sortir de la génération
|
||||
def text_gene_end():
|
||||
print ("Génération des pages effectuée.")
|
||||
# print ("Génération des pages effectuée.")
|
||||
# for item in scene.objects:
|
||||
# print (item.name)
|
||||
|
||||
# Génération des pages
|
||||
def text_gene(obj):
|
||||
print ("Génération des pages de la documentation pour le chapitre : "+ obj.name +" ...")
|
||||
if obj.name == "Doc_chap-system":
|
||||
chap_card = system_card
|
||||
rep_chap= bpy.data.objects["Doc_chap-system"]
|
||||
if obj.name == "Doc_chap-python":
|
||||
chap_card = python_card
|
||||
rep_chap= bpy.data.objects["Doc_chap-python"]
|
||||
|
||||
# Création des objets 3D
|
||||
# bpy.ops.collection.create(name='Collection')
|
||||
i=1
|
||||
for card in chap_card :
|
||||
print ("Génération de la page : "+ card)
|
||||
|
||||
# Repère page
|
||||
rep_ref= bpy.data.objects["Doc_chap-ref"]
|
||||
rep_page = duplicateObject(scene, "Doc_page-"+str(card), "Doc_chap-ref",rep_chap.location.x+ i*100, rep_chap.location.y, rep_chap.location.z)
|
||||
collection = bpy.data.collections["Doc generation"]
|
||||
collection_old = bpy.data.collections["Doc"]
|
||||
collection.objects.link(rep_page)
|
||||
collection_old.objects.unlink(rep_page)
|
||||
i+=1
|
||||
|
||||
# Titre
|
||||
titre_name = "Doc_title-"+str(card)
|
||||
titre_ref=bpy.data.objects["Doc_title-ref"]
|
||||
titre = addText(scene, titre_name, "Doc_title-ref", card_description[card][0],
|
||||
titre_ref.location.x-rep_ref.location.x,
|
||||
titre_ref.location.y-rep_ref.location.y,
|
||||
titre_ref.location.z-rep_ref.location.z)
|
||||
titre.parent = rep_page
|
||||
collection.objects.link(titre)
|
||||
collection_old.objects.unlink(titre)
|
||||
|
||||
# Texte de la page en une seule fois
|
||||
ligne_name = "Doc_text-"+str(card)
|
||||
ligne_ref=bpy.data.objects["Doc_text-l1-ref"]
|
||||
ligne_text = addText(scene, ligne_name, "Doc_text-l1-ref", card_description[card][1],
|
||||
ligne_ref.location.x-rep_ref.location.x,
|
||||
ligne_ref.location.y-rep_ref.location.y,
|
||||
ligne_ref.location.z-rep_ref.location.z)
|
||||
# bpy.data.collections["Doc generation"].objects.link(ligne_text)
|
||||
ligne_text.parent = rep_page
|
||||
collection.objects.link(ligne_text)
|
||||
collection_old.objects.unlink(ligne_text)
|
||||
|
||||
# Texte de la page découpé
|
||||
# lines = card_description[card][1].split("\n")
|
||||
# for j in range (13):
|
||||
# ligne_name = "Doc_text-l"+str(j+1)+"-"+str(card)
|
||||
# ligne_ref=bpy.data.objects["Doc_text-l"+str(j+1)+"-ref"]
|
||||
# # ligne_ref.data.body="A"
|
||||
# if j >= len(lines):
|
||||
# pass
|
||||
# else:
|
||||
# if len(lines[j]) ==0:
|
||||
# pass
|
||||
# else:
|
||||
# ligne_text = addText(scene, ligne_name, "Doc_text-l"+str(j+1)+"-ref", lines[j],
|
||||
# ligne_ref.location.x-rep_ref.location.x,
|
||||
# ligne_ref.location.y-rep_ref.location.y,
|
||||
# ligne_ref.location.z-rep_ref.location.z)
|
||||
# bpy.data.collections["Doc generation"].objects.link(ligne_text)
|
||||
# ligne_text.parent = rep_page
|
||||
# # for obj_selected in bpy.context.selected_objects:
|
||||
# # obj_selected.select_set(False)
|
||||
# # bpy.ops.object.join()
|
||||
|
||||
# Fin
|
||||
print ("Génération des pages de la documentation pour le chapitre : "+ obj.name +" Ok")
|
||||
|
||||
###############################################################################
|
||||
# Bas niveau duplication d'objet
|
||||
###############################################################################
|
||||
|
||||
# Copier un object
|
||||
|
||||
def duplicateObject (scene, name, src, x, y, z) :
|
||||
for obj in bpy.context.selected_objects:
|
||||
obj.select_set(False)
|
||||
bpy.data.objects[src].select_set(True)
|
||||
bpy.ops.object.duplicate()
|
||||
for obj in bpy.context.selected_objects:
|
||||
break
|
||||
obj.name = name
|
||||
obj.scale = bpy.data.objects[src].scale
|
||||
obj.location = (x,y,z)
|
||||
return obj
|
||||
|
||||
# Créer un texte
|
||||
|
||||
def addText (scene, name, src, body, x, y, z) :
|
||||
curve = duplicateObject(scene, name, src, x, y, z)
|
||||
curve.data.body=body
|
||||
return curve
|
||||
|
||||
# Créer un maillage texte
|
||||
|
||||
def addTextMesh (scene, name, src, body, x, y, z) :
|
||||
curve = duplicateObject(scene, name, src, x, y, z)
|
||||
curve.data.body=body
|
||||
mesh = bpy.data.meshes.new_from_object(curve)
|
||||
obj = bpy.data.objects.new(name, mesh)
|
||||
obj.matrix_world = curve.matrix_world
|
||||
for obj_selected in bpy.context.selected_objects:
|
||||
obj_selected.select_set(False)
|
||||
curve.select_set(True)
|
||||
bpy.ops.object.delete()
|
||||
obj.name = name
|
||||
return obj
|
||||
|
||||
###############################################################################
|
||||
# Main
|
||||
###############################################################################
|
||||
|
||||
text_gene(scene.objects["Doc_chap-system"])
|
||||
text_gene(bpy.data.objects["Doc_chap-python"])
|
||||
text_gene_end()
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1 @@
|
|||
/home/phroy/Bureau/seriousgames/blender-edutech/git/digital_twin/twin_doc-gen.py
|
|
@ -0,0 +1 @@
|
|||
/home/phroy/Bureau/seriousgames/blender-edutech/git/digital_twin/twin_doc-gen.py
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
2
twin.py
2
twin.py
|
@ -150,8 +150,6 @@ def cmd_init():
|
|||
windows=("Doc", "Doc_chap-general", "Doc_chap-system", "Doc_chap-python", "About")
|
||||
for window in windows:
|
||||
scene.objects[window].setVisible(False,True)
|
||||
twin_doc.init_hide()
|
||||
# twin_doc.init()
|
||||
|
||||
##
|
||||
# Highlight des commandes
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<data>
|
||||
<screen>
|
||||
<width>1458</width>
|
||||
<height>820</height>
|
||||
<width>1359</width>
|
||||
<height>764</height>
|
||||
<quality>1</quality>
|
||||
</screen>
|
||||
</data>
|
|
@ -184,8 +184,8 @@ def text_gene(obj):
|
|||
# Repère page
|
||||
rep_ref= bpy.data.objects["Doc_chap-ref"]
|
||||
rep_page = duplicateObject(scene, "Doc_page-"+str(card), "Doc_chap-ref",rep_chap.location.x+ i*100, rep_chap.location.y, rep_chap.location.z)
|
||||
# collection = bpy.data.collections["Test"]
|
||||
# collection.objects.link(rep_page)
|
||||
collection = bpy.data.collections["Doc generation"]
|
||||
collection.objects.link(rep_page)
|
||||
i+=1
|
||||
|
||||
# Titre
|
||||
|
|
117
twin_doc.py
117
twin_doc.py
|
@ -1,5 +1,6 @@
|
|||
import bge # Bibliothèque Blender Game Engine (UPBGE)
|
||||
# import bpy # Blender
|
||||
import bpy # Blender
|
||||
import os
|
||||
import importlib
|
||||
import webbrowser
|
||||
import time
|
||||
|
@ -168,14 +169,6 @@ card_description.update({"python-card" : [card_python_title, card_python_text, c
|
|||
# Initialisation de la documentation
|
||||
##
|
||||
|
||||
def init_hide():
|
||||
for card in card_description:
|
||||
scene.objects["Doc_page-"+card].setVisible(False,True)
|
||||
|
||||
##
|
||||
# Initialisation de la documentation
|
||||
##
|
||||
|
||||
def init():
|
||||
|
||||
# UI : information
|
||||
|
@ -209,9 +202,11 @@ def init():
|
|||
scene.objects['Doc_chap-system-url'+str(i)+'-colbox'].suspendPhysics()
|
||||
scene.objects['Doc_chap-system-url'+str(i)].color = color_doc_chap
|
||||
|
||||
# Chargement du texte en mode dynamique
|
||||
if scene.objects['Doc']['static']== False :
|
||||
text_load()
|
||||
# Chargement du texte
|
||||
if scene.objects['Doc']['static']: # en statique
|
||||
text_static_load()
|
||||
else:
|
||||
text_dynamic_load() # en dynamique
|
||||
|
||||
# Mémorisation de la position des pages
|
||||
for page in chap:
|
||||
|
@ -249,7 +244,7 @@ def open():
|
|||
for i in range (13):
|
||||
scene.objects['Doc_text-l'+str(i+1)+'-ref'].setVisible(False, False)
|
||||
else:
|
||||
text_hide()
|
||||
text_dynamic_hide()
|
||||
|
||||
# Placer le nouveau chapitre
|
||||
name_chap = scene.objects['Doc']['page_chap']
|
||||
|
@ -282,11 +277,11 @@ def open():
|
|||
name_fct = scene.objects['Doc_chap-'+name_chap]['page_fct']
|
||||
scene.objects['Doc_title']['Text'] = card_description[name_fct][0]
|
||||
scene.objects['Doc_title'].setVisible(True, False)
|
||||
text_show(name_fct)
|
||||
text_dynamic_show(name_fct)
|
||||
else:
|
||||
scene.objects['Doc_title']['Text'] = " "
|
||||
scene.objects['Doc_title'].setVisible(False,True)
|
||||
text_hide()
|
||||
text_dynamic_hide()
|
||||
|
||||
##
|
||||
# Fermer la documentation
|
||||
|
@ -306,6 +301,10 @@ def close(cont):
|
|||
scene.objects["Doc_chap-"+page].worldPosition.y = scene.objects["Doc_chap-"+page]['init_ly']
|
||||
scene.objects["Doc_chap-"+page].worldPosition.z = scene.objects["Doc_chap-"+page]['init_lz']
|
||||
scene.objects['Doc'].setVisible(False,True)
|
||||
for card in card_description:
|
||||
scene.objects["Doc_page-"+card].setVisible(False,True)
|
||||
scene.objects["Doc_title-"+card].setVisible(False,True)
|
||||
scene.objects["Doc_text-"+card].setVisible(False,True)
|
||||
|
||||
##
|
||||
# Highlight
|
||||
|
@ -403,7 +402,7 @@ def chapter(cont):
|
|||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.z = scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_lz']
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].setVisible(False,True)
|
||||
else:
|
||||
text_hide(scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']]['page_fct'])
|
||||
text_dynamic_hide(scene.objects["Doc_chap-"+scene.objects['Doc']['page_chap']]['page_fct'])
|
||||
|
||||
# Placer le nouveau chapitre
|
||||
name_chap= obj.name[4:-7]
|
||||
|
@ -441,14 +440,14 @@ def chapter(cont):
|
|||
name_fct = scene.objects['Doc_chap-'+name_chap]['page_fct']
|
||||
scene.objects['Doc_title']['Text'] = card_description[name_fct][0]
|
||||
scene.objects['Doc_title'].setVisible(True, False)
|
||||
text_show(name_fct)
|
||||
text_dynamic_show(name_fct)
|
||||
else:
|
||||
if scene.objects['Doc']['static'] :
|
||||
pass
|
||||
else:
|
||||
scene.objects['Doc_title']['Text'] = " "
|
||||
scene.objects['Doc_title'].setVisible(False,True)
|
||||
text_hide()
|
||||
text_dynamic_hide()
|
||||
|
||||
##
|
||||
# Afficher les details de la fonction à partir d'une carte
|
||||
|
@ -459,36 +458,35 @@ def card (cont):
|
|||
obj = cont.owner
|
||||
name_chap = scene.objects['Doc']['page_chap']
|
||||
name_fct= obj.name[:-7]
|
||||
name_old_fct= scene.objects['Doc_chap-'+name_chap]['page_fct']
|
||||
scene.objects['Doc_title']['Text'] = " "
|
||||
|
||||
# Enlever l'ancienne carte
|
||||
if scene.objects['Doc_chap-'+name_chap]['page_fct'] !="":
|
||||
if name_old_fct !="":
|
||||
if scene.objects['Doc']['static'] :
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.x = scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_lx']
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.y = scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_ly']
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.z = scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_lz']
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].setVisible(False,True)
|
||||
scene.objects["Doc_page-"+name_old_fct].worldPosition.x = scene.objects["Doc_page-"+name_old_fct]['init_lx']
|
||||
scene.objects["Doc_page-"+name_old_fct].worldPosition.y = scene.objects["Doc_page-"+name_old_fct]['init_ly']
|
||||
scene.objects["Doc_page-"+name_old_fct].worldPosition.z = scene.objects["Doc_page-"+name_old_fct]['init_lz']
|
||||
scene.objects["Doc_page-"+name_old_fct].setVisible(False,True)
|
||||
else:
|
||||
text_hide(scene.objects['Doc_chap-'+name_chap]['page_fct'])
|
||||
scene.objects[scene.objects['Doc_chap-'+name_chap]['page_fct']].color = color_doc_fct
|
||||
scene.objects[scene.objects['Doc_chap-'+name_chap]['page_fct']+'-text'].color = color_doc_fct
|
||||
scene.objects[scene.objects['Doc_chap-'+name_chap]['page_fct']+'-icon'].color = color_doc_fct
|
||||
text_dynamic_hide(name_old_fct)
|
||||
scene.objects[name_old_fct].color = color_doc_fct
|
||||
scene.objects[name_old_fct+'-text'].color = color_doc_fct
|
||||
scene.objects[name_old_fct+'-icon'].color = color_doc_fct
|
||||
|
||||
# Afficher le texte de la carte
|
||||
print (name_fct)
|
||||
scene.objects['Doc_chap-'+name_chap]['page_fct'] = name_fct
|
||||
scene.objects[name_fct].color = color_doc_activate
|
||||
scene.objects[name_fct+'-icon'].color = color_doc_activate
|
||||
scene.objects[name_fct+'-text'].color = color_doc_activate
|
||||
if scene.objects['Doc']['static'] :
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_lx']=scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.x
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_ly']=scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.y
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']]['init_lz']=scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition.z
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].worldPosition = scene.objects['Doc'].worldPosition
|
||||
scene.objects["Doc_page-"+scene.objects['Doc_chap-'+name_chap]['page_fct']].setVisible(True,True)
|
||||
scene.objects["Doc_page-"+name_fct].worldPosition = scene.objects['Doc'].worldPosition
|
||||
scene.objects["Doc_page-"+name_fct].setVisible(True,True)
|
||||
else:
|
||||
scene.objects['Doc_title']['Text'] = card_description[name_fct][0]
|
||||
scene.objects['Doc_title'].setVisible(True, False)
|
||||
text_show(name_fct)
|
||||
text_dynamic_show(name_fct)
|
||||
|
||||
# URL
|
||||
if name_chap == "system" or name_chap == "python":
|
||||
|
@ -523,7 +521,7 @@ def link (cont):
|
|||
# Cacher le texte
|
||||
##
|
||||
|
||||
def text_hide(card=None):
|
||||
def text_dynamic_hide(card=None):
|
||||
if card is None:
|
||||
for card in card_description:
|
||||
for i in range (13):
|
||||
|
@ -536,7 +534,7 @@ def text_hide(card=None):
|
|||
# Afficher le texte
|
||||
##
|
||||
|
||||
def text_show(card=None):
|
||||
def text_dynamic_show(card=None):
|
||||
if card is None:
|
||||
for card in card_description:
|
||||
for i in range (13):
|
||||
|
@ -549,7 +547,7 @@ def text_show(card=None):
|
|||
# Préchargement des textes
|
||||
##
|
||||
|
||||
def text_load():
|
||||
def text_dynamic_load():
|
||||
for i in range (13):
|
||||
scene.objects['Doc_text-l'+str(i+1)+'-ref']['Text'] = ""
|
||||
|
||||
|
@ -571,3 +569,50 @@ def text_load():
|
|||
scene.objects['Doc_text-l'+str(i+1)+'-'+str(card)]['Text']=""
|
||||
else:
|
||||
scene.objects['Doc_text-l'+str(i+1)+'-'+str(card)]['Text']=lines[i]
|
||||
|
||||
###############################################################################
|
||||
# Chargement des pages statiques
|
||||
###############################################################################
|
||||
|
||||
def text_static_load():
|
||||
|
||||
# Charger la collection
|
||||
file_path = "asset/doc/porcou_doc-fr.blend"
|
||||
inner_path = "Collection"
|
||||
object_name ="Doc generation"
|
||||
bpy.ops.wm.append(
|
||||
filepath=os.path.join(file_path, inner_path, object_name),
|
||||
directory=os.path.join(file_path, inner_path),
|
||||
filename=object_name)
|
||||
scene.convertBlenderCollection(bpy.data.collections[object_name], True)
|
||||
|
||||
# Lier et configurer les objects
|
||||
for card in card_description:
|
||||
|
||||
# Repère
|
||||
page_name ="Doc_page-"+card
|
||||
scene.objects[page_name]['init_lx']=scene.objects[page_name].worldPosition.x
|
||||
scene.objects[page_name]['init_ly']=scene.objects[page_name].worldPosition.y
|
||||
scene.objects[page_name]['init_lz']=scene.objects[page_name].worldPosition.z
|
||||
|
||||
# Titre
|
||||
title_name ="Doc_title-"+card
|
||||
scene.objects[title_name]. setParent(scene.objects[page_name], True, False)
|
||||
bpy.data.objects[title_name].data.font=bpy.data.fonts['Espresso Dolce Regular']
|
||||
scene.objects[title_name].worldPosition.x += scene.objects[page_name].worldPosition.x
|
||||
scene.objects[title_name].worldPosition.y += scene.objects[page_name].worldPosition.y
|
||||
scene.objects[title_name].worldPosition.z += scene.objects[page_name].worldPosition.z
|
||||
|
||||
# Texte
|
||||
text_name ="Doc_text-"+card
|
||||
scene.objects[text_name]. setParent(scene.objects[page_name], True, False)
|
||||
# text_object=scene.objects[text_name].blenderObject.data
|
||||
# text_object.font=bpy.data.fonts['Espresso Dolce Regular'] # Trop lourd
|
||||
bpy.data.objects[text_name].data.font=bpy.data.fonts['Bfont Regular'] # Bien plus léger
|
||||
scene.objects[text_name].worldPosition.x += scene.objects[page_name].worldPosition.x
|
||||
scene.objects[text_name].worldPosition.y += scene.objects[page_name].worldPosition.y
|
||||
scene.objects[text_name].worldPosition.z += scene.objects[page_name].worldPosition.z
|
||||
|
||||
scene.objects[page_name].setVisible(False,True)
|
||||
scene.objects[title_name].setVisible(False,True)
|
||||
scene.objects[text_name].setVisible(False,True)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
/home/phroy/Bureau/seriousgames/blender-edutech/git/digital_twin/twin_doc-gen.py
|
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue