Cette macro utilise l'outil Draft Forme à partir d'un texte pour créer une ligne de texte placée dans différentes orientations circulaires, y compris circonférentielle et hélicoïdale (à la manière d'une colonne Trajane). Elle peut également être utilisée pour créer un cadran d'horloge avec des chiffres arabes 1, 2, 3 etc., ou des chiffres romains I, II, III, etc.
Version macro : 0.24d Date dernière modification : 2026/10/11 Version FreeCAD : 0.19 et plus Téléchargement : Icône de la barre d'outils Auteur: Mario52
Cette macro utilise l'outil Draft Formes à partir texte pour créer une ligne de texte placée dans différentes orientations circulaires, notamment circonférentielle et hélicoïdale comme par ex la colonne Trajane. Elle peut également être utilisée pour créer un cadran d'horloge avec des chiffres arabes 1, 2, 3... ou des chiffres romains I, II, III... . Cette dernière utilisation a été inspirée par le fil du forum Macro pour créer un cadran d'horloge par un membre de la communauté FreeCAD, cblt2l.
Temporary code for external macro link. Do not use this code. This code is used exclusively by Addon Manager. Link for optional manual installation: Macro
# This code is copied instead of the original macro code
# to guide the user to the online download page.
# Use it if the code of the macro is larger than 64 KB and cannot be included in the wiki
# or if the RAW code URL is somewhere else in the wiki.
from PySide import QtGui, QtCore
diag = QtGui.QMessageBox(QtGui.QMessageBox.Information,
"Information",
"This macro must be downloaded from this link\n"
"\n"
"https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/39bfcbdad0771e7709effa87f7155b8bbbb0e151/Macro_FCCircularText.FCMacro" + "\n"
"\n"
"Quit this window to access the download page")
diag.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
diag.setWindowModality(QtCore.Qt.ApplicationModal)
diag.exec_()
import webbrowser
webbrowser.open("https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/39bfcbdad0771e7709effa87f7155b8bbbb0e151/Macro_FCCircularText.FCMacro")
Exemple de la macro affichant le texte avec une orientation à 360 degrés
Utilisation
La création d'un texte génère un dossier FcString, la création d'une horloge génère un dossier FcClock.
Tous les caractères sont et restent indépendants. Lors de la création d'extrusions, rien n'est supprimé. Si un composé est créé avec Run Comp, il est copié hors du dossier.
Ces options sont grisées par défaut et activées en cochant le bouton :
Extrude Char.
Placement.
SP. inclination.
A l'exception d'une boîte de placement Clock Z est activée et déplace le texte dans la direction Z pour placer le texte sur la surface de support.
Remarques
Cette macro grise (désactivation) les options qui ne sont pas pertinentes pour une fonction sélectionnée.
Interface
Présentation générale
Première section
La fenêtre TextEdit vous permet de copier le texte à créer (cliquez sur le bouton Reset vous permet de connaître la longueur de la chaîne d'entrée qui est affichée dans le titre de la fenêtre).
Reverse ce bouton inverse le texte (ex: FreeCAD.the.best. → .tseb.eht.DACeerF).
Inverse ce bouton inverse le texte (ex : FreeCAD.the.best. → .best.the.FreeCAD).
Word coché, cette option considère le texte comme un mot, le texte est coupé dans l'espace et écrit le texte mot par mot (à la place caractère par caractère en usage normal).
Color bouton de couleur pour le projet en cours.
(97/395) C:/Windows/Fonts/DejaVuSansMono-BoldOblique.ttf : affiche le chemin et le nom de la police du fichier, la position et le nombre de polices est renseigné
Other bouton pour rechercher des polices de characteres dans des répertoires non découverts.
ComboView pour choisir la police.
Origin retourne à l'origine system, ex : « C:/Windows/Fonts/ ».
Par défaut la police ARIAL.TTF est imposée.
Options disponibles
Après la première utilisation, vous devez modifier les paramètres suivants :
User parameter:BaseApp/Preferences/Macros/FCMmacros/FCCircularText
switchModeTextList
0 = mode texte normal (et noir) coupe la switchFontComBox
1 = permet de passer à la SwitchFontComBox 1
switchFontComBox
0 = (et switchModeTextList= 1) mode texte (en couleur) dans la liste ComboBox, plus rapide
1 = (et switchModeTextList= 1) fontFamily, plus lent mais ComboBoxst est plus beau !
Mode Stand ou Mode Flat : le texte peut être créé debout ou à plat (comme l'horloge) options Outdoor et Indoor le texte des boutons est inversé.
Mode StandOutdoor Le texte est écrit debout (direction Z lecture externe).
Mode FlatOutdoor Le texte est écrit à plat (lecture externe).
Mode FlatIndoor Le texte est placé à plat lecture interne (comme clock).
Mode StandIndoor Le texte restera enregistré (comme l'horloge).
Deuxième zone
Cette section vous permet de configurer le comportement global des caractères dans tous les choix disponibles, mais avec quelques variations. Si une fonction n'est pas utilisée de façon standard dans l'option choisie, cette fonction sera grisée.
10.0 mm Radius of circle : rayon du cercle. (par défaut 10)
2.0 mm Size character : hauteur des caractères. (par défaut 2)
0 deg Begin angle : angle de départ du premier caractère sur le cercle. (par défaut 0°)
360 deg End angle: angle de fin du dernier caractère du texte. (par défaut 360)
10.0 deg Correction angle: angle de correction du texte pour le faire correspondre à la tangente du cercle. (par défaut 10 °)
0.15 mm Correction radius: correction du rayon (optionnel en rapport avec "Correction angle"). (par défaut 0.15)
Extrude Char : caractères d'extrusion de la case à cocher. (par défaut inactif)
Bottom-Center Justification : justification des caractères
-0,30 mm (Tracking) Tracking : le suivi entre deux caractères n'est disponible qu'avec le mode Word
Placement : placement du texte dans la vue 3D. (Par défaut inactif)
Sp. inclination : inclinaison des caractères sur trois axes X, Y et Z (exemple pour couvrir un tel cône). (par défaut inactif)
Outdoor
Mode par défaut. Le texte est écrit sur la surface extérieur du cylindre.
Outdoor
Indoor
Le texte est écrit sur la surface interne d'un tube ou courbe.
Indoor
Helix
Le texte est inscrit sur la circonférence extérieure d'une hélice.
Helix
La section de l'hélice est cachée par défaut. La fenêtre est visible si le bouton radio Helix est coché.
Toute les options de configurations des caractères sont actives.
Step of helix : correspond au pas de la spire de l'hélice : 2 (correspond à la hauteur du caractère) par défaut.
Char. per turn : nombre de caractères par tour ici 10 par défaut, qui correspond à 10 caractères par tour d'hélice.
Si Step of helix (pas de l'hélice) est égal à zéro, les zones de sélectionBase Helix et End Helix sont activées.
Base Helix : détermine le début (base) du placement des caractère dans l'hélice (direction Placement Z). Si Placement Z est différent de zéro, le départ est ajouté au Placement Z déjà déterminé plus haut.
End Helix : fin de l'hélice, le pas de l'hélice calculé est proportionnel à la hauteur et au nombre de caractères par tour d'hélice.
Clock
Les chiffres font partie d'un cercle avec des chiffres arabes ou romains.
Clock
Axial
Redress
Par défaut la section est cachée. La fenêtre est visible si le bouton radio Clock est coché.
Quand la section est activée, les fonctions suivantes sont dégrisées et disponibles :
Begin angle
End angle
Correction angle
Correction radius
Les boutons Mode Stand ou Mode Flat
La section Clock est active.
Radius of support : si une valeur est entrée, un support sera créé (defaut 0).
Si Support number face est différent de zéro un support est créé. (Si Extrude support = zéro, une face est créée).
1 = un cercle est créé (le cercle apparaît).
2 = un rectangle est créé (longueur = (Radius * 2) hauteur = Radius (rayon) du support) (le rectangle apparaît).
3 = un triangle (circonscrit) est créé (le triangle apparaît).
4 = un carré est créé (Radius du support) (le carré apparaît).
5 = un polygone avec le nombre de faces affiché est créé (circonscrit) (le polygone apparaît).
Si Extrude support est différent de zéro, la fonction est activée et une dimension d'extrusion est demandée. La fonction Placement direction Z se dégrise pour permettre de déplacer ou non les caractères sur la surface du support (dans la cas ou l'on désire créer un relief plutôt qu'une cavité) .
Si Support number face est égal à zéro, aucun support n'est créé.
Mode Roman : crée une horloge avec chiffres romains I II III IIII V VI VII VIII IX X XI XII
Axial : les chiffres sont écrits axialement.
Section de la trajectoire
La section titre change et affiche la longueur de la polyligne sélectionnée.
Si vous sélectionnez une polyligne, un arc, un cercle, une ligne ou une arête, le chemin de la section est coloré en vert et la commande inutilisée est colorée en rouge.
Orthogonal : le caractère est orthogonal à la vue.
Tangent : le caractère est tangent au chemin du point sur la polyligne.
Reverse wire : la polyligne sélectionnée "dupliquée". Une B-spline est créée et les points BeginEnd sont inversés, la direction est affichée L'objet d'origine est caché et restauré dès que l'opération est finie.
Delette text : les textes d'information Begin End de la dernière création sont effacés.
Le dernier bouton radio utilisé est enregistré dans les paramètres de FreeCAD.
Generator section
Integer : les données sont au format Integer.
Float : les données sont au format Float.
Unicode : les données sont au format Unicode et commence à partir de 32 jusqu'à... (de 0 à 31 sont des caractères utilisés par le système).
pi : la valeur de Pi en X decimales.
0,0000 (Integer) : générateur. Pour valider le premier nombre, cliquez sur la touche Return ou
Pour obtenir le zéro, se rendre dans les options des préférences :
1,0000 (Step) : pas d'incrémentation du générateur
Characters separation (1): caractère(s) à insérer entre chaque clic d'incrémentation ou décrémentation, le nombre de caractère(s) est affiché
Clear generator : efface le générateur et revient à 0.
Text : résultat du générateur : toutes les entrées sont concaténées ; seul pi efface le résultat sans concaténation.
Vous pouvez concaténer après l'entrée Pi :
1 (Repetition) : le résultat est répété X fois.
Ok : valide le résultat du générateur.
Clear lineEdit : efface le résultat de lineEdit.
Section des commandes
Points : crée un Draft Point au point de base du caractère (la série de points est sauvée dans un répertoire séparé)
Circle : crée une limite du Draft Cercle du rayon donné.
BoundBox : crée la boîte englobante de chaque caractère.
Progression : progression de la création des caractères (la nouvelle version reste-t-elle visible ?).
Reset : réinitialise toutes les valeurs et affiche le nombre de caractères affichés dans la fenêtre.
Reset : la réinitialisation s'effectue pour chaque caractère ; si cette option est cochée, aucune réinitialisation n'est effectuée.
Si le résultat contient des erreurs ou ne correspond pas à ce qui était attendu, c'est-à-dire s'il est corrompu : décochez la case, cliquez sur le bouton Reset ou fermez et relancez la macro FCCircularText
Free : mode libre.
Del : efface la dernière opération effectuée.
Run : lance la macro.
Run + Comp : lance la macro (les caractères sont séparés et sauvegardés dans un dossier) et crée un objet Compound de tous les caractères.
The Help : bouton affiche la page wiki dans le navigateur de FreeCAD.
Exit : quitte la macro (bye).
Paramètres disponibles
Certains paramètres sont disponibles dans les paramètres de FreeCAD, voir : Menu → Outils → Éditer des paramètres
setFontByDefault : police par défaut (la dernière utilisée)
switchResetFALSE : false réinitialise (par défaut), true pas de réinitialisation (non recommandé) certains commutateurs peuvent rester ouverts ou se fermer de manière inattendue !
setPathOrthogonal : truefalse
setPathTangent : truefalse
setPositionBase : truefalse
setPositionCenter : truefalse
setPositionTop : truefalse
switchVersionSearch : truefalse
Version : version de FCCircularText
Lance le dossier de macros FcString pour les caractères créés et le fichierFcClock pour les horloges créées.
Remarque : il est possible qu'une erreur se produise entre les versions. Veuillez publier le problème sur le forum et attendre le correctif mis à jour ou revenir à une version précédente de la macro. Je vous remercie.
Il est possible que deux caractères se chevauchent. Si cela se produit, voici une solution de contournement disponible à l'aide de la Rotate-To-Point Macro.
Character overlap issue and the workaround
(pas totalement développé)
En projet :
Écrire un texte circulaire sur un chemin de l'objet de position sélectionné.
Journal des modifications
ver 0.24d 2026/10/11 : correction 0.24b: 4653, 4594, 4821 par Direction thanks
ver 24c 2026/10/03 : retour avec (voir code code) à la place de la commande FreeCAD Gui.Selection.clearSelection(), donne une erreur si un objet est sélectionné en entrée
# deselectionner tous les objetstry:forobjinFreeCAD.ActiveDocument.Objects:# deselectionne toutFreeCADGui.Selection.removeSelection(obj)exceptException:None
ver 0.24b 2026/09/29 : ajout création et reverse wire (crée un bspline et inverse les Points), modifié convert_Int_To_RGB cas INT = 0, sinon la couleur 0 est inaccessible.
ver 0.24 2026/09/25 : ajout d'une option de génération de caractères
ver 0.23b 2026/09/13 : correction du lien des images Path Base/orthogonal !!!
ver 0.23 2026/09/13 : ajout justification, tracking, inverse, option couleur, point espace
ver 0.22f 25/09/2025 : retour à PySide, ajout d'informations pour l'utilisation de la police MONOSPACE
ver 0.22e 2024/07/11 : supprime "ss.support = None"
ver 0.22d 2024/07/11 : supprime l'erreur de cause "import WebGui" dans FC 0.22xxx et est remplacé par "import webbrowser"
ver 0.22c 2023/11/17 : ajout de la fonction « restore selection » après la suppression du dernier objet, par TheMarkster, merci
ver 0.21 2022/05/31 : ajout bouton recherche dans les répertoires, et bouton retour à l'origine système
ver 0.2021/04/05 : ajout d'un icone dans la macro, Tab pour diminuer la hauteur de la macro, suppression de toutes les dimensions des widgets maintenant entièrement compatibles avec la feuille de style, révision de la version de recherche pour compatibilité et autres petits changements.
ver 1.19 2021/03/15 : ajout du bouton Delete du dernier objet créé et du code FreeCAD.ActiveDocument.openTransaction("FCCTc") pour le système Undo/Redo.
Ajout d'une boîte à cocher Reset pour commuter/activer (demandé par les utilisateurs) la réinitialisation automatique après avoir poussé le bouton Run et Run comp. Cette utilisation de la boîte à cocher est not advised, si vous constatez un dysfonctionnement appuyez sur le bouton Reset ou quittez FCCircularText et recommencez.
ver 0.17b 2020/09/28 : correction d'un petit bug (pl au lieu de plm dans la section trajectoire) et arrangement de la fenêtre (dimension) Clock, Helix, Path
ver 0.17 2020/09/26 : ajout de créer un texte circulaire sur la polyligne (courbe, arc, spline, ligne...) sélectionnée, mode word
#### Test FreeCAD.Version simple ############################################################################################################ifint(FreeCAD.Version()[1])<18:# Version de FreeCADFreeCAD.Console.PrintMessage("This version "+__Title__+" rmu work with the FreeCAD 0.18 or higher."+"\n\n")FreeCAD.Console.PrintMessage("For the precedent version see the page "+"\n\n")FreeCAD.Console.PrintMessage("https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/db47f78f2b20a35137ac213b8d1a62d30f525dcb/Macro_FCCircularText.FCMacro"+"\n\n")#### Test FreeCAD.Version simple ############################################################################################################
ver 0.16 2020/06/07 : petit bug dans Linux (cause plusieurs sous répertoires dans fonts) avec le chemin sauvé dans les options la recherche restait uniquement dans le dernier répertoire et n'affichait rien (), imposé PolicePath = "/usr/share/fonts/" (stay on path /xx/xx/xx/xx/xx/xx/ on entry) à chaque démarrage et la recherche se fait dans tous les sous répertoires.
ver 0.15 2020/06/01 : pour PySide2 Qt5 ajout des polices matplotlib dans comboView, configuration des paramètres.
ver 0.14-4 2020/04/25 : correction pour "DisplayMode = u"Flat Lines"
ver 0.14 2019/04/27 : compatible avec Python 3.6.6 et Qt 5.6.2 (cause : unicode() )
latesttesting:#OS: Windows 10#Word size of OS: 64-bit#Word size of FreeCAD: 64-bit#Version: 0.19.16523 (Git)#Build type: Release#Branch: master#Hash: 9b3ec233c8b21e0df66fada487cd10f471d60cac#Python version: 3.6.6#Qt version: 5.6.2#Coin version: 4.0.0a#OCC version: 7.3.0
ver 0.13 30/01/2018 : ajout d'une fonction de rotation du caractère sur lui même
ver 0.13 09/08/2016 : remplacé le bouton "New font" par la fonction "fontComboBox" cause , avec Windows 10 la fenêtre "Font" reste vide les fichiers sont cachés
ver 0.12 03/07/2016 : optimisation du code de la boucle pour accepter les décimales pour plus de précision de la répartition des angles. Remplace la ligne :
forangleTrFloatinrange((debut*10000),(rotation*10000),int((round(((float(rotation)-float(debut))/float(nombre)),4)*10000))):# pour 4 decimalesangleTr=(float(angleTrFloat)/10000)
ver 0.10 17/05/2015 : ajout des lignes 1365, 1366 seulement créé davantage de cadrans d'horloge ?? ()
ver 0.8 10/05/2015 replace "String=texte[ii2]" to "String=unicode(texte[ii2])" line 1290. cause "TypeError: Property 'FontFile': type must be str or unicode, not QString"
# ver 0.8 10/05/2015 /_ # testing with OS :################################################################################################### OS: Ubuntu 14.04.1 LTS # OS: Ubuntu 14.04.2 LTS# Platform: 32-bit # Word size of OS: 32-bit# Version: 0.14.2935 (Git) # Word size of FreeCAD: 32-bit# Branch: master # Version: 0.16.4928 (Git)# Hash: eab159b6ee675012bf79de838c206a311e911d85 # Branch: master# Python version: 2.7.6 # Hash: d8f63bcfd10301f3d1e141cced4370f0782238d0# Qt version: 4.8.6 # Python version: 2.7.6# Coin version: 4.0.0a # Qt version: 4.8.6# SoQt version: 1.6.0a # Coin version: 4.0.0a# OCC version: 6.7.0 # OCC version: 6.8.0.oce-0.17################################################################################################### OS: Windows Vista # OS: Windows Vista# Word size of OS: 32-bit # Word size of OS: 32-bit# Word size of FreeCAD: 32-bit # Word size of FreeCAD: 32-bit# Version: 0.15.4527 (Git) # Version: 0.15.4671 (Git)# Branch: master # Branch: releases/FreeCAD-0-15# Hash: 0da2e4c45a9a259c26abd54c2a35393e1c15696f # Hash: 244b3aef360841646cbfe80a1b225c8b39c8380c# Python version: 2.7.8 # Python version: 2.7.8# Qt version: 4.8.6 # Qt version: 4.8.6# Coin version: 4.0.0a # Coin version: 4.0.0a# OCC version: 6.7.1 # OCC version: 6.8.0.oce-0.17##################################################################################################
ver 0.7 02/02/2015 : suppression 2 chaines de caractères App.Console.PrintMessage(str(PolicePath)+"\n") en App.Console.PrintMessage((PolicePath)+"\n"), ce qui provoquait une erreur avec les caractères supérieurs à 128 dans le chemin d'accès aux polices.
ver 0.6 23/11/2014 correction de "texte = unicode(self.textEdit.toPlainText())" maintenant accepte "'éèà@..."
ver 0.5 19/11/2014 : interface graphique
ver 0.4 10/10/2014 : ajout d'une variable « rotation » dans la boucle (for i in range(0,rotation,(rotation/nombre)): # 360 a parametrer)
ver 0.4 27/08/2014 : correction de l'erreure du rayon (exterieur=0, debout=1)
ver 0.3 26/08/2014 : ajout du texte de création d'une courbe plane
ver 0.2 26/08/2014 : ajout du texte de création de la courbe interne