Path scripting/fr

Introduction
L'atelier Path propose des outils pour importer, créer, manipuler et exporter des parcours-outils dans FreeCAD. Avec eux, l'utilisateur peut importer, voir et modifier des programmes G-Code existants, créer des chemins d'outils depuis des formes 3D et exporter ces chemins d'outils vers G-Code.

À l'heure actuelle, l'atelier Path est encore au début de son développement et ne peut pas encore vous proposer les fonctionnalités avancées de certains logiciels commerciaux. Néanmoins, son interface de script pour python vous facilite les modifications ou le développement d'outils plus puissants et est, pour l'instant, plus destiné aux utilisateurs avec des connaissances en scripts python qu'aux utilisateurs finaux.

Ci-dessous, vous trouverez une description plus approfondie de l'API de script python.

Démarrage rapide
Les objets Path de FreeCAD Path sont des commandes de séquences de déplacement. Voici une utilisation typique:

Format G-Code interne de FreeCAD
Un concept préliminaire est important à appréhender. La plus grande partie de l'implémentation ci-dessous est fortement liée aux commandes de déplacement qui ont les même noms que ceux de G-Code mais sans être proche d'une implémentation spécifique à un contrôleur. Nous avons choisi des noms tels que « G0 » pour indiquer un mouvement « rapide » ou « G1 » pour un déplacement « d'alimentation » pour la performance (sauvegarde de fichier efficace) et pour minimiser le travail de traduction de et vers les autres formats G-Code. Puisque le monde de la CNC parle des milliers de dialectes G-Code, nous avons choisi de rester avec une partie simplifiée de ce code. On pourrait décrire le format G-Code de FreeCAD's comme une forme indépendante des machines.

Les données Path sont sauvegardées directement sous cette forme de G-Code dans les fichiers .FCStd

Toutes les traductions de et vers des dialectes G-Code FreeCAD sont réalisées par des scripts pre et post. Cela signifie que si vous voulez travailler avec une machine qui utilise un contrôleur spécifique tel que LinuxCNC, Fanuc, Mitusubishi, ou HAAS, etc., vous devrez utiliser (ou écrire s'il n'existe pas) un post-processeur pour ce contrôleur spécifique (allez voir la section « Importer et exporter du G-Code » ci-dessous).

Référence GCode
Les règles et les lignes directrices suivantes définissent le jeu de G-Code employé en interne dans FreeCAD:


 * la donnée G-Code, dans les objets Path de FreeCAD, est séparée en « Commandes ». Une Commande est définie par un nom qui doit débuter par G ou M et (optionnellement) des arguments, qui sont sous la forme Lettre = Nombre Flottant, par exemple X 0.02 ou Y 3.5 ou F 300. Ce sont des exemples typiques de commandes G-Code de FreeCAD:

G0 X2.5 Y0 (le nom de commande est G0, les arguments X=2.5 et Y=0)

G1 X30 (le nom de commande est G1, le seul argument X=30)

G90 (le nom de commande est G90, sans argument)


 * Pour la partie numérique d'une commande G ou M, les deux formes « G1 » ou « G01 » sont acceptées.
 * Seules les commandes débutant par G ou M sont actuellement acceptées pour l'instant.
 * Seuls les millimètres sont acceptés pour le moment. G20/G21 ne sont pas pris en compte.
 * Les arguments sont toujours triés alphabétiquement. Cela signifie que si vous créez une commande « G1 X2 Y4 F300 », elle sera écrite comme « G1 F300 X2 Y4 ».
 * Les arguments ne peuvent pas être répétés dans une même commande. Par exemple, « G1 X1 Y2 X2 Y3 » ne fonctionnera pas. Vous devrez la séparer en deux, par exemple: « G1 X1 Y2, G1 X2 Y3 ».
 * Les arguments X, Y, Z, A, B, C sont absolus ou relatifs, en fonction du mode G90/G91 actuel. C'est par défaut (si ce n'est pas spécifié) à absolu.
 * I, J, K sont toujours relatifs au dernier point. K peut être oublié.
 * X, Y, or Z (et A, B, C) peuvent être oubliés. Dans ce cas, les coordonnées X, Y ou Z précédentes sont gardées.
 * Les commandes G-code autres que celles listées dans la table ci-dessous sont supportées, ceci étant, elles sont sauvegardées dans le path data (tant qu'elles satisfont aux règles ci-dessus, bien sûr), mais elle ne produiront tout simplement pas de résultat visible à l'écran. Par exemple, vous pouvez ajouter la commande G81, elle sera enregistrée mais pas affichée.

L'objet Command
L'objet Command représente une commande gcode. Il a trois attributs: Nom, Paramètres et Placement, ainsi que deux méthodes: toGCode et setFromGCode. En interne, il ne contient qu'un nom et un dictionnaire de paramètres. La suite (placement et gcode) est interprétée depuis/vers ces données.

L'objet Path
L'objet Path contient une liste de commandes. En simplifiant, un objet Path peut aussi être créé directement depuis une séquence G-Code complète. Elle sera automatiquement divisée en séquences de commandes.

Path feature
Path feature est un objet document de FreeCAD, qui contient un chemin et le présente en une vue 3D. Path feature contient aussi une propriété de Placement. Changer la valeur de ce placement modifiera la position du Feature dans la vue 3D view, bien que l'information Path elle-même, ne soit pas modifiée. La transformation est purement visuelle. Cela vous permet, par ex exemple, de créer un Path autour d'une face qui a une orientation particulière sur votre modèle, qui n'aura pas la même orientation que la matière première que vous positionnerez sur votre CNC.

Néanmoins, Path Compounds peut utiliser le Placement de ses enfants (voir ci-dessous).

Objets Tool et Tooltable
L'objet Tool contient les définitions d'un outil de CNC. L'objet Tooltable contient, lui, une liste ordonnée d'outils. Les Tooltables sont reliées comme propriété dans le Path Project features et peuvent donc être éditées par l'interface graphique en double-cliquant sur le bouton « Edit tooltable » fr de l'arborescence d'un projet dans les tâches qui s'ouvrent.

Les tooltables peuvent être importées depuis les .xml de FreeCAD et les formats .tooltable de HeeksCad et exportés au format .xml de FreeCAD depuis cette interface.

Path Compound
L'objectif de cette fonction est d'assembler un ou plusieurs chemins d'outils et l'(les) associer à une table d'outils. La fonction Compound se comporte aussi comme un groupe standard FreeCAD dont vous pouvez y ajouter ou y enlever les objets directement depuis la vue arborescente. Vous pouvez aussi réordonner les items en double-cliquant sur l'objet Compound de la vue arborescente et réordonner ses élements dans la vue de Taches qui s'ouvre. Une caractéristique importante de Path Compounds est la possibility de prendre en compte ou non le Placement des path enfants en cochant leur propriété UsePlacements à True ou False. Sans cela, les données Path des enfants seront simplement ajoutées séquentiellement. Si c'est positionné sur True, chaque commande des paths enfants, s'ils contiennent des infromations de position (G0, G1, etc..) seront d'abord transformés par Placement avant d'être ajoutés.

En créant un composant avec un seul path enfant vous permet donc de rendre le Placement du Path enfant « réel » (il affecte les données Path).

Path Project
The Path project is an extended kind of Compound, that has a couple of additional machine-related properties such as a tooltable. It is made mainly to be the main object type you'll want to export to gcode once your whole path setup is ready. The Project object is now coded in python, so its creation mechanism is a bit different: The Path module also features a GUI tooltable editor that can be called from python, giving it an object that has a ToolTable property:

The Path Shape feature
This feature is a normal Path object with an additional Shape property. By giving that property a Wire shape, its path will be automatically calculated from the shape. Note that in this case the placement is automatically set to the first point of the wire, and the object is therefore not movable anymore by changing its placement. To move it, the underlying shape itself must be moved.

Python features
Both Path::Feature and Path::FeatureShape features have a python version, respectively named Path::FeaturePython and Path::FeatureShapePython, that can be used in python code to create more advanced parametric objects derived from them.

Native format
GCode files can be directly imported and exported via the GUI, by using the "open", "insert" or "export" menu items. After the file name is acquired, a dialog pops up to ask which processing script must be used. It can also be done from python:

Path information is stored into Path objects using a subset of gcode described in the "FreeCAD's internal GCode format"section above. This subset can be imported or exported "as is", or converted to/from a particular version of GCode suited for your machine.

If you have a very simple and standard GCode program, that complies to the rules described in the "FreeCAD's internal GCode format" section above, for example the boomerang from http://www.cnccookbook.com/GWESampleFiles.html, it can be imported directly into a Path object, without translation (this is equivalent to using the "None" option of the GUI dialog):

In the same manner, you can obtain the path information as "agnostic" gcode, and store it manually in a file:

If you need a different output, though, you will need to convert this agnostic GCode into a format suited for your machine. That is the job of post-processing scripts.

Using pre- and post-processing scripts
If you have a gcode file written for a particular machine, which doesn't comply to the internal rules used by FreeCAD, described in the "FreeCAD's internal GCode format" section above, it might fail to import and/or render properly in the 3D view. To remedy to this, you must use a pre-processing script, which will convert from your machine-specific format to the FreeCAD format.

If you know the name of the pre-processing script to use, you can import your file using it, from the python console like this: In the same manner, you can output a path object to GCode, using a post_processor script like this:

Writing processing scripts
Pre- and post-processing scripts behave like other common FreeCAD imports/exporters. When choosing a pre/post processing script from the dialog, the import/export process will be redirected to the specified given script. Preprocessing scripts must contain at least the following methods open(filename) and insert(filename,docname). Postprocessing scripts need to implement export(objectslist,filename).

Scripts are placed into either the Mod/Path/PathScripts folder or the user's macro path directory. You can give them any name you like but by convention, and to be picked by the GUI dialog, pre-processing scripts names must end with "_pre", post-processing scripts with "_post" (make sure to use the underscore, not the hyphen, otherwise python cannot import it). This is an example of a very, very simple preprocessor. More complex examples are found in the Mod/Path/PathScripts folder: Pre- and post-processors work exactly the same way. They just do the contrary: The pre scripts convert from specific GCode to FreeCAD's "agnostic" GCode, while post scripts convert from FreeCAD's "agnostic" GCode to machine-specific GCode.