import bge # Bibliothèque Blender Game Engine (UPBGE) import bpy # Blender import webbrowser import numpy as np ############################################################################### # twin_about.py # @title: A propos de l'environnement 3D pour jumeau numérique # @project: Blender-EduTech # @lang: fr # @authors: Philippe Roy # @copyright: Copyright (C) 2020-2023 Philippe Roy # @license: GNU GPL ############################################################################### # UPBGE scene scene = bge.logic.getCurrentScene() eevee = bpy.context.scene.eevee # Colors color_link = (0.198, 0.109, 0.8, 1) # Violet color_link_hl = (0.8, 0.005, 0.315, 1) # Magenta # color_link = (0.051, 0.270, 0.279,1) # Turquoise # color_link = (0.024, 0.006, 0.8, 1) # Bleu # color_link = (0.8, 0.005, 0.315, 1) # Magenta # UPBGE constants JUST_ACTIVATED = bge.logic.KX_INPUT_JUST_ACTIVATED JUST_RELEASED = bge.logic.KX_INPUT_JUST_RELEASED ACTIVATE = bge.logic.KX_INPUT_ACTIVE # JUST_DEACTIVATED = bge.logic.KX_SENSOR_JUST_DEACTIVATED ############################################################################### # Interface ############################################################################### ## # Ouverture ## def open(): scene.objects['System']['manip_mode']=9 # Fenêtre modale About scene.active_camera = scene.objects["Camera-About"] # scene.removeOverlayCollection(bpy.data.collections['Hud']) # Crash de UPBGE sur la supression de l'Overlay scene.objects['Twins-icon'].setVisible(False,True) # Crash de UPBGE sur la supression de l'Overlay scene.objects['Twins-text'].setVisible(False,True) # Crash de UPBGE sur la supression de l'Overlay scene.objects['About_close'].color= color_link # Configuration scene.objects['About_screen-up'].color= color_link scene.objects['About_screen-down'].color= color_link scene.objects['About_screen']['Text']= "Taille écran : "+str(bge.render.getWindowWidth()) +" x "+str(bge.render.getWindowHeight()) scene.objects['About_quality-up'].color= color_link scene.objects['About_quality-down'].color= color_link quality_txt=("Inconvenant", "Basse", "Moyenne", "Haute", "Épique") scene.objects['About_quality']['Text']= "Qualité : "+quality_txt[scene.objects['About']['quality']] # Liens scene.objects['About_link-git'].color= color_link scene.objects['About_link-git']['Text'] = "Dépôt des sources" # Pas de ô dans Blender scene.objects['About_link-gpl'].color= color_link scene.objects['About_link-upbge'].color= color_link scene.objects['About'].setVisible(True,True) # Taille de l'écran : Boutons < et > ("640x360", "960x540", "1280x720", "1920x1080") if bge.render.getWindowWidth() <=640: scene.objects['About_screen-down'].setVisible(False,True) scene.objects['About_screen-down-colbox'].suspendPhysics (True) else: scene.objects['About_screen-down'].setVisible(True,True) scene.objects['About_screen-down-colbox'].restorePhysics() if bge.render.getWindowWidth() >= 1920: scene.objects['About_screen-up'].setVisible(False,True) scene.objects['About_screen-up-colbox'].suspendPhysics (True) else: scene.objects['About_screen-up'].setVisible(True,True) scene.objects['About_screen-up-colbox'].restorePhysics() # Qualité du rendu : Boutons < et > if scene.objects['About']['quality']==4: scene.objects['About_quality-up'].setVisible(False,True) scene.objects['About_quality-up-colbox'].suspendPhysics (True) else: scene.objects['About_quality-up'].setVisible(True,True) scene.objects['About_quality-up-colbox'].restorePhysics() if scene.objects['About']['quality']==0: scene.objects['About_quality-down'].setVisible(False,True) scene.objects['About_quality-down-colbox'].suspendPhysics (True) else: scene.objects['About_quality-down'].setVisible(True,True) scene.objects['About_quality-down-colbox'].restorePhysics() ## # Fermer ## def close(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : scene.objects['System']['manip_mode']=0 # Enlever la fenêtre modale scene.active_camera = scene.objects["Camera"] # scene.addOverlayCollection(scene.cameras['Camera-Hud'], bpy.data.collections['Hud']) # Crash de UPBGE sur la supression de l'Overlay scene.objects['Twins-icon'].setVisible(True,True) # Crash de UPBGE sur la supression de l'Overlay scene.objects['Twins-text'].setVisible(True,True) # Crash de UPBGE sur la supression de l'Overlay scene.objects['About'].setVisible(False,True) ## # Highlight ## def hl(cont): if cont.sensors['MO'].status == JUST_ACTIVATED: obj = cont.owner name=obj.name[:-7] scene.objects[name].color = color_link_hl if cont.sensors['MO'].status == JUST_RELEASED: obj = cont.owner name=obj.name[:-7] scene.objects[name].color = color_link ## # Liens ## def link(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : obj = cont.owner name=obj.name[:-7] link={ 'About_link-git' : 'https://gitlab.com/blender-edutech/digital_twin', 'About_link-gpl' : 'https://www.gnu.org/licenses/gpl-3.0.html', 'About_link-upbge' : 'https://www.upbge.org'} webbrowser.open(link [name]) ############################################################################### # Configuration ############################################################################### ## # Taille de l'écran ## def get_near_pos(array,value): array = np.asarray(array) idx = (np.abs(array-value)).argmin() return idx # Taille de l'écran + def screen_up(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : screen_width_mode=[640, 960, 1280, 1920] screen_height_mode=[360, 540, 720,1080] screen_mode_txt=["640x360", "960x540", "1280x720", "1920x1080"] i = get_near_pos(screen_width_mode, bge.render.getWindowWidth()) if i>=0 and i<3 : screen_width=screen_width_mode[i+1] screen_height=screen_height_mode[i+1] scene.objects['About_screen']['Text']= "Taille écran : "+str(screen_width) +" x "+str(screen_height) bge.render.setWindowSize(screen_width,screen_height) # Boutons < et > if screen_width <=640: scene.objects['About_screen-down'].setVisible(False,True) scene.objects['About_screen-down-colbox'].suspendPhysics (True) else: scene.objects['About_screen-down'].setVisible(True,True) scene.objects['About_screen-down-colbox'].restorePhysics() if screen_width >= 1920: scene.objects['About_screen-up'].setVisible(False,True) scene.objects['About_screen-up-colbox'].suspendPhysics (True) else: scene.objects['About_screen-up'].setVisible(True,True) scene.objects['About_screen-up-colbox'].restorePhysics() # Taille de l'écran - def screen_down(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : screen_width_mode=[640, 960, 1280, 1920] screen_height_mode=[360, 540, 720,1080] screen_mode_txt=["640x360", "960x540", "1280x720", "1920x1080"] i = get_near_pos(screen_width_mode, bge.render.getWindowWidth()) if i>0 and i<=3 : screen_width=screen_width_mode[i-1] screen_height=screen_height_mode[i-1] scene.objects['About_screen']['Text']= "Taille écran : "+str(screen_width) +" x "+str(screen_height) bge.render.setWindowSize(screen_width,screen_height) # Boutons < et > if screen_width <=640: scene.objects['About_screen-down'].setVisible(False,True) scene.objects['About_screen-down-colbox'].suspendPhysics (True) else: scene.objects['About_screen-down'].setVisible(True,True) scene.objects['About_screen-down-colbox'].restorePhysics() if screen_width >= 1920: scene.objects['About_screen-up'].setVisible(False,True) scene.objects['About_screen-up-colbox'].suspendPhysics (True) else: scene.objects['About_screen-up'].setVisible(True,True) scene.objects['About_screen-up-colbox'].restorePhysics() ## # Qualité du rendu ## def quality_up(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : quality_txt=("Inconvenant", "Basse", "Moyenne", "Haute", "Épique") quality_eevee=('NOSMAA', 'LOW', 'MEDIUM','HIGH','ULTRA') scene.objects['About']['quality'] +=1 scene.objects['About_quality']['Text']= "Qualité : "+quality_txt[scene.objects['About']['quality']] if quality_eevee[scene.objects['About']['quality']] == 'NOSMAA': eevee.smaa_quality= 'LOW' eevee.use_eevee_smaa = False else: eevee.use_eevee_smaa = True eevee.smaa_quality= quality_eevee[scene.objects['About']['quality']] # Boutons < et > if scene.objects['About']['quality']==4: scene.objects['About_quality-up'].setVisible(False,True) scene.objects['About_quality-up-colbox'].suspendPhysics (True) if scene.objects['About']['quality']==1: scene.objects['About_quality-down'].setVisible(True,True) scene.objects['About_quality-down-colbox'].restorePhysics() def quality_down(cont): if cont.sensors['Click'].status == JUST_ACTIVATED and cont.sensors['MO'].positive : quality_txt=("Inconvenant", "Basse", "Moyenne", "Haute", "Épique") quality_eevee=('NOSMAA', 'LOW', 'MEDIUM','HIGH','ULTRA') scene.objects['About']['quality'] -=1 scene.objects['About_quality']['Text']= "Qualité : "+quality_txt[scene.objects['About']['quality']] if quality_eevee[scene.objects['About']['quality']] == 'NOSMAA': eevee.smaa_quality= 'LOW' eevee.use_eevee_smaa = False else: eevee.use_eevee_smaa = True eevee.smaa_quality= quality_eevee[scene.objects['About']['quality']] # Boutons < et > if scene.objects['About']['quality']==0: scene.objects['About_quality-down'].setVisible(False,True) scene.objects['About_quality-down-colbox'].suspendPhysics (True) if scene.objects['About']['quality']==3: scene.objects['About_quality-up'].setVisible(True,True) scene.objects['About_quality-up-colbox'].restorePhysics()