Illustre les modules 7 à 9 (6 figures)
M7 : modes Wi-Fi, requête HTTP. M8 : échanges navigateur/serveur, HTTP vs WebSocket. M9 : modèle GATT, session BLE. Diagrammes de séquence plus lisibles (étiquettes sur fond blanc, boîtes à la largeur du nom). Gabarit : figures pleine largeur par défaut. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
372c5a3e1e
commit
f4a80f4d5b
+20
-12
@@ -34,21 +34,26 @@ def boite(ax, x, y, l, h, texte="", couleur=BLEU, taille=9, gras=False, fond=Non
|
||||
|
||||
|
||||
def fleche(ax, depart, arrivee, texte="", couleur=ENCRE, taille=8, double=False, pointille=False,
|
||||
cote="haut", decalage=0.18, courbe=0):
|
||||
"""Flèche entre deux points, avec étiquette optionnelle au milieu."""
|
||||
cote="haut", decalage=0.18, courbe=0, fond=False):
|
||||
"""Flèche entre deux points, avec étiquette optionnelle au milieu.
|
||||
|
||||
fond=True place l'étiquette sur fond blanc (utile quand elle croise des traits).
|
||||
"""
|
||||
ax.annotate("", xy=arrivee, xytext=depart,
|
||||
arrowprops=dict(arrowstyle="<|-|>" if double else "-|>", color=couleur, lw=1.3,
|
||||
linestyle="--" if pointille else "-", shrinkA=0, shrinkB=0,
|
||||
mutation_scale=11, connectionstyle=f"arc3,rad={courbe}"))
|
||||
if texte:
|
||||
cadre = dict(boxstyle="square,pad=0.1", fc="white", ec="none") if fond else None
|
||||
mx, my = (depart[0] + arrivee[0]) / 2, (depart[1] + arrivee[1]) / 2
|
||||
vertical = abs(arrivee[0] - depart[0]) < abs(arrivee[1] - depart[1])
|
||||
if vertical:
|
||||
ax.text(mx + decalage, my, texte, ha="left", va="center", fontsize=taille, color=couleur)
|
||||
ax.text(mx + decalage, my, texte, ha="left", va="center", fontsize=taille, color=couleur,
|
||||
bbox=cadre)
|
||||
else:
|
||||
dy = decalage if cote == "haut" else -decalage
|
||||
ax.text(mx, my + dy, texte, ha="center", va="bottom" if cote == "haut" else "top",
|
||||
fontsize=taille, color=couleur)
|
||||
fontsize=taille, color=couleur, bbox=cadre)
|
||||
|
||||
|
||||
def chronogramme(voies, duree, largeur_cm=16, hauteur_voie_cm=1.5, graduations=None, unite="",
|
||||
@@ -98,20 +103,23 @@ def sequence(acteurs, messages, largeur_cm=16, pas_cm=0.85, couleurs=None, notes
|
||||
haut = hauteur - 0.6
|
||||
for a, x in xs.items():
|
||||
c = (couleurs or {}).get(a, BLEU)
|
||||
boite(ax, x, haut, min(3.6, largeur_cm / len(acteurs) - 0.4), 0.8, a, couleur=c, taille=8.5, gras=True)
|
||||
ax.plot([x, x], [0.3, haut - 0.4], color=GRIS, lw=1, ls=(0, (3, 3)))
|
||||
largeur = min(largeur_cm / len(acteurs) - 0.3, 0.2 * len(a) + 0.9)
|
||||
boite(ax, x, haut, largeur, 0.8, a, couleur=c, taille=8.5, gras=True)
|
||||
ax.plot([x, x], [0.55, haut - 0.4], color=GRIS, lw=1, ls=(0, (3, 3)), zorder=0)
|
||||
for k, msg in enumerate(messages):
|
||||
src, dst, texte = msg[:3]
|
||||
pointille = len(msg) > 3 and msg[3]
|
||||
y = haut - 1.2 - k * pas_cm
|
||||
if src == dst:
|
||||
ax.annotate("", xy=(xs[src] + 0.05, y - 0.3), xytext=(xs[src] + 0.05, y),
|
||||
arrowprops=dict(arrowstyle="-|>", color=ENCRE, lw=1.1,
|
||||
connectionstyle="arc,angleA=0,angleB=0,armA=18,armB=18,rad=4",
|
||||
mutation_scale=9))
|
||||
ax.text(xs[src] + 0.75, y - 0.15, texte, fontsize=7.8, va="center", color=ENCRE)
|
||||
# Boucle vers soi-même : petit rectangle ouvert à droite de la ligne de vie
|
||||
x = xs[src]
|
||||
ax.plot([x, x + 0.45, x + 0.45], [y + 0.12, y + 0.12, y - 0.22], color=ENCRE, lw=1.1)
|
||||
fleche(ax, (x + 0.45, y - 0.22), (x + 0.02, y - 0.22))
|
||||
ax.text(x + 0.6, y - 0.05, texte, fontsize=7.8, va="center", color=ENCRE,
|
||||
bbox=dict(boxstyle="square,pad=0.1", fc="white", ec="none"))
|
||||
continue
|
||||
fleche(ax, (xs[src], y), (xs[dst], y), texte, pointille=pointille, taille=7.8, decalage=0.08)
|
||||
fleche(ax, (xs[src], y), (xs[dst], y), texte, pointille=pointille, taille=7.8, decalage=0.08,
|
||||
fond=True)
|
||||
for k, acteur, texte in notes:
|
||||
y = haut - 1.2 - k * pas_cm
|
||||
ax.text(xs[acteur] + 0.2, y, texte, fontsize=7.5, color=GRIS, style="italic", va="center")
|
||||
|
||||
Reference in New Issue
Block a user