Topological data scripting/fr

Cette page décrit différentes méthodes pour créer et modifier Part shapes de Python.

Avant de lire cette page, si vous nouveau dans la programmation Python, vous pouvez vous diriger sur cette page d'introduction à Python et scripts de base en Python pour FreeCAD.

Introduction
Nous allons ici vous expliquer comment contrôler la boîte à outils (Part Module) ou de n'importe quel script externe, directement à partir de l'interpréteur Python inclus dans FreeCAD,.

Assurez-vous de parcourir l'article de familiarisation et scripts de base si vous avez besoin de plus amples renseignements sur la façon dont les scripts Python fonctionnent dans FreeCAD.

Class Diagram
Ceci est un Unified Modeling Language (UML) de la classe la plus importante de Part Module:

Figures géométriques
Les objets géométriques sont la base de tous les objets topologiques :


 * Geom La classe de base des objets géométriques
 * Line Une ligne droite en 3D, défini par un point de départ et point d'arrivée
 * Circle Circle or circle segment défini par un point central, un point de départ et un point d'arrivée
 * ...... Et bien plus encore très rapidement

Topology
Sont aussi disponibles des données de type topologique:


 * Compound Groupe de types différents d'objets topologiques.
 * Compsolid Un groupe de solides reliés par leurs faces. C'est un concept des notions de WIRE (filaire,bord..) et SHELL (coquille,enveloppe) des solides.
 * Solid Une portion de l'espace limité par son enveloppe. Il est en 3 dimensions.
 * Shell Un groupe de faces reliés par leurs bords.Un "SHELL" peut être ouvert ou fermé.
 * Face En 2D, c'est une surface plane; en 3D, c'est une seule face du volume. Sa géométrie est coupée par des contours. Il est en deux dimensions.
 * Wire Un ensemble relié par ses VERTEX (sommets). Il peut être de contour ouvert ou fermé suivant si les sommets sont reliés ou non.
 * Edge Elément topologique correspondant à une courbe retenue. Un "Edge" est généralement limité par des sommets. Il a une dimension.
 * Vertex Elément topologiques correspondant à un point. Il n'a pas de dimension.
 * Shape Est le terme générique pour traduire tout ce qui précède.

Exemple rapide : Création topologique simple


Nous allons créer une topologie avec une géométrie toute simple.

Nous devrons veiller à ce que les sommets des pièces géométriques soient à la même position, quatre sommets, deux cercles et deux lignes.

Création de la géométrie
Nous devons d'abord créer les parties distinctes géométriques en filaire.

Nous devons veiller à ce que tous les sommets des pièces géométriques qui vont êtres raccordées soient à la même position.

Sinon, plus tard nous pourrions ne pas être en mesure de relier les pièces géométriques en une topologie!

Donc, nous créons d'abord les points:

Arc


Pour créer un arc de cercle, nous créons un point de repère puis nous créons l'arc de cercle passant par trois points:

Ligne


La ligne peut être créée très simplement en dehors des points :

Tout relier
La dernière étape consiste à relier les éléments géométriquement ensemble, et façonner une forme topologique:

Construire un prisme
Maintenant nous allons extruder notre forme filaire dans une direction, et créer une forme en 3 Dimensions:

Création de formes simples
Vous pouvez créer facilement des formes topologiques avec "make..." qui est une méthode du "Module Part": La combinaison de make... avec d'autres methodes sont disponibles:


 * makeBox(l,w,h): Construit un cube et pointe sur p dans la direction d et de dimensions (longueur,largeur,hauteur).
 * makeCircle(radius): Construit un cercle de rayon (r).
 * makeCone(radius1,radius2,height): Construit un cône de (rayon1,rayon2,hauteur).
 * makeCylinder(radius,height): Construit un cylindre de (rayon,hauteur).
 * makeLine((x1,y1,z1),(x2,y2,z2)): Construit une ligne aux coordonnées (x1,y1,z1),(x2,y2,z2) dans l'espace 3D.
 * makePlane(length,width): Construit un rectangle de (longueur,largeur).
 * makePolygon(list): Construit un polygone (liste de points).
 * makeSphere(radius): Construit une sphère de (rayon).
 * makeTorus(radius1,radius2): Construit un tore de (rayon1,rayon2).

La liste complète des API du module est sur la page Part API.

Importer les modules nécessaires
Nous avons d'abord besoin d'importer le module Part afin que nous puissions utiliser son contenu Python.

Nous allons également importer le module Base à l'intérieur du module de FreeCAD:

Création d'un Vecteur
Les Vecteurs sont l'une des informations les plus importantes lors de la construction des formes géométriques.

Ils contiennent habituellement 3 nombres (mais pas toujours) les coordonnées cartésiennes x, y et z.

Vous pouvez créez un vecteur comme ceci: Nous venons de créer un vecteur de coordonnées x = 3, y = 2, z = 0.

Dans le module Part, les vecteurs sont utilisés partout.

Le module Part utilise aussi une autre façon de représenter un point, appelé Vertex, qui n'est actuellement rien d'autre qu'un conteneur pour un vecteur.

Vous pouvez accéder aux vecteurs d'un sommet comme ceci:

Création d'une arête (edge)
Une arête (bord) n'est rien d'autre qu'une ligne avec deux Vertex (sommets): PS: Vous pouvez aussi créer un arête en donnant deux Vecteurs: Vous pouvez trouver la longueur et le centre d'une arête comme ceci:

Mise en forme à l'écran
Jusqu'à présent, nous avons créé un objet a arêtes vives (bords), mais il n'est pas visible à l'écran.

C'est parce que nous n'avons manipulé que des objets en Python.

L'écran FreeCAD n'affiche uniquement que les vues 3D que vous lui demandez d'afficher.

Pour cela, nous utilisons une méthode simple: Un Objet 3D sera affiché dans notre document FreeCAD, et notre dessin sera affiché sous forme filaire.

Utilisez cette commande chaque fois que vous voudrez afficher votre forme géométrique à l'écran.

Création d'un contour (Wire)
Un contour est une ligne multi-arêtes, et peut être créé dans une liste d'arêtes ou même une liste de lignes (fils): Part.show (wire3) permet d'afficher les 4 bords qui composent notre contour filaire.

D'autres informations utiles, peuvent être facilement récupérées:

Création d'une face
Seul les faces à contour fermés seront valides.

Dans cet exemple, wire3 est un contour fermé, et Wire2 est un contour ouvert (voir ci-dessus) Seul les faces auront une superficie, mais les lignes et les bords (arêtes) n'en possède pas.

Création d'un cercle
Un cercle est créé simplement comme ceci: Si vous voulez le créer à une coordonnée précise, faites comme ceci: ccircle sera créé à une distance de 10 à partir de l'axe d'origine x et sera orienté dans la direction de l'axe x.

Remarque: makeCircle accepte uniquement Base.Vector pour la position mais pas les tuples normaux.

Vous pouvez également créer un arc de cercle en donnant l'angle de départ et l'angle de la fin comme suit: Si nous joignions les deux arcs arc1 et arc2 nous obtiendrons un cercle.

L'angle fourni doit être exprimé en degrés, s'il sont en radians, vous devez les convertir en degrès avec la formule: degrés = radians * 180/PI ou en utilisant le module mathématiques Python (après avoir fait import math, bien sûr):

Création d'un arc sur des points (repères)
Malheureusement, il n'existe pas de fonction makeArc mais nous avons la fonction Part.Arc pour créer un arc sur trois points de référence.

Fondamentalement, nous pouvons supposer un arc attaché sur un point de départ, passant sur un point central et se termine sur un point final en.

Part.Arc crée un objet arc pour lequel .ToShape doit être appelée pour obtenir un objet ligne (edge), de cette manière nous utiliserons Part.Line lieu de Part.makeLine. Arc travaille uniquement avec Base.Vector pour les points mais pas pour les tuples.

arc_edge est ce qui sera affiché à l'aide Part.show (arc_edge).

Vous pouvez également obtenir un arc de cercle en utilisant une partie de cercle: Les arcs Arc sont des lignes (edges). Ils peuvent donc, être utilisés aussi comme contour en filaire.

Création de polygones
Un polygone est tout simplement une ligne (wire) avec de multiples lignes droites.

La fonction makePolygon crée une liste de points et crée une ligne de points en points:

Création de courbes de Bézier
Les courbes de Bézier sont utilisées pour modéliser des courbes lisses à l'aide d'une série de repères (points de contrôle) avec un nombre de repères représentants la précision (fluidité de la courbe) optionnel. La fonction ci-dessous fait un Part.BezierCurve avec une série de points FreeCAD.Vector. (Note : l'indice du premier repère et du nombre commencent à 1, et pas à 0.)

Création d'une forme plane
Une forme plane, est tout simplement une surface plane rectangulaire.

La méthode utilisée pour créer une forme plane est la suivante: makePlane(longueur, largeur, [point de départ, direction]).

Par défaut point de départ = Vecteur(0,0,0) et direction = Vecteur(0,0,1).

L'utilisation point de départ = Vecteur(0,0,1) va créer la forme sur le plan axe z, tandis que direction = Vecteur(1,0,0) va créer la forme sur le plan axe x:

(Pour s'y retrouver un peu sur les axes, Vecteur ( 0, 0 , 1 ) est égal à Vecteur ( X=0 , Y=0 , Z=1 ) l'ordre des axes sera toujours ( x , y , z )) BoundBox est un rectangle qui possède une diagonale commençant sur le plan (3,0,0) et se terminant à (5,0,2).

L'épaisseur de la boîte (Box) dans l'axe y est égal à zéro, car notre forme est totalement plane.

PS: makePlane accepte uniquement Base.Vector pour start_pnt et dir_normal mais ici, pas de tuples

Création d'une ellipse
Pour créer une ellipse, il existe plusieurs façons: Créez une ellipse avec, grand rayon = 2, petit rayon = 1 et centre = (0,0,0) Créez une copie des données de l'ellipse Crée une ellipse positionnée au point "Center", le plan de l'ellipse est défini par Center, S1 et S2,

le grand axe est définit par Center et S1,

son grand rayon est la distance entre Center et S1,

son petit rayon est la distance entre S2 et le grand axe. Crée une ellipse avec un grand rayon MajorRadius et un petit rayon MinorRadius, et situé dans le plan défini par (0,0,1) Dans le code ci-dessus, nous avons passé S1 (Grand rayon), S2 (Petit rayon) et le centre (les coordonnées centrales).

De même que l'Arc, l'Ellipse crée également un objet Ellipse mais pas d'arête (bords), nous avons donc besoin de le convertir en arête à l'aide toShape pour l'afficher.

PS: Arc accepte uniquement Base.Vector pour les points mais pas les tuples. pour construire l'Ellipse ci-dessus, nous avons entré les coordonnées centrales, le Grand rayon et le Petit rayon.

Création d'un Tore
Nous créons un Tore en utilisant la méthode makeTorus( rayon1, rayon2 , [ pnt , dir , angle1 , angle2 , angle ] ).

Par défaut,

Rayon1 = est le rayon du grande cercle

Rayon2 = est le rayon du petit cercle,

pnt = Vecteur(0,0,0),pnt est le centre de tore

dir = Vecteur(0,0,1), dir est la direction normale

angle1 = 0, est l'angle de début pour le petit cercle exprimé en radians

angle2 = 360 est l'angle de fin pour le petit cercle exprimé en radians

angle = 360 le dernier paramètre est la section du tore

Le code ci-dessus créera un tore avec un diamètre de 20 (rayon de 10) et une épaisseur de 4 (rayon du petite cerlce 2) Le code ci-dessus créera une portion du tore Le code ci-dessus créera un demi tore, seul le dernier paramètre change à savoir l'angle et, les angles restants sont prédéfinis.

En donnant un angle de 180 degrés, crée un tore de 0 à 180 degrés, c'est à dire un demi tore.

Création d'un cube ou d'un parallélépipède
Utilisez makeBox ( longueur, largeur , hauteur , [ pnt , dir ] ).

Par défaut pnt=Vector(0,0,0) and dir=Vector(0,0,1)

Création d'une Sphère
Nous utiliserons makeSphere ( rayon, [ pnt , dir , angle1 , angle2 , angle3 ] ).

rayon = rayon de la sphère par défaut,

pnt = Vecteur (0,0,0),

dir = Vecteur (0,0,1),

angle1 = -90, verticale minimale de la sphère

angle2 = 90, verticale maximale de la sphère

angle3 = 360, le diamètre de la sphère elle-même

Création d'un Cylindre
Nous utiliserons makeCylinder ( radius, height , [ pnt , dir ,angle ] ).

Par défaut,

pnt=Vector(0,0,0),dir=Vector(0,0,1) and angle=360

Création d'un Cône
Nous utiliserons makeCone ( radius1, radius2 , height , [ pnt , dir , angle ] ).

Par défaut,

pnt=Vector(0,0,0), dir=Vector(0,0,1) and angle=360

Modification d'une forme
Il ya plusieurs manières de modifier des formes. Certaines sont de simples opérations de transformation telles que le déplacement ou la rotation de formes, d'autres, sont plus complexes, tels que fusion et en soustraction d'une forme à une autre. Tenez en compte.

Transformer une forme
La transformation est l'action de déplacer une forme d'un endroit à un autre.

Toute forme (arête, face, cube, etc ..) peut être transformé de la même manière: Cette commande va déplacer notre forme "myShape" de 2 unités dans la direction x.

Rotation d'une forme
Pour faire pivoter une forme, vous devez spécifier le centre de rotation, l'axe, et l'angle de rotation: Cette opération va faire pivoter notre forme de 180 degrés sur l'axe z.

Transformations génériques avec matrices
Une matrice est un moyen très simple de mémoriser les transformations dans le mode 3D. Dans une seule matrice, vous pouvez définir les valeurs de transformation, rotation et mise à l'échelle à appliquer à un objet.

Par exemple: PS: les matrices de FreeCAD travaillent en radians. En outre, presque toutes les opérations matricielles qui travaillent avec un vecteur peut aussi avoir 3 nombres, de sorte que ces 2 lignes effectuent le même travail: Lorsque notre matrice est paramétrée, nous pouvons l'appliquer à notre forme. FreeCAD fournit nous fournit 2 méthodes: transformShape et transformGeometry().

La différence est que, avec la première, vous ne verez pas de différence (voir "mise à l'échelle d'une forme" ci-dessous).

Donc, nous pouvons opérer notre transformation comme ceci: ou

Echelle du dessin (forme)
Changer l'échelle d'une forme est une opération plus dangereuse, car, contrairement à la translation ou à la rotation, le changement d'échelle non uniforme (avec des valeurs différentes pour x, y et z) peut modifier la structure de la forme!

Par exemple, le redimensionnement d'un cercle avec une valeur plus élevée horizontalement que verticalement le transformera en une ellipse, qui mathématiquement très différent.

Pour modifier l'échelle, nous ne pouvons pas utiliser le transformShape, nous devons utiliser transformGeometry:

Soustraction
Soustraire une forme d'une autre est appelé, dans le jargon OCC/FreeCAD "cut" (coupe) et,

se fait de cette manière:

Intersection
De la même manière, l'intersection entre 2 formes est appelé "common" et se fait de cette manière:

Fusion
La fusion "fuse", fonctionne de la même manière:

Section
Une section, est l'intersection entre une forme solide et une forme plane.

Il retournera une courbe d'intersection, et sera composé de bords (edges, arêtes)

Extrusion
L'extrusion est une action de "pousser" une forme plane dans une certaine direction et résultant en un corps solide.

Par exemple, pousser sur un cercle pour le transformer en tube: Si votre cercle est vide, vous obtiendrez un tube vide.

Mais si votre cercle est un disque, avec une face pleine, vous obtiendrez un cylindre solide:

Exploration de la forme (shape)
Vous pouvez facilement explorer la structure de ses données topologique: En tapant ce code dans l'interpréteur Python, vous aurez une bonne compréhension de la structure de Part objets.

Ici, notre commande makebox créé une forme solide. Ce solide, comme tous les solides Part, contiennent des faces. Une face est constituée de lignes, qui sont un ensemble de bords, arêtes qui délimitent la face. Chaque face a au moins un contour fermé (il peut en avoir plus si la face comporte un ou plusieurs trou). Dans une ligne, nous pouvons voir chaque côté séparément, et nous pouvons voir les sommets (Vertex) de chaque bord ou arête. Lignes et arêtes n'ont que deux sommets, évidemment.

Analyse des arêtes (Edge)
Dans le cas d'un bord (ou arête), qui est une courbe arbitraire, il est fort probable que vous voulez faire une discrétisation. Dans FreeCAD, les bords sont paramétrés par leurs longueurs.

Cela signifie, que vous pouvez suivre une arête/courbe par sa longueur: Maintenant, vous pouvez accéder à un grand nombre de propriétés de l'arête en utilisant sa longueur comme une position.

C'est à dire que, si l'arête(ou bord) a une longueur de 100 mm la position de départ est 0 et sa position extrème est 100.

Utilisation de la sélection
Ici, nous allons voir comment nous pouvons utiliser la fonction de sélection, quand l'utilisateur a fait une sélection dans la visionneuse.

Tout d'abord, nous créons une boîte (box), et nous le voyons et la sélectionnons dans la visionneuse. Sélectionnez maintenant quelques faces ou arêtes.

Avec ce script, vous pouvez parcourir tous les objets sélectionnés et visionner leurs sous-éléments: Sélectionnez quelques bords et ce script va calculer la longueur:

Exemple Complet: "The OCC bottle"
Un exemple typique, trouvée sur OpenCasCade Getting Started Page vous montre comment construire une bouteille.

C'est un excellent exercice pour FreeCAD. En fait, vous pouvez suivre notre exemple ci-dessous et regarder simultanément la page OCC, vous comprendrez comment les structures OCC sont misent en œuvre dans FreeCAD.

Le script complet ci-dessous de MakeBottle.py est également inclus dans l'installation de FreeCAD dans le dossier Mod/Part et peut être appelé à partir de l'interpréteur Python en tapant:

Le script complet
Ici, le script complet de MakeBottle.py (extension .py):

Détail et déroulement MakeBottle.py
We will need,of course, the Part module, but also the FreeCAD.Base module, which contains basic FreeCAD structures like vectors and matrixes. Here we define our makeBottle function. This function can be called without arguments, like we did above, in which case default values for width, height, and thickness will be used. Then, we define a couple of points that will be used for building our base profile. Here we actually define the geometry: an arc, made of 3 points, and two line segments, made of 2 points. Remember the difference between geometry and shapes? Here we build shapes out of our construction geometry. 3 edges (edges can be straight or curved), then a wire made of those three edges. Until now we built only a half profile. Easier than building the whole profile the same way, we can just mirror what we did, and glue both halfs together. So we first create a matrix. A matrix is a very common way to apply transformations to objects in the 3D world, since it can contain in one structure all basic transformations that 3D objects can suffer (move, rotate and scale). Here, after we create the matrix, we mirror it, and we create a copy of our wire with that transformation matrix applied to it. We now have two wires, and we can make a third wire out of them, since wires are actually lists of edges. Now that we have a closed wire, it can be turned into a face. Once we have a face, we can extrude it. Doing so, we actually made a solid. Then we apply a nice little fillet to our object because we care about good design, don't we? Then, the body of our bottle is made, we still need to create a neck. So we make a new solid, with a cylinder. The fuse operation, which in other apps is sometimes called union, is very powerful. It will take care of gluing what needs to be glued and remove parts that need to be removed. Then, we return our Part solid as the result of our function. That Part solid, like any other Part shape, can be attributed to an object in a FreeCAD document, with: or, more simple:

Box pierced
Here a complete example of building a box pierced.

The construction is done side by side and when the cube is finished, it is hollowed out of a cylinder through.

Loading and Saving
There are several ways to save your work in the Part module. You can of course save your FreeCAD document, but you can also save Part objects directly to common CAD formats, such as BREP, IGS, STEP and STL.

Saving a shape to a file is easy. There are exportBrep, exportIges, exportStl and exportStep methods availables for all shape objects. So, doing: this will save our box into a STEP file. To load a BREP, IGES or STEP file, simply do the contrary: To convert an .stp in .igs file simply : Note that importing or opening BREP, IGES or STEP files can also be done directly from the File -> Open or File -> Import menu, while exporting is with File -> Export