Peut-être avez-vous déjà rencontré mes notes sur les premières étapes de la programmation CAO en utilisant l'exemple de NanoCAD.
Il convient de noter que pour une personne qui ne sait pas programmer et connaît la CAO au niveau de "culman électronique", c'était une aventure incroyable. Cependant, NanoCAD est toujours principalement un produit commercial. Sa version gratuite n'a pas été mise à jour, depuis environ six ans et est devenue obsolète en termes d'opportunités de développement.
Mais je voulais vraiment, comme dans une merveilleuse histoire:
"Le bonheur pour tous, en vain, et ne laisser personne s'en offusquer!" . Par conséquent, il a été décidé de suivre les conseils d'un camarade de combat
DrZugrik et d'installer FreeCAD pour vous-même.
Donc, dans la poursuite, j'écris du matériel pour vous, en une seule journée, j'ai appris à me faire des amis de ce logiciel de CAO avec Anaconda, j'ai écrit un script simple en Python qui dessine un petit carré avec du texte et l'ai testé pour travailler sur Windows et Linux. Que suis-je réellement prêt à vous dire par étapes et à montrer, afin que vous aussi puissiez le faire.
Vous voulez connaître un charmant couple de Python et FreeCAD? Alors vous êtes les bienvenus sous chat.

Contenu:
Partie I: Introduction.Partie II: Installation standard et premier échantillonPartie III: Faites maintenant des amis FreeCad avec AnacondaPartie IV: Écrire une bibliothèque simplePartie V: ConclusionPartie I: Introduction
Curieusement, sur Habré il y a très peu de publications consacrées à FreeCAD, un bon article a été publié par
Eddy_Em «Meet: FreeCAD» , et quelques autres ouvrages dans lesquels le héros de notre article est mentionné au passage.
Pour commencer, juste deux mots sur le programme. Je ne reproduirai pas les informations du site
officiel , mais je décrirai simplement à grands traits pourquoi j'ai porté mon attention sur ce CAD.
Ainsi, FreeCAD est un système de conception assistée par ordinateur open source, principalement axé sur la modélisation paramétrique tridimensionnelle. Au moment de la rédaction, la dernière version du programme est 0.18.3. Ne soyez pas confus que la valeur du numéro de version est loin de un. FreeCAD est long et activement développé et est actuellement assez fonctionnel. De plus, comme je le comprends depuis longtemps, il a une certaine popularité parmi les personnes impliquées dans la modélisation et l'impression 3D, en particulier parmi les personnes idéologiques autodidactes qui s'intéressent à l'open source / matériel ouvert et à toutes sortes de bricolage.
Mais si soudain vous ne comprenez pas du tout la modélisation 3D, ce n'est pas une raison pour contourner FreeCAD. La fonctionnalité CAO est divisée en modules spécifiques - Workbench, parmi lesquels se trouve le dessin 2D habituel, y compris un établi pour la décoration des cadres de tôles et même un établi pour la mise en œuvre du concept BIM.
En fait, le programme a un "chariot et un petit chariot", mais aujourd'hui nous allons essayer de faire quelque chose de complètement primitif, seulement pour "vous mettre en appétit".
Partie II: Installation standard et premier échantillon
FreeCAD est disponible pour les trois systèmes d'exploitation courants, mais comme je suis privé de la technique "Apple", nous ne considérerons que les options pour Windows 10 et Linux Mint.
La façon la plus simple de démarrer la programmation de FreeCAD est de télécharger le package de distribution et de l'installer de manière standard pour le système d'exploitation. Dans ce cas, nous aurons à notre disposition un interpréteur Python pré-installé avec le programme (au moment de la rédaction de l'article Python version 3.6.6).
Pour commencer la programmation pour FreeCAD, peut-être encore plus facilement que pour NanoCAD ou AutoCAD, ouvrez simplement l'onglet Affichage -> Panneau -> et allumez la console Python. En fait, c'est tout, vous pouvez programmer en toute sécurité.
Mais d'abord, essayons de dessiner quelque chose en utilisant des moyens réguliers. Par exemple, un cercle.
Faites attention à la sortie de la console
Gui.activateWorkbench("DraftWorkbench") >>> App.newDocument("") >>> App.setActiveDocument("____________________") >>> App.ActiveDocument=App.getDocument("____________________") >>> Gui.ActiveDocument=Gui.getDocument("____________________") >>> Gui.activeDocument().activeView().viewDefaultOrientation() >>> import Draft >>> pl=FreeCAD.Placement() >>> pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) >>> pl.Base=FreeCAD.Vector(-1.0610677003860474,-0.31207874417305,0.0) >>> circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None) >>> Draft.autogroup(circle

FreeCAD ne cache rien sous le capot, toutes les opérations clés pour dessiner un cercle sont affichées dans la console. Vous pouvez même maintenant copier le code et dessiner un deuxième cercle, un peu à droite.
Essayons d'entrer une variable et de dessiner un autre cercle, pour lequel nous copions la sortie de la console et l'insérons ligne par ligne en faisant une petite modification.
x=-1.0610677003860474 pl=FreeCAD.Placement() pl.Rotation.Q=(0.0,0.0,1.5308084989341915e-17,1.0) pl.Base=FreeCAD.Vector(x*5,-0.31207874417305,0.0) circle = Draft.makeCircle(radius=0.8633861373365326,placement=pl,face=False,support=None)
Comme vous pouvez le voir maintenant, il y a deux cercles et, comme prévu, un à droite de la coordonnée x du point de base du premier cercle multiplié par 5.

Partie III: Faites maintenant des amis FreeCad avec Anaconda
Mais les capacités de la CAO ne se limitent pas à l'utilisation standard en tant que "culman". En utilisant l'API, FreeCAD peut être intégré à votre propre programme et utilisé avec ou sans interface graphique, mais nous examinerons ce problème une autre fois.
En attendant, imaginez cette situation, disons que vous aimez l'apprentissage automatique et l'analyse de données en Python et que vous avez déjà installé le
kit de distribution Anaconda , alors vous serez probablement très heureux d'apprendre que grâce aux gars de conda-forge vous pouvez combiner toutes les fonctionnalités de ce kit de distribution et de FreeCAD.
Le
lien fournit des conseils sur la façon de l'installer si vous utilisez un mini-conda, et nous l'installerons dans le «Anaconda» à part entière via son navigateur.
Alors, ouvrez Anaconda-Navigator, allez dans l'onglet
Environnements et créez un nouvel environnement en cliquant sur le bouton
Créer . Le nom de l'environnement, vous pouvez en donner, j'ai appelé - "freecad". Nous sélectionnons la version nécessaire de Python et créons un nouvel environnement.

Mais cela ne suffit pas, vous devez ajouter le canal conda-forge, tapez simplement le champ qui apparaît après avoir cliqué sur le bouton
Ajouter "conda-forge" et laissez le système mettre à jour la liste des packages.

Presque prêt maintenant, il reste à installer FreeCAD lui-même
Cliquez sur LMB sur le nom du package et sélectionnez la version que nous voulons installer, comme dans l'image ci-dessous
(je l'ai déjà installé)
Après une attente fastidieuse, vous aurez le kit de distribution FreeCad entièrement installé, la version souhaitée n'aura qu'à être lancée.
Dans le cas le plus simple, sans paramètres de démarrage, vous devez démarrer la console conda avec notre environnement et démarrer CAD avec la commande FreeCAD du même nom.

Une fenêtre FreeCAD vide s'ouvrira dans laquelle nous sélectionnerons un établi pour le dessin en deux dimensions.

Comme vous pouvez le voir, la version de Python n'est plus du tout ce qu'elle était avec une installation standard.

Créons un nouveau document (Control + N) qui vous sera utile pour tester notre mini bibliothèque.
Partie IV: Écrire une bibliothèque simple
Notre bibliothèque sera primitive. Essentiellement, nous allons créer une commande qui dessinera un rectangle dans lequel le texte arbitraire spécifié par l'utilisateur sera entré.
Créez un fichier
(j'ai appelé le mien «drawhabr.py») et écrivez-y le code suivant:
Ou vous pouvez simplement copier le fichier depuis
GitHubLe code est très simple, mais je pense qu'il vaut la peine d'expliquer certains points.
import FreeCAD, FreeCADGui, Part, Draft
Nous importons les bibliothèques nécessaires, puis créons la classe.
Comme je n'ai pas encore appris à gérer la saisie de la souris, nous entrerons les coordonnées de l'objet et du texte directement dans la console à partir du clavier. Ceci est implémenté par des méthodes Python standard. Ensuite, dans le constructeur de la classe, nous appelons notre fonction (méthode), qui va tout dessiner.
Parmi les fonctionnalités de FreeCAD dans le constructeur de classe, deux commandes peuvent être distinguées:
self.view = FreeCADGui.ActiveDocument.ActiveView FreeCAD.Console.PrintMessage("\r\n Your object was successfully created")
Le premier sélectionne pour nous l'espace de l'espace de travail actif et le second, après avoir installé l'objet, nous écrit un message tout en bas de la fenêtre du programme (sur une barre grise, à ne pas confondre avec la console Python)
Le code de la méthode est également intuitif. Mais je vais vous expliquer la fiabilité.
def drawstamp(self, mtext,x=0,y=0 ): "Method for placing a figure in model space." if (mtext==""): mtext="Hello Habr!"
Obligatoire si l'utilisateur entre une chaîne vide. Sans cela, le mot Étiquette sera entré dans le texte et le rectangle aura une longueur incorrecte.
point=FreeCAD.Placement(FreeCAD.Vector(x,y,0), FreeCAD.Rotation(0,0,0), FreeCAD.Vector(0,0,0))
Définissez les coordonnées du point de base du jour de notre cadre entourant le texte.
Permettez-moi de vous rappeler que les données sont prises depuis l'entrée vers la console.
Veuillez noter que nous travaillons avec une coordonnée tridimensionnelle de la forme FreeCAD.Vector (x, y, z), mais dans cet exemple, nous pouvons négliger la coordonnée Z. Les autres paramètres liés à la rotation du cadre ne se touchent pas.
text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0))
créez le texte à l'aide de la commande Draft.makeText, en lui passant le texte que vous avez entré dans la console.
Prenez des coordonnées avec un léger décalage par rapport au point de base du cadre.
Dans le bon sens, il était nécessaire d'apprendre à traiter le cadre (bordure) du texte à l'aide des paramètres de l'API, après quoi, en fonction de celui-ci, calculer la largeur et la hauteur de notre cadre de cadrage. Mais comme je viens moi-même de me familiariser avec le programme, j'ai résolu le problème par la méthode des paysans. Nous allons fixer la hauteur de la police, lui affecter le style de la police à espacement fixe (Courier) et, en fonction de cela, déterminer la longueur et la largeur du cadre que nous dessinons autour du texte.
text = Draft.makeText(mtext,point=FreeCAD.Vector(x+0.25,y+0.55,0.0)) fontsize = 1.0 textwidth=(len(mtext)*fontsize*0.6)+0.35 textheight=fontsize+0.5 text.ViewObject.FontSize = fontsize text.ViewObject.FontName = "Courier"
Il ne reste plus qu'à substituer nos paramètres dans la fonction de dessin du rectangle
rec = Draft.makeRectangle(length=textwidth,height=textheight,placement=point,face=False,support=None)
en fait, c'est tout.
Il ne reste plus qu'à connecter notre bibliothèque. Pour ce faire, vous pouvez simplement le copier dans le dossier dans lequel se trouvent les autres bibliothèques Python de l'environnement sélectionné.
Par exemple, pour Windows 10, le chemin peut être le suivant
(significatif à partir de l'emplacement d'installation d'Anaconda):C: \ Users \ YourUsernameName \ Anaconda3 \ envs \ freecad \ Lib
Pour Linux, le chemin d'accès ressemblerait à ceci:
/home/ourUserName/anaconda3/envs/freecad/lib/python3.7
Tout est parti pour charger notre bibliothèque.
Pour ce faire, saisissez d'abord le nom de notre module dans la console (sans extension de fichier)
import drawhabr
Et puis appelez le constructeur de classe
drawhabr.stamp()
C'est tout ce qu'il y a pour diriger, paramétrer les fonctions et profiter du résultat.

Juste au cas où, voici une capture d'écran confirmant que tout fonctionne aussi sous Linux.

Partie V: Conclusion
Aujourd'hui, nous n'avons fait qu'un petit pas sur la voie de la compréhension de l'API FreeCAD.
Malgré le fait qu'à mon avis, pour le dessin et le développement de projets en deux dimensions, FreeCAD n'est pas aussi familier qu'AutoCAD (NanoCAD) ou d'autres systèmes de CAO courants, mais il est beaucoup plus facile de le programmer.
Même en dépit d'un manque de documentation et de la nécessité de mettre à jour certains articles avec des exemples dans Wiki FreeCAD, encore pour comprendre son API et exécuter le premier programme s'est avéré être une personne assez peu formée avec une connaissance minimale de l'écriture de code Python.
Et étant donné que les développeurs ne sont pas gourmands et, si nécessaire, autorisent même le développement commercial en utilisant FreeCAD sous la licence LGPL et en combinaison avec la pleine puissance des bibliothèques de plug-ins Python (par exemple, à partir du même kit de distribution Anaconda), le développement de programme en utilisant FreeCAD semble intéressant tâche.
Si je comprends que ce sujet vous intéresse, je vais essayer de faire un mini-cycle de notes par analogie avec Nanocad
Série de programmation NanoCAD