26 mai 2026
Pour générer un SVG, l’idée est de ne plus dépendre uniquement de
SFML pour afficher les lignes, mais de mémoriser les traits dessinés
puis de les exporter dans un fichier texte .svg.
Étapes recommandées :
Créer une structure pour stocker les lignes
Dans Turtle.h, ajouter par exemple :
struct Line {
double x1;
double y1;
double x2;
double y2;
unsigned char r;
unsigned char g;
unsigned char b;
};Puis dans Turtle.cpp, ajouter un
std::vector<Line> global, à côté de
sf::VertexArray lines.
Modifier drawLine()
Actuellement, drawLine ajoute
seulement deux sommets SFML dans lines.
Il faudrait aussi ajouter la ligne dans le tableau SVG :
svgLines.push_back({x1, y1, x2, y2, color[0], color[1], color[2]});Comme ça, le même appel drawLine() sert à la fois à
l’affichage SFML et à l’export SVG.
Ajouter une fonction d’export SVG
Dans Turtle.h :
void saveSvg(std::string const &filename);Dans Turtle.cpp, cette fonction ouvre un fichier texte
et écrit :
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-400 -300 800 600">
<line x1="..." y1="..." x2="..." y2="..." stroke="rgb(...)" />
</svg>Le viewBox="-400 -300 800 600" correspond bien à la vue
actuelle centrée sur (0, 0) dans une fenêtre
800x600.
Gérer l’axe Y
Bonne nouvelle : dans ce programme, les coordonnées de dessin sont
déjà utilisées avec une vue SFML centrée. SVG accepte aussi des
coordonnées avec y positif vers le bas, donc tu peux
exporter les mêmes valeurs directement.
Si tu veux un SVG mathématique avec y positif vers le
haut, il faudrait inverser y, mais ce n’est pas nécessaire
pour reproduire l’affichage actuel.
Appeler l’export à la fin du programme
Dans main.cpp, après la boucle d’exécution :
turtle::saveSvg("output.svg");Idéalement, tu peux ajouter un troisième argument à la ligne de commande :
logo fichier.logo delai output.svg
Mais la version simple consiste à toujours écrire
output.svg.
Ne pas inclure la tortue dans le SVG, sauf besoin
Le plus simple est d’exporter seulement le dessin, c’est-à-dire les lignes tracées par le stylo.
Si tu veux aussi afficher la tortue finale dans le SVG, il faudra soit :
turtleDir.Tester avec les exemples
Tester d’abord :
repete.Le changement le plus propre est donc : drawLine() reste
le point unique où les traits sont créés, SFML continue d’afficher, et
saveSvg() exporte les mêmes traits dans un fichier.