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.
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.
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.
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 :
$ 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).
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 exécute le code puis quitte immédiatement. Ce mode est idéal pour les scripts.$ FreeCADCmd "import Part; print(Part.makeBox(10,5,15).Volume)"
FreeCAD -c exécute le code puis ouvre une session interactive de console Python. Ceci est utile pour des tests rapides où vous souhaitez inspecter l'état après coup.$ 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
$ /path/to/FreeCAD -c
$ /path/to/FreeCADCmdhelp().modules freecad.
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.