Aller au contenu principal

Programmer avec Python

Lire et modifier la scène existante

scene.objets(), scene.trouver(), déplacer ce qui est déjà là, vider, régler la gravité.

Explication

Un script ne part pas forcément d'une feuille blanche : il voit la scène telle qu'elle est, y compris ce que tu as posé à la souris. scene.objets() rend la liste de tout ; scene.trouver(type="engrenage") filtre. Chaque objet rendu se lit (o.x, o.type, o.masse…) et se déplace (o.x = 100, o.angle = 45).

Tout ce que le script change est appliqué à la fin, d'un coup, et s'annule d'un seul Ctrl+Z.

Manipulation

Pose à la souris trois ou quatre pièces n'importe où. Puis :

for o in scene.objets():
    print(o.type, "en", o.x, o.y, "-", round(o.masse, 2), "kg")
Essayer ce code dans l’atelier Python

Puis, pour les aligner toutes sur une ligne :

x = -300
for o in scene.objets():
    if o.type != "ground":
        o.x = x
        o.y = -100
        x = x + 150
Essayer ce code dans l’atelier Python

Observation

Le bilan dit « 3 déplacés » ; les pièces sont alignées. Ctrl+Z : elles reviennent où elles étaient.

Ce qu'on peut faire

AppelEffet
scene.objets()tous les objets, souris comprise
scene.trouver(type="engrenage"), scene.trouver(materiau="acier")les objets qui correspondent (types : rectangle, cercle, engrenage, sol, dessin, pivot, ressort ; anglais aussi)
o.x = …, o.y = …, o.angle = …déplacer, tourner (les seules propriétés qui se règlent)
scene.vider()tout effacer, y compris ce qui est posé à la souris — Ctrl+Z rend tout
scene.gravite(1.62)la gravité en m/s², de −50 à 50
mecanique.masse(o), mecanique.inertie(o)la masse, et l'inertie du corps réel (déjà construit)

Ce qu'on ne peut pas faire depuis un script : effacer un objet en particulier, changer son matériau ou sa taille, lire sa vitesse pendant la lecture. Voir Ce qui n'existe pas (encore). Un script qui ne fait que lire (des print) ne laisse rien dans l'historique.

Détails : scene, les objets.