Headless FreeCAD/fr

Introduction

FreeCAD peut être exécuté sans son interface utilisateur graphique (GUI), un mode communément appelé « headless » (sans affichage). Cela offre plusieurs méthodes puissantes pour la création de scripts, l'automatisation et l'intégration de ses capacités dans d'autres applications. Cette page documente les différentes façons d'exécuter FreeCAD en mode headless.

Via la console Python de FreeCAD

Il s'agit d'un mode interactif dans lequel FreeCAD démarre directement dans une console Python. Cette console est un environnement Python entièrement fonctionnel avec tous les modules Python de FreeCAD, tels que Part, BIM et Draft, accessibles via leur API publique. Le module central FreeCAD est intégré, il n'est donc pas nécessaire de l'importer explicitement pendant la session de la console. D'autres modules peuvent être importés pendant la session (par exemple import Part), selon les besoins.

Ce mode peut être lancé à partir de la ligne de commande en utilisant soit FreeCAD -c soit FreeCADCmd. Il offre les mêmes fonctionnalités que la console Python disponible dans l'application FreeCAD complète.

Il est particulièrement adapté pour tester rapidement du code Python qui accède à l'API FreeCAD ou pour déboguer de petits scripts qui peuvent être facilement collés dans la console.

Via un script Python

Dans ce mode, FreeCAD est utilisé comme une bibliothèque Python standard. Cela vous permet d'importer l'intégralité de son API Python dans n'importe quel script ou application Python externe, en le traitant comme un module natif.

Pour cela, l'interpréteur Python doit pouvoir localiser le fichier de la bibliothèque de FreeCAD, FreeCAD.so sous Linux et macOS ou FreeCAD.pyd sur les autres plateformes. Pour ce faire, ajoutez son répertoire aux chemins de recherche de Python au tout début de votre script. Une fois le chemin défini, le reste du script peut accéder à l'API FreeCAD comme n'importe quel autre module Python.

Voici un exemple simple qui crée une boîte et affiche son volume et sa surface :

# Set the path to your FreeCAD installation
# Example for Linux:
# FREECADPATH = '/usr/lib/freecad/lib'
# Example for macOS:
# FREECADPATH = '/Applications/FreeCAD.app/Contents/Resources/lib'
# Example for Windows:
FREECADPATH = 'C:\\Program Files\\FreeCAD\\bin'
import sys
sys.path.append(FREECADPATH)

# The rest of the script can now import and use the FreeCAD API
import FreeCAD
import Part

# Create a simple geometric shape
my_box = Part.makeBox(10, 20, 30)

# Access its properties
print(f"The volume of the box is: {my_box.Volume}")
print(f"The area of the box is: {my_box.Area}")

To run the example script, save the code into a file (e.g., run_box.py) and execute it from your system's terminal with the Python interpreter:

$ python run_box.py
The volume of the box is: 6000.0
The area of the box is: 2200.0

Il s'agit d'une fonction très puissante qui libère tout le potentiel de FreeCAD pour les tâches d'automatisation et d'intégration. Par exemple, on pourrait écrire un script qui exploite à la fois les API FreeCAD et Blender pour importer par programmation des objets depuis un fichier .FCStd directement dans une scène Blender.

Notez que ce mode est destiné à l'utilisation de l'API FreeCAD sans interface graphique. Bien que certains modules liés à l'interface graphique puissent être importés, l'utilisation de l'API qui accède directement ou manipule les composants de l'interface graphique est très limitée et généralement non prise en charge dans un contexte sans interface graphique.

Voir Intégrer FreeCAD.

Via un script shell

Vous pouvez également exécuter FreeCAD sans interface graphique à partir d'un script shell en appelant FreeCAD -c ou FreeCADCmd suivi des arguments nécessaires.

Une liste complète des arguments de ligne de commande disponibles peut être affichée à l'aide du drapeau --help. Voici un exemple de résultat de l'aide pour FreeCAD 1.0.2 :

Command-line arguments for FreeCAD 1.0.2 (Click to expand)
$ FreeCAD -c --help
FreeCAD

For a detailed description see https://wiki.freecad.org/Start_up_and_Configuration

Usage: FreeCAD [options] File1 File2 ...

Allowed options:

Generic options:
  -v [ --version ]          Prints version string
  --verbose                 Prints verbose version string
  -h [ --help ]             Prints help message
  -c [ --console ]          Starts in console mode
  --response-file arg       Can be specified with '@name', too
  --dump-config             Dumps configuration
  --get-config arg          Prints the value of the requested configuration key
  --set-config arg          Sets the value of a configuration key
  --keep-deprecated-paths   If set then config files are kept on the old 
                            location

Configuration:
  -l [ --write-log ]        Writes FreeCAD.log to the user directory.
  --log-file arg            Unlike --write-log this allows logging to an 
                            arbitrary file
  -u [ --user-cfg ] arg     User config file to load/save user settings
  -s [ --system-cfg ] arg   System config file to load/save system settings
  -t [ --run-test ] arg     Run a given test case (use 0 (zero) to run all 
                            tests). If no argument is provided then return list
                            of all available tests.
  -r [ --run-open ] arg     Run a given test case (use 0 (zero) to run all 
                            tests). If no argument is provided then return list
                            of all available tests.  Keeps UI open after 
                            test(s) complete.
  -M [ --module-path ] arg  Additional module paths
  -E [ --macro-path ] arg   Additional macro paths
  -P [ --python-path ] arg  Additional python paths
  --disable-addon arg       Disable a given addon.
  --single-instance         Allow to run a single instance of the application
  --safe-mode               Force enable safe mode
  --pass arg                Ignores the following arguments and pass them 
                            through to be used by a script

Cette méthode est idéale pour les tâches automatisées et les scripts d'intégration continue (CI). Elle est couramment utilisée pour exécuter l'ensemble des tests avec FreeCADCmd -t 0 ou pour exécuter les tests d'un module spécifique, tel que FreeCADCmd -t TestArch (tous les tests de l'atelier BIM) ou FreeCADCmd -t TestArch.TestWall (uniquement les tests relatifs aux murs de l'atelier BIM).

Exécuter directement du code Python

Les exécutables en ligne de commande de FreeCAD peuvent également fonctionner comme des interpréteurs Python spécialisés, permettant l'exécution directe de code Python. Cela offre une alternative pratique et puissante à l'intégration de FreeCAD dans un script Python externe.

Exécuter un script en ligne

Vous pouvez transmettre une chaîne de code Python directement en tant qu'argument unique. Cela est utile pour les commandes très courtes et à usage unique. Notez que l'argument de ligne de commande ne doit pas être un chemin d'accès à un fichier existant pour que cela fonctionne.

$ FreeCADCmd "import Part; print(Part.makeBox(10,5,15).Volume)"
$ FreeCAD -c "import Part; my_box = Part.makeBox(10,5,15)"

Exécuter un fichier script

Une méthode plus puissante consiste à utiliser FreeCAD pour exécuter directement un fichier script Python. C'est l'approche recommandée pour toute tâche non triviale sans interface graphique.

$ FreeCADCmd /path/to/my_script.py

Lorsqu'un script est exécuté de cette manière, l'environnement FreeCAD est déjà configuré. L'avantage principal est que le script n'a pas besoin du code standard sys.path.append(). Les modules FreeCAD sont immédiatement disponibles pour l'importation.

Par exemple, un fichier nommé create_box.py pourrait contenir :

import Part
# Le module FreeCAD est déjà disponible, mais il peut être importé explicitement.
import FreeCAD

# Créer un nouveau document et y ajouter une boîte
doc = FreeCAD.newDocument()
box_obj = doc.addObject("Part::Box", "MyBox")
doc.recompute()

# Exporter la pièce vers un fichier STEP
Part.export([box_obj], "my_box_model.step")

print("Boîte créée et exportée avec succès vers my_box_model.step")

Pour exécuter ce script depuis le terminal, il suffit de taper :

$ FreeCADCmd create_box.py
Boîte créée et exportée avec succès vers my_box_model.step

Exemples

Recherche des modules FreeCAD

  1. Ouvrez le terminal et tapez :
    $ /path/to/FreeCAD -c
    ou
    $ /path/to/FreeCADCmd
  2. Un shell python démarre avec une invite. Tapez help().
  3. Un texte d'aide s'affiche.
  4. Tapez modules freecad.

Représentation du graphe de scène

Comme il n'est pas possible de créer ou d'accéder au fournisseur de vues en mode headless, ce qui est possible, c'est de charger FreeCADGui en mode headless, mais il n'y a aucun moyen d'accéder au document GUI car il ne sera pas créé et, par conséquent, il n'existe aucun fournisseur de vues.

Cependant, il est possible de créer une représentation du Graphe de scène d'un objet :

import FreeCADGui as Gui
from pivy import coin

Gui.setupWithoutGUI()
doc = App.newDocument()
obj = doc.addObject("Part::Box","Box")
doc.recompute()
view = Gui.subgraphFromObject(obj)

Voir : fil du forum.

En relation