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
 * "freecad :" sera préfixé aux noms d'attributs pour qu'ils soient traités par lesdites commandes spéciales.
 * 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).
 * Width, height 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.



Fonction svgrect
Pour dessiner un rectangle, il suffit d'appeler la fonction svgrect et de lui transmettre les valeurs de largeur, de hauteur et de position du coin supérieur gauche. C'est plus lisible que le contenu de la svgline qui devait être utilisé à la place.



Fonction svgpath
Pour dessiner une ligne, il suffit d'appeler la fonction svgpath et de fournir les coordonnées du point de départ et du point d'arrivée d'une ligne.

Au lieu des coordonnées du point final, nous pouvons remettre une étiquette pour dessiner une ligne horizontale (h) ou verticale (v) suivie de la longueur de la ligne ou l'étiquette pour dessiner une ligne horizontale (H) ou verticale (V) suivie de l'ordonnée x ou y du point final.

Chaque chemin commence à l'origine et la première action est un mouvement avec le "stylo levé" (pas de dessin) vers le point de départ. Dans ce cas, le mouvement relatif et le mouvement absolu sont identiques et il n'est donc pas important que l'étiquette m (m-tag? ndlt) soit en majuscule ou en minuscule.



Fonction svgtext
Pour dessiner un morceau de texte, il suffit d'appeler la fonction svgtext et de fournir les coordonnées du point d'ancrage du texte et la chaîne de texte elle-même.

(L'alignement du texte est contrôlé par la balise de groupe qui l'entoure ou aligné à gauche par défaut).



Fonction FCeditext
Pour dessiner un morceau de texte modifiable, il suffit d'appeler la fonction FCeditext et de lui donner un nom, les coordonnées du point d'ancrage du texte et la chaîne de texte elle-même.

FreeCAD crée un objet dictionnaire avec chaque modèle inséré et chaque entrée possède un nom (clé) et une valeur.

(L'alignement du texte est contrôlé par la balise de groupe qui l'entoure ou aligné à gauche par défaut).



Fonctions CreateXxxx
Ces fonctions commencent par du code pour ouvrir un fichier en mode append et pour écrire la balise d'ouverture de groupe.

Suit une section pour définir et calculer les valeurs et des instructions d'écriture qui appellent les fonctions ci-dessus pour générer le code svg.

Et enfin la balise de fermeture de groupe suivie d'une instruction pour fermer le fichier.



Macro résultante
Cette macro ajoute certains éléments graphiques de base nécessaires à l'élaboration de modèles appropriés, à savoir des éléments de ligne, des textes et des textes modifiables.

Et voici le code svg qui sort de cette macro :

Et ce à quoi il devrait ressembler une fois inséré (avec un bloc titre agrandi) :