Jump to content

Part Tutoriel écrire un script - Roulement à bille #1

From FreeCAD Documentation
This page is a translated version of the page Scripted Parts: Ball Bearing - Part 1 and the translation is 100% complete.
Tutoriel
Thème
Part Tutoriel écrire un script - Roulement à bille #1
Niveau
Débutant
Temps d'exécution estimé
30 min
Auteurs
r-frank
Version de FreeCAD
0.16.6706
Fichiers exemples
None
Voir aussi
Part Tutoriel écrire un script - Roulement à bille #2

Introduction

Ce tutoriel est destiné à initier les débutants à la création de pièces à l'aide de scripts Python dans FreeCAD. Il explique comment créer un roulement à billes en utilisant la méthode CSG. Le code générera un nouveau document FreeCAD contenant 12 formes (bague intérieure, bague extérieure et 10 billes/sphères).

Voici à quoi cela ressemblera :

Flux de travail

La procédure est plus ou moins identique à celle que vous suivriez pour créer la pièce dans l'atelier Part. Il n'y a que quelques petites différences.

  • Créez un nouveau document vide et définissez-le comme document actif.
  • Insérez un cylindre.
  • Insérez un cylindre.
  • Effectuez une découpe booléenne pour obtenir la forme de base de la bague intérieure.
  • Sélectionnez toutes les arêtes et appliquez un congé.
  • Insérez un tore.
  • Déplacez le tore en position et effectuez une découpe booléenne pour créer la rainure destinée aux billes.
  • Répétez toutes les étapes pour obtenir la forme de la bague extérieure.
  • Insérez la première bille.
  • Insérez les autres billes en utilisant les fonctions mathématiques pour calculer leur position.
  • Réglez la vue en axométrique.
  • Zoomez pour que tout tienne dans le cadre.

Filetage des arêtes

Dans l'atelier Part, lorsque vous utilisez l'interface graphique, vous sélectionnez les chanfreins dans la vue 3D ou dans le menu dédié aux arrondis, puis vous appliquez ces derniers. Ici, nous sélectionnons toutes les arêtes d'une forme et nous leur appliquons des arrondis. Nous devons donc sélectionner les arêtes AVANT de créer la rainure.

Remarques

Ce tutoriel utilise des primitives de pièces et des opérations booléennes, ce qui peut avoir un impact sur les performances.

Pour réaliser une pièce par script à partir d'esquisses pivotées, consultez le tutoriel Part Tutoriel écrire un script - Roulement à bille #2

Liens

Objets créés par script : la page wiki expliquant les bases du langage de script.

Code

## Ball-bearing script
## 11.08.2016 by r-frank (BPLRFE/LearnFreeCAD on Youtube)
## based on ball bearing script by JMG
## (http://linuxforanengineer.blogspot.de/2013/08/free-cad-bearing-script.html)

#needed for inserting primitives
import Part
#needed for calculating the positions of the balls
import math
#needed for translation of torus
from FreeCAD import Base

#VALUES#
#(radius of shaft/inner radius of inner ring)
R1=15.0
#(outer radius of inner ring)
R2=25.0
#(inner radius of outer ring)
R3=30.0
#(outer radius of outer ring)
R4=40.0
#(thickness of bearing)
TH=15.0
#(number of balls)
NBall=10
#(radius of ball)
RBall=5.0
#(rounding radius for fillets)
RR=1
#first coordinate of center of ball
CBall=((R3-R2)/2)+R2
#second coordinate of center of ball
PBall=TH/2

#Create new document
App.newDocument("Unnamed")
App.setActiveDocument("Unnamed")
App.ActiveDocument=App.getDocument("Unnamed")
Gui.ActiveDocument=Gui.getDocument("Unnamed")

#Inner Ring#
B1=Part.makeCylinder(R1,TH)
B2=Part.makeCylinder(R2,TH)
IR=B2.cut(B1)
#get edges and apply fillets
Bedges=IR.Edges
IRF=IR.makeFillet(RR,Bedges)
#create groove and show shape
T1=Part.makeTorus(CBall,RBall)
T1.translate(Base.Vector(0,0,TH/2))
InnerRing=IRF.cut(T1)
Part.show(InnerRing)

#Outer Ring#
B3=Part.makeCylinder(R3,TH)
B4=Part.makeCylinder(R4,TH)
OR=B4.cut(B3)
#get edges and apply fillets
Bedges=OR.Edges
ORF=OR.makeFillet(RR,Bedges)
#create groove and show shape
T2=Part.makeTorus(CBall,RBall)
T2.translate(Base.Vector(0,0,TH/2))
OuterRing=ORF.cut(T2)
Part.show(OuterRing)

#Balls#
for i in range(NBall):
  Ball=Part.makeSphere(RBall)
  Alpha=(i*2*math.pi)/NBall
  BV=(CBall*math.cos(Alpha),CBall*math.sin(Alpha),TH/2)
  Ball.translate(BV)
  Part.show(Ball)

#Make it pretty#
App.activeDocument().recompute()
Gui.activeDocument().activeView().viewAxometric()
Gui.SendMsgToActiveView("ViewFit")