1. home >
  2. Large Language Artefacts >
  3. arthur-quet >
  4. :) :| :( TD

:) :| :( TD

GPT to Smiley on TD - Recherche Technique

def onStart():

Paramètres globaux

resolution = [512, 512] # Résolution uniforme pour tous les TOPs

# Créer un conteneur pour les smileys
parent_comp = op('/project1')  # Remplacez '/project1' par l'emplacement souhaité.
smiley_comp = parent_comp.create(containerCOMP, 'smiley')
smiley_comp.nodeWidth = 400
smiley_comp.nodeHeight = 400

# Créer le cercle externe (visage)
face_circle = smiley_comp.create(circleTOP, 'face')
face_circle.par.resolutionw = resolution[0]
face_circle.par.resolutionh = resolution[1]
face_circle.par.radiusx = 0.5      # Rayon X du cercle
face_circle.par.radiusy = 0.5      # Rayon Y du cercle
face_circle.par.fillcolorr = 1     # Fond jaune
face_circle.par.fillcolorg = 1
face_circle.par.fillcolorb = 0
face_circle.par.bordercolorr = 0   # Contour noir
face_circle.par.bordercolorg = 0
face_circle.par.bordercolorb = 0
face_circle.par.borderwidth = 0.02

# Créer les yeux (les mêmes pour les trois smileys)
def create_eye(positionx, positiony):
    eye = smiley_comp.create(circleTOP, 'eye')
    eye.par.resolutionw = resolution[0]
    eye.par.resolutionh = resolution[1]
    eye.par.radiusx = 0.08        # Rayon X
    eye.par.radiusy = 0.08        # Rayon Y
    eye.par.centerx = positionx   # Position relative X
    eye.par.centery = positiony   # Position relative Y
    eye.par.fillcolorr = 0        # Fond noir
    eye.par.fillcolorg = 0
    eye.par.fillcolorb = 0
    return eye

# Créer les yeux gauche et droit
eye_left = create_eye(-0.2, 0.2)
eye_right = create_eye(0.2, 0.2)

# Créer la bouche en colère (quart de cercle inversé)
def create_angry_mouth():
    mouth = smiley_comp.create(circleTOP, 'angry_mouth')
    mouth.par.resolutionw = resolution[0]
    mouth.par.resolutionh = resolution[1]
    mouth.par.radiusx = 0.3            # Rayon du quart de cercle
    mouth.par.radiusy = 0.15           # Hauteur du quart de cercle
    mouth.par.centerx = 0              # Position X (centré)
    mouth.par.centery = -0.25          # Position Y (bas)
    mouth.par.fillcolorr = 0           # Pas de fond (transparence)
    mouth.par.fillcolorg = 0
    mouth.par.fillcolorb = 0
    mouth.par.fillalpha = 0            # Supprime l'alpha (fond transparent)
    mouth.par.beginarcangle = 0        # Angle de départ de l'arc (0°)
    mouth.par.endarcangle = 180        # Angle de fin de l'arc (180°)
    mouth.par.bordercolorr = 0         # Contour noir
    mouth.par.bordercolorg = 0
    mouth.par.bordercolorb = 0
    mouth.par.borderwidth = 0.08      # Largeur du contour de la bouche en colère
    return mouth

# Créer la bouche contente (quart de cercle orienté vers le haut)
def create_happy_mouth():
    mouth = smiley_comp.create(circleTOP, 'happy_mouth')
    mouth.par.resolutionw = resolution[0]
    mouth.par.resolutionh = resolution[1]
    mouth.par.radiusx = 0.3            # Rayon du quart de cercle
    mouth.par.radiusy = 0.15           # Hauteur du quart de cercle
    mouth.par.centerx = 0              # Position X (centré)
    mouth.par.centery = -0.25          # Position Y (bas)
    mouth.par.fillcolorr = 0           # Pas de fond (transparence)
    mouth.par.fillcolorg = 0
    mouth.par.fillcolorb = 0
    mouth.par.fillalpha = 0            # Supprime l'alpha (fond transparent)
    mouth.par.beginarcangle = 180      # Angle de départ de l'arc (180°)
    mouth.par.endarcangle = 360        # Angle de fin de l'arc (360°)
    mouth.par.bordercolorr = 0         # Contour noir
    mouth.par.bordercolorg = 0
    mouth.par.bordercolorb = 0
    mouth.par.borderwidth = 0.08      # Largeur du contour de la bouche joyeuse
    return mouth

# Créer la bouche neutre (bouche plate)
def create_neutral_mouth():
    mouth = smiley_comp.create(rectangleTOP, 'neutral_mouth')
    mouth.par.resolutionw = resolution[0]
    mouth.par.resolutionh = resolution[1]
    mouth.par.sizex = 0.3             # Largeur de la bouche
    mouth.par.sizey = 0.05            # Hauteur (très fine pour une bouche plate)
    mouth.par.centerx = 0             # Position X (centrée)
    mouth.par.centery = -0.25         # Position Y (bas)
    mouth.par.fillcolorr = 0          # Pas de fond (transparence)
    mouth.par.fillcolorg = 0
    mouth.par.fillcolorb = 0
    mouth.par.fillalpha = 0           # Supprime l'alpha (fond transparent)
    mouth.par.bordercolorr = 0        # Contour noir
    mouth.par.bordercolorg = 0
    mouth.par.bordercolorb = 0
    mouth.par.borderwidth = 0.04      # Largeur du contour de la bouche neutre
    return mouth

# Créer les bouches (en colère, contente et neutre)
angry_mouth = create_angry_mouth()
happy_mouth = create_happy_mouth()
neutral_mouth = create_neutral_mouth()

# Créer un composite pour chaque bouche et les connecter
composite_angry = smiley_comp.create(compositeTOP, 'composite_angry')
composite_angry.par.resolutionw = resolution[0]
composite_angry.par.resolutionh = resolution[1]
composite_angry.par.operand = 31  # Mode "Over" (valeur 31)

composite_happy = smiley_comp.create(compositeTOP, 'composite_happy')
composite_happy.par.resolutionw = resolution[0]
composite_happy.par.resolutionh = resolution[1]
composite_happy.par.operand = 31  # Mode "Over" (valeur 31)

composite_neutral = smiley_comp.create(compositeTOP, 'composite_neutral')
composite_neutral.par.resolutionw = resolution[0]
composite_neutral.par.resolutionh = resolution[1]
composite_neutral.par.operand = 31  # Mode "Over" (valeur 31)

# Connecter les éléments aux composites respectifs
eye_left.outputConnectors[0].connect(composite_angry.inputConnectors[0])
eye_right.outputConnectors[0].connect(composite_angry.inputConnectors[1])
angry_mouth.outputConnectors[0].connect(composite_angry.inputConnectors[2])
face_circle.outputConnectors[0].connect(composite_angry.inputConnectors[3])  # Connecter le visage en dernier

eye_left.outputConnectors[0].connect(composite_happy.inputConnectors[0])
eye_right.outputConnectors[0].connect(composite_happy.inputConnectors[1])
happy_mouth.outputConnectors[0].connect(composite_happy.inputConnectors[2])
face_circle.outputConnectors[0].connect(composite_happy.inputConnectors[3])  # Connecter le visage en dernier

eye_left.outputConnectors[0].connect(composite_neutral.inputConnectors[0])
eye_right.outputConnectors[0].connect(composite_neutral.inputConnectors[1])
neutral_mouth.outputConnectors[0].connect(composite_neutral.inputConnectors[2])
face_circle.outputConnectors[0].connect(composite_neutral.inputConnectors[3])  # Connecter le visage en dernier

# Ajouter un outTOP pour la sortie de chaque expression
out_angry = smiley_comp.create(outTOP, 'out_angry')
composite_angry.outputConnectors[0].connect(out_angry.inputConnectors[0])

out_happy = smiley_comp.create(outTOP, 'out_happy')
composite_happy.outputConnectors[0].connect(out_happy.inputConnectors[0])

out_neutral = smiley_comp.create(outTOP, 'out_neutral')
composite_neutral.outputConnectors[0].connect(out_neutral.inputConnectors[0])

return

smiley

nodal