diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ba7be09
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+*.pdf
+docs
\ No newline at end of file
diff --git a/README.md b/README.md
index c912cb7..80dfa0c 100644
--- a/README.md
+++ b/README.md
@@ -12,3 +12,11 @@ Feel free to open issues for suggestions and to facilitate the workflow of remai
## Locale
local variations must start with prs_, lyn_, tls_...
+
+## Generate
+
+```bash
+python3 generator/generate.py --dir src --out docs
+```
+
+Note: if you added a static image, once you generate locally, the pdf will not feature the image you added locally. static images are fetched from "github.com/Atelier-Epita/fiches-tuto/raw/main/static/". Once pushed to main, the pdf will feature the image.
\ No newline at end of file
diff --git a/generator/document.html b/generator/document.html
index ce390ff..c64e3da 100644
--- a/generator/document.html
+++ b/generator/document.html
@@ -15,6 +15,7 @@
html, body {
margin: 0px !important;
padding: 0px !important;
+ font-size: 16px !important;
}
.bar {
@@ -49,8 +50,7 @@
}
article {
- margin: 42px 115px 115px;
- font-size: 20px !important;
+ margin: 42px 90px 90px;
}
h1:not(header h1), h2, h3, h4, h5, h6 {
@@ -64,7 +64,7 @@
-
+
%title%
diff --git a/generator/generate.py b/generator/generate.py
index 420a6bf..0b4a3b5 100644
--- a/generator/generate.py
+++ b/generator/generate.py
@@ -5,6 +5,8 @@
import markdown
import pdfkit
+file_path = os.path.dirname(os.path.realpath(__file__))
+ressources_path = "https://github.com/Atelier-Epita/fiches-tuto/raw/main/static/"
def process(path: str, output: str):
with open(path) as f:
@@ -13,14 +15,15 @@ def process(path: str, output: str):
content = markdown.markdown(content)
html = ""
- with open("document.html") as document:
+ with open(file_path + "/document.html") as document:
html = document.read()
html = html.replace("%title%", metadata['title']) \
- .replace("%content%", content)
+ .replace("%content%", content) \
+ .replace("../static/", ressources_path)
pdfkit.from_string(html, output, options={
- "margin-top": "0", "margin-bottom": "0", "margin-left": "0", "margin-right": "0",
+ "margin-top": "5", "margin-bottom": "5", "margin-left": "0", "margin-right": "0",
"dpi": "300"})
print(f"Processed {os.path.basename(path)}.")
@@ -32,9 +35,9 @@ def get_pdf_path(outdir: str, original_file: str):
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Process some integers.')
- parser.add_argument('-o', '--outdir', nargs='?', help='Output directory', default="./")
- parser.add_argument('-f', '--file', nargs='?', help='File to process')
- parser.add_argument('-d', '--dir', nargs='?', help='Directory to process')
+ parser.add_argument('-o', '--out', nargs='?', help='Output directory', default="./", type=str)
+ parser.add_argument('-f', '--file', nargs='?', help='File to process', type=str)
+ parser.add_argument('-d', '--dir', nargs='?', help='Directory to process', type=str)
args = parser.parse_args()
@@ -45,11 +48,18 @@ def get_pdf_path(outdir: str, original_file: str):
print("--file and --dir must not be present at the same time.")
exit(1)
+ if not os.path.exists(args.out):
+ os.makedirs(args.out)
+
if args.file is not None:
- process(str(args.file),
- get_pdf_path(str(args.outdir), str(args.file)))
+ process(
+ args.file,
+ get_pdf_path(str(args.out), str(args.file))
+ )
else:
- for file in os.listdir(str(args.dir)):
- if os.path.splitext(file)[1] in [".md", ".yaml", ".yml"]:
- process(str(args.dir).rstrip("/") + "/" + file,
- get_pdf_path(str(args.outdir), str(file)))
+ for file in os.listdir(args.dir):
+ extension = os.path.splitext(file)[1]
+ if extension in [".md", ".yaml", ".yml"]:
+ path = str(args.dir).rstrip("/") + "/" + file
+ outpath = get_pdf_path(str(args.out), str(file))
+ process(path, outpath)
diff --git a/src/impression_fdm.md b/src/impression_fdm.md
new file mode 100644
index 0000000..7743cae
--- /dev/null
+++ b/src/impression_fdm.md
@@ -0,0 +1,74 @@
+---
+title: Impression 3D
+---
+
+## Description
+
+Dans ce tutoriel, vous apprendrez à mieux aborder le design, le slice et l'impression 3d fdm.
+
+## Requirements
+
+Pour ce tuto, il vous faudra:
+
+- un logiciel de design 3d (recommandé: fusion360).
+- un logiciel de slicing (recommandé: cura).
+
+(*Note: ces logiciels sont installés sur le PC de la verriere*)
+
+## Design 3D
+
+Pour le design, vous pouvez utilisez ce que vous voulez: Fusion360, Blender ou autre. Dans le process, n'oubliez pas de penser aux différentes contraintes d'impression.
+Voici quelques conseils:
+
+- Penser aux forces qui s'exerçeront sur la pièce.
+- Les détails trop petits (moins d'un mm) ne seront difficilement imprimable.
+- Éviter les overhang.
+- Penser à la façon dont la pièce sera imprimée, la face qui sera en contact avec le bed sera la plus lisse. Plus cette face sera grande, plus la pièce sera stable.
+- Utiliser des côtes en millimetres.
+- Utiliser des tolérances pour les assemblages. Le plus souvent 0.2mm est suffisant. Par exemple, pour un axe de 10mm, le trou devrait faire 10.2mm voir 10.4mm.
+
+### Un exemple de création d'objet
+
+On a ici deux pièces qui sont conçues pour être assemblées. Ici la pièce est séparé en deux pour faciliter l'impression à plat sans supports.
+
+## Slice
+
+Pour Slice, nous utilisons Cura, il est installé sur le PC du lab. Commencez par importer votre modèle: `ctrl+o`, ensuite le placer sur la face qui semble la mieux comme base -> grosse surface plane ou alors un plan qui permet d'imprimer la piece avec le moins de supports possible.
+
+Il existe deux profils préconfigurés: un pour la d12 230 et un autre pour la d12 300, ils sont update de temps en temps sur le repo `https://github.com/Atelier-Epita/cura`.
+Ces profils influent directement sur la qualité des impressions.
+Vous pouvez si vous le souhaitez creer votre propre profil en dupliquant un existant.
+
+Voici quelques parametres qui pourraient être interessant à modifier suivant vos besoin (bien sûr je vous invite a aller regarder la doc pour de plus ample déscriptions):
+
+- layer height -> dépends directement de la taille de la buse, en général correspond à la moitié de la taille de la buse.
+- line width -> largeur d'une ligne imprimé, dépends aussi de la taille de la buse, la plupart du temps elle correspond a peu pret à la largeur de la buse +/- 10%.
+- vitesse d'impression -> l'augmenter permet d'imprimer plus vite, mais peut réduire la qualité de l'impression, les vitesses d'impression sont dépendantes de la taille de la buse, en général les proiles par défaut sont plutôt conservateurs par rapport à la qualité d'impression.
+- infill density -> la densité des remplissages est importante si vous voulez faire des pièces où les contraintes sont importantes. Par défaut entre 15-20%, l'augmenter produira une pièce plus robuste mais demandera plus de temps a imprimer.
+- supports -> votre pièce contient-elle de grands overhangs ? si oui: mettez des supports. Il existe également des supports en forme de tree, c'est parfois interessant de les utiliser.
+- temperatures -> il y a deux températures que vous pouvez régler si jamais vous imprimer avec du filament autre que celui par défaut: la température de la buse et celle du plateau.
+- plate adhesion -> pour certaines pièces, il est fortement recommandé de rajouter un raft ou un brim, ces deux méthodes permettent d'éviter que la pièce "warp" (voir la section troubleshooting pour plus d'information) en augmentant la surface de contact avec le bed.
+
+### Un exemple de slice
+
+
+### Impression
+
+Pour lancer l'impression, il suffit d'inserer la carte SD ou clef USB et de rentrer dans le menu "print" et cliquer sur votre fichier.
+(*Note: il peut être utile de préchauffer l'imprimante pour eviter de perdre du temps lors du lancement de l'impression*)
+
+L'imprimante se charge ensuite de lire le GCODE depuis la SD. On peut distinguer 3 séctions dans le gcode:
+
+- start gcode -> la séquence d'instruction exécuté pour toutes les impressions. Elle permet l'initialisation des axes, de la temperature du plateau, de la buse, du néttoyage de la buse
+- print -> le gcode généré par le slicer pour imprimer votre pièce.
+- end gcode -> la séquence d'instruction de fin: refroidir la buse, le bed, lever la tête et la placer à l'origine.
+
+Vous pouvez si vous le souhaiter modifier les gcode de start et de fin dans le tab `settings>printer>manage printers>machine settings` de cura.
+
+## Troubleshooting
+
+Quelques problèmes courant et comment les fix dans la plupart des cas:
+
+- warping -> Lorsque qu'un bord ou une partie de la pièce ne tient plus sur le bed. Dans 50% des cas c'est dû au design de la pièce, dans le cas écheant, rajouter un brim devrait amplement suffire. dans les 50 autres pourcents restant, recalibrer le plateau peut être une option, néttoyer le plateau, ou alors tout simplement imprimer le premier layer plus lentement.
+- blobs -> Dû à une pression trop élevé dans la buse, des petits blobs se font apparaitre aux jointures lorsqu'une rétractation ou une pause a lieux. Pour réduire cet effet, on peut augmenter la distance de rétractation ou bien rajouter du coasting: relacher la pression de la buse avant chaque retraction en réduisant la vitesse d'extrusion.
+- stringing -> L'impression possède des fils entre les différentes parties de la pièce. C'est dû à une rétractation trop faible, augmenter la rétractation devrait régler le problème.
diff --git a/static/cura.png b/static/cura.png
new file mode 100644
index 0000000..bf978ff
Binary files /dev/null and b/static/cura.png differ
diff --git a/static/fusion360.png b/static/fusion360.png
new file mode 100644
index 0000000..cd62b1f
Binary files /dev/null and b/static/fusion360.png differ
diff --git a/generator/static/logo.png b/static/logo.png
similarity index 100%
rename from generator/static/logo.png
rename to static/logo.png