Macro Fonts Win10 PYMP

From FreeCAD Documentation
Jump to: navigation, search
This page is a translated version of the page Macro Fonts Win10 PYMP and the translation is 100% complete.

Other languages:
English • ‎français • ‎italiano • ‎Türkçe

Macro Fonts Win10 PYMP.png Macro Fonts Win10 PYMP

Description
Cette petite macro est dédiée aux utilisateurs de Windows 10. Les polices de l’explorateur à utiliser avec ShapeString sont vides et cette petite macro peut vous aider à voir la police à utiliser.

Macro version : 01.00
Date last modification : 2019-05-10
FreeCAD version : All
Download : ToolBar Icon
Author
Mario52
Download
ToolBar Icon
Links
Macro Version
01.00
Date last modification
2019-05-10
FreeCAD Version(s)
All
Default shortcut
None
See also
None


Description

Cette petite macro est dédiée aux utilisateurs de Windows 10. Les polices de l’explorateur à utiliser avec ShapeString sont invisibles et cette petite macro peut vous aider à voir la police à utiliser.


Macro Fonts Win10 PYMP 00.png

Macro Fonts Win10 PYMP



Utilisation

Lancez la macro, sélectionnez la police et appliquez-la.

Macro Fonts Win10 PYMP

Macro Fonts Win10 PYMP window


  • Fenêtre pour votre texte.
  • Édite le chemin et le nom réel de la fonte utilisée.
  • Combobox choisissez votre police
  • OK : validation
  • Color : choisissez lza couleur de votre texte
  • 10.00 : dimension du texte dans la vue 3D
  • CkeckBox Text : creation de votre texte en mode text avec le texte ShapeString
  • New path : autre dossier de fichier police
  • 20.00 : dimension du texte affiché dans la fenêtre de la macro
  • Origin : répertoire original des polices (système)


Script

ToolBar Icon Macro Fonts Win10 PYMP.png

Macro Fonts Win10 PYMP.FCMacro

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
"""
***************************************************************************
*   Copyright (c) 2019  <mario52>                                         *
*                                                                         *
*   This file is a supplement to the FreeCAD CAx development system.      *
*                                                                         *
*   This program is free software; you can redistribute it and/or modify  *
*   it under the terms of the GNU Lesser General Public License (LGPL)    *
*   as published by the Free Software Foundation; either version 2 of     *
*   the License, or (at your option) any later version.                   *
*   for detail see the LICENCE text file.                                 *
*                                                                         *
*   This software is distributed in the hope that it will be useful,      *
*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
*   GNU Library General Public License for more details.                  *
*                                                                         *
*   You should have received a copy of the GNU Library General Public     *
*   License along with this macro; if not, write to the Free Software     *
*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
*   USA                                                                   *
***************************************************************************
*           WARNING! All changes in this file will be lost and            *  
*                  may cause malfunction of the program                   *
***************************************************************************
"""
#Macro_Fonts_Win10_PYMP 10/05/2019
#
###############################################################################################################################
#OS: Windows 10                                #OS: Windows 10                                #OS: Windows 10
#Word size of OS: 64-bit                       #Word size of OS: 64-bit                       #Word size of OS: 64-bit
#Word size of FreeCAD: 64-bit                  #Word size of FreeCAD: 64-bit                  #Word size of FreeCAD: 64-bit
#Version: 0.16.6706 (Git)                      #Version: 0.17.13541 (Git)                     #Version: 0.18.16093 (Git)
#Build type: Release                           #Build type: Release                           #Build type: Release
#Branch: releases/FreeCAD-0-16                 #Branch: releases/FreeCAD-0-17                 #Branch: releases/FreeCAD-0-18
#Hash: f86a4e411ff7848dea98d7242f43b7774bee8fa0#Hash: 9948ee4f1570df9216862a79705afb367b2c6ffb#Hash: 690774c0effe4fd7b8d2b5e2fb2b8c8d145e21ce
#Python version: 2.7.8                         #Python version: 2.7.14                        #Python version: 2.7.14
#Qt version: 4.8.7                             #Qt version: 4.8.7                             #Qt version: 4.8.7
#Coin version: 4.0.0a                          #Coin version: 4.0.0a                          #Coin version: 4.0.0a
#OCC version: 6.8.0.oce-0.17                   #OCC version: 7.2.0                            #OCC version: 7.2.0
###############################################################################################################################
#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
###############################################################################################################################

__title__   = "Macro_Fonts_Win10_PYMP"
__author__  = "Mario52"
__url__     = "http://www.freecadweb.org/index-fr.html"
__version__ = "01.00"
__date__    = "2019/05/10"    #YYYY/MM/DD
#
#import PySide2
#from PySide2 import QtGui ,QtCore
#from PySide2.QtGui import *
#from PySide2.QtCore import *

import PySide
from PySide import QtGui ,QtCore
from PySide.QtGui import *
from PySide.QtCore import *
 
import Draft, Part, PartGui, FreeCADGui, FreeCAD
from FreeCAD import Base
import math
from math import sqrt, pi, sin, cos, asin
import re
import operator
from operator import itemgetter, attrgetter, methodcaller    # pour sort 

Gui = FreeCADGui
App = FreeCAD

import os, time, sys
import platform
#import glob
#files_TTF = glob.glob(self.pathFont + "/*.TTF") 

##################################
import matplotlib
import matplotlib.font_manager
import matplotlib.font_manager as fontman
import matplotlib.font_manager as fontconfig
from matplotlib.font_manager import FontProperties
#from matplotlib.ft2font import FT2Font
##################################
global ui    ; ui = ""
global newPolicePath
global PolicePath

if platform.system() == "Windows" :
    PolicePath = "C:/Windows/Fonts/ARIAL.TTF"
elif platform.system() == "Linux" :
    PolicePath = "/usr/share/fonts/truetype/ubuntu-font-family/Ubuntu-M.ttf"
elif platform.system() == "Darwin":
    PolicePath = "/Library/Fonts/Arial.ttf"
else:
    PolicePath = "C:/Windows/Fonts/ARIAL.TTF"

nomPolice = os.path.basename(PolicePath).split('.')[0]
newPolicePath = os.path.dirname(PolicePath).split('.')[0]

#### Config Begin #########################################
                                                        # # https://en.wikipedia.org/wiki/Web_colors
global setColorTTF       ; setColorTTF       = "blue"   # .TTF   color by "name" or hexa "#0000FF" 
global setColorFON       ; setColorFON       = "orange" # .FON   color by "name" or hexa "#FFA500"
global setColorOTF       ; setColorOTF       = "green"  # .OTF   color by "name" or hexa "#008000"
global setColorPOL       ; setColorPOL       = "black"  # .OTHER color by "name" or hexa "#000000"
                                                      #####
global switchModeTextList; switchModeTextList= 1        # 0 = mode text normal (et noir) coupe le switchFontComBox
                                                        # 1 = permet le switchFontComBox 0/1
                                                      #####
global switchFontComBox  ; switchFontComBox  = 1        # 0 = texte (en couleur) dans liste ComboBox plus rapide
                                                        # 1 = fontFamily dans liste ComboBox plus lent mais plus beau!
                                                      #####
global setSystemFonts    ; setSystemFonts    = 1        # 0 = matplotlib.font_manager.findSystemFonts("C:/", "ttf") 
                                                        #     fait toutes les fontes (dans tous les dossiers et sous dossiers du DD) time !!
                                                        # 1 = fontman.findSystemFonts(self.pathFont)
                                                        #     fait toutes les fontes du repertoire (et dans tous les sous dossiers)
                                                      #####
global seTtextAlignement ; seTtextAlignement = 0        # 0 = AlignLeft (default)
                                                        # 1 = AlignCenter
                                                        # 2 = AlignRight
                                                      #####
#### Config End ###########################################

setIconTTF = [
"16 16 6 1",
" 	c None",
".	c #204A87",
"+	c None",
"@	c #729FCF",
"#	c #CC0000",
"$	c #EDD400",
".+++++++++++@@@@",
".++++++++@+@++@@",
".++#####++++@@+@",
".+++$#$$$++@+@+@",
".++++#$+++++++@+",
".++++#$#####++++",
".++++#$+$#$$$+++",
".++++#$++#$+++++",
".@++++$++#$+###+",
".@@++++++#$+#$$$",
"..@@+++++#$+#$++",
"...@@+++++$+###+",
"....@@++++++#$$$",
".....@@+++++#$++",
"......@@+++++$++",
"................"]

setIconFON = [
"16 16 6 1",
" 	c None",
".	c #204A87",
"+	c None",
"@	c #F57900",
"#	c #CC0000",
"$	c #EDD400",
".+++++++++++@@@@",
".++++++++@+@++@@",
".++###++++++@@+@",
".++#$$$++++@+@+@",
".++#$+++++++++@+",
".++###+###++++++",
".++#$$$#$#$+++++",
".++#$++#$#$+++++",
".@++$++#$#$##+#+",
".@@++++#$#$##$#$",
"..@@+++###$#$##$",
"...@@+++$$$#$##$",
"....@@+++++#$+#$",
".....@@++++#$+#$",
"......@@++++$++$",
"................"]

setIconOTF = [
"16 16 6 1",
" 	c None",
".	c #204A87",
"+	c None",
"@	c #4E9A06",
"#	c #CC0000",
"$	c #EDD400",
".+++++++++++@@@@",
".++++++++@+@++@@",
".++###++++++@@+@",
".++#$#$++++@+@+@",
".++#$#$+++++++@+",
".++#$#$###++++++",
".++#$#$+#$$+++++",
".++###$+#$++++++",
".@++$$$+#$+###++",
".@@+++++#$+#$$$+",
"..@@++++#$+#$+++",
"...@@++++$+###++",
"....@@+++++#$$$+",
".....@@++++#$+++",
"......@@++++$+++",
"................"]

setIconPOL = [
"16 16 12 1",
" 	c None",
".	c #204A87",
"+	c None",
"@	c #06989A",
"#	c #73D216",
"$	c #000000",
"%	c #75507B",
"&	c #729FCF",
"*	c #CC0000",
"=	c #F57900",
"-	c #EDD400",
";	c #4E9A06",
".+++++++++++@#$%",
".++++++++$+#++&$",
".++***++++++=@+%",
".++*-*-++++*+&+$",
".++*-*-+++++++*+",
".++***-***++++++",
".++*---*-*-+++++",
".++*-++*-*-+++++",
".$++-++*-*-*++++",
".*@++++*-*-*-+++",
"..#*+++***-*-+++",
"...;#+++---*-+++",
"....%=+++++*-+++",
".....;$++++****+",
"......@%++++----",
"................"]

def createSpace(texte):    # detecte majuscule et ajoute un espace devant la lettre
    # return createSpace(TexTe) = Tex Te , if createSpace(TEXTE) = TEXTE
    if texte.isupper():
        stringSpace = texte
    else:
        try:
            stringSpace = texte[0]
            for i in texte[1:]:
                if re.search(r"[A-Z]", i): i = " " +  i
                stringSpace += i
        except Exception:
            stringSpace = texte
    return stringSpace

def family(chaine):
    # return family(chaine)[1] = Family , family(chaine)[2] = typeCar (form [a, b, c ...]
    famille = typeCar = ""
    try:
        if chaine.find('-') != -1:
            famille = chaine[:chaine.find('-')]
            typeCar = chaine[chaine.find('-')+1:]
        else:
            famille = chaine
            typeCar = ""
    except Exception:
        famille = chaine
        typeCar = ""
    typeCar = str(createSpace(typeCar)).split()
    return [createSpace(famille), typeCar]

class Ui_MainWindow(object):

    def __init__(self ):
        self.window = MainWindow
        ##path###############################################################
        #self.path  = FreeCAD.ConfigGet("AppHomePath")                      # path FreeCAD installation
        #self.path  = FreeCAD.ConfigGet("UserAppData")                      # path FreeCAD User data
        #self.path  = "your path"                                           # your directory path
        param = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macro")# macro path
        self.path = param.GetString("MacroPath","") + "/"                   # macro path
        self.path = self.path.replace("\\","/")                             # convert the "\" to "/"
        #FreeCAD.Console.PrintMessage( "Path for the icons : " , self.path )# 
        #####################################################################

        ####font textEdit
        self.nomPolice     = "Arial"
        self.FontTextSize  = 20
        self.fonteComp     = ""
        self.font          = QtGui.QFont()
        ####font textEdit
        self.FontSize  = 10.0
        self.red       = (204.0 / 255.0)
        self.green     = (204.0 / 255.0)
        self.blue      = (204.0 / 255.0)
        self.alpha     = 1.0                      # 1.0 = visibility max (opacity)

        ####global font
        self.fontGlobal_08 = QtGui.QFont()        #
        self.fontGlobal_08.setFamily("Arial")     #
        self.fontGlobal_08.setPointSize(8)        #
        ####global font

        self.tableau   = []    #Index (), [chemin plus nom fichier (nomPathPolice), nom sans extension (nomSimple), nomSimpleExt (nomSimple + Ext)]
        self.index     = 0     #Index ()

    ##########################
    def searchFont(self,pathSearch):
        global setSystemFonts
        global seTtextAlignement
        global switchFontComBox
        global switchModeTextList

        files_All_Fonts = ""
        ##https://matplotlib.org/_modules/matplotlib/font_manager.html
        if setSystemFonts == 0:
            files_All_Fonts = matplotlib.font_manager.findSystemFonts(pathSearch, "ttf")  # fait toutes les fontes ? ()
        else:
            files_All_Fonts = fontman.findSystemFonts(pathSearch)                         # fait toutes les fontes (et dans tous les sous dossiers)

        if len(files_All_Fonts) > 0:           
            self.tableau = []
            self.index = 0

            for fonte in files_All_Fonts:
                ####
                nomPathPolice = nomFichier = nomSimpleExt = nomSimple = nomExtension = nameName = ""

                nomPathPolice = fonte.replace("\\","/")     # convert the "\" to "/"
                nomFichier    = nomPathPolice.split("/")    # complet split
                nomSimpleExt  = nomFichier[-1]              # nom avec extension
                nomSimple     = nomFichier[-1][:-4]         # nom sans extension
                nomExtension  = nomSimpleExt[nomSimpleExt.rfind('.')+1:].upper() # extension
                ####
                try:
#                    nameFamily    = matplotlib.font_manager.FontProperties(fname=fonte).get_family()            ##['sans-serif']
#                    nameStyle     = matplotlib.font_manager.FontProperties(fname=fonte).get_style()              #normal
#                    nameVariant   = matplotlib.font_manager.FontProperties(fname=fonte).get_variant()            #normal
#                    nameWeight    = matplotlib.font_manager.FontProperties(fname=fonte).get_weight()             #normal
#                    nameStretch   = matplotlib.font_manager.FontProperties(fname=fonte).get_stretch()            #normal
#                    nameFileComp  = matplotlib.font_manager.FontProperties(fname=fonte).get_file()              ##c:\windows\fonts\NotoNaskhArabicUI-Regular.ttf
#                    nameSize      = matplotlib.font_manager.FontProperties(fname=fonte).get_size()               #10.0
                    nameName      = matplotlib.font_manager.FontProperties(fname=fonte).get_name()              ##Noto Naskh Arabic UI
#                    nameSizePoint = matplotlib.font_manager.FontProperties(fname=fonte).get_size_in_points()     #10.0
#                    nameSlant     = matplotlib.font_manager.FontProperties(fname=fonte).get_slant()              #normal
#                    namePattern   = matplotlib.font_manager.FontProperties(fname=fonte).get_fontconfig_pattern() #:family=sans-serif:style=normal:variant=normal:weight=normal:stretch=normal:file=c:\windows\fonts\NotoNaskhArabicUI-Regular.ttf:size=10.0
                except Exception:
                    nameFamily = nameStyle = nameVariant = nameWeight = nameStretch = nameFileComp = nameSize = nameName = nameSizePoint = nameSlant = namePattern = ""
                ####
                if nameName == "" :
                    nameName = nomSimple
                self.tableau.append([0, nomPathPolice, nomSimple, nomSimpleExt.upper(), nomExtension.upper(), nameName])
                
            self.tableau = sorted(self.tableau, key=itemgetter(3))          # sorted by nomSimple.upper()

            try:
                for line in range(len(self.tableau)):                       # enleve les doubles (bon)
                    if self.tableau[line][2] == self.tableau[line + 1][2]:  # enleve les doubles (bon)
                        del(self.tableau[line + 1])                         # enleve les doubles (bon)
            except Exception:
                None

            self.comboBoxPy.clear()
            for line in range(len(self.tableau)): 
                try:
#                    self.tableau[line][0] = line                 # ajoute le numero de ligne
                    if self.tableau[line][2].upper() == "ARIAL": # detecte la fonte de base
                        self.index = line
    
                    ####Section common color and font begin ######################
                    model = self.comboBoxPy.model()

                    if switchModeTextList == 1:
                        if self.tableau[line][4] == "TTF":
                            item = QtGui.QStandardItem(QtGui.QPixmap(setIconTTF), str(line))
                            item.setForeground(QtGui.QColor(setColorTTF))
                        elif self.tableau[line][4] == "FON":
                            item = QtGui.QStandardItem(QtGui.QPixmap(setIconFON), str(line))
                            item.setForeground(QtGui.QColor(setColorFON))
                        elif self.tableau[line][4] == "OTF":
                            item = QtGui.QStandardItem(QtGui.QPixmap(setIconOTF), str(line))
                            item.setForeground(QtGui.QColor(setColorOTF))
                        else:
                            item = QtGui.QStandardItem(QtGui.QPixmap(setIconPOL), str(line))
                            item.setForeground(QtGui.QColor(setColorPOL))
                    else:
                        self.comboBoxPy.addItem(self.tableau[line][2])    
    
                    if   seTtextAlignement == 0:
                        item.setTextAlignment(QtCore.Qt.AlignLeft)
                    elif seTtextAlignement == 1:
                        item.setTextAlignment(QtCore.Qt.AlignCenter)
                    elif seTtextAlignement == 2:
                        item.setTextAlignment(QtCore.Qt.AlignRight)
                    ####Section item color and font end ##########################
    
                    ####Section setfont Family switchFontComBox begin#############
                    if switchFontComBox == 1:
                        typeCar = font = ""
                        font = QtGui.QFont()
                        #font = item.font()
        
                        typeCar   = family(self.tableau[line][2])[1]
                        font.setBold(False)
                        font.setItalic(False)
        
                        if len(typeCar) > 0:
                            for option in typeCar:
                                if option == "Bold":
                                    font.setBold(True)
                                if (option == "Italic") or (option == "It") or (option == "Slanted"):
                                    font.setItalic(True)
                                if option == "Oblique":
                                    font.setItalic(True)
                        #'Bold''Regular''Slanted''Italic''Medium''Extra''Light''Condensed''Black''It''Semibold'
                        
                        font.setFamily(self.tableau[line][5])
                        font.setPixelSize(15)
                        item.setFont(font)
                    ####Section setfont Family switchFontComBox end###############
    
                    model.appendRow(item)
                    self.comboBoxPy.setItemText(line, self.tableau[line][2])
                    ####Section common color and font end#########################

                except Exception:
                    FreeCAD.Console.PrintMessage("searchFont()")
                    None
            #for i in self.tableau: print(i)
            MainWindow.setWindowTitle(__title__ + " (" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") (" + __version__ + " : " + __date__ + ")")
            self.lineEdit_NameFile.setText(self.tableau[self.index][1])
            self.textEdit.setToolTip("Your text here" + "\n"
                                     "Title (" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") = (index file, number file font)" + "\n"
                                     "Version " + __version__ + " : " + __date__ + ") of " + __title__  + ")" + "\n\n"
                                     "It is possible that a font is not visible in its normal design," + "\n"
                                     "but it is normal in the 3DView, sorry !")
    
            self.comboBoxPy.setCurrentIndex(self.index)
            self.fonteComp = self.tableau[self.index][1]
            ####    
            self.textEditFont = QtGui.QFont()            #
            self.textEditFont.setFamily(self.tableau[self.index][5]) #
            self.textEditFont.setPointSize(20)           #
            self.textEdit.setFont(self.textEditFont)     #
            ####
    ##########################

    def setupUi(self, MainWindow):
        global setSystemFonts
        global setColorTTF
        global setColorFON
        global setColorOTF
        global setColorPOL
        global seTtextAlignement
        global switchFontComBox
        global switchModeTextList
        global ui

        self.window = MainWindow

        MainWindow.setObjectName(("MainWindow"))
        MainWindow.resize(470, 250)
        MainWindow.setMinimumSize(QtCore.QSize(470, 250))
#        MainWindow.setMaximumSize(QtCore.QSize(470, 250))
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(("centralwidget"))


        self.textEdit = QtGui.QTextEdit(self.centralwidget)
        self.textEdit.setGeometry(QtCore.QRect(20, 20, 426, 90))
        self.textEdit.setObjectName(("textEdit"))
        self.textEdit.setText("Your text here")
#        self.textEdit.setToolTip("Your text here" + "\n"
#                                 "Title (" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") = (index file, number file font)" + "\n"
#                                 "Version " + __version__ + " : " + __date__ + ") of " + __title__  + ")" + "\n\n"
#                                 "It is possible that a font is not visible in its normal design," + "\n"
#                                 "but it is normal in the 3DView, sorry !")

        self.lineEdit_NameFile = QtGui.QLineEdit(self.centralwidget)
        self.lineEdit_NameFile.setGeometry(QtCore.QRect(20, 125, 426, 22))
        self.lineEdit_NameFile.setObjectName("lineEdit_NameFile")
#        self.lineEdit_NameFile.setText(self.tableau[self.index][1])
        self.lineEdit_NameFile.setToolTip("Complete path and name of Font file")

        ######################
        self.comboBoxPy = QtGui.QComboBox(self.centralwidget)
        self.comboBoxPy.setGeometry(QtCore.QRect(20, 155, 426, 22))
        self.comboBoxPy.setObjectName("comboBoxPy")
        self.comboBoxPy.setToolTip("Choice your Font")
        ####
        #self.pathFont = PolicePath[:-10]
        self.pathFont = PolicePath[:len(PolicePath)-(PolicePath[::-1].index("/"))-1]
        ####

        ui.searchFont(self.pathFont)

        verPython = sys.version_info
        if verPython.major < 3:
            self.comboBoxPy.currentIndexChanged.connect(self.on_fontComboBoxPython) 
        else:    # Qt 5
            QtCore.QObject.connect(self.comboBoxPy, QtCore.SIGNAL("currentIndexChanged(int)"), self.on_fontComboBoxPython)

        self.PB_OK = QtGui.QPushButton(self.centralwidget)
        self.PB_OK.setGeometry(QtCore.QRect(20, 185, 75, 23))
        self.PB_OK.setToolTip("Validate")
        self.PB_OK.setFont(self.fontGlobal_08)
        self.PB_OK.setObjectName(("PB_OK"))
        self.PB_OK.clicked.connect(self.on_PB_OK)                                   # ""

        self.PB_color = QtGui.QPushButton(self.centralwidget)
        self.PB_color.setGeometry(QtCore.QRect(104, 185, 75, 23))
        self.PB_color.setToolTip("Text color")
        self.PB_color.setFont(self.fontGlobal_08)
        self.PB_color.setObjectName(("PB_color"))
        self.PB_color.clicked.connect(self.on_PB_color)                             # ""

        self.doubleSpinBox_1 = QtGui.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox_1.setGeometry(QtCore.QRect(187, 185, 60, 23))
        self.doubleSpinBox_1.setMinimum(0.0)
        self.doubleSpinBox_1.setMaximum(10000.0)
        self.doubleSpinBox_1.setSingleStep(1.0)
        self.doubleSpinBox_1.setValue(self.FontSize)
        self.doubleSpinBox_1.setFont(self.fontGlobal_08)
        self.doubleSpinBox_1.setToolTip("Dimension of the Shape")
        self.doubleSpinBox_1.setObjectName("doubleSpinBox_1")
        self.doubleSpinBox_1.valueChanged.connect(self.on_doubleSpinBox_1_valueChanged)# ""

        self.checkBox_1 = QtGui.QCheckBox(self.centralwidget)
        self.checkBox_1.setGeometry(QtCore.QRect(255, 185, 50, 23))
        self.checkBox_1.setFont(self.fontGlobal_08)
        self.checkBox_1.setToolTip("Create text")
        self.checkBox_1.setObjectName(("checkBox_1"))
        self.checkBox_1.setChecked(False)
#        self.checkBox_1.clicked.connect(self.on_checkBox_1_clicked)

        self.doubleSpinBox_2 = QtGui.QDoubleSpinBox(self.centralwidget)
        self.doubleSpinBox_2.setGeometry(QtCore.QRect(387, 185, 60, 23))
        self.doubleSpinBox_2.setMinimum(0.0)
        self.doubleSpinBox_2.setMaximum(10000.0)
        self.doubleSpinBox_2.setSingleStep(1.0)
        self.doubleSpinBox_2.setValue(self.FontTextSize)
        self.doubleSpinBox_2.setFont(self.fontGlobal_08)
        self.doubleSpinBox_2.setToolTip("Dimension of text in window macro")
        self.doubleSpinBox_2.setObjectName("doubleSpinBox_1")
        self.doubleSpinBox_2.valueChanged.connect(self.on_doubleSpinBox_2_valueChanged)#connect on def "on_doubleSpinBox_2_valueChanged"

        self.PB_newPathFont = QtGui.QPushButton(self.centralwidget)
        self.PB_newPathFont.setGeometry(QtCore.QRect(305, 185, 75, 23))
        self.PB_newPathFont.setToolTip("New directory font")
        self.PB_newPathFont.setFont(self.fontGlobal_08)
        self.PB_newPathFont.setObjectName(("PB_newPathFont"))
        self.PB_newPathFont.clicked.connect(self.on_PB_newPathFont)                 # ""

        self.PB_systemPath = QtGui.QPushButton(self.centralwidget)
        self.PB_systemPath.setGeometry(QtCore.QRect(305, 215, 75, 23))
        self.PB_systemPath.setToolTip("Return origin font system")
        self.PB_systemPath.setFont(self.fontGlobal_08)
        self.PB_systemPath.setObjectName(("PB_systemPath"))
        self.PB_systemPath.clicked.connect(self.on_PB_systemPath)                 # ""

        self.line = QtGui.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(20, 220, 280, 16))
        self.line.setFrameShape(QtGui.QFrame.HLine)
        self.line.setFrameShadow(QtGui.QFrame.Sunken)
        self.line.setObjectName("line")

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):

        MainWindow.setWindowTitle(__title__ + " (" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") (" + __version__ + " : " + __date__ + ")")
        MainWindow.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint)            # PySide cette fonction met la fenetre en avant
        MainWindow.setWindowIcon(QtGui.QIcon(self.path + "Macro_Fonts_Win10_PYMP.png"))# change l'icone de la fenetre principale
        print(self.path)
        self.PB_OK.setText("Ok")
        self.PB_color.setText("Color")
        self.checkBox_1.setText("Text")
        self.PB_newPathFont.setText("New path")
        self.PB_systemPath.setText("Origin")

    def on_doubleSpinBox_1_valueChanged(self,value):    # 

        self.FontSize = value

    def on_doubleSpinBox_2_valueChanged(self,value):

        self.FontTextSize = value
        self.font.setPointSize(self.FontTextSize)
        self.textEdit.setCurrentFont(self.font)
        self.textEdit.setFont(self.font)

    def on_fontComboBoxPython(self,indeX):                                          # 0: for fontComboBoxPython

        self.index = indeX
        MainWindow.setWindowTitle(__title__ + " (" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") (" + __version__ + " : " + __date__ + ")")
        self.lineEdit_NameFile.setText(self.tableau[self.index][1])

        famille = typeCar = self.font = ""
        self.font = QtGui.QFont()
        typeCar   = family(self.tableau[self.index][2])[1]
        self.font.setBold(False)
        self.font.setItalic(False)

        if len(typeCar) > 0:
            for option in typeCar:
                if option == "Bold":
                    self.font.setBold(True)
                if (option == "Italic") or (option == "It") or (option == "Slanted"):
                    self.font.setItalic(True)
                if option == "Oblique":
                    self.font.setItalic(True)
        #'Bold''Regular''Slanted''Italic''Medium''Extra''Light''Condensed''Black''It''Semibold'#+
        
        self.font.setFamily(self.tableau[self.index][5])
        self.font.setPointSize(self.FontTextSize)

        self.textEdit.setCurrentFont(self.font)
        self.textEdit.setFont(self.font)
        ####
        self.fonteComp = self.tableau[self.index][1]
#        FreeCAD.Console.PrintMessage(str(self.index) + " , " + self.tableau[self.index][1] + " , " + self.tableau[self.index][2] + " , ' " + famille + "' , ' " + typeCar + " ' \n")

    def on_PB_OK(self):
        global PolicePath

        try:
            texte = unicode(self.textEdit.toPlainText()) # ori  
        except Exception: #Qt version: 5.6.2
            texte = self.textEdit.toPlainText()          # Qt 5.6.2 error unicode 

        if texte != "":
            tx = Draft.makeShapeString(String=texte, FontFile = self.fonteComp, Size = self.FontSize, Tracking = 0.0)
            tx.Label = self.tableau[self.index][2]
            tx.ViewObject.ShapeColor = (self.red, self.green, self.blue)                # color of ShapeString

            ## section Texte
            if self.checkBox_1.isChecked():
                tx2 = Draft.makeText([texte],point=FreeCAD.Vector(0.0,0.0,0.0))
                tx2.ViewObject.FontName  = self.tableau[self.index][1]
                tx2.ViewObject.TextColor = (self.red, self.green, self.blue)            # color of text
                tx2.ViewObject.FontSize  = self.FontSize
                tx2.Label                = self.tableau[self.index][2]

            FreeCAD.Console.PrintMessage("___________________" + "\n")
            FreeCAD.Console.PrintMessage(texte + "\n")
            FreeCAD.Console.PrintMessage(self.tableau[self.index][1] + "\n")
            FreeCAD.Console.PrintMessage(self.tableau[self.index][2] + "\n")
            FreeCAD.Console.PrintMessage(str(self.FontSize) + "\n")
            FreeCAD.Console.PrintMessage("___________________" + "\n")
            FreeCAD.ActiveDocument.recompute()

        else:
            FreeCAD.Console.PrintMessage("Not string" + "\n")

    def on_PB_color(self):

        self.PB_color.setStyleSheet("background-color: QPalette.Base")
        self.window.hide()
        couleur = QtGui.QColorDialog.getColor()
        if couleur.isValid():
            self.red   = couleur.redF()
            self.green = couleur.greenF()
            self.blue  = couleur.blueF()
            self.alpha = couleur.alphaF()
        self.PB_color.setStyleSheet("background-color: " + couleur.name())
        self.window.show()

    def on_PB_newPathFont(self):
        global ui
        global newPolicePath
        global setSystemFonts

        newPolicePath = str(QtGui.QFileDialog.getExistingDirectory(None, "Select new font directory", newPolicePath, QtGui.QFileDialog.ShowDirsOnly))
        if newPolicePath:
            ui.searchFont(newPolicePath)
            setSystemFonts = 1

    def on_PB_systemPath(self):
        global ui
        global setSystemFonts

        setSystemFonts = 0
        ui.searchFont(self.pathFont)

#______________________________________________________________________________________

doc = FreeCAD.ActiveDocument
if doc == None:
    doc = FreeCAD.newDocument()

MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()

Liens

Le forum TTF Text Font

Mes macros sur mario52a gists

Version

Version = "01.00" Date = "2019/05/10"