Embedding FreeCAD/fr: Difference between revisions

From FreeCAD Documentation
(Created page with "{{docnav/fr|Scripted objects/fr|Code snippets/fr}}")
(Updating to match new version of source page)
(28 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<languages/>
FreeCAD a la capacité incroyable de pouvoir être importé '''en tant que module Python''' dans d'autres programmes ou, dans une console Python autonome, avec tous ses modules et ses composants. Il est même possible d'importer l'interface graphique (GUI) de FreeCAD en tant que module python avec toutefois, '''quelques restrictions'''. Mais avec[[Embedding_FreeCAD#Avertissement|quelques restrictions]].


{{TOCright}}
=== Utilisation de FreeCAD sans interface graphique (GUI) ===

== Introduction ==

FreeCAD peut être importé en tant que module [[Python/fr|Python]] dans d'autres programmes ou dans une console Python autonome, avec tous ses modules et composants. Il est même possible d'importer l'interface utilisateur de FreeCAD en tant que module python mais avec certaines restrictions indiquées dans [[#Avertissements|Avertissements]].

== Utilisation de FreeCAD sans interface graphique (GUI) ==


Une première application, directe, facile et utile que vous pouvez faire est d'importer des documents FreeCAD dans votre programme.
Une première application, directe, facile et utile que vous pouvez faire est d'importer des documents FreeCAD dans votre programme.
Dans l'exemple suivant, nous allons importer '''Part geometry''' d'un document FreeCAD dans [http://www.blender.org blender].
Dans l'exemple suivant, nous allons importer '''Part geometry''' d'un document FreeCAD dans [http://www.blender.org blender].
Voici le script complet.
Voici le script complet.
J'espère que vous serez impressionné par sa simplicité:<syntaxhighlight>
J'espère que vous serez impressionné par sa simplicité:
{{Code|code=

<nowiki>
FREECADPATH = '/opt/FreeCAD/lib' # path to your FreeCAD.so or FreeCAD.dll file
FREECADPATH = '/opt/FreeCAD/lib' # path to your FreeCAD.so or FreeCAD.dll file
import Blender, sys
import Blender, sys
Line 42: Line 49:
if __name__=='__main__':
if __name__=='__main__':
main()
main()
</nowiki>
</syntaxhighlight>Première chose, s'assurer que Python va trouver notre bibliothèque FreeCAD. Une fois qu'il l'a trouvée, tous les modules FreeCAD comme '''Part''', que nous allons aussi utiliser, seront disponibles automatiquement.
}}

Première chose, s'assurer que Python va trouver notre bibliothèque FreeCAD. Une fois qu'il l'a trouvée, tous les modules FreeCAD comme '''Part''', que nous allons aussi utiliser, seront disponibles automatiquement.
Donc, nous utilisons tout simplement la variable '''sys.path''', qui va donner à Python le chemin des modules à rechercher, et nous ajoutons le chemin '''FreeCAD lib'''.
Donc, nous utilisons tout simplement la variable '''sys.path''', qui va donner à Python le chemin des modules à rechercher, et nous ajoutons le chemin '''FreeCAD lib'''.
Cette modification n'est que temporaire, et sera perdue quand nous aurons terminé avec notre interpréteur Python.
Cette modification n'est que temporaire, et sera perdue quand nous aurons terminé avec notre interpréteur Python.
Line 61: Line 71:
En réalité, la beauté dans tout cela, réside du fait que vous laissez faire la totalité du travail à FreeCAD, tout en présentant ses résultats dans le programme de votre choix.
En réalité, la beauté dans tout cela, réside du fait que vous laissez faire la totalité du travail à FreeCAD, tout en présentant ses résultats dans le programme de votre choix.


=== Utilisation de FreeCAD avec interface graphique (GUI) ===
== Utilisation de FreeCAD avec interface graphique (GUI) ==


Depuis la version 4.2 de Qt, Qt a la capacité d'intégrer des plugins '''Qt-GUI''' dépendants d'applications hôtes non-Qt, et, de partager la boucle évènementielle de l'hôte.
Depuis la version 4.2 de Qt, Qt a la capacité d'intégrer des plugins '''Qt-GUI''' dépendants d'applications hôtes non-Qt, et, de partager la boucle évènementielle de l'hôte.
Line 69: Line 79:
L'ensemble du code Python nécessaire pour atteindre ce but, n'a que deux lignes:
L'ensemble du code Python nécessaire pour atteindre ce but, n'a que deux lignes:


{{Code|code=
<syntaxhighlight>
import FreeCADGui
import FreeCADGui
FreeCADGui.showMainWindow()
FreeCADGui.showMainWindow()
}}
</syntaxhighlight>


Si, l'application hôte est basée sur Qt, alors cette solution devrait fonctionner sur toutes les plates-formes supportées par Qt. '''Toutefois''', l'hôte doit être de la même version Qt que la version utilisée pour FreeCAD, sinon, vous pouvez obtenir des erreurs d'exécution inattendues.
Si, l'application hôte est basée sur Qt, alors cette solution devrait fonctionner sur toutes les plates-formes supportées par Qt. '''Toutefois''', l'hôte doit être de la même version Qt que la version utilisée pour FreeCAD, sinon, vous pouvez obtenir des erreurs d'exécution inattendues.
Line 83: Line 93:
'''PS:'''pour toute application console, cette solution, bien sûr ne fonctionnera pas car, il n'y a pas de fonctionnement "boucle évènementielle" dans ce système.
'''PS:'''pour toute application console, cette solution, bien sûr ne fonctionnera pas car, il n'y a pas de fonctionnement "boucle évènementielle" dans ce système.


==Avertissements==
=== Avertissement ===


Bien qu'il soit possible d'importer FreeCAD vers un interpréteur Python externe, il ne s'agit pas d'un scénario d'utilisation courant et cela nécessite quelques précautions. En règle générale, il est préférable d'utiliser le Python fourni avec FreeCAD, d'exécuter FreeCAD via une ligne de commande, ou en tant que sous-processus. Voir [[Start up and Configuration/fr|Démarrage et configuration]] pour plus d'informations sur les deux dernières options.
Bien qu'il soit possible d'importer FreeCAD vers un interpréteur Python externe, il ne s'agit pas d'un scénario d'utilisation courant et cela nécessite quelques précautions. En règle générale, il est préférable d'utiliser le Python fourni avec FreeCAD, d'exécuter FreeCAD via une ligne de commande, ou en tant que sous-processus. Voir [[Start up and Configuration/fr|Démarrage et configuration]] pour plus d'informations sur les deux dernières options.


Puisque le module Python de FreeCAD est compilé à partir de C ++ (plutôt que d'être un pur module Python), il ne peut être importé qu'à partir d'un interpréteur Python compatible. Cela signifie généralement que l'interpréteur Python doit être compilé avec le même compilateur C que celui utilisé pour construire FreeCAD. Les informations sur le compilateur utilisé pour construire un interpréteur Python (y compris celui construit avec FreeCAD) peuvent être trouvés comme suit:
Puisque le module Python de FreeCAD est compilé à partir de C ++ (plutôt que d'être un pur module Python), il ne peut être importé qu'à partir d'un interpréteur Python compatible. Cela signifie généralement que l'interpréteur Python doit être compilé avec le même compilateur C que celui utilisé pour construire FreeCAD. Les informations sur le compilateur utilisé pour construire un interpréteur Python (y compris celui construit avec FreeCAD) peuvent être trouvés comme suit:
{{Code|code=

<syntaxhighlight>
>>> import sys
>>> import sys
>>> sys.version
>>> sys.version
'2.7.13 (default, Dec 17 2016, 23:03:43) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'
'2.7.13 (default, Dec 17 2016, 23:03:43) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'
}}
</syntaxhighlight>




{{Powerdocnavi{{#translation:}}}}
{{docnav/fr|Scripted objects/fr|Code snippets/fr}}
[[Category:Developer Documentation{{#translation:}}]]

[[Category:Poweruser Documentation]]
[[Category:Python Code{{#translation:}}]]
[[Category:Python Code]]

{{clear}}
{{clear}}
<languages/>

Revision as of 20:48, 23 August 2020

Introduction

FreeCAD peut être importé en tant que module Python dans d'autres programmes ou dans une console Python autonome, avec tous ses modules et composants. Il est même possible d'importer l'interface utilisateur de FreeCAD en tant que module python mais avec certaines restrictions indiquées dans Avertissements.

Utilisation de FreeCAD sans interface graphique (GUI)

Une première application, directe, facile et utile que vous pouvez faire est d'importer des documents FreeCAD dans votre programme. Dans l'exemple suivant, nous allons importer Part geometry d'un document FreeCAD dans blender. Voici le script complet. J'espère que vous serez impressionné par sa simplicité:

FREECADPATH = '/opt/FreeCAD/lib' # path to your FreeCAD.so or FreeCAD.dll file
import Blender, sys
sys.path.append(FREECADPATH)
 
def import_fcstd(filename):
   try:
       import FreeCAD
   except ValueError:
       Blender.Draw.PupMenu('Error%t|FreeCAD library not found. Please check the FREECADPATH variable in the import script is correct')
   else:
       scene = Blender.Scene.GetCurrent()
       import Part
       doc = FreeCAD.open(filename)
       objects = doc.Objects
       for ob in objects:
           if ob.Type[:4] == 'Part':
               shape = ob.Shape
               if shape.Faces:
                   mesh = Blender.Mesh.New()
                   rawdata = shape.tessellate(1)
                   for v in rawdata[0]:
                       mesh.verts.append((v.x,v.y,v.z))
                   for f in rawdata[1]:
                       mesh.faces.append.append(f)
                   scene.objects.new(mesh,ob.Name)
       Blender.Redraw()

def main():
   Blender.Window.FileSelector(import_fcstd, 'IMPORT FCSTD', 
                        Blender.sys.makename(ext='.fcstd'))    
 
# This lets you import the script without running it
if __name__=='__main__':
   main()

Première chose, s'assurer que Python va trouver notre bibliothèque FreeCAD. Une fois qu'il l'a trouvée, tous les modules FreeCAD comme Part, que nous allons aussi utiliser, seront disponibles automatiquement. Donc, nous utilisons tout simplement la variable sys.path, qui va donner à Python le chemin des modules à rechercher, et nous ajoutons le chemin FreeCAD lib. Cette modification n'est que temporaire, et sera perdue quand nous aurons terminé avec notre interpréteur Python. Une autre façon, est de créer un lien vers votre bibliothèque FreeCAD dans l'un des chemins (Path) de recherche Python. Nous placerons le chemin dans une constante (FREECADPATH), un autre utilisateur du script aura ainsi plus de facilité pour configurer son propre système.

Une fois certain que la bibliothèque a été chargée (the try/except sequence), nous pourrons travailler avec FreeCAD, de la même manière que si nous le ferions à l'intérieur de l’interpréteur Python de FreeCAD. Nous ouvrons le document FreeCAD que nous avons chargé avec la fonction main(), et nous listons ses objets. Puis, comme nous avons choisi de nous occuper que de la forme géométrique, nous vérifions si la propriété Type de chaque objet contient Part, puis nous faison une tesselation.

La tesselation produit une liste de sommets (Vertex) et une liste de faces définis par les indices de sommets. C'est parfait, puisque c'est exactement de cette manière que Blender définit les mailles. Donc, notre tâche est ridiculement simple, nous ajoutons juste les deux listes des sommets et faces comme un maillage de Blender. Une fois fait, nous allons juste redessiner l'écran et, c'est fini !

Vous avez vu, ce script est très simple (en fait, j'en ai écris un plus évolué ici), vous voudrez peut-être l'étendre, par exemple importer des objets "mesh", ou importer "Part geometry" qui n'a pas de face, ou importer d'autres formats que FreeCAD peut lire. Vous pouvez également exporter les formes géométriques dans un document FreeCAD, la procédure est la même. Vous pouvez également créer un dialogue, afin que l'utilisateur puisse choisir ce qu'il veut importer, etc . . . En réalité, la beauté dans tout cela, réside du fait que vous laissez faire la totalité du travail à FreeCAD, tout en présentant ses résultats dans le programme de votre choix.

Utilisation de FreeCAD avec interface graphique (GUI)

Depuis la version 4.2 de Qt, Qt a la capacité d'intégrer des plugins Qt-GUI dépendants d'applications hôtes non-Qt, et, de partager la boucle évènementielle de l'hôte.

Principalement pour FreeCAD, cela signifie qu'il peut être importé à partir d'une autre application avec son interface utilisateur entière (GUI) par conséquences, l'application hôte prend le contrôle total de FreeCAD.

L'ensemble du code Python nécessaire pour atteindre ce but, n'a que deux lignes:

import FreeCADGui 
FreeCADGui.showMainWindow()

Si, l'application hôte est basée sur Qt, alors cette solution devrait fonctionner sur toutes les plates-formes supportées par Qt. Toutefois, l'hôte doit être de la même version Qt que la version utilisée pour FreeCAD, sinon, vous pouvez obtenir des erreurs d'exécution inattendues.

Cependant, pour les applications non-Qt, il ya quelques restrictions, que vous devez connaitre:

  • Cette solution ne fonctionnera probablement pas avec tous les autres outils (toolkit):
    • Pour Windows, il fonctionnera aussi longtemps que l'application hôte utilisée est compatible avec Win32 ou, tout autres outils (toolkit) qui utilisent l'API Win32, comme wxWidgets, MFC ou WinForms.
    • Pour le faire fonctionner sous X11 (Linux), l'application hôte doit utiliser la bibliothèque "glib".

PS:pour toute application console, cette solution, bien sûr ne fonctionnera pas car, il n'y a pas de fonctionnement "boucle évènementielle" dans ce système.

Avertissements

Bien qu'il soit possible d'importer FreeCAD vers un interpréteur Python externe, il ne s'agit pas d'un scénario d'utilisation courant et cela nécessite quelques précautions. En règle générale, il est préférable d'utiliser le Python fourni avec FreeCAD, d'exécuter FreeCAD via une ligne de commande, ou en tant que sous-processus. Voir Démarrage et configuration pour plus d'informations sur les deux dernières options.

Puisque le module Python de FreeCAD est compilé à partir de C ++ (plutôt que d'être un pur module Python), il ne peut être importé qu'à partir d'un interpréteur Python compatible. Cela signifie généralement que l'interpréteur Python doit être compilé avec le même compilateur C que celui utilisé pour construire FreeCAD. Les informations sur le compilateur utilisé pour construire un interpréteur Python (y compris celui construit avec FreeCAD) peuvent être trouvés comme suit:

>>> import sys
>>> sys.version
'2.7.13 (default, Dec 17 2016, 23:03:43) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'