Commit 61d88bb0 authored by Jonathan Wiedemann's avatar Jonathan Wiedemann
Browse files

Lesson 1 added

Code Ok
Still need description for each step
parent 5dd95bc6
......@@ -45,7 +45,7 @@ except NameError:
Check = MoocChecker
def get_title():
title = u'[FR] Part Design Primitives Semaine 1'
title = u'[FR] MOOC Semaine 1 - Humidificateur de Steven Akoun'
return title
def get_description():
......@@ -62,9 +62,10 @@ def MakeDataTutorial():
moocWBpath = os.path.dirname(moocwb_locator.__file__)
moocWBpath_medias = os.path.join(moocWBpath, 'medias')
moocWB_images_path = os.path.join(moocWBpath_medias, 'images')
moocWB_icons_path = os.path.join(moocWBpath_medias, 'icons')
step = {}
img1 = os.path.join(moocWB_images_path, 'Document-new.svg')
img1 = os.path.join(moocWB_icons_path, 'Document-new.svg')
img2 = os.path.join(moocWB_images_path, 'Workbench_PartDesign.svg')
img3 = os.path.join(moocWB_images_path, 'PartDesign_Body.png')
img4 = os.path.join(moocWB_images_path, 'korrigans_final.png')
......@@ -81,13 +82,13 @@ def MakeDataTutorial():
</ul></p> ''' % (img1, img2, img3)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/JaSg66nimGFq/HD.mp4'
step["objectives"] = [u"Créer un nouveau document.", u"Basculer dans l'atelier PartDesign.", u"1 corps de pièce (Body)."]
step["objectives"] = [u"Créer un nouveau document.", u"Basculer dans l'atelier PartDesign.", u"Mode de navigation : Gesture"]
data_tutorial['steps'].append(step)
#step2
step = {}
img1 = os.path.join(moocWB_images_path, 'Sketcher_NewSketch.svg')
step["description"] = u'''<h3>Esquisse</h3> \
step["description"] = u'''<h3>Corps de pièce</h3> \
<p>Pour créer la base de l'objet, on va d'abord créer une esquisse \
sur le plan XZ du corps de pièce.</p> \
<p><img src= %s width="25"/> Pour cela on clique sur l'icone \
......@@ -95,7 +96,21 @@ def MakeDataTutorial():
dans l'onglet Tâche de la vue combinée.</p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 esquisse (Sketch) sur le plan XZ.", u"TODO : Taille de la grille de 10 mm."]
step["objectives"] = [u"1 Corps de piece"]
data_tutorial['steps'].append(step)
#step2
step = {}
img1 = os.path.join(moocWB_images_path, 'Sketcher_NewSketch.svg')
step["description"] = u'''<h3>Cube additif</h3> \
<p>Pour créer la base de l'objet, on va d'abord créer une esquisse \
sur le plan XZ du corps de pièce.</p> \
<p><img src= %s width="25"/> Pour cela on clique sur l'icone \
Nouvelle Esquisse et on choisit le plan XZ dans la liste visible \
dans l'onglet Tâche de la vue combinée.</p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 Cube additif 100 x 80 x 140 mm"]
data_tutorial['steps'].append(step)
#step3
......@@ -103,7 +118,7 @@ def MakeDataTutorial():
img1 = os.path.join(moocWB_images_path, 'Constraint_Horizontal.svg')
img2 = os.path.join(moocWB_images_path, 'Constraint_Vertical.svg')
img3 = os.path.join(moocWB_images_path, 'Constraint_PointOnPoint.svg')
step["description"] = u'''<h3>Géométries et contraintes</h3> \
step["description"] = u'''<h3>Cylindre additif</h3> \
<p>Dessiner un contour fermé de 5 coté à l'aide de l'outil polyligne.<p> \
<p><img src=%s width="25"/> L'outil polyligne ajoute \
automatiquement des contrainte de coïncidence entre chaque extrémités de segment.<p>\
......@@ -113,14 +128,13 @@ def MakeDataTutorial():
restants.</p>''' % (img3, img1, img2)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 contour fermé de 5 segments.", u"5 contraintes de coïncidence.", u"2 contraintes d'orientation verticales.",
u"1 contrainte d'orientation horizontale."]
step["objectives"] = [u"1 Cylindre additif Ø40 x 140 mm"]
data_tutorial['steps'].append(step)
#step4
step = {}
img1 = os.path.join(moocWB_images_path, 'Constraint_EqualLength.svg')
step["description"] = u'''<h3>Contrainte d'égalité</h3> \
step["description"] = u'''<h3>Cylindre additif</h3> \
<p>Nous pouvons contraindre 2 segments à être égaux, dans notre cas \
on veut que les 2 segments verticaux soient égaux entre eux et de \
même pour les 2 segments obliques.</p> \
......@@ -128,7 +142,7 @@ def MakeDataTutorial():
sur l'icône <img src=%s width="25"/>. Et on recommence pour les 2 segments obliques.<p>''' %(img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"2 paires de contraintes d'égalités", ]
step["objectives"] = [u"1 Cylindre additif Ø40 x 140 mm"]
data_tutorial['steps'].append(step)
#step5
......@@ -136,7 +150,7 @@ def MakeDataTutorial():
img1 = os.path.join(moocWB_images_path, 'Constraint_HorizontalDistance.svg')
img2 = os.path.join(moocWB_images_path, 'Constraint_VerticalDistance.svg')
img3 = os.path.join(moocWB_images_path, 'Constraint_InternalAngle.svg')
step["description"] = u'''<h3>Dimensions</h3> \
step["description"] = u'''<h3>Cube soustractif</h3> \
<p>Pour paramétrer précisement les mesures de notre esquisse, \
on va ajouter des contraintes de dimensions.</p> \
<p><img src=%s width="25"/>Pour ajouter des dimensions horizontale entre 2 points ou un segment, \
......@@ -156,13 +170,13 @@ def MakeDataTutorial():
Ensuite il faut cliquer sur 2 segments et préciser la valeur de l'angle. <b>Ici c'est 55°.</b></p>''' % ( img1, img2, img3 )
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 contrainte de dimension verticale de 150mm.", u"1 contrainte de dimensions horizontale de 55 mm.", u"1 contrainte de valeure angulaire de 55°." ]
step["objectives"] = [u"1 Cube soustractif de 80 x 80 x 20 mm" ]
data_tutorial['steps'].append(step)
#step6
step = {}
img1 = os.path.join(moocWB_images_path, 'Constraint_Symmetric.svg')
step["description"] = u'''<h3>Contrainte de symétrie</h3> \
step["description"] = u'''<h3>cylindre soustractif</h3> \
<p>Il nous reste 2 degrès de libertés qui sont les positions X et Y \
de notre contour dans l'esquisse.<p> \
<p>Nous allons contraindre le contour de façon à ce que l'origine \
......@@ -171,13 +185,13 @@ def MakeDataTutorial():
d'un segment on utilise une contrainte de symétrie.<p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 contrainte de symétrie."]
step["objectives"] = [u"1 cylindre soustractif de Ø36 x 30 mm."]
data_tutorial['steps'].append(step)
#step7
step = {}
img1 = os.path.join(moocWB_images_path, 'PartDesign_Pad.svg')
step["description"] = u'''<h3>Faire une protrusion</h3> \
step["description"] = u'''<h3>cylindre soustractif</h3> \
<p>Nous allons maintenant créer une protrusion de 55 mm à partir de \
cette esquisse afin de générer du volume.<p> \
<p>On commence par sélectionner l'esquisse qui servira de base à la \
......@@ -189,13 +203,13 @@ def MakeDataTutorial():
<li>Inversée : décoché</li></ul></p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 protrusion (Pad) de 55 mm, symétrique au plan de l'esquisse."]
step["objectives"] = [u"1 cylindre soustractif de Ø36 x 30 mm."]
data_tutorial['steps'].append(step)
#step8
step = {}
img1 = os.path.join(moocWB_images_path, 'Sketcher_External.svg')
step["description"] = u'''<h3>Arêtes externe</h3> \
step["description"] = u'''<h3>Cube soustractif</h3> \
<p>Dans cette étape nous allons créer une nouvelle esquisse sur le plan YZ \
pour dessiner un triangle qui nous permettra d'enlever de la matière \
pour faire les pentes du chapeau. Pour positionner abilement le triangle \
......@@ -206,13 +220,13 @@ def MakeDataTutorial():
cliquer sur les arêtes du volume que l'on souhaite utiliser.</p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 esquisse (Sketch001) sur le plan YZ.", u"1 contour fermé à 3 cotés.", "2 arêtes externe."]
step["objectives"] = [u"1 cube soustractif de 100 x 72 x 30 mm."]
data_tutorial['steps'].append(step)
#step9
step = {}
img1 = os.path.join(moocWB_images_path, 'PartDesign_Pocket.svg')
step["description"] = u'''<h3>Faire une cavité</h3> \
step["description"] = u'''<h3>Faire une congé</h3> \
<p>Une cavité (pocket en anglais) est une fonction qui sert à enlever de la matière.</p> \
<p>On commence par sélectionner l'esquisse qui servira de base à la \
cavité, puis on clique sur l'icone <img src= %s width="25"/>.</p> \
......@@ -222,114 +236,7 @@ def MakeDataTutorial():
<li>Inversée : décoché</li></ul></p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 cavité (Pocket), à travers tout, symétrique au plan."]
data_tutorial['steps'].append(step)
#step10
step = {}
img1 = os.path.join(moocWB_images_path, 'PartDesign_Mirrored.svg')
step["description"] = u'''<h3>Répétition</h3> \
<p>Nous n'avons fais qu'un coté du chapeau. On pourrait répéter \
l'opération (esquisse + cavité), on aurait pus dessiner une esquisse \
plus complexe à l'étape précédente. Mais nous avons à disposition \
des outils de répétition. Ainsi nous allons facilement répéter la \
fonction cavité par mirroir.</p> \
<p>On sélectionne en premier lieu la fonction à répéter, puis on \
clique sur l'icône <img src= %s width="25"/>.</p> \
<p>Dans le panneau de l'onglet tâche on va définir les paramètres suivant : \
<ul><li>Plan : axe d'esquisse vertical</li></ul></p>''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 répétition par symétrie (Mirrored)."]
data_tutorial['steps'].append(step)
#step11
step = {}
img1 = os.path.join(moocWB_images_path, 'Sketcher_CreateSlot.svg')
step["description"] = u'''<h3>Contour oblong</h3> \
<p>Esquisse avec un contour fermé formant un trou oblong.<p>'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 esquisse (Sketch002) sur le plan YZ.", u"1 contour fermé.", u"4 contraintes de tangence."]
data_tutorial['steps'].append(step)
#step12
step = {}
step["description"] = u'''<h3>Un entrejambe</h3> \
<p>L'opération consiste à faire une cavité à partir de l'esquisse \
précédente. C'est la même démarche qu'à l'étape numéro 9.<p>'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 cavité (Pocket001), à travers tout, direction inversée."]
data_tutorial['steps'].append(step)
#step13
step = {}
img1 = os.path.join(moocWB_images_path, 'PartDesign_PolarPattern.svg')
step["description"] = u'''<h3>Répétition circulaire</h3> \
<p>On va répéter la cavité 4 fois autour du centre pour obtenir les 4 jambes.<p>'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 répétition circulaire (PolarPattern) de 4 occurences autour de l'axe vertical."]
data_tutorial['steps'].append(step)
#step14
step = {}
step["description"] = u'''<h3>Une oreille.</h3> \
<p>On va réaliser une oreille à l'aide d'une esquisse en forme de \
triangle de 25 mm x 20 mm.<p>" \
<p>Puis une protrusion de 15 mm.<p>'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 esquisse (Sketch003) sur le plan YZ.", u"1 protrusion (Pad001) de 15 mm symétrique au plan."]
data_tutorial['steps'].append(step)
#step15
step = {}
step["description"] = u'''<h3>Oreille par symétrie</h3> \
<p>Répétition par symétrie.<p>'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 répétition par symétrie (Mirrored001)."]
data_tutorial['steps'].append(step)
#step16
step = {}
img1 = os.path.join(moocWB_images_path, 'PartDesign_Plane.svg')
step["description"] = u'''<h3>Créer un plan de référence</h3> \
<p>Nous avons besoin d'un plan de travail décalé par rapport \
au plan YZ pour y appliquer une nouvelle esquisse.<p>
<p>On commence par afficher l'origine du corps de pièce \
(barre espace sur la fonction Origin), ensuite on clique sur l'icône \
<img src= %s width="25"/>.''' % (img1)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 plan de référence (DatumPlane)."]
data_tutorial['steps'].append(step)
#step17
step = {}
step["description"] = u'''<h3>Faire le nez</h3> \
<p>Pour faire le nez on va dessiner dans une esquisse appliquée au \
plan de référence un cercle et faire une protrusion.<p>\
<p>On sélectionne le plan de référence (datum plane) et on clique \
sur l'icone de création d'esquisse. On dessine un cercle dont on \
contraint le rayon à 3 mm et on contraint le centre sur l'axe \
verticale de l'esquisse et à 120 mm de l'origine.'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 esquisse (Sketch004) sur le plan de référence.", u"1 cercle de 3 mm de rayon", u"1 Protrusion (Pad002) de 12 mm."]
data_tutorial['steps'].append(step)
#step18
step = {}
step["description"] = u'''<h3>Faire les yeux</h3> \
<p>Enfin pour faire les yeux on utilisera des méthodes déjà employés : \
<ul><li>Un cercle dans une esquisse servira à percer le premier trou. \
<li>et on répètera cette opération par symétrie.</li></ul></p>'''
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 esquisse (Sketch005) sur le plan de référence.", u"1 cercle de rayon 1,5 mm.", u"1 cavité (Pocket002) de 10 mm.", u"1 Répétition de symétrie."]
step["objectives"] = [u"1 congé de 9 mm de rayon"]
data_tutorial['steps'].append(step)
#step19
......@@ -337,13 +244,13 @@ def MakeDataTutorial():
img1 = os.path.join(moocWB_images_path, 'Document-save.svg')
img2 = os.path.join(moocWB_images_path, 'freecadSaveDetail.png')
step["description"] = u'''<h3>Sauvegarder le document.</h3> \
<p><img src=%s width="25"/> Sauvegader le document sous le nom <b>Korrigans</b> : \
<p><img src=%s width="25"/> Sauvegader le document sous le nom <b>Humidificateur</b> : \
<ul><li>à l'aide du menu <i>Fichier</i> puis <i>Enregistrer sous ...</i></li> \
<li>à l'aide du raccourcis <b>Ctrl+Maj+S</b></li></lu></p> \
<p><img src=%s width="360"/></p>''' % (img1, img2)
step["video"] = 'https://d381hmu4snvm3e.cloudfront.net/videos/ogXi1cPygQ3H/HD.mp4'
step["objectives"] = [u"1 Sauvegardé le document sous le nom Korrigans."]
step["objectives"] = [u"1 Sauvegardé le document sous le nom Humidificateur."]
data_tutorial['steps'].append(step)
return data_tutorial
......@@ -353,113 +260,56 @@ def CheckResult(step_id):
results = []
results.append(Check.document_presence())
results.append(Check.active_workbench("PartDesignWorkbench"))
results.append(Check.body_presence())
results.append(Check.navigation_style("Gui::GestureNavigationStyle"))
return results
# create a new body, show it's origin and relabel it
if step_id == 1:
results = []
results.append(Check.sketch_presence(label="Sketch", support="XZ_Plane"))
results.append(Check.body_presence())
return results
if step_id == 2:
results = []
results.append(Check.geometry_presence(sketch_label="Sketch", count=5, isclosed=True))
results.append(Check.constraint_presence(sketch_label="Sketch", count=5, type='Coincident'))
results.append(Check.constraint_presence(sketch_label="Sketch", count=2, type='Vertical'))
results.append(Check.constraint_presence(sketch_label="Sketch", count=1, type='Horizontal'))
results.append(Check.primitive_presence(label="Box", type='PartDesign::AdditiveBox', dimensions=[100,80,140], support="XY_Plane", offset=[0,0,0,0,0,1,0]))
return results
if step_id == 3:
results = []
results.append(Check.constraint_presence(sketch_label="Sketch", count=2, type="Equal"))
results.append(Check.primitive_presence(label="Cylinder", type='PartDesign::AdditiveCylinder', dimensions=[40,140], support="XY_Plane", offset=[0,40,0,0,0,1,0]))
return results
if step_id == 4:
results = []
results.append(Check.constraint_presence(sketch_label="Sketch", count=1, type="DistanceY", value=150.0 ))
results.append(Check.constraint_presence(sketch_label="Sketch", count=1, type="DistanceX", value=55.0 ))
results.append(Check.constraint_presence(sketch_label="Sketch", count=1, type="Angle", value=55.0 ))
results.append(Check.primitive_presence(label="Cylinder001", type='PartDesign::AdditiveCylinder', dimensions=[40,140], support="XY_Plane", offset=[100,40,0,0,0,1,0]))
return results
if step_id == 5:
results = []
results.append(Check.constraint_presence(sketch_label="Sketch", count=1, type="Symmetric"))
results.append(Check.primitive_presence(label="Box001", type='PartDesign::SubstractiveBox', dimensions=[80,80,20], support="XY_Plane", offset=[10,0,0,0,0,1,0]))
return results
if step_id == 6:
results = []
results.append(Check.pad_presence(type = 'Length', length = 55.0, midplane = True ))
results.append(Check.primitive_presence(label="Cylinder002", type='PartDesign::SubstractiveCylinder', dimensions=[36,30], support="XY_Plane", offset=[0,40,110,0,0,1,0]))
return results
if step_id == 7:
results = []
results.append(Check.sketch_presence(label="Sketch001", support="YZ_Plane"))
results.append(Check.geometry_presence(sketch_label="Sketch001", count=3, isclosed=True))
results.append(Check.external_geometry_presence(sketch_label="Sketch001", count=2))
results.append(Check.primitive_presence(label="Cylinder003", type='PartDesign::SubstractiveCylinder', dimensions=[36,30], support="XY_Plane", offset=[100,40,110,0,0,1,0]))
return results
if step_id == 8:
results = []
results.append(Check.pocket_presence(name="Pocket", type = 'ThroughAll', midplane = True ))
results.append(Check.primitive_presence(label="Box002", type='PartDesign::SubstractiveBox', dimensions=[100,72,30], support="XY_Plane", offset=[0,4,110,0,0,1,0]))
return results
if step_id == 9:
results = []
results.append(Check.mirrored_pattern_presence(name="Mirrored", plane_name="Sketch001", plane_axis="V_Axis"))
results.append(Check.fillet_presence(label="Fillet", radius=9))
return results
if step_id == 10:
results = []
results.append(Check.sketch_presence(label="Sketch002", support="YZ_Plane"))
results.append(Check.geometry_presence(sketch_label="Sketch002", count=4, isclosed=True))
results.append(Check.constraint_presence(sketch_label="Sketch002", count=4, type="Tangent"))
return results
if step_id == 11:
results = []
results.append(Check.pocket_presence(name="Pocket001", type = 'ThroughAll', midplane = False, reversed=True ))
return results
if step_id == 12:
results = []
results.append(Check.polar_pattern_presence(name="PolarPattern", occurrences=4, axis="V_Axis"))
return results
if step_id == 13:
results = []
results.append(Check.sketch_presence(label="Sketch003", support="YZ_Plane"))
results.append(Check.pad_presence(name="Pad001", length=15.0, midplane=True))
return results
if step_id == 14:
results = []
results.append(Check.mirrored_pattern_presence(name="Mirrored001", plane_name="Sketch003", plane_axis="V_Axis"))
return results
if step_id == 15:
results = []
results.append(Check.datum_plane_presence(label="DatumPlane", support="YZ_Plane", offset=[0.0, 0.0, 27.5, 0.0, 0.0, 1.0, 0.0]))
return results
if step_id == 16:
results = []
results.append(Check.sketch_presence(label="Sketch004", support="DatumPlane"))
results.append(Check.constraint_presence(sketch_label="Sketch004", count=1, type="Radius", value=3.0 ))
results.append(Check.pad_presence(name="Pad002", length=12.0))
return results
if step_id == 17:
results = []
results.append(Check.sketch_presence(label="Sketch005", support="DatumPlane"))
results.append(Check.constraint_presence(sketch_label="Sketch005", count=1, type="Radius", value=1.5 ))
results.append(Check.pocket_presence(name="Pocket002", length=10.0))
results.append(Check.mirrored_pattern_presence(name="Mirrored002", plane_name="Sketch005", plane_axis="V_Axis"))
return results
if step_id == 18:
results = []
results.append(Check.document_save('Korrigans'))
results.append(Check.document_save('Humidificateur'))
return results
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment