You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.9 KiB
168 lines
5.9 KiB
import PersonNetwork from "../src/model/PersonsNetwork";
|
|
import Person from "../src/model/Person";
|
|
import GenerateNetwork from "../src/model/NetworkGenerator";
|
|
import NetworkGenerator from "../src/model/NetworkGenerator";
|
|
|
|
import fs from 'fs';
|
|
import Stub from "../src/model/Stub";
|
|
import GameCreator from "../src/model/GameCreator";
|
|
import Indice from "../src/model/Indices/Indice";
|
|
import { SportToString } from "../src/model/EnumExtender";
|
|
import GraphCreator from "../src/model/Graph/GraphCreator";
|
|
import { DataSet, Network } from "vis-network";
|
|
|
|
function generateLatexCode(personsNet : PersonNetwork, choosenPerson : Person, choosenIndices : Indice[]) {
|
|
let latexCode = "";
|
|
|
|
|
|
//*Setup
|
|
latexCode += "\\documentclass[11pt]{article}\n"
|
|
latexCode += "\\usepackage{fullpage}\n"
|
|
latexCode += "\\usepackage{times}\n"
|
|
latexCode += "\\usepackage{tikz}\n"
|
|
latexCode += "\\usepackage{paralist}\n"
|
|
|
|
latexCode += "\\usetikzlibrary {shapes.multipart}\n"
|
|
|
|
latexCode += "\\newcommand{\\Basketball}{\\includegraphics[width=.5cm]{ballon-de-basket.png}}\n"
|
|
latexCode += "\\newcommand{\\Football}{\\includegraphics[width=.4cm]{ballon-de-foot.png}}\n"
|
|
latexCode += "\\newcommand{\\Bowling}{\\includegraphics[width=.5cm]{bowling.png}}\n"
|
|
latexCode += "\\newcommand{\\Baseball}{\\includegraphics[width=.5cm]{baseball.png}}\n"
|
|
latexCode += "\\newcommand{\\Tennis}{\\includegraphics[width=.5cm]{tennis.png}}\n"
|
|
|
|
|
|
//** Header
|
|
latexCode+= "\\begin{document}\n"
|
|
latexCode+= "\\thispagestyle{empty}\n"
|
|
latexCode+= "Voici le graphe de SocialGraphe\n"
|
|
latexCode+= "\\begin{center}\n"
|
|
latexCode+= "\\begin{tikzpicture}[scale=.9]\n"
|
|
|
|
|
|
//? Coordonnée en position.
|
|
//! marche pas
|
|
// const graph = GraphCreator.CreateGraph(personsNet)
|
|
|
|
// const container = document.getElementById('graph-container');
|
|
// if (!container) {
|
|
// console.error("Container not found");
|
|
// return;
|
|
// }
|
|
// // Charger les données dans le graph
|
|
// const nodes = new DataSet(graph.nodesPerson);
|
|
|
|
// // Configuration des options du Graphe
|
|
// const initialOptions = {
|
|
// layout: {
|
|
// improvedLayout: true,
|
|
// hierarchical: {
|
|
// enabled: false,
|
|
// direction: 'LR', // LR (Left to Right) ou autre selon votre préférence
|
|
// sortMethod: 'hubsize'
|
|
// }
|
|
// },
|
|
// physics: {
|
|
// enabled: true,
|
|
// barnesHut: {
|
|
// gravitationalConstant: -1000,
|
|
// springConstant: 0.001,
|
|
// springLength: 100
|
|
// }
|
|
// }
|
|
// };
|
|
|
|
// const networkData = { nodes: nodes, edges: graph.edges };
|
|
// const network = new Network(container, networkData, initialOptions);
|
|
|
|
|
|
personsNet.getPersons().forEach((person, index) => {
|
|
|
|
|
|
// //? Coordonnée en forme de grille.
|
|
const xCoordinate = index % 5;
|
|
const yCoordinate = Math.floor(index / 5);
|
|
const scaledX = xCoordinate * 4;
|
|
const scaledY = yCoordinate * 4;
|
|
|
|
latexCode += ` \\node[draw, circle split] (${person.getId()}) at (${scaledX},${scaledY}) { ${person.getName()} \\nodepart{lower}`;
|
|
|
|
|
|
|
|
//? Coordonnée en position.
|
|
//! marche pas
|
|
// var nodesData = network.getPositions();
|
|
// // for (var nodeId in nodesData) {
|
|
// // if (nodesData.hasOwnProperty(nodeId)) {
|
|
// // var position = nodesData[nodeId];
|
|
// // console.log("Nœud " + nodeId + " - Position : x = " + position.x + ", y = " + position.y);
|
|
// // }
|
|
// // }
|
|
// // latexCode += ` \\node[draw, circle split] (${person.getId()}) at (${x},${y}) { ${person.getName()} \\nodepart{lower}`; //x et y de la position
|
|
|
|
// // Obtenir les coordonnées du nœud
|
|
// const nodeId = person.getId().toString();
|
|
// const position = nodesData[nodeId];
|
|
// if (position) {
|
|
// const x = position.x.toFixed(2); // Arrondir à 2 décimales
|
|
// const y = position.y.toFixed(2);
|
|
|
|
// latexCode += ` \\node[draw, circle split] (${person.getId()}) at (${x},${y}) { ${person.getName()} \\nodepart{lower}`;
|
|
|
|
// person.getSports().forEach((sport) => { latexCode += ` \\${SportToString(sport, 'fr')}{}` });
|
|
// latexCode += "};\n";
|
|
// } else {
|
|
// console.error(`Les coordonnées du nœud ${nodeId} ne sont pas disponibles.`);
|
|
// }
|
|
|
|
|
|
person.getSports().forEach((sport) => { latexCode += ` \\${SportToString(sport, 'fr')}{}`})
|
|
latexCode += "};\n";
|
|
});
|
|
|
|
personsNet.getPersons().forEach((person) => {
|
|
person.getFriends().forEach((friend) => {
|
|
latexCode += ` \\draw (${person.getId()}) -- (${friend.getId()});\n`;
|
|
});
|
|
console.log(person.getFriends().length);
|
|
});
|
|
|
|
latexCode += "\\end{tikzpicture}\n";
|
|
latexCode += "\\end{center}\n";
|
|
|
|
//* Zone d'énoncé :
|
|
|
|
latexCode += "\n\n\\paragraph{Première énigme}\n"
|
|
|
|
|
|
latexCode += "Trouver qui est le coupable avec les indices suivants.\n"
|
|
latexCode += "\\begin{compactitem}\n"
|
|
|
|
|
|
choosenIndices.forEach((indice, index) => {
|
|
|
|
latexCode += `\\item Indice ${index + 1} : ${indice.ToString('fr')}.\n`
|
|
})
|
|
latexCode += "\\end{compactitem}\n"
|
|
|
|
//* Solution
|
|
latexCode += "% Solution : " + choosenPerson.getName() + "\n";
|
|
|
|
|
|
latexCode += "\\end{document}\n"
|
|
return latexCode;
|
|
}
|
|
|
|
|
|
const [networkPerson, choosenPerson, choosenIndices] = GameCreator.CreateGame(4, 30);
|
|
const latexCode = generateLatexCode(networkPerson, choosenPerson, choosenIndices);
|
|
|
|
|
|
const filePath = './graph.tex';
|
|
if (typeof latexCode === 'undefined') {
|
|
console.log('Variable is undefined');
|
|
}
|
|
else{
|
|
fs.writeFileSync(filePath, latexCode, 'utf-8');
|
|
}
|
|
console.log(`Le code LaTeX a été enregistré dans le fichier : ${filePath}`);
|