TechDraw TemplateGenerator/fr

Introduction
Ce tutoriel décrit comment générer un modèle simple à utiliser avec l'atelier TechDraw à partir de quelques lignes de code Python.

N'importe quel éditeur de texte peut être utilisé pour coder. Mon choix se porte sur Atom, mais l'éditeur intégré de FreeCAD fonctionne bien aussi.

Les exemples de code suivants peuvent être copiés et collés dans un fichier texte vide, puis enregistrés sous le nom de votre choix en tant que fichier *.py ou *.FCMacro.

Un modèle fournit un arrière-plan pour les tâches de dessin et ses dimensions sont utilisées par les pilotes d'imprimante pour mettre le dessin à l'échelle correctement.

Les modèles sont des fichiers svg et une macro doit donc composer quelques lignes de code svg (qui est un sous-ensemble du code xml).

Structure d'une simple page blanche
Le format SVG est un sous-ensemble du format XML. C'est pourquoi un fichier SVG, comme tout fichier XML, se compose de deux parties : le titre : (je ne sais pas pourquoi il devrait y avoir un titre, le fichier svg est toujours un fichier modèle valide sans lui...)
 * L'en-tête, une déclaration de format
 * Le corps, qui contient les informations à afficher et où les placer.

L'en-tête
L'en-tête n'est qu'une ligne pour déclarer quelle version du langage XML un interpréteur doit utiliser pour traiter les instructions du corps.

Le corps
Le corps commence par une balise d'ouverture qui contient des informations sur les espaces de nom et sur la taille du modèle et l'endroit où le placer. Et il se termine par une balise de fermeture.


 * xmlns= "http://www.w3.org/2000/svg" : Lien externe vers l'espace de noms xml pour rechercher les commandes xml standard
 * version= "1.1" : La version de xml utilisée est 1.1
 * xmlns:freecad= "Svg Namespace" : Lien externe vers l'extension de l'espace de nom de FreeCAD
 * pour rechercher des commandes spéciales qui ne sont utilisées que dans un environnement FreeCAD, par exemple pour les textes éditables.
 * width= "420mm" : Largeur de la zone de dessin
 * height= "297mm" : Hauteur de la zone de dessin
 * viewBox= "0 0 420 297" : Position du coin supérieur gauche (0;0) et du coin inférieur droit (420;297) dans l'espace de construction svg (en unités svg).
 * La largeur, la hauteur et viewBox dans cette combinaison définissent 1 unité svg à 1 mm pour l'ensemble du document. Une unité dimensionnelle peut être omise à partir de maintenant.
 * Dans ce cas, 420 et 297 donnent une page A3. Personnalisez ces valeurs pour générer d'autres tailles de page

Pour une page blanche de taille DIN A3 en orientation paysage, c'est tout.

Code Python...
Avant que le code ne soit généré, un dossier est nécessaire pour stocker le nouveau fichier modèle.

L'utilisateur doit avoir sélectionné un dossier de modèle. Son chemin est alors enregistré dans les préférences de TechDraw. Il n'est pas nécessaire de savoir où sont stockées les préférences, car FreeCAD dispose de commandes permettant d'adresser directement les paramètres nécessaires.

parameter_path reçoit le chemin vers le "dossier" dans le fichier de configuration où se trouve le paramètre "TemplateDir". template_path reçoit le contenu de "TemplateDir" qui est le chemin vers le répertoire du modèle. template_name reçoit le nom du modèle à créer.

Maintenant, le nom du modèle doit être associé au chemin du modèle d'une manière qui soit compatible avec les systèmes d'exploitation basés sur unix et Windows. Ceci est fait avec la commande "os.path.join" et stocké dans le template_file.

... pour créer une page blanche
Cette macro montre le principe d'assemblage d'un fichier svg. (Le format est A3)


 * Le principe essentiel est :
 * d'ouvrir un fichier en écriture et donc de démarrer un fichier svg à partir de zéro, d'écrire la ligne d'en-tête et de fermer le fichier dans un premier temps.
 * puis d'ouvrir à plusieurs reprises le fichier pour ajouter d'autres segments et de le refermer après l'ajout.
 * La macro est composée de plusieurs fonctions qui sont appelées depuis la section principale.
 * Des fonctions supplémentaires peuvent être insérées avant la fonction EndSvg et les appels nécessaires sont placés avant l'appel EndSvg.
 * Nous devons surveiller le nombre d'espaces utilisés lors des opérations d'écriture pour une indentation correcte.
 * Nous devons surveiller le nombre d'espaces utilisés lors des opérations d'écriture pour une indentation correcte.

... pour créer une page avec de l'encre
Pour faire un dessin à partir d'une page blanche, nous avons besoin de :
 * de cadres, c'est-à-dire des rectangles créés avec l'instruction rect.
 * d'un cartouche et de lignes créées avec l'instruction path.
 * de textes simples pour les index et l'étiquetage des cellules du bloc titre
 * de textes modifiables comme le numéro ou le nom de la pièce.

Normalement, ces éléments graphiques sont utilisés de manière répétée et le code de génération est donc placé dans des fonctions.

svgrect function
To draw a rectangle we just need to call the svgrect function and hand over the values for width, height, and position of the upper left corner. That is better readable than the content of the svgline which had to be used instead.

svgpath function
To draw a line we just need to call the svgpath function and hand over the coordinates of the start point and the endpoint of a line.

Instead of the end point coordinates we can hand over a tag to draw a horizontal (h) or vertical (v) line followed by the length of the line or the tag to draw a horizontal (H) or vertical (V) line followed by the x or y ordinate of the end point.

Each path starts at the origin and the first action is a movement with "raised pen" (not drawing) to the start point. In this case the relative movement and the absolute movement are the same and so it is irrelevant whether the m-tag is upper or lower case.

svgtext function
To draw a piece of text we just need to call the svgtext function and hand over the coordinates of the text's anchor point and the text string itself.

(The text alignment is controlled by the surrounding group tag or left-aligned as default).

FCeditext function
To draw a piece of editable text we just need to call the FCeditext function and hand over a name, the coordinates of the text's anchor point, and the text string itself.

FreeCAD creates a dictionary object with every inserted template, and each entry has a name (key) and a value.

(The text alignment is controlled by the surrounding group tag or left-aligned as default).

CreateXxxx functions
These functions start with code to open a file in append mode and to write the group opening tag.

Then follows a section to set and calculate values and with write instructions that call the above functions to generate svg-code.

And finally the group closing tag followed by an instruction to close the file.

Resulting macro
This macro adds some basic graphical elements needed for proper templates i.e. line elements, texts, and editable texts.

And this is the svg-code coming out of this macro:

And what it should look like when inserted (plus magnified title block):