Skip to content

Instantly share code, notes, and snippets.

@mario52a
Last active November 17, 2023 17:37
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save mario52a/a25e802498bae6959335 to your computer and use it in GitHub Desktop.
Save mario52a/a25e802498bae6959335 to your computer and use it in GitHub Desktop.
This macro writes a text, standing or flat, circumferential or helical in the manner of Trajan Column and creates a clock with Arabic numerals 1 2 3 ... or Roman I II III ... (inspired to Macro to Create Clock Face to cblt2l). Also to follow the path with selection one wire, edge, line, circle.
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
"""
***************************************************************************
* Copyright (c) 2014 2015 2016 2017 2018 2019 2020 2021 2022 <mario52> *
* 2023 *
* *
* 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. *
** **
* Use at your own risk. The author assumes no liability for data loss. *
* It is advised to backup your data frequently. *
* If you do not trust the software do not use it. *
** **
* 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 *
***************************************************************************
* http://www.freecadweb.org/wiki/index.php?title=Macro_FCCircularText *
* WARNING! All changes in this file will be lost and *
* may cause malfunction of the program *
***************************************************************************
"""
## FCCircularText.FCMacro # Icon fromTheme FreeCAD
## ver 0.14-2 #00.14-4 #00.15 (rmu)#00.16 #0.16b #0.16c #0.16d #0.17 2020/09/26 #0.17b 2020/09/28#0.18 2021/01/19 #0.19 2021/03/15 #0.20 2021/04/05
## 0.21 2022/05/31 # 0.22 2022/06/06 # 0.22b 2023/11/15 # 0.22c 2023/11/17
##
###################################################################################################
##
##OS: Windows 10 build 19045
##Word size of FreeCAD: 64-bit
##Version: 0.22.0dev.34667 (Git)
##Build type: Release
##Branch: main
##Hash: af5b8714a8371162addb97dd25c29250fcecf7ad
##Python 3.10.12, Qt 5.15.8, Coin 4.0.0, Vtk 9.2.5, OCC 7.6.3
##Locale: French/Mars (fr_MA)
##
###################################################################################################
#
__Title__ = "FCCircularText"
__Author__ = "Mario52"
__Version__ = "0.22c"
__Date__ = "2023/11/17" #YYYY/MMM/DD
__Comment__ = "This macro creates a text around a cylinder or along a path line"
__Web__ = "https://forum.freecadweb.org/viewtopic.php?f=3&t=7384%22"
__Wiki__ = "https://wiki.freecadweb.org/Macro_FCCircularText"
__Icon__ = "https://wiki.freecadweb.org/images/c/c1/FCCircularTextButtom.png"
__IconL__ = "/usr/lib/freecad/Mod/plugins/icons/FCCircularTextButtom.png"
__IconW__ = "C:/Users/YourUserName/AppData/Roaming/FreeCAD/Macro"
__Github__ = "https://gist.github.com/mario52a/a25e802498bae6959335"
__Help__ = "start the macro and follow the instructions"
__Status__ = "stable"
__Requires__ = "freecad 0.19 and higher"
__Communication__ = "https://wiki.freecadweb.org/index.php?title=User:Mario52"
#
import PySide2
from PySide2 import (QtWidgets, QtCore, QtGui)
from PySide2.QtWidgets import (QWidget, QApplication, QSlider, QGraphicsView, QGraphicsScene, QVBoxLayout, QStyle)
from PySide2.QtGui import (QPainter, QColor, QIcon)
from PySide2.QtSvg import *
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui
from math import sqrt, pi, sin, cos, asin, degrees, radians, tan
from FreeCAD import Base
import os, time, sys
App=FreeCAD
Gui=FreeCADGui
import WebGui
#### Detect version macro ########################################### #22/03/2021
import urllib
from urllib import request
#### Detect version macro ########################################### #22/03/2021
def vesionSearch():
try:
contentPage = request.urlopen("https://wiki.freecadweb.org/Macro_" + __Title__).readlines()
versionDetect = dateDetect = ""
effacer = 0
for i in contentPage:
if "ctEven macro-version" in str(i):
versionDetect = str((str(i).split(">")[1]))
versionDetect = versionDetect.split("\\")[0]
if "ctEven macro-date" in str(i):
dateDetect = str((str(i).split(">")[1]))
dateDetect = dateDetect.split("\\")[0]
if (versionDetect != "") and (dateDetect != ""):
break
try:
if (versionDetect == __Version__) and (dateDetect == __Date__):
None
else:
msg = ("New version availlable : " + "\n" +
str(versionDetect) + ":" + str(dateDetect) + "\n" +
"You can install with AddonManager")
FreeCAD.Console.PrintMessage("your actual version : " + str(__Version__) + " : " + str(__Date__) + "\n")
FreeCAD.Console.PrintMessage("new version availlable : " + str(versionDetect) + " : " + str(dateDetect) + "\n")
diag = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Information, 'New Version', msg)
diag.setWindowModality(QtCore.Qt.ApplicationModal)
diag.setWindowFlags(PySide2.QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenetre en avant
diag.exec_()
except Exception:
None
return versionDetect, dateDetect
except Exception:
FreeCAD.Console.PrintError("Not search version not connected for testing or internal error" + "\n")
#
global switchVersionSearch; switchVersionSearch = 0 # Search version switchable in
# Tools/Edit parameter/BaseApp/Preferences/Macros/FCMmacros/FCCircularText
switchVersionSearch = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchVersionSearch")
if switchVersionSearch == 1:
vesionSearch()
#### Detect version macro ###########################################
import sys,traceback
def sayexc(mess=''):
exc_type, exc_value, exc_traceback = sys.exc_info()
ttt=repr(traceback.format_exception(exc_type, exc_value,exc_traceback))
lls=eval(ttt)
l=len(lls)
l2=lls[(l-3):]
FreeCAD.Console.PrintError(mess + "\n" +"--> ".join(l2))
import os
import platform
global verPython ; verPython = sys.version_info
class ConfigManager():
def __init__(self,name):
self.name="Plugins/"+name
def get(self,param,default,defaultWindows=None,defaultMac=None):
global verPython
os=platform.system()
#os='Linux'
#os='Windows'
#os='Darwin'
v=False
if not defaultWindows:
defaultWindows=default
if not defaultMac:
defaultMac=default
if os =='Windows' :
default= defaultWindows
if os =='Darwin' :
default= defaultMac
if verPython.major < 3:
if default.__class__ == unicode:
default=str(default)
else:
# encoder = str(encoder)
# return encoder
None
if default.__class__ == int:
v=FreeCAD.ParamGet('User parameter:'+self.name).GetInt(param)
if not v:
FreeCAD.ParamGet('User parameter:'+self.name).SetInt(param,default)
if default.__class__ == float:
v=FreeCAD.ParamGet('User parameter:'+self.name).GetFloat(param)
if not v:
FreeCAD.ParamGet('User parameter:'+self.name).SetFloat(param,default)
if default.__class__ == str:
v=FreeCAD.ParamGet('User parameter:'+self.name).GetString(param)
if not v:
FreeCAD.ParamGet('User parameter:'+self.name).SetString(param,default)
if default.__class__ == bool:
v=FreeCAD.ParamGet('User parameter:'+self.name).GetBool(param)
if not v:
FreeCAD.ParamGet('User parameter:'+self.name).SetBool(param,default)
if not v:
v=default
return v
global ui ;ui = ""
global s ;s = ""
global points ;points = 0.0
global coor_X ;coor_X = 0.0
global coor_Y ;coor_Y = 0.0
global coor_Z ;coor_Z = 0.0
global vec ;vec = 0
global PolicePath
global originalFontName
global originalFontPath
cm=ConfigManager("circular text")
PolicePath=cm.get("PolicePath","/usr/share/fonts/","C:/Windows/Fonts/ARIAL.TTF","/Library/Fonts/Arial.ttf")
import FreeCADGui
Gui=FreeCADGui
global rayon ;rayon = 10.0 # radius
global texte ;texte = "FreeCAD the best" # FreeCad The Best your text
global debut ;debut = 0 # begin text
global rotation ;rotation = 360 # must exceed the number of characters of text
global SizeCaractere ;SizeCaractere = 2.0 # size font
global precision ;precision = 0.0 #
global correctionAngle ;correctionAngle = 0.0 #
global correctionRayon ;correctionRayon = 0.0 #
global debout ;debout = 1 # 1=stand 0=flat
global exterieur ;exterieur = 1 # 1=exteral 0=internal
global baseHelix ;baseHelix = 0.0 # base of helix
global endHelix ;endHelix = 0.0 # end of helix (heigth)
global pasHelix ;pasHelix = 2.0 # Pas of helix
global nombreCarParTour ;nombreCarParTour = 10 # number char by Pas
global PlacementX ;PlacementX = 0.0 # Placement character axis X
global PlacementY ;PlacementY = 0.0 # Placement characher axis Y
global PlacementZ ;PlacementZ = 0.0 # Placement characher axis Z
global inclinaisonX ;inclinaisonX = 0 # inclination character axis X
global inclinaisonY ;inclinaisonY = 0 # inclination character axis Y
global inclinaisonZ ;inclinaisonZ = 0 # inclination character axis Z + correctionAngle
global cercleClock ;cercleClock = rayon # diameter support clock
global nombreFaces ;nombreFaces = 0 # number Faces of support 0=none 1=circle 2=rectangle 3=triangle 4,5 ... polygon
global romain ;romain = 0 # number type roman or arabic
global redressement ;redressement = 0 # character V or circular
global comP ;comP = "" # contener
global nameL ;nameL = "" # contener
global epaisseurExtrus ;epaisseurExtrus = 0.0 # epaisseur extrusion caracteres
global epaisSupportClock;epaisSupportClock= 0.0 # epaisseur extrusion support clock
global compount1 ;compount1 = 0 # cree un compose des caracteres
#### for delete last object
global FcString ##;FcString = "" # conteneur
global FcStringPoints ##;FcStringPoints = "" # conteneur
global circleGuide ##;circleGuide = "" # cercle guide repere
global helixGuide ##;helixGuide = "" # helix guide repere
global suppExtrude ##;suppExtrude = "" # extrusion support clock
global createCompound ##;createCompound = "" # compound texte
global selComplete ##;selComplete = "" #
#### for delete last object
# pointColor
global red ;red = 1.0 # 1 = 255 [ color num x = (1/255)*x ]
global green ;green = 0.0 #
global blue ;blue = 0.0 #
#### section color
global setStyleBase ; setStyleBase = "background-color: QPalette.Base"
global setStylePathR ; setStylePathR = "background-color: #F8E0E0" # Red (248, 224, 224)
global setStylePathG ; setStylePathG = "background-color: #E0F8E0" # Green (224, 248, 224)
global setStyleRed ; setStyleRed = "background-color: #e00000" # rgb (224, 0, 0)
global setStyleOrange ; setStyleOrange = "background-color: #ffa500" # rgb (255, 165, 0)
global setStyleBlueLight; setStyleBlueLight= "background-color: #c3d0e8" # rgb (195, 208, 232)
if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/MainWindow").GetString("StyleSheet") != "":
setStyleBlueLight = setStylePathR = setStylePathG = setStyleRed = setStyleOrange = setStyleBase
#print("StyleSheet desactivated")
#### section color
#path#################################################################
global path #
#path = FreeCAD.ConfigGet("AppHomePath") # path FreeCAD installation
#path = FreeCAD.ConfigGet("UserAppData") # path FreeCAD User data
#path = "your path" # your directory path
param = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macro") # macro path
path = param.GetString("MacroPath","") + "/" # macro path
path = path.replace("\\","/") # convert the "\" to "/"
#FreeCAD.Console.PrintMessage( "Path for the icons : " + path + "\n")#
######################################################################
##
global setPathLatestDirectoryManual #; setPathLatestDirectoryManual = "C:\\ ???" # mode manuel
setPathLatestDirectoryManual = FreeCAD.ParamGet(u"User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetString(u"setPathLatestDirectoryManual")
if setPathLatestDirectoryManual == "": setPathLatestDirectoryManual = "C:/"
FreeCAD.ParamGet(u"User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetString(u"setPathLatestDirectoryManual", setPathLatestDirectoryManual) #*"C:\ ???"
##
#### Section Icones ####
## icon fromTheme by FreeCAD
## base64 easyw-fc method
## https://forum.freecadweb.org/viewtopic.php?f=9&t=24742&start=100#p363271
import base64
#FCCircularTextButtom=\
#"""
#Qk3KGQEAAAAAAIoAAAB8AAAAyAAAAFoAAAABACAAAwAAAEAZAQATCwAAEwsAAAAAAAAAAAAAAAD/AAD/AAD/AAAAAAAA/0JHUnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAmHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Yd3f/mHd3/5h3d/+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+Xdnb/l3Z2/5d2dv+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5d1df+XdXX/l3V1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+Xdnb/mHd3/5h3d/+Yd3f/l3V1/4JlZf9/Y2P/f2Nj/4xtbf+Uc3P/gWVl/5l3d/+Yd3f/mHd3/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdXX/lnV1/5Z1df+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+Ydnb/jGxs/4FkZP9qUlL/dltb/11KTP8OFBX/BhYd/wAUG/9qUlL/FCYw/xYbH/8RHSb/IyMn/3FXV/8SFRX/DRMU/wYWHf8DFRv/hWZm/3NZWf9pUlL/aVFR/2lRUf+Jamr/lnR0/5h1df+Ydnb/l3V1/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5h2dv99YWH/a1NT/wwYHv9LOzr/HjZB/w8dJv8LHyr/FSIr/xcwPv8THCP/BCAv/wUgLv8UGyD/FRsg/w4eKP8MHin/ER0l/xUbIP8VGyH/DB4p/wweKf8RGR3/Exsh/xQcIv8DIC//BCAv/xUdJP9+YmH/QDMz/w4WGf9LOz3/alJS/3xgYP+XdHT/mHV1/5h2dv+XdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnR0/5Z0dP+WdHT/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5d0dP+Kamr/OS8v/yAuNf8dNUH/Dh4o/wcgLf8UGiD/EB0m/wkfLP8NHij/Ehwj/xIfKP8VHiX/FR8n/xElMf8QJjT/EyUw/xMlMP8RKjn/ESo5/xErOv8RKzr/ESs6/xEqOf8TKDX/FSUw/xUiLP8VICn/Dx8p/xcaHf8ZGBb/Ehwj/wweKv8GIC7/EB0m/2xUU/87Ly//ERca/1tHSP9qUlL/jW1t/5Zzc/+XdHT/l3R0/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Wc3P/lnNz/5Zzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+ScXH/X0lJ/yZGU/8PHSf/Dh4o/xMbIv8PHif/CB8s/xIcJP8VHSP/ESIt/wsnNv8FLD7/BTBD/wYyR/8GNEr/BzdN/wg5Uf8KPFP/FSk3/wtCW/8MRF7/Dkhh/w9JY/8RTGf/EU1o/xNPav8TUGr/E09q/xJOaP8RS2X/D0hh/wxCWv8KPlX/EzJD/xEtPf8UJjH/ESEs/xoWE/8TGyL/DB4q/wYgLf8KGiL/fWFh/2VOTv9ZRkX/dltb/4JkZP+YdXX/lnR0/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/jm1u/0s2NP8QHSb/Exwj/xkZGv8LHyr/BSAu/xMcI/8THib/BSY2/wUqO/8FLD//BS9C/wUxRf8GM0j/BTVL/wY3Tv8KN0z/DjZK/w44Tf8XIiv/ED5U/xFAV/8SQ1v/FEdf/xZLY/8YT2j/G1Rt/x5Zc/8iaoj/Jm6N/ylzkv8rdpX/LHeW/yx3lv8sdZT/J26M/yNohf8dX3v/FlJt/xNDWv8TNkn/Ei9A/xYiKv8WGx//GBgY/xQbIf8JHyv/EB0m/xUbH/9xWFj/lnR0/4tsbP+XdXX/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXNz/5Vzc/+Vc3P/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5h0dP8YBgD/PnaL/y9WZf8QHSb/BSAu/wofK/8THST/BSQz/wUnN/8FKDn/BSo8/wQsPv8LKjr/Dyc2/xIlMf8VICj/FiAo/xMlMf8RKjn/FCc0/xQoNf8SL0D/EjFC/xMzRf8TNUf/FDdK/xU6Tf8VPFD/Fz5S/xgwPf8ZMkD/GjRC/yFOYv8nWnD/K2F4/zeAnf87hqT/RZq7/0qixP9KocP/Rpu8/0GSs/84haT/KnCO/yFif/8SS2X/FTlL/xUpNv8SISz/Ehsh/xYbIP9aRkb/ERUU/w8YHf9tU1P/fF9f/4RlZf+WcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/hGVl/xQbIf8MHin/ER0l/wUgLv8IHyz/Dx4n/wUjMf8FJDP/BSU0/wclM/8SICr/Fh0i/xEhLP8LJzb/BSw//wUvQv8FMUX/BjNI/wY2S/8SKzr/CzhN/wk9Vf8KP1j/C0Jb/w1FX/8OSGP/EExn/xJQa/8UU2//F1dz/xlceP8dYH3/H2SC/yJphv8lbYv/IlZt/yVbcv8iS13/IkZW/zRtg/8/gJn/UaG//1qw0P9nye3/Zsfq/1u32f9Sqsz/PYys/y93lv8cWXT/FEFX/xQtPP8WICj/Ehsh/wseKv8MHin/ABIY/45tbf+Xc3P/hWZm/5d0dP+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv9sU1P/Fxod/xkZGf8QHSb/BCAu/xQcIf8FIS7/BSEu/wYgLf8SHCP/Exwi/wYjMf8FJjb/BSk5/wUrPf8FLUD/BS9D/wYyRv8GNEn/BjdN/xYiKv8IO1P/CT5W/wpAWf8MQ1z/DUZg/w9KZP8RTWj/E1Fs/xVVcf8YWXX/Gl16/x1if/8gZoP/JGuJ/ydvjv8qdZT/Km6K/zB6mP82haX/OYmp/z2Or/83e5b/NXSO/ypTZP89doz/VJy0/27N5v932/P/f+n+/3LW7f9lw97/TKC//zJ6mf8eXXj/FEBV/xUqN/8XHCD/Gxob/0s6Ov8HFx7/GBsf/2xTU/+HZ2f/lnNz/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lXJy/5Vycv+VcnL/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/l3Nz/xoTFP8HDBr/Cx8q/wsfKv8LHyr/ER0k/wUeK/8FHCb/Exof/wYdKP8FIS7/BSQz/wUnN/8FKTr/BSw+/wUuQf8FMET/BjNH/wY1Sv8JNUr/Eyw7/wg8VP8KP1f/C0Fa/wxEXv8OR2H/D0tl/xFOaf8UUm7/FlZy/xhadv8bXnv/HmOA/yFnhf8lbIr/JGB6/xwyPf8YDgP/GRkZ/ydWa/87jq//P5Gy/0KXuP9GnL7/SqLD/06myP9Rq8z/SJSx/z15kP8zYXL/Y7G4/3rV2P+L8PP/j/f//4Dj9f9pxt//TKC9/y92lP8bUmv/FTFB/xMiLf8QHCT/Cx4q/w4cJv9VQUH/lnJy/41sbP+WcnL/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+CY2P/M1pj/0Bzff86aHL/BSAu/wsfKv8RHCP/BRok/xMYHP8FGiT/BR4q/wUiMP8FJTT/BSg4/wUqPP8FLT//BS9C/wUxRf8GM0j/BjZL/xIrOv8LOE3/CT1V/wo/WP8LQlv/DUVf/w5IY/8QTGb/ElBr/xRUb/8XV3P/GVt4/x1gff8fZIH/ImmH/yNge/8XFxn/I1Vq/zB8m/8vc4//GyYs/y5nf/9Ak7T/RJm6/0eev/9AiKX/O3uU/0mWtP9Ytdj/XLrd/2C+4v9hwOL/W7LS/1Kct/84ZnX/c7/C/5Pr6/+c+Pn/l/b+/4Lg8f9fudP/PYyp/yJifv8TP1P/FiMs/xgWE/8nISH/HB0h/yAfIv9tU1P/fF9f/5Bubv+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rxcf+UcXH/lHFx/5Rx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Vv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv9kQ0P/Q3SJ/1msy/9pyu7/acvu/xUAAP9kweT/O2+D/2rO8v9py+//acvv/1611f8QAAD/eeH//27L5f9ktsf/gOn//4Dp//+A6f//To2a/4Dq//9nvc//ab/R/3vh9v9erLz/MFVd/wcAAP9wz+v/ZLvU/w0AAP9py+//acvv/2nL7/9hvN3/S5Cp/1eoxv8wWWn/as3y/2nL7/9py+//WKnI/0OLpv88fJX/FRwi/xYPCf8aKjP/HjI7/zV7mP81fpv/FR8m/y1mfv86i6z/Oous/ziGpf8eR1r/IWJ9/xklLf8YO03/FlBq/xZRbP8ZIyr/CzVJ/xg2Rv8WVXH/FlVx/xdJYP8YPE//FlBq/xEtPP8HOU//DjJF/xdIX/8XKjb/BzlQ/wg5Tv8YJCv/JlNl/xEhLP8QHij/Kl50/w0gLP8MJjT/ERwk/xcXGP8iN0D/FRkd/25KSv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BWVv+AVlb/gFZW/4BW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U/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/flNT/35TU/9+U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/flNT/3pRUf9pQkH/T1BW/y9RWP9SU1n/P2p0/2i+0P+A6f//gOn//4Dp//9TlqT/ed/8/27M6P9YpL3/bs7x/2G21f9RmrX/NmV3/0aGnv9VpcL/MFlo/2rM8f9py+//acvv/1ipx/9CiaT/PHyV/w8cJv81fJr/Oous/zqLrP81fZv/JU5g/xUeJf8rYnn/LWV+/y1mf/8aJy7/HDxM/xQpNv8PMEH/F0pj/xZVcf8WVnL/GSYv/xgoM/8XJzH/Fycy/xYrOP8OQVj/GEFV/xZQa/8RLDv/BzlP/w4yRf8YHB//FiAn/xUcIf8XJjD/OYem/zR6lv8NIS3/DCUz/yE/TP8WHiT/EyAq/0aGnv8OBQL/GRkZ/xUZHf9rR0f/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99U1P/fVNT/31TU/99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv9+UlL/dk5O/35TU/9UODj/SoKP/27I2/9/5/3/guz//06Pof974///WKS7/xcaHf8RAAD/Kk1c/0J8kv9ds9L/as3x/0WFnf9Lkav/acvv/2nL7/9py+//R4ef/1Sx1P8cNUH/HTtJ/zqLrf86i6z/Oous/yxlff8qX3X/EBce/ziGpf86i6z/Oous/zV9m/8bNEH/DTNG/xUrOP8WVHD/FlVx/xZQav8YHSH/DTNG/xgeI/8WHyX/GB4j/xgdIf8WUm3/GD5R/wk3TP8HOU//FSk2/xdDWP8WGyD/Fhwh/xgZGv8vbIX/KFdr/wcoOP8VJS7/JU9h/wcoOP8WJjD/PXOI/xUZHf8TGR7/GRkZ/3dOTv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv95T0//aEA+/09SV/9Bcnz/SSEa/z5uff8pRk//SYyl/2C63P9Mkqz/NmZ4/yM4Qf9rz/T/BwAA/1+42f9py+//acvv/2rN8v8xZHj/UarN/zh3kP8gPUv/NHyZ/zmJqv87ja7/JlNm/xozP/8hRVX/Oous/zqLrP86i6z/K2J5/xs9Tv8JN0z/GDdI/xZVcf8WVXH/F0JX/xQnMv8SKjj/FlRv/xZWcv8WVHD/GSs2/xZWcv8XJzH/BzlP/wg4Tv8XNET/GD9T/wo3S/8GOlD/Fi07/ziGpP8aMj7/BSk6/yNLXP8bNkT/BSk6/zdpfP8rTlv/HCYr/xQZHf9SNzf/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fVJS/31SUv99UlL/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fVFR/3hPT/94Tk7/flJS/0kyMv9BfJL/X7nZ/2jK7v9rz/T/Qn6V/1SjwP8wWWj/aszx/2nL7/9py+//WKrI/0GHov9FkrD/QYyp/0CNq/83epX/L2iA/yNJWf8lT2H/EyAo/ylbcf86i6z/Oous/zuMrv8bMDv/FCk2/w8wQf8XSmP/FlVx/xZWcv8ZJzD/DTNF/xgrN/8WVXH/FlVx/xdJYP8XQFX/FlJt/xMrOP8HOU//DjJE/xdIYP8YKDP/BjlQ/wg4Tv8kT2H/NHqX/w0hLf8MJTP/Klxx/w0gLP8MJjT/GRUT/1anxP8/eI7/FRkd/2RCQv98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fVFR/29ISP9iOjb/TkpT/y9RYP9ILCn/PB8X/0uRq/9py+//acvv/2nL7/9Lkar/UKfJ/ypXaf8YDgT/FAQA/x06Rv8kR1b/PI+w/y1ngP8QHSb/NHuY/zqLrP86i6z/NHyZ/x9OZP8dTmX/FiIr/xg/U/8WVHD/FlBq/xgdIf8MNEj/GEBV/xZVcf8WVXH/GDNC/xdKYv8XQ1n/DDVI/wc5T/8SKzr/F05o/xMqOP8HOU//DTNF/yVNXv8lTmD/EiEr/xglLf8lT2H/Byg4/xMgKf8NHin/KEZS/x43Qv9BLC3/dUxM/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3xRUf98UVH/fFFR/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP98UFD/fVFR/3xQUP9wSUn/T01X/zhoev9Qmrb/YLrc/ydBTP85dIz/EBsk/yRKW/8ydZH/LGR7/yhXa/8nVWn/Ikpc/xs3Rf86i6z/Oous/zqLrP8rYnn/IV54/x1NYv8cVm//GlNs/xk/U/8YOEn/FCcy/xIqOP8WU2//FlVx/xZWcv8YJzH/EjRH/xkmLv8WIiv/FiMt/xkkLf8XRVv/DDRH/wc5T/8UJzL/FCEq/xgaHP8pWm//OYmo/xozQP8FKTr/Nmh7/xMIAv8YGRr/QSws/2tGRv97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e1BQ/3tQUP97UFD/e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/98UFD/fVFR/2xGRv9hODT/a0VF/3VLS/8+Kir/JlBj/zqMrf86i6z/NX6c/yNJWv8VHSP/KVtx/zqLrP86i6z/O42u/xw7S/8YHyT/GBoc/xkTDf8YFBH/FSs3/xdGXf8NM0X/GCs2/xZVcf8WVXH/FlBq/xggJ/8WJjH/FiYy/xIsO/8UKjf/FlRw/xgvPf8HOU7/BzlP/xcgJv8RHSb/FBwi/x83Q/8wcYv/DSAt/wslM/9Gh5//EQUA/080NP95Tk7/e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/97T0//e09P/3tPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3ZNTf9sRkb/VjMv/1gyLP8YQlH/bEZG/z4sLf8qXnT/Oous/zqLrP80e5n/GzI+/xEtPf8SKjn/F0pi/xdIYP8YOUr/GBod/ww0SP8YQFX/FlVx/xZVcf8YPlH/F0de/xYvPv8VGyD/Fxoc/xkbHP8WUGr/Eyo4/wc5T/8JN03/LWV9/yJGVv8NJTP/FyQs/yVPYf8IKDj/GR8m/1c1M/9oRET/fFBQ/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pPT/96T0//ek9P/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3xPT/96Tk7/cklJ/2ZAP/9WMi7/TTo+/xU2Qv9qRET/Py80/xkmLv8XQVb/FlVx/xdIX/8VHCD/Eik3/xZUb/8WVXH/FlZy/xkiKf8WVG//Fy88/wc5T/8GOlH/Fygz/xdGXP8MM0f/BzlP/xErOv8sZXz/HTA6/xAjLv8cGhv/Vzg3/1g5OP9rRUX/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/e09P/3pOTv93TEz/aURE/2lERP9WNzX/VDc2/3dNTf9XOTj/GzJB/xMyQf8TLzz/TjMz/1I3OP8SHCH/DyQv/xAjLf9LMTH/IhoY/xAjLf8cJi//Wjo6/2tFRf9fPj7/akRE/3xPT/96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv96Tk7/ek5O/3pOTv95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf97Tk7/e05O/3tOTv96Tk7/eU1N/3tOTv97Tk7/e05O/3pOTv97Tk7/e05O/3tOTv95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eU1N/3lNTf95TU3/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94TEz/eExM/3hMTP94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3hLS/94S0v/eEtL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0tL/3dLS/93S0v/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3dKSv93Skr/d0pK/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/dklJ/3ZJSf92SUn/
#"""
####
outDoor_Icon_b64=\
"""
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
"""
outDoorWord_Icon_b64=\
"""
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
"""
inDoor_Icon_b64=\
"""
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
"""
inDoorWord_Icon_b64=\
"""
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
"""
FlatInDoor_Icon_b64=\
"""
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
"""
FlatInDoorWord_Icon_b64=\
"""
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
"""
FlatOutDoor_Icon_b64=\
"""
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
"""
FlatOutDoorWord_Icon_b64=\
"""
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
"""
####
helix_Icon_b64=\
"""
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
"""
####
ClockArabicAxis_Icon_b64=\
"""
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
"""
ClockRomanAxis_Icon_b64=\
"""
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
"""
ClockArabicRedress_Icon_b64=\
"""
iVBORw0KGgoAAAANSUhEUgAAAMgAAABaCAIAAABylI6BAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAKnRFWHRBdXRob3IARnJlZUNBRCAoaHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZylLpZ5SAAAAKHRFWHRDcmVhdGlvbiBUaW1lAHZlbi4gbWFycyAyNiAyMzozODoyNCAyMDIxV5ndggAAAYp6VFh0RGVzY3JpcHRpb24AACiRVZLdTuMwEIXv+xSW7+P/3W0iN4gFIa1E0YpSxK0Jo2AgDnLcpvv2a6dNwb6wdGaOP8+MrS8O3Qfagx9s71aYE4YRuKZ/sa5d4e3DTbHEFzVa6PWf35coet1QHQa7wq8hfFaUjuNIRkl631LBGKdP69tN8wqdKawbgnENYBT9levvTAfDp2ngmL/tGxOmO0+ktx34FlzhLbTwQRwEurbPZtoEOQwvGD3OZQocS0L60cJYLxDSaxO8PcRQWobzFWaElazkCkcpJjmtJGUu1VFKUf7AJ4DgmUWIjCdygIiAYiLwks8EmRNkXoKMhOIXI0umxFKmwMyIFDUzVM5QOUPlVSg1Pd5RJgCNg9H0NCG96Xe+gWlWVx5M6H29de+uH52mc+CcjCO+NgHqPTiCOuMHJH4iISu5rIRCggl+OjQbv066dvNvCNDVNx7g6vIaMcLL2X1OJv9f48PdrnuGb5V8iyXLPexteu86NqbpWaW+5n40Tf+yXvwHaJjA5pimR4gAAAAQdEVYdFNvZnR3YXJlAEZyZWVDQURjGmLPAAAAOnpUWHRUaXRsZQAACJlzttIPKMovyyzOzyxKNTEw0HfOyU/OdixKTMpMDkpNKUotLo43MDDQK8hLBwBJgQ8KiReJIgAACGNJREFUeJztnWlvG0UYx/+O+mq+ACDuqwJxFrVQQD25JAoIEKRtSkNTkqbN4Thpk0CTEudwCCGJncRJC6U3PVMIAoQEBQqp2goqARWl4hCnCgI+wPOaF+OM12tnvXbi7szs/F55H8/sPs/s4//Mzo53A3PnroPBMNPMCgQCXvtg0BCTWIaCMKuoyCSWYeYxiuXEqfpRAPdFq9KNHNtXBoFJLEcYA2BtopOhEW7knGrZfX93mQeOSY/pCjNzIhgXCSSaKGEkWjBUIzZPbt61oGetZ47KilGsDEzUDltlKb2JuGXhcO1E846MBQwmsTLBGIgWxYNfNL0JW94QLYoHbW1m2jAdf3WFx6sGedIsGa1Lty/pq+Cb/ENRUeJb0US8lrAfrxoEGIic29C2c5/gI8X6bENMdHDWqIV9qqbIaBe1lm4NOTRh1p3ril8S69P10YzDJqvdfWKJWg8MVDq0n5ud64ovusJj6wYSJ5iIf+BRHwtt432Z1ZiOzZ6oBTwUWy+6xQwHdbdzXSkK+AAAIHp4cIMIO8W+faPVaK+Yaj8W2ib2luWgRM471xtfdIWPvLkJgDVQHvUjQ1VW+1RNIewflfclRAj4uKLftn/ng/qhna34oitMJ2PU2btC3p9axmrOFXMtoxO+UKx0MkadwUiUYidyv7c8yuiESSwn47LdzbB0Z3wzU8U8j6gxpivMYizoETXGKFYWY0GPqDEmsbIYC3pEjQk8+WSL1z5Ml/GSCICnDtgDmcouIeMlESX8dI8WipV2M+6dlV1gjM+Pj5dHQfT0wVbP3JuaST8BsPHyKABpXc0V5RPr7bWJicqUQMQNHP6ZMUnDtPoJuV3NEYWvCseKO6xzlSKQseIOPj/+7JGXRbG3V3TyTXmw+QlgbE0fdLl+VPheoe3nbrMXj7XxzeKxNgBcCaRCnIOkhQjAWHGHh17NFCp3hUTLj4YBHC7tRdplV3pcskXKncfk/OrhZ8L8J7H8aFgyT/NB4a5w5Tvt1lUrtkDS45I90kkBlt1Pd6isWKkop1hWDqzqAQCikvEOid3MAZNY3rO/5BUAIFr1bqesPuaMwl2hjWQgRGDMHpesXcy+Fd0AQLT6vS6H9ajKoa1i7XuitfT9CIC9j7fwmVIJI927PAIARKXvR+TzbloESku7vfZhuuwp7gLw/JFWmyUJ0fMfSBfmnsc2p68ZBCT1Nld07AqBsqNbdj36krjOKvvwFRl7mYxZBUD+C1gXBMrKerz2waAh+oyxDFKhT1dokAqjWIaCYBLLUBDU7gq3Lt1oXeOw4bP+LBWkxxqR0uEorFijSxpsT2RQNxbO6LJWPpcLAIxtXbqx6viApx7lj6qJNbK4nidT9YcRsTm6rJVvqsjI4nq+7q/68yiAkUdblF5NqnZXKO4A1k7EhheGMtwiVI3aiVhiLpcIjI0srq+diHnsU16oqlgCm//DC0PBE4NeOTMduNs8mqEFdVyPgycGFT0/GiWWLo84G3z4xcRIi0jdWAJ1dcNe+5AnsYeaActfcThEoZOqRgQgdn9tyj1EZcNRWLHqP+mNPthkTSkNrg3rT8X5h+h9NUr/G2yWmm5PQtRwOnEmBu6tAdBwOq5oRMJ/vtlwOj7wQBPcPcpGQlRVrP751WAMZB9jKRoOYPe/f361tOsT3aCqYm36cqRvSSMY659fDST/4qJoOECiK+9f2pgyalQ2IlUVC5gcVFnGWI1fjaobTeNXo6/dXaVNRIHGxtHspQyGHFFZsQwSo+oYyyA5swCTWYaZxyiWoSBoNcbqnlMpPm/+5nUPPckD7rxybk+FPooVubPSepete05ly7fKnCThvDanQxPF6rpjHT8xradjALruDYGxyJ2VrWff8No1d+iyNEOgj2IBlnnq5A1pbx1yReft68SKZCUcdoMmiiXI+jAj2ei4rYK/TVj5e52paKJYbee2t99aAcY67uEve2Ygaju3XYHoGAP3/+46GMWSjfAt5fZnbKiwkil8SznAwmeG9HutoYQPYZkGROEzQ+EzQ3yBQHhe0GuHnEj8GKZ4VZ3qaKJYXK7az+/g0bSf39E2txaSC8DkazWtP4DwvCCI2s/v8MyrGUKTMRYnPRZFo1PUbSu6KBYRGHv55hc6f9gJYMtNa/n4XeboOr+OWze33FUjjBJ77RZNFKvrx52tc2rAGD89fFqo68edykWnnMNToYtiAZFvR1pmlyU3f9qlWGS2908rTiAS2e21DxePzXdUZbASdf+8+yIcq/usjxbratIVTpMZb4SXbliTfG5MwY4iM/p0hW7o+W6rdfPF2zYA6PllT6HagKjnlz1iy08trdkEaS7wrCro/KQ1q/yGvxRL0HxdKZ+PePXXvQVpAMYgchfgByrAYeTFr2MsxgD0/uY2q5quLbX+3a/3N3dZYnl3cPOt63u/35aPq2riR8VqvGZ1TtOnjdesTt7UYwyMNV1b+trv+5zKEwCIMnwPzrU0w6+KBcDdaHrT1Yms6vsjkRObbq4EYw51RUltbjHlgR8Vi3dq/X++5T70lMJEznU3XvWcqGX7yj+t7VfFcv+wDcbAcyU5xnIhPIxlPIR/Wtt3ilV/xap8Hg+UOsZquPK56IX9U5WNXthfP7uCF0tWB6IX9vunsf2qWLmKB1Hsr0QmhW6scB5j8fIpz40BYj+rsE565vDlX+wTk6I5BB7760Cazam6KB+6vCRTXf3xnWIN/p04zW4DJwJjoctLRMWcqg/+fcBvLczx3Rgrb3hDBS9bqfQTHC8avlOsXBn+52DtpSvBWPD6F8S//9R9guNFwyhWduL/Hqq5ZEVyME4U//eQaTZnjGK5YuS/Q9ZN02hZMYplKAhGsQwFwSiWoSD8D0o3XlSXgE8wAAAAAElFTkSuQmCC
"""
ClockRomanRedress_Icon_b64=\
"""
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
"""
####
PathBase_Icon_b64=\
"""
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
"""
PathCenter_Icon_b64=\
"""
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
"""
PathTop_Icon_b64=\
"""
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
"""
PathBaseOrthogonal_Icon_b64=\
"""
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
"""
PathCenterOrthogonal_Icon_b64=\
"""
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
"""
PathTopOrthogonal_Icon_b64=\
"""
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
"""
####
homeIcon = [
"24 24 14 1",
" c None",
". c #EF2929",
"+ c #A40000",
"@ c #DDDFDC",
"# c #888A85",
"$ c #DDDEDB",
"% c #DCDEDB",
"& c #DCDEDC",
"* c #DBDDDA",
"= c #BABDB6",
"- c #555753",
"; c #729FCF",
"> c #3465A4",
", c #8191AA",
" ",
" ",
" .+ ",
" ..++ ",
" ....++ ",
" .....+++ ",
" ....@#++++ ",
" ....@@@#++++ ",
" ....@@@@@#++++ ",
" ....@@@@$@@#++++ ",
" ....@@@$@@%@@#++++ ",
" ....@@@@@@@@%@@#++++ ",
" ...@@@%%%%&%%*@@#+++ ",
" ..@@@@@@@@@@@@@@@#++ ",
" #@@=#---@@=====@# ",
" #@@=#---@@;>>>;@# ",
" #@@,#---@@;>>>;@# ",
" #@@,#---@@;>>>;@# ",
" #@@=#---@@-----@# ",
" #@@=#---@@@@@@@@# ",
" #@@=##--@@@@@@@@# ",
" ################# ",
" ",
" "]
helpIcon = [
"24 24 4 1",
" c None",
". c #016AC5",
"+ c #F8F8FF",
"@ c #FFFFFF",
"........................",
".++++++++++++++++++++++.",
".++++++++++++++++++++++.",
".++..................++.",
".++..................++.",
".++......@@@@@@......++.",
".++.....@@@@@@@@.....++.",
".++.....@@@..@@@.....++.",
".++.....@@....@@.....++.",
".++.....@@....@@.....++.",
".++...........@@.....++.",
".++..........@@@.....++.",
".++.........@@@......++.",
".++........@@@.......++.",
".++........@@........++.",
".++........@@........++.",
".++..................++.",
".++........@@........++.",
".++........@@........++.",
".++..................++.",
".++..................++.",
".++++++++++++++++++++++.",
".++++++++++++++++++++++.",
"........................"]
executeIcon = [
"24 24 3 1",
" c None",
". c #4E9A06",
"+ c #FFFFFF",
" ",
" ",
" ",
" . ",
" .+. ",
" .+.+. ",
" .+...+. ",
" .+.....+. ",
" . .+.......+.",
" .+. .+.......+. ",
" .+.+. .+.......+. ",
" .+...+. .+.......+. ",
" .+.....+.+.......+. ",
".+.......+.......+. ",
" .+.............+. ",
" .+...........+. ",
" .+.........+. ",
" .+.......+. ",
" .+.....+. ",
" .+...+. ",
" .+.+. ",
" .+. ",
" . ",
" "]
quitIcon = [
"24 24 3 1",
" c None",
". c #FFFFFF",
"+ c #CC0000",
" .... ",
"++++++++++....++++++++++",
"+.......++....++.......+",
"+.......++....++.......+",
"+.......++....++.......+",
"+...++++++....++++++...+",
"+...++++++....++++++...+",
"+...+++++......+++++...+",
"+...+++++......+++++...+",
"+...+++++......+++++...+",
"+...+++++......+++++...+",
"+...+++++......+++++...+",
"+...+++++......+++++...+",
"+...++++++++++++++++...+",
"+...++++++++++++++++...+",
"+...++++++++++++++++...+",
"+...++++++++++++++++...+",
"+...++++++++++++++++...+",
"+...++++++++++++++++...+",
"+...++++++++++++++++...+",
"+......................+",
"+......................+",
"+......................+",
"++++++++++++++++++++++++"]
resetIcon = [
"24 24 3 1",
" c None",
". c #3465A4",
"+ c #888A85",
" ",
" ........ ",
" .++++++++. ",
" .++..+....+. ..... ",
" .+.. .+....+. .+++. ",
" .+. .+....+..+.+. ",
" ... .+....+.+.+. ",
" .+....+..+. ",
" .+......+. ",
" .+.....+. ",
" .+....+. ",
" ...... .+...+. ",
" .++++. .++++. ",
" .+...+. ...... ",
" .+....+. ",
" .+.....+. ",
" .+......+. ",
" .+..+....+. ",
" .+.+.+....+. ... ",
" .+.+..+....+. .+. ",
" .+++. .+....+. ..+. ",
" ..... .+....+..++. ",
" .++++++++. ",
" ........ "]
setIconNoReset = [
"24 24 4 1",
" c None",
". c #A40000",
"+ c #3465A4",
"@ c #888A85",
" ",
" ++++++++ ",
" +@@@@@@@@+ ",
" +@@++@++++@+ +++++ ",
" +@++ +@++++@+ +@@@+ ",
". +@+ +@++++@++@+@+.",
"... +++ +@++++@+@+...",
"..... +@++++@.....",
"....... +@++.......",
" ........ +........ ",
" ........ ........@+ ",
" +++..............++@+ ",
" +@@@@..........+@@@@+ ",
" +@+++..........++++++ ",
" +@+.............. ",
" +........ ........ ",
" ........+@+ ........ ",
".......++++@+ .......",
".....@+@++++@+ +.....",
"...@+@++@++++@+ +@+...",
". +@@@+ +@++++@+ ++@+ .",
" +++++ +@++++@++@@+ ",
" +@@@@@@@@+ ",
" ++++++++ "
]
standIcon = [
"16 16 9 1",
" c None",
". c #010400",
"+ c #28090D",
"@ c #4C0000",
"# c #770000",
"$ c #AE0000",
"% c #262826",
"& c #CB0000",
"* c #FD0705",
"*********** ",
"*********** ",
"** *** ** ",
"** *...........",
" *...........",
" *.. ... ..",
" *** ... ",
" *** ... ",
" *** ... ",
" *** ... ",
" *** ... ",
" ***** ... ",
" ... ",
" ... ",
" ..... ",
" "]
flatIcon = [
"16 16 9 1",
" c None",
". c #020400",
"+ c #2B0500",
"@ c #620502",
"# c #770301",
"$ c #970300",
"% c #B40100",
"& c #E60002",
"* c #FE0004",
" ",
" ",
" ",
" ",
" ** . ",
" *** ... ",
" ** ... ",
" *** .. ",
" *** .. ",
" ****&#... ",
" *****$+.....% ",
" ** &.+%@...@. ",
" ** ..#*&%@....",
"**** ... *&$...",
" *** .. ** ..",
" ."]
romanIcon = [
"16 16 5 1",
" c None",
". c #FD9806",
"+ c #FD9904",
"@ c #FD9905",
"# c #FD9906",
" ",
" ",
" @@ ",
" @@@@@ ",
" @@@@@ @@ ",
" @@@@ @@ @@ ",
"@@ @@ @@ @@ ",
"@@@ @@ @@ @@ ",
" @@@@ @@ @@ ",
" +@@ @@ @@ ",
" #@@@ @ @@@",
" @@ .@@ @@@@ ",
" @# @@@@@ ",
" +@@@@@ ",
" @@ ",
" "]
arabicIcon = [
"16 16 5 1",
" c None",
". c #F6972B",
"+ c #F6982B",
"@ c #F5972B",
"# c #F7982B",
" ",
" ",
" ",
" .. ",
" .. ..... ",
" ... .. ",
" . .. ",
" .+ .. ",
" .+ @. ",
" .+ #.... ",
" ... ... ",
" .... ",
" ... ",
" ....... ",
" ... ",
" "]
redressIcon = [
"16 16 4 1",
" c None",
". c #010400",
"+ c #000000",
"@ c #FD9905",
" ",
" ",
".. ..+ ",
" . . ",
" . ++ .. ",
" . + . ",
"... ... . ",
" . ",
" @ ... ",
" @ ",
" @ @ ..+ ",
" @ @ . ",
" @@@ .+ ",
" @@ . ",
" ..+ ",
" "]
axialIcon = [
"16 16 4 1",
" c None",
". c #000000",
"+ c #010400",
"@ c #FD9905",
" ",
" ",
"++ ++. ",
" + + ",
" + .. +. ",
" + . +. ",
"+++ +++ + ",
" ++ ",
" @ + ",
" @ ",
" @ @ ",
" @ @ + +",
" @@@ + + +",
" @@ .+.+.",
" ",
" "]
setIconDel = [
"24 24 4 1",
" c None",
". c #EF0013",
"+ c #EF0113",
"@ c #FFFFFF",
" ",
" . . ",
" .@. .@. ",
" .@.@. .@.@. ",
" .@..+@. .@+..@. ",
" .@..+++@. .@+++..@. ",
" .@.+.++@. .@+++++@. ",
" .@+..++@.@+++++@. ",
" .@++.++@+++++@. ",
" .@+++++++++@. ",
" .@+++++++@. ",
" .@+++++@. ",
" .@+++++++@. ",
" .@+++++++++@. ",
" .@+++++@+++++@. ",
" .@+++++@.@+++++@. ",
" .@+++++@. .@+++++@. ",
" .@..+++@. .@+++..@. ",
" .@..+@. .@+..@. ",
" .@.@. .@.@. ",
" .@. .@. ",
" . . ",
" ",
" "]
setIconCommand = [
"24 24 5 1",
" c None",
". c #A40000",
"+ c #8F5902",
"@ c #C17D11",
"# c #EDD400",
" ",
" # ",
" ### ",
" # ",
" ## ++++++ ## ",
" ## +++@@@@+++ ## ",
" #++@@++++@@++# ",
" ++@++ # ++@++ ",
" +@+# # +@+ ",
" ++@+ # # #+@++ ",
" # +@+ ++++# +@+ ",
" ###+@+###+@@+ +@+ # ",
" # +@+ +@@+###+@+### ",
" +@+ ++++ +@+ # ",
" ++@+ # # # +@++ ",
" +@+# # #+@+ ",
" ++@++ # ++@++ ",
" ++@@++++@@++# ",
" #+++@@@@+++ ## ",
" ## ++++++ ## ",
" ## # ",
" ### ",
" # ",
" "
]
setIconHelix = [
"24 24 5 1",
" c None",
". c #A40000",
"+ c #3566A4",
"@ c #729FCF",
"# c #EDD400",
" ",
" ",
" ",
" ",
" #++@@++ ",
" ##.++@@++ ",
" ..##+@@++ ",
" ..###++ ",
" +...## ",
" ++@@..## ",
" ++@@++..# ",
" ++@@++##. ",
" #++@@++.. ",
" ##.++@@++ ",
" ## ++@@++ ",
" ..##+@@++ ",
" ..###++ ",
" +...## ",
" ++@@..## ",
" ++@@++..# ",
" ++@@++## ",
" ",
" ",
" "
]
setIconClock = [
"24 24 8 1",
" c None",
". c #C17D11",
"+ c #8F5902",
"@ c #BABDB6",
"# c #EDD400",
"$ c #A40000",
"% c #CE5C00",
"& c #171018",
" ",
" ..... ",
" ++........ ",
" +...++++++... ",
" +..@@@@#@@@++.. ",
" +..#@@@@#@@@@#+.. ",
" +..@@#@@@#@@$#@@+.. ",
" +.#@@@%@@%@@$@@@#+. ",
" +..@#@@@@@#@$@@@#@+.. ",
" +.@@@%@@@@@$$@@%@@@+. ",
" +.@@@@@@@@@$$@@@@@@+. ",
" +.@@@@@@@@&&@@@@@@@+. ",
" +.###%@@@@&&@@@%###+. ",
" +.@@@@@@@@$$@@@@@@@+. ",
" +.@@@%@@@@@$$@@%@@@+. ",
" +..@#@@@@@#$$$@@#@+.. ",
" +.#@@@%@@%@$$@@@#+. ",
" ..@@#@@@#@@$$@@+.. ",
" +..#@@@@#@@@$#+.. ",
" +..@@@@#@@@++.. ",
" +...++++++... ",
" ++........ ",
" ...... ",
" "
]
setIconPath = [
"24 24 4 1",
" c None",
". c #905902",
"+ c #FFFFFF",
"@ c #EDD400",
".+...@ ",
".+...@ ",
"..+...@ ",
"..+....@ ",
"....+...@ ",
"....+....@ ",
"@........@ ",
"@.........@ ",
" @....+...@ ",
" @....+...@@@ ",
" @....+.....@@ ",
" @....+.......@ ",
" @............@@ ",
" @@.....++......@ ",
" @.......++.....@@@ ",
" @@@..............@@ ",
" @........++.....@",
" @@........++....",
" @.............",
" @............",
" @@.......+..",
" @......++.",
" @@@.....+.",
" "
]
setIconProgress = [
"24 24 3 1",
" c None",
". c #3465A4",
"+ c #729FCF",
" ",
" ",
" ............ ",
" .++++++++.. ",
" .+++++++.. ",
" .++++++.. ",
" .++++++.. ",
" .+++++++.. ",
" .++++++++.. ",
" .+++++++++.. ",
" .++..++++++.. ",
" .+....++++++.. ",
" ... ..++++++.. ",
" .. ..++++++.. ",
" . ..++++++.. ",
" ..++++++.. ",
" ..++++++.. ",
" ..++++... ",
" ..++... ",
" ..... ",
" ... ",
" . ",
" ",
" "
]
setIconInDoor = [
"24 24 9 1",
" c None",
". c #A30500",
"+ c #555755",
"@ c #EF2B29",
"# c #2F65A5",
"$ c #888A88",
"% c #6D9FD0",
"& c #BCBCB3",
"* c #DDDFDC",
" ",
" # ",
" #%# @. ",
" #%%%# @@#. ",
" #%%%# @@##.. ",
" #%%%#@@###... ",
" #%%####%#.... ",
" ##%##%%#$.... ",
" @##%%%%#*$.... ",
" @@##%%%%#**$.... ",
" @@##%%%%%#***$.... ",
" @@##%%%%%%#****$.... ",
" @##########*****$... ",
" @@***************$.. ",
" $**&$+++**&&&&&*$ ",
" $**&$+++**%###%*$ ",
" $**$$+++**%###%*$ ",
" $**$$+++**%###%*$ ",
" $**&$+++**+++++*$ ",
" $**&$+++********$ ",
" $**&$$++********$ ",
" $$$$$$$$$$$$$$$$$ ",
" ",
" "
]
setIconOutDoor = [
"24 24 9 1",
" c None",
". c #A30500",
"+ c #555755",
"@ c #EF2B29",
"# c #2F65A5",
"$ c #888A88",
"% c #6D9FD0",
"& c #BCBCB3",
"* c #DDDFDC",
" ",
" ########## ",
" #%%%%%%## @. ",
" #%%%%%## @@.. ",
" #%%%%%# @@@@.. ",
" #%%%%%#@@@@@... ",
" #%%%%%%#@@*$.... ",
" #%###%%%#***$.... ",
" ### @#%%%#***$.... ",
" ## @@@#%%%#***$.... ",
" # @@@@*#%%%#***$.... ",
" @@@@***#%#*****$.... ",
" @@@*****#*******$... ",
" @@***************$.. ",
" $**&$+++**&&&&&*$ ",
" $**&$+++**%###%*$ ",
" $**$$+++**%###%*$ ",
" $**$$+++**%###%*$ ",
" $**&$+++**+++++*$ ",
" $**&$+++********$ ",
" $**&$$++********$ ",
" $$$$$$$$$$$$$$$$$ ",
" ",
" "
]
setIconFree = [
"24 24 8 1",
" c None",
". c #7D94C9",
"+ c #6480C0",
"@ c #3E62B0",
"# c #AABBDE",
"$ c #C3D0E8",
"% c #92A5D3",
"& c #000000",
" ",
" ..+ ",
" @@@@#$$#. ",
" +#$#%$$###+++ ",
" +$%###$$#%#$##. ",
" %+%#+%$$$##$#%%+ ",
" @+@#$$#@@+##%#%%.+@ ",
" %$$$$$###%@%%+..+.+ ",
" .$$$$$$#$$#.@@#$$%@@@ ",
"@.##$$$####%+%#$$$#%#+ ",
"+#$$$$###%%..+$$$$#$$%+ ",
"@$$###%#%%%%%+$$$####%+ ",
"+##%%%%%%%%%%+$##$#%%.+ ",
" +%%....+++++.####%%%.%+",
" @@@@@ .#%%%%%%%%%%%+",
" %###%%%%...+@",
" @@@@@@@@@@@ ",
" ",
" ",
" ",
" & && & ",
" & && & && ",
" && & ",
" & "
]
setIconStamp = [
"24 24 8 1",
" c None",
". c #787670",
"+ c #CE6E21",
"@ c #A37D5E",
"# c #E48234",
"$ c #C69165",
"% c #ACADAA",
"& c #D6D9D5",
" @@@@@ ",
" @####$$ ",
" @####+$ ",
" @####+$ ",
" @+##++$ ",
" @+++++$ ",
" @+++@ ",
" .&%%. ",
" .&%%. ",
" ...&%%... ",
" .....%&%%&..... ",
" ...&&&%&%%&&&&... ",
" ..&&&&&%&%%&&&&&&.. ",
" ..&&&&&%&%%&&&&&&.. ",
" .&&&&&&&%%%&&&&&&&. ",
" .&&&&&&&%%&&&&&&&&. ",
" ..&&&&&&&&&&&&&&&.. ",
" .&&&&&&&&&&&&&&&. ",
" ...&&&&&&&&&&&... ",
" &&...&&&&&&&...&& ",
" %&&.........&&% ",
" %%&&&&&&&&&%% ",
" %%%%%%%%% ",
" "
]
#### matplotlib debut 1/5 #################################################################
#import PySide2
#from PySide2 import (QtWidgets, QtCore, QtGui)
#from PySide2.QtWidgets import (QWidget, QApplication, QSlider, QGraphicsView, QGraphicsScene, QVBoxLayout, QStyle)
import re
import operator
from operator import itemgetter #, attrgetter, methodcaller # pour sort
folderNewIcon = [
"24 24 11 1",
" c None",
". c #FCE94F",
"+ c #EDD400",
"@ c #555753",
"# c #BABDB6",
"$ c #2B4F89",
"% c #D3D7CF",
"& c #5479AB",
"* c #B8BBB5",
"= c #B6BAB4",
"- c #2E5089",
" ...... ",
"........ ",
"........ ",
".+++++++ ",
".+.....+@@@@@@@@@@@@ ",
".+......###########@ ",
".+....$$$$$########@ ",
" +....$%%%$$$$$$$$$$$$& ",
" @####$$$$$$$$$$$$$$$$& ",
" @####$$$$$$$$$$$$$$$$& ",
" @###$$$$$$$$$$$$$$$$& ",
" @#*$$$$$$$$$$$$$$$$$& ",
" @#=$$$$$$$$$$$$$$$$$& ",
" @#=$$$$$$$$$$$$$$$$$& ",
" @#=$$$$$$$$$$$$$$$&&& ",
" @##$$$$$$$$$$$$$$$& ",
" @$$$$$$$$$$$$$$$$& ",
" @$-$$$$$$$$$$$$$$& ",
" @$$$$$$$$$$$$$$$&& ",
" &&&&&&&&&&&&&&&&& ",
" ",
" ",
" ",
" "]
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",
".+++++++++++@#$%",
".++++++++$+#++&$",
".++***++++++=@+%",
".++*-*-++++*+&+$",
".++*-*-+++++++*+",
".++***-***++++++",
".++*---*-*-+++++",
".++*-++*-*-+++++",
".$++-++*-*-*++++",
".*@++++*-*-*-+++",
"..#*+++***-*-+++",
"...;#+++---*-+++",
"....%=+++++*-+++",
".....;$++++****+",
"......@%++++----",
"................"]
#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
##################################
#### Config Begin matplotlib font #######################
# # https://en.wikipedia.org/wiki/Web_colors
global setColorTTF ; setColorTTF = "blue" # .TTF color by "extension name" or hexa "#0000FF"
global setColorFON ; setColorFON = "orange" # .FON color by "extension name" or hexa "#FFA500" #FON give error
global setColorOTF ; setColorOTF = "green" # .OTF color by "extension name" or hexa "#008000"
global setColorPOL ; setColorPOL = "black" # .OTHER color by "extension name" or hexa "#000000"
#####
global switchModeTextList; switchModeTextList= 1 # 0 = mode text normal (et noir) coupe le switchFontComBox
# 1 = permet le switchFontComBox 1 (default)
#####
global switchFontComBox ; switchFontComBox = 0 # 0 = (et switchModeTextList= 1) mode texte (en couleur) dans liste ComboBox plus rapide (default)
# 1 = (et switchModeTextList= 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) (default)
#####
global seTtextAlignement ; seTtextAlignement = 0 # 0 = AlignLeft (default)
# 1 = AlignCenter
# 2 = AlignRight
#####
global setFontByDefault ; setFontByDefault = "ARIAL" # Font by Default
#####
#### Config End matplotlib font #########################
#####
global switchResetFALSE ; switchResetFALSE = 0 # 0 = reset (False by default)
# 1 = pas de reset (non conseille) certains switch peuvent rester ouvert ou fermer inopinement !
#####
global setPathOrthogonal ; setPathOrthogonal = 0 #
global setPathTangent ; setPathTangent = 1 #
global setPositionBase ; setPositionBase = 1 #
global setPositionCenter ; setPositionCenter = 0 #
global setPositionTop ; setPositionTop = 0 #
#####
global setMainWindowMoveX; #setMainWindowMoveX= 0 # position X macro window
global setMainWindowMoveY; #setMainWindowMoveY= 0 # position Y macro window
global setFrameWindowSizeX #setFrameWindowSizeX=0 # dimension X macro window
global setFrameWindowSizeY #setFrameWindowSizeY=0 # dimension Y macro window
#### Config #############################################
def setPolicePath():
global PolicePath
global originalFontPath
global originalFontName
if platform.system() == "Windows" :
PolicePath = originalFontPath = "C:/Windows/Fonts/"
setFontByDefault = originalFontName = "ARIAL"
elif platform.system() == "Linux" :
PolicePath = originalFontPath = "/usr/share/fonts/"
setFontByDefault = originalFontName = "UBUNTU-M"
elif platform.system() == "Darwin":
PolicePath = originalFontPath = "/Library/Fonts/"
setFontByDefault = originalFontName = "Arial"
if platform.system() == "Linux" :
PolicePath = originalFontPath = "/usr/share/fonts/"
setFontByDefault = originalFontName = "Monospace"
setPolicePath()
###### Read Configuration begin ####
seTtextAlignement = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("seTtextAlignement")
setSystemFonts = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setSystemFonts")
switchFontComBox = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchFontComBox")
switchModeTextList = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchModeTextList")
setFontByDefault = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetString("setFontByDefault")
if setFontByDefault == "": setPolicePath()
switchResetFALSE = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchResetFALSE")
# switchResetFALSE: desactive cree des erreurs de fonctionnement attention a l utilisation !!
setMainWindowMoveX = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setMainWindowMoveX")
setMainWindowMoveY = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setMainWindowMoveY")
setFrameWindowSizeX= FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setFrameWindowSizeX")
setFrameWindowSizeY= FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setFrameWindowSizeY")
setPathOrthogonal = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPathOrthogonal")
setPathTangent = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPathTangent")
setPositionBase = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPositionBase")
setPositionCenter = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPositionCenter")
setPositionTop = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPositionTop")
###### Read Configuration end ####
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 MyLabelPatience(): # fenetre image d'attente de chargement
global path
label = QtWidgets.QLabel()
label.setText("<img src=" + path + "FCCircularTextButtom.png><b><center>Wait please</center> \n\n<center>i search the fonts !\n\n</right></b>")
ecran = FreeCADGui.getMainWindow().frameGeometry()
xF = 250; yF = 250
xW = (ecran.width()/2) - (xF/2)
yW = (ecran.height()/2)- (yF/2)
label.setGeometry(xW, yW, xF, yF)
label.setStyleSheet("QLabel {background-color : #F0C300;font: 12pt; }");
label.setWindowFlags(PySide2.QtCore.Qt.WindowFlags(PySide2.QtCore.Qt.FramelessWindowHint)) # pas de bords
label.setWindowFlags(PySide2.QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenetre en avant
#### matplotlib fin 1/5 #################################################################
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def __init__(self):
global path
self.path = path
#### matplotlib debut 2/5 apres __init__ #################################################################
#### matplotlib font textEdit
self.FontTextSize = 20
self.fonteComp = ""
self.font = QtGui.QFont()
self.tableau = [] #Index (), [chemin plus nom fichier (nomPathPolice), nom sans extension (nomSimple), nomSimpleExt (nomSimple + Ext)]
self.index = 0 #Index ()
#### matplotlib font textEdit
def searchFont(self,pathSearch, setFontByDefault): #modify
global PolicePath
global setSystemFonts
global seTtextAlignement
global switchFontComBox
global switchModeTextList
#global setFontByDefault #modify
MyLabelPatience.label.show()
FreeCADGui.updateGui() # rafraichi l'ecran
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() == setFontByDefault.upper(): # detecte la fonte de base
self.index = line
PolicePath = self.tableau[line][1]
####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))
if seTtextAlignement == 0:
item.setTextAlignment(QtCore.Qt.AlignLeft)
elif seTtextAlignement == 1:
item.setTextAlignment(QtCore.Qt.AlignCenter)
elif seTtextAlignement == 2:
item.setTextAlignment(QtCore.Qt.AlignRight)
else:
self.comboBoxPy.addItem(self.tableau[line][2])
model.appendRow(item)
else:
self.comboBoxPy.addItem("")
self.comboBoxPy.setItemText(line, self.tableau[line][2])
####Section item color and font end ##########################
####Section setfont Family switchFontComBox begin#############
if (switchFontComBox == 1) and (switchModeTextList == 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)
if switchModeTextList == 1:
item.setFont(font)
else:
self.comboBoxPy.addItem("")
####Section setfont Family switchFontComBox end###############
except Exception:
FreeCAD.Console.PrintMessage("searchFont()" + "\n")
None
self.lineEdit_NameFile.setText("(" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") " + self.tableau[self.index][1])
self.comboBoxPy.setCurrentIndex(self.index)
self.fonteComp = self.tableau[self.index][1]
MyLabelPatience.label.close()
#### matplotlib fin 2/5 apres __init__ #################################################################
def setupUi(self, MainWindow):
self.window = MainWindow
global ui
global PolicePath
global rayon
global texte
global rotation
global SizeCaractere
global debout
global exterieur
global precision
global correctionAngle
global correctionRayon
global baseHelix
global endHelix
global nombreCarParTour
global epaisseurExtrus
global epaisSupportClock
global setPathOrthogonal
global setPathTangent
global setPositionBase
global setPositionCenter
global setPositionTop
global switchResetFALSE
global setMainWindowMoveX
global setMainWindowMoveY
global setFrameWindowSizeX
global setFrameWindowSizeY
global setPathLatestDirectoryManual
global setFontByDefault
MainWindow.setObjectName(_fromUtf8("MainWindow"))
# MainWindow.setMaximumSize(QtCore.QSize(370, 638))
# MainWindow.setMinimumSize(QtCore.QSize(400, 640))
# MainWindow.move(setMainWindowMoveX, setMainWindowMoveY) # position macro
MainWindow.setGeometry(setMainWindowMoveX, setMainWindowMoveY, setFrameWindowSizeX, setFrameWindowSizeY)
self.centralWidget = QtWidgets.QWidget(MainWindow)
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
###################
grid = QtWidgets.QGridLayout()
self.centralWidget.setLayout(grid)
####
self.scrollArea = QtWidgets.QScrollArea(self.centralWidget) # cadre scrollarea contenant le widget GUI
self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
self.scrollArea.setWidgetResizable(True)
grid.addWidget(self.scrollArea, 0, 0)
vbox = QtWidgets.QVBoxLayout()
self.scrollArea.setLayout(vbox)
####
self.scrollAreaWidgetContents_2 = QtWidgets.QWidget() #widget contenant le GUI
vbox.addWidget(self.scrollAreaWidgetContents_2)
vbox = QtWidgets.QVBoxLayout()
self.scrollAreaWidgetContents_2.setLayout(vbox)
###################
self.groupBox_00 = QtWidgets.QGroupBox()
self.groupBox_00.setFlat(False)
self.groupBox_01 = QtWidgets.QGroupBox()
self.groupBox_01.setFlat(False)
####
self.textEdit = QtWidgets.QTextEdit()
self.textEdit.textChanged.connect(self.on_textEdit_Changed)
# self.textEdit.setMaximumHeight(100)
####
self.frame_Option = QtWidgets.QFrame()
self.frame_Option.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_Option.setFrameShadow(QtWidgets.QFrame.Plain) #Raised Sunken
self.PB_Reverse = QtWidgets.QPushButton()
self.PB_Reverse.clicked.connect(self.on_PB_Reverse)
self.CB_Word = QtWidgets.QCheckBox()
self.CB_Word.setText(_fromUtf8("Word"))
self.CB_Word.clicked.connect(self.on_CB_Word)
####
self.PB_Help = QtWidgets.QPushButton(MainWindow)
self.PB_Help.setIcon(QtGui.QIcon(QtGui.QPixmap(helpIcon))) # help icone dans une variable
self.PB_Help.clicked.connect(self.on_PB_Help_clicked) # help
####
#### matplotlib debut 3/5 setupUi #################################################################
self.lineEdit_NameFile = QtWidgets.QLineEdit()
#self.lineEdit_NameFile.returnPressed.connect(self.on_lineEdit_NameFile)
####add
self.lineEdit_NameFile_button = QtWidgets.QPushButton(MainWindow)
self.lineEdit_NameFile_button.setIcon(QtGui.QIcon(QtGui.QPixmap(folderNewIcon)))
self.lineEdit_NameFile_button.clicked.connect(self.on_lineEdit_NameFile_button)
self.PB_systemPath = QtWidgets.QPushButton(MainWindow)
self.PB_systemPath.setIcon(QtGui.QIcon(QtGui.QPixmap(homeIcon))) # icone dans une variable
self.PB_systemPath.clicked.connect(self.on_PB_systemPath)
####add
self.comboBoxPy = QtWidgets.QComboBox()
####
self.pathFont = PolicePath[:len(PolicePath)-(PolicePath[::-1].index("/"))-1]
# self.pathFont = setPathLatestDirectoryManual
####
ui.searchFont(self.pathFont, setFontByDefault)
QtCore.QObject.connect(self.comboBoxPy, QtCore.SIGNAL("currentIndexChanged(int)"), self.on_fontComboBoxPython)
#### matplotlib fin 3/5 setupUi #################################################################
####
self.groupBox_02 = QtWidgets.QGroupBox()
self.DS_Radius_Circle = QtWidgets.QDoubleSpinBox()
self.DS_Radius_Circle.setMinimum(-99999999.0)
self.DS_Radius_Circle.setMaximum(99999999.0)
self.DS_Radius_Circle.setValue(rayon)
self.DS_Radius_Circle.valueChanged.connect(self.on_DS_Radius_Circle) #connection doubleSpinBox
self.label_10 = QtWidgets.QLabel()
self.DS_Size_Character = QtWidgets.QDoubleSpinBox()
self.DS_Size_Character.setMinimum(0.0)
self.DS_Size_Character.setMaximum(99999999.0)
self.DS_Size_Character.setSingleStep(1.0)
self.DS_Size_Character.setValue(SizeCaractere)
self.DS_Size_Character.valueChanged.connect(self.on_DS_Size_Character) #connection doubleSpinBox
self.label_4 = QtWidgets.QLabel()
self.S_Begin_Angle = QtWidgets.QSpinBox()
self.S_Begin_Angle.setMaximum(360.0)
self.S_Begin_Angle.setValue(debut)
self.S_Begin_Angle.valueChanged.connect(self.on_S_Begin_Angle) #connection SpinBox
self.label_13 = QtWidgets.QLabel()
self.S_End_Angle = QtWidgets.QSpinBox()
self.S_End_Angle.setMaximum(360)
self.S_End_Angle.setValue(rotation)
self.S_End_Angle.valueChanged.connect(self.on_S_End_Angle) #connection SpinBox
self.label_14 = QtWidgets.QLabel()
self.DS_Correction_Angle = QtWidgets.QDoubleSpinBox()
self.DS_Correction_Angle.setMinimum(-359.00)
self.DS_Correction_Angle.setMaximum(359.00)
self.DS_Correction_Angle.setValue(correctionAngle)
self.DS_Correction_Angle.valueChanged.connect(self.on_DS_Correction_Angle) #connection doubleSpinBox
self.label_7 = QtWidgets.QLabel()
self.DS_Correction_Radius = QtWidgets.QDoubleSpinBox()
self.DS_Correction_Radius.setMinimum(-99999999.0)
self.DS_Correction_Radius.setMaximum(99999999.0)
self.DS_Correction_Angle.setValue(correctionAngle)
self.DS_Correction_Radius.setValue(correctionRayon)
self.DS_Correction_Radius.valueChanged.connect(self.on_DS_Correction_Radius) #connection doubleSpinBox
self.label_8 = QtWidgets.QLabel()
self.DS_Extrude = QtWidgets.QDoubleSpinBox()
self.DS_Extrude.setEnabled(False)
self.DS_Extrude.setMinimum(-99999999.0)
self.DS_Extrude.setMaximum(99999999.0)
self.DS_Extrude.setValue(epaisseurExtrus)
self.DS_Extrude.valueChanged.connect(self.on_DS_Extrude) #connection doubleSpinBox
self.CH_Extrude = QtWidgets.QCheckBox()
self.CH_Extrude.clicked.connect(self.on_CH_Extrude) #connection checkBox
self.DS_PlacementX = QtWidgets.QDoubleSpinBox()
self.DS_PlacementX.setEnabled(False)
self.DS_PlacementX.setSpecialValueText(_fromUtf8(""))
self.DS_PlacementX.setMinimum(-9999999.0)
self.DS_PlacementX.setMaximum(9999999.99)
self.DS_PlacementX.valueChanged.connect(self.on_DS_PlacementX) #connection doubleSpinBox
self.DS_PlacementY = QtWidgets.QDoubleSpinBox()
self.DS_PlacementY.setEnabled(False)
self.DS_PlacementY.setSpecialValueText(_fromUtf8(""))
self.DS_PlacementY.setMinimum(-9999999.0)
self.DS_PlacementY.setMaximum(9999999.99)
self.DS_PlacementY.valueChanged.connect(self.on_DS_PlacementY) #connection doubleSpinBox
self.DS_PlacementZ = QtWidgets.QDoubleSpinBox()
self.DS_PlacementZ.setEnabled(False)
self.DS_PlacementZ.setSpecialValueText(_fromUtf8(""))
self.DS_PlacementZ.setMinimum(-9999999.0)
self.DS_PlacementZ.setMaximum(9999999.99)
self.DS_PlacementZ.valueChanged.connect(self.on_DS_PlacementZ) #connection doubleSpinBox
self.CH_Sp_Placement = QtWidgets.QCheckBox()
self.CH_Sp_Placement.clicked.connect(self.on_CH_Sp_Placement) #connection checkBox
self.DS_InclinaisonX = QtWidgets.QSpinBox()
self.DS_InclinaisonX.setEnabled(False)
self.DS_InclinaisonX.setMinimum(-360.0)
self.DS_InclinaisonX.setMaximum(360.0)
self.DS_InclinaisonX.setValue(inclinaisonX)
self.DS_InclinaisonX.valueChanged.connect(self.on_DS_InclinaisonX) #connection doubleSpinBox
self.DS_InclinaisonY = QtWidgets.QSpinBox()
self.DS_InclinaisonY.setEnabled(False)
self.DS_InclinaisonY.setMinimum(-360)
self.DS_InclinaisonY.setMaximum(360)
self.DS_InclinaisonY.setValue(inclinaisonY)
self.DS_InclinaisonY.valueChanged.connect(self.on_DS_InclinaisonY) #connection doubleSpinBox
self.DS_InclinaisonZ = QtWidgets.QSpinBox()
self.DS_InclinaisonZ.setEnabled(False)
self.DS_InclinaisonZ.setMinimum(-360.0)
self.DS_InclinaisonZ.setMaximum(360.0)
self.DS_InclinaisonZ.setValue(inclinaisonZ)
self.DS_InclinaisonZ.valueChanged.connect(self.on_DS_InclinaisonZ) #connection doubleSpinBox
self.CH_Sp_Inclination = QtWidgets.QCheckBox()
self.CH_Sp_Inclination.clicked.connect(self.on_CH_Sp_Inclination) #connection checkBox
####
self.groupBox_03 = QtWidgets.QGroupBox()
self.graphicsView = QtWidgets.QGraphicsView()
####Screen Graphic BitMap
##https://doc.qt.io/qtforpython/PySide2/QtCore/Qt.html
self.graphicsView = QtWidgets.QGraphicsView()
self.graphicsView.setObjectName("graphicsView")
self.graphicsView.setFixedSize(210,100)
pic = QtGui.QPixmap()
pic.loadFromData(base64.b64decode(outDoor_Icon_b64)) #indoor_Icon_b64 # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
# pic = QtGui.QPixmap(outDoorIcon) # xpm
# self.scene = QtWidgets.QGraphicsScene() # xpm bmp converti (general)
# self.scene.addPixmap(QtGui.QPixmap(pic)) # xpm bmp converti (general)
# self.graphicsView.setScene(self.scene) # xpm bmp converti (general)
# ####Screen Graphic BitMap
####
self.RA_Choice_Outdoor = QtWidgets.QRadioButton()
self.RA_Choice_Outdoor.setChecked(True)
self.RA_Choice_Outdoor.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconOutDoor))) # icone dans une variable
self.RA_Choice_Outdoor.clicked.connect(self.on_RA_Choice_Outdoor) #connection radioButton
self.RA_Choice_Indoor = QtWidgets.QRadioButton()
self.RA_Choice_Indoor.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconInDoor))) # icone dans une variable
self.RA_Choice_Indoor.clicked.connect(self.on_RA_Choice_Indoor) #connection radioButton
self.RA_Choice_Helix = QtWidgets.QRadioButton()
self.RA_Choice_Helix.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconHelix))) # icone dans une variable
self.RA_Choice_Helix.clicked.connect(self.on_RA_Choice_Helix) #connection radioButton
self.RA_Choice_Clock = QtWidgets.QRadioButton()
self.RA_Choice_Clock.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconClock))) # icone dans une variable
self.RA_Choice_Clock.clicked.connect(self.on_RA_Choice_Clock) #connection radioButton
#self.RA_Choice_Stamp = QtWidgets.QRadioButton()
#self.RA_Choice_Stamp.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconStamp))) # icone dans une variable
#self.RA_Choice_Stamp.clicked.connect(self.on_RA_Choice_Stamp) #connection radioButton
self.PU_Flat = QtWidgets.QPushButton()
self.PU_Flat.setEnabled(True)
self.PU_Flat.setIcon(QtGui.QIcon(QtGui.QPixmap(standIcon))) # icone dans une variable
self.PU_Flat.clicked.connect(self.on_PU_Flat)
####
#### Tab Onglets
self.tabWidget = QtWidgets.QTabWidget()
self.tabWidget.setTabPosition(QtWidgets.QTabWidget.North)
self.tabWidget.setTabShape(QtWidgets.QTabWidget.Rounded)
self.tabWidget.blockSignals(False) #just for not showing the initial message
self.tabWidget.tabBarClicked.connect(self.on_tabWidget) #changed!
#self.tabWidget.currentChanged.connect(self.on_tabWidget) #changed!
self.DS_Step_Of_The_Helix = QtWidgets.QDoubleSpinBox()
self.DS_Step_Of_The_Helix.setMaximum(99999999.99)
self.DS_Step_Of_The_Helix.setValue(pasHelix)
self.DS_Step_Of_The_Helix.valueChanged.connect(self.on_DS_Step_Of_The_Helix) #connection doubleSpinBox
self.label_12 = QtWidgets.QLabel()
self.DS_Number_Char_Per_Turn = QtWidgets.QSpinBox()
self.DS_Number_Char_Per_Turn.setMaximum(99999999)
self.DS_Number_Char_Per_Turn.setValue(nombreCarParTour)
self.DS_Number_Char_Per_Turn.valueChanged.connect(self.on_DS_Number_Char_Per_Turn) #connection doubleSpinBox
self.label = QtWidgets.QLabel()
self.DS_Base_Helix = QtWidgets.QDoubleSpinBox()
self.DS_Base_Helix.setEnabled(False)
self.DS_Base_Helix.setMinimum(-99999999.0)
self.DS_Base_Helix.setMaximum(99999999.0)
self.DS_Base_Helix.setValue(baseHelix)
self.DS_Base_Helix.valueChanged.connect(self.on_DS_Base_Helix) #connection doubleSpinBox
self.label_2 = QtWidgets.QLabel()
self.DS_End_Helix = QtWidgets.QDoubleSpinBox()
self.DS_End_Helix.setEnabled(False)
self.DS_End_Helix.setMinimum(-99999999.0)
self.DS_End_Helix.setMaximum(99999999.0)
self.DS_End_Helix.setValue(endHelix)
self.DS_End_Helix.valueChanged.connect(self.on_DS_End_Helix) #connection doubleSpinBox
self.label_3 = QtWidgets.QLabel()
#### clock
self.DS_Number_Faces_Support = QtWidgets.QSpinBox()
self.DS_Number_Faces_Support.setMaximum(999)
self.DS_Number_Faces_Support.setValue(nombreFaces)
self.DS_Number_Faces_Support.valueChanged.connect(self.on_DS_Number_Faces_Support) #connection SpinBox
self.label_5 = QtWidgets.QLabel()
self.CB_RomanOrArabic = QtWidgets.QCheckBox() # replace by CheckBox pour ne plus avoir le flip/flop
self.CB_RomanOrArabic.setIcon(QtGui.QIcon(QtGui.QPixmap(arabicIcon))) # icone dans une variable
self.CB_RomanOrArabic.clicked.connect(self.on_PU_Roman)
self.DS_Radius_Support = QtWidgets.QDoubleSpinBox()
self.DS_Radius_Support.setMaximum(99999999.99)
self.DS_Radius_Support.setValue(cercleClock)
self.DS_Radius_Support.setEnabled(False)
self.DS_Radius_Support.valueChanged.connect(self.on_DS_Radius_Support) #connection doubleSpinBox
self.label_11 = QtWidgets.QLabel()
self.CB_RedressChiffres = QtWidgets.QCheckBox() # replace by CheckBox pour ne plus avoir le flip/flop
self.CB_RedressChiffres.setIcon(QtGui.QIcon(QtGui.QPixmap(axialIcon))) # icone dans une variable
self.CB_RedressChiffres.clicked.connect(self.on_PU_Redress)
self.DS_Extrude_Support = QtWidgets.QDoubleSpinBox()
self.DS_Extrude_Support.setMaximum(99999999.0)
self.DS_Extrude_Support.setEnabled(False)
self.DS_Extrude_Support.setValue(epaisSupportClock)
self.DS_Extrude_Support.valueChanged.connect(self.on_DS_Extrude_Support) #connection doubleSpinBox
self.label_6 = QtWidgets.QLabel()
#### Path
self.frame_Path = QtWidgets.QFrame()
self.frame_Path.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_Path.setFrameShadow(QtWidgets.QFrame.Plain) #Raised) Sunken
self.RB_Path_01 = QtWidgets.QRadioButton()
self.RB_Path_01.setChecked(setPathOrthogonal)
self.RB_Path_01.clicked.connect(self.on_RB_Path_Image)
self.RB_Path_02 = QtWidgets.QRadioButton()
self.RB_Path_02.setChecked(setPathTangent)
self.RB_Path_02.clicked.connect(self.on_RB_Path_Image)
self.frame_Position = QtWidgets.QFrame()
self.frame_Position.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame_Position.setFrameShadow(QtWidgets.QFrame.Plain) #.Raised) Sunken
self.RB_Position_01 = QtWidgets.QRadioButton()
self.RB_Position_01.setChecked(setPositionBase)
self.RB_Position_01.clicked.connect(self.on_RB_Path_Image)
self.RB_Position_02 = QtWidgets.QRadioButton()
self.RB_Position_02.setChecked(setPositionCenter)
self.RB_Position_02.clicked.connect(self.on_RB_Path_Image)
self.RB_Position_03 = QtWidgets.QRadioButton()
self.RB_Position_03.setChecked(setPositionTop)
self.RB_Position_03.clicked.connect(self.on_RB_Path_Image)
#### plus tard
# self.horizontalSlider_01_Str = QtWidgets.QSlider()
# self.horizontalSlider_01_Str.setOrientation(QtCore.Qt.Horizontal)
# self.label_Path_01 = QtWidgets.QLabel()
# self.horizontalSlider_02_Car = QtWidgets.QSlider()
# self.horizontalSlider_02_Car.setOrientation(QtCore.Qt.Horizontal)
# self.label_Path_02 = QtWidgets.QLabel()
# self.horizontalSlider_03_Tra = QtWidgets.QSlider()
# self.horizontalSlider_03_Tra.setOrientation(QtCore.Qt.Horizontal)
# self.label_Path_03 = QtWidgets.QLabel()
#### plus tard
#### Command
self.CB_01_Points = QtWidgets.QCheckBox()
self.CB_01_Points.setIcon(QtGui.QIcon.fromTheme("Draft",QtGui.QIcon(":/icons/Draft_Dot.svg")))
self.CB_02_Circle = QtWidgets.QCheckBox()
self.CB_02_Circle.setIcon(QtGui.QIcon.fromTheme("Draft",QtGui.QIcon(":/icons/Draft_Circle.svg")))
self.CB_03_BBox = QtWidgets.QCheckBox()
self.CB_03_BBox.setIcon(QtGui.QIcon.fromTheme("Draft",QtGui.QIcon(":/icons/sel-bbox.svg")))
self.CB_04_Progression = QtWidgets.QCheckBox()
self.CB_04_Progression.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconProgress))) # progress icone dans une variable
self.CB_05_Reset = QtWidgets.QCheckBox()
if switchResetFALSE == 1:
self.CB_05_Reset.setChecked(True)
self.CB_05_Reset.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconNoReset))) # reset icone dans une variable
else:
self.CB_05_Reset.setChecked(False)
self.CB_05_Reset.setIcon(QtGui.QIcon(QtGui.QPixmap(resetIcon))) # reset icone dans une variable
self.CB_05_Reset.clicked.connect(self.on_CB_05_Reset)
self.CB_06_ModeFree = QtWidgets.QCheckBox()
self.CB_06_ModeFree.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconFree))) # progress icone dans une variable
self.CB_06_ModeFree.clicked.connect(self.on_CB_06_ModeFree)
self.PB_Delete_Last = QtWidgets.QPushButton()
self.PB_Delete_Last.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconDel))) # del icone dans une variable
self.PB_Delete_Last.clicked.connect(self.on_PB_Delete_Last)
self.PU_Exit = QtWidgets.QPushButton()
self.PU_Exit.setIcon(QtGui.QIcon(QtGui.QPixmap(quitIcon))) # quit icone dans une variable
#self.PU_Exit.setIconSize(QtCore.QSize(26, 26))
self.PU_Exit.clicked.connect(self.on_PU_Exit)
self.PU_Reset = QtWidgets.QPushButton()
self.PU_Reset.setEnabled(True)
self.PU_Reset.setIcon(QtGui.QIcon(QtGui.QPixmap(resetIcon))) # reset icone dans une variable
self.PU_Reset.clicked.connect(self.on_PU_Reset)
self.PU_Benchmarks = QtWidgets.QPushButton()
self.PU_Benchmarks.setIcon(QtGui.QIcon(QtGui.QPixmap(executeIcon)))# execute icone dans une variable
self.PU_Benchmarks.clicked.connect(self.on_PU_Benchmarks)
self.PU_Execute = QtWidgets.QPushButton()
self.PU_Execute.setIcon(QtGui.QIcon(QtGui.QPixmap(executeIcon)))# execute icone dans une variable
self.PU_Execute.clicked.connect(self.on_PU_Execute)
#### Tab Onglets
####
#### gridLayout begin #######################
self.grid_00 = QtWidgets.QGridLayout() #self.centralWidget #scrollAreaWidgetContents_2 #self.
#self.grid_00.setContentsMargins(10, 10, 10, 10)
self.grid_00.addWidget(self.groupBox_00, 0, 0, 1, 1) # groupBox_01
vbox.addWidget(self.groupBox_00) # englobe le cadre principal (titre + date)
####
##
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_00)
self.gridLayout_2.setContentsMargins(10, 10, 10, 10)
##
self.gridLayout_Texte = QtWidgets.QGridLayout(self.groupBox_01) # groupes .....
self.gridLayout_Texte.setContentsMargins(10, 10, 10, 10)
self.gridLayout_Texte.addWidget(self.textEdit, 0, 0, 1, 1)
##
self.gridLayout_frame_Option = QtWidgets.QGridLayout(self.frame_Option)
self.gridLayout_frame_Option.setContentsMargins(10, 10, 10, 10)
self.gridLayout_frame_Option.addWidget(self.PB_Reverse, 0, 0, 1, 1)
self.gridLayout_frame_Option.addWidget(self.CB_Word, 1, 0, 1, 1)
self.gridLayout_frame_Option.addWidget(self.PB_Help,2, 0, 1, 1)
self.gridLayout_Texte.addWidget(self.frame_Option, 0, 1, 1, 1)
##
self.gridLayout_Texte.addWidget(self.lineEdit_NameFile,1, 0, 1, 1)#_Font
self.gridLayout_Texte.addWidget(self.lineEdit_NameFile_button,1, 1, 1, 1)#_Font
self.gridLayout_Texte.addWidget(self.comboBoxPy,2, 0, 1, 1)#_Font
self.gridLayout_Texte.addWidget(self.PB_systemPath,2, 1, 1, 1)#_Font
self.gridLayout_2.addWidget(self.groupBox_01, 0, 0, 1, 1)
####
self.gridLayout_Config = QtWidgets.QGridLayout(self.groupBox_02)
self.gridLayout_Config.setContentsMargins(10, 10, 10, 10)
self.gridLayout_Config.addWidget(self.groupBox_03, 0, 0, 7, 2)
self.gridLayout_Choice = QtWidgets.QGridLayout(self.groupBox_03)
self.gridLayout_Choice.addWidget(self.RA_Choice_Outdoor, 0, 0, 1, 1)
self.gridLayout_Choice.addWidget(self.RA_Choice_Indoor, 1, 0, 1, 1)
self.gridLayout_Choice.addWidget(self.RA_Choice_Helix, 0, 1, 1, 1) # Visible False not used but stay cause new TAB
self.gridLayout_Choice.addWidget(self.RA_Choice_Clock, 1, 1, 1, 1) # Visible False not used but stay cause new TAB
#self.gridLayout_Choice.addWidget(self.RA_Choice_Stamp,2, 1, 1, 1)
self.gridLayout_Choice.addWidget(self.PU_Flat, 2, 0, 1, 2)
self.gridLayout_Choice.addWidget(self.graphicsView, 3, 0, 1, 2)
##
self.gridLayout_Config.addWidget(self.DS_Radius_Circle, 0, 2, 1, 1)
self.gridLayout_Config.addWidget(self.label_10, 0, 3, 1, 1)
self.gridLayout_Config.addWidget(self.DS_Size_Character, 1, 2, 1, 1)
self.gridLayout_Config.addWidget(self.label_4, 1, 3, 1, 1)
self.gridLayout_Config.addWidget(self.S_Begin_Angle, 2, 2, 1, 1)
self.gridLayout_Config.addWidget(self.label_13, 2, 3, 1, 1)
self.gridLayout_Config.addWidget(self.S_End_Angle, 3, 2, 1, 1)
self.gridLayout_Config.addWidget(self.label_14, 3, 3, 1, 1)
self.gridLayout_Config.addWidget(self.DS_Correction_Angle, 4, 2, 1, 1)
self.gridLayout_Config.addWidget(self.label_7, 4, 3, 1, 1)
self.gridLayout_Config.addWidget(self.DS_Correction_Radius, 5, 2, 1, 1)
self.gridLayout_Config.addWidget(self.label_8, 5, 3, 1, 1)
self.gridLayout_Config.addWidget(self.DS_Extrude, 6, 2, 1, 1)
self.gridLayout_Config.addWidget(self.CH_Extrude, 6, 3, 1, 1)
self.gridLayout_Config.addWidget(self.DS_PlacementX, 7, 0, 1, 1)
self.gridLayout_Config.addWidget(self.DS_PlacementY, 7, 1, 1, 1)
self.gridLayout_Config.addWidget(self.DS_PlacementZ, 7, 2, 1, 1)
self.gridLayout_Config.addWidget(self.CH_Sp_Placement, 7, 3, 1, 1)
self.gridLayout_Config.addWidget(self.DS_InclinaisonX, 8, 0, 1, 1)
self.gridLayout_Config.addWidget(self.DS_InclinaisonY, 8, 1, 1, 1)
self.gridLayout_Config.addWidget(self.DS_InclinaisonZ, 8, 2, 1, 1)
self.gridLayout_Config.addWidget(self.CH_Sp_Inclination, 8, 3, 1, 1)
self.gridLayout_2.addWidget(self.groupBox_02, 1, 0, 1, 1)
####
self.TAB_Command = QtWidgets.QWidget()
self.gridLayout_Command = QtWidgets.QGridLayout(self.TAB_Command)
self.gridLayout_Command.setContentsMargins(10, 10, 10, 10)
self.gridLayout_Command.addWidget(self.CB_01_Points, 0, 0, 1, 1)
self.gridLayout_Command.addWidget(self.CB_02_Circle, 0, 1, 1, 1)
self.gridLayout_Command.addWidget(self.CB_03_BBox, 0, 2, 1, 1)
self.gridLayout_Command.addWidget(self.CB_04_Progression, 0, 3, 1, 1)
self.gridLayout_Command.addWidget(self.CB_06_ModeFree, 1, 0, 1, 1)
self.gridLayout_Command.addWidget(self.CB_05_Reset, 1, 2, 1, 1)
self.gridLayout_Command.addWidget(self.PB_Delete_Last, 1, 3, 1, 1)
self.gridLayout_Command.addWidget(self.PU_Execute, 2, 0, 1, 1)
self.gridLayout_Command.addWidget(self.PU_Benchmarks, 2, 1, 1, 1)
self.gridLayout_Command.addWidget(self.PU_Reset, 2, 2, 1, 1)
self.gridLayout_Command.addWidget(self.PU_Exit, 2, 3, 1, 1)
self.tabWidget.addTab(self.TAB_Command, QtGui.QIcon(QtGui.QPixmap(setIconCommand)), "")
####
self.gridLayout_2.addWidget(self.tabWidget, 2, 0, 1, 2) #linge, colonne, ligne case, nombre de cases)
self.TAB_Helix = QtWidgets.QWidget()
self.gridLayout_Helix = QtWidgets.QGridLayout(self.TAB_Helix)
self.gridLayout_Helix.setContentsMargins(10, 10, 10, 10)
self.gridLayout_Helix.addWidget(self.DS_Step_Of_The_Helix, 0, 0, 1, 1)
self.gridLayout_Helix.addWidget(self.label_12, 0, 1, 1, 1)
self.gridLayout_Helix.addWidget(self.DS_Number_Char_Per_Turn, 0, 2, 1, 1)
self.gridLayout_Helix.addWidget(self.label, 0, 3, 1, 1)
self.gridLayout_Helix.addWidget(self.DS_Base_Helix, 1, 0, 1, 1)
self.gridLayout_Helix.addWidget(self.label_2, 1, 1, 1, 1)
self.gridLayout_Helix.addWidget(self.DS_End_Helix, 1, 2, 1, 1)
self.gridLayout_Helix.addWidget(self.label_3, 1, 3, 1, 1)
self.tabWidget.addTab(self.TAB_Helix, QtGui.QIcon(QtGui.QPixmap(setIconHelix)), "")
####
self.TAB_Clock = QtWidgets.QWidget()
self.gridLayout_Clock = QtWidgets.QGridLayout(self.TAB_Clock)
self.gridLayout_Clock.addWidget(self.DS_Number_Faces_Support, 0, 0, 1, 1)
self.gridLayout_Clock.addWidget(self.label_5, 0, 1, 1, 1)
self.gridLayout_Clock.addWidget(self.CB_RomanOrArabic, 0, 2, 1, 1)
self.gridLayout_Clock.addWidget(self.DS_Radius_Support, 1, 0, 1, 1)
self.gridLayout_Clock.addWidget(self.label_11, 1, 1, 1, 1)
self.gridLayout_Clock.addWidget(self.CB_RedressChiffres, 1, 2, 1, 1)
self.gridLayout_Clock.addWidget(self.DS_Extrude_Support, 2, 0, 1, 1)
self.gridLayout_Clock.addWidget(self.label_6, 2, 1, 1, 1)
self.tabWidget.addTab(self.TAB_Clock, QtGui.QIcon(QtGui.QPixmap(setIconClock)), "")
####
self.TAB_Path = QtWidgets.QWidget()
self.gridLayout_Path = QtWidgets.QGridLayout(self.TAB_Path)
self.gridLayout_Path.setContentsMargins(10, 10, 10, 10)
self.gridLayout_frame_Path = QtWidgets.QGridLayout(self.frame_Path)
self.gridLayout_frame_Path.setContentsMargins(10, 10, 10, 10)
self.gridLayout_frame_Path.addWidget(self.RB_Path_01, 0, 1, 1, 1)
self.gridLayout_frame_Path.addWidget(self.RB_Path_02, 0, 2, 1, 1)
self.gridLayout_Path.addWidget(self.frame_Path, 0, 0, 1, 1)
##
self.gridLayout_frame_Position = QtWidgets.QGridLayout(self.frame_Position)
self.gridLayout_frame_Position.setContentsMargins(10, 10, 10, 10)
self.gridLayout_frame_Position.addWidget(self.RB_Position_01, 0, 0, 1, 1)
self.gridLayout_frame_Position.addWidget(self.RB_Position_02, 0, 1, 1, 1)
self.gridLayout_frame_Position.addWidget(self.RB_Position_03, 0, 2, 1, 1)
self.gridLayout_Path.addWidget(self.frame_Position, 1, 0, 1, 1)
self.tabWidget.addTab(self.TAB_Path, QtGui.QIcon(QtGui.QPixmap(setIconPath)), "")
####
# self.TAB_Stamp = QtWidgets.QWidget() # tab Stamp
# self.gridLayout_Stamp = QtWidgets.QGridLayout(self.TAB_Stamp)
# self.gridLayout_Stamp.setContentsMargins(10, 10, 10, 10)
#
# self.tabWidget.addTab(self.TAB_Stamp, QtGui.QIcon(QtGui.QPixmap(setIconStamp)), "")
####
###########################################################scrollArea
self.scrollArea.setWidget(self.scrollAreaWidgetContents_2)
###########################################################scrollArea
#### gridLayout end #######################
####
####
MainWindow.setCentralWidget(self.centralWidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
global originalFontPath
global originalFontName
global setPathLatestDirectoryManual
MainWindow.setWindowFlags(PySide2.QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenetre en avant
MainWindow.setWindowTitle(_fromUtf8(__Title__))
MainWindow.setWindowIcon(QtGui.QIcon(_fromUtf8(self.path + "FCCircularTextButtom.png"))) # change l'icone de la fenetre principale
self.groupBox_00.setTitle(_fromUtf8("Ver : " + __Version__ + " : " + __Date__) + " (rmu)")
self.groupBox_01.setTitle(_fromUtf8("Text to be displayed ( "+str(len(texte))+" characters )"))
self.textEdit.setHtml(_fromUtf8(texte))
self.textEdit.setToolTip(_fromUtf8("Your text to be displayed" + "\n"
"the last character superpose de first character ! " + "\n"
"you must adding one space after the last character" + "\n"
"you must adding space for adjust, the space is consirdered as character"))
self.PB_Reverse.setText(_fromUtf8("Reverse"))
self.PB_Reverse.setToolTip(_fromUtf8("Reverse the text edited"))
try:
self.lineEdit_NameFile.setText(_fromUtf8("(" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") " + self.tableau[self.index][1]))
except Exception:
None
self.lineEdit_NameFile.setToolTip(_fromUtf8("(Number index / Number Fonts) Complete path and name of Font file"))
self.lineEdit_NameFile_button.setText(_fromUtf8("Other"))
self.lineEdit_NameFile_button.setToolTip(_fromUtf8("Search other folder font" + "\n"
"Latest directory visited :" + "\n" +
setPathLatestDirectoryManual))
self.PB_systemPath.setText(_fromUtf8("Origine"))
self.PB_systemPath.setToolTip(_fromUtf8("Return origine" + "\n" +
"( " + originalFontPath + originalFontName + " )"))
self.PB_Help.setText(_fromUtf8("Help"))
self.CB_Word.setText(_fromUtf8("Word"))
self.CB_Word.setToolTip(_fromUtf8("If Word is checked, the text are clipped to each space" + "\n"
"one space egual one character." + "\n\n"
"If in mode Path you work with a circle," + "\n"
"the last character superpose de first character ! " + "\n"
"you must adding one space after the last character" + "\n"
"for spacing the last and the first character" + "\n\n"
"You must work with the space as the character"))
#### matplotlib debut 4/5 retranslateUi #################################################################
self.comboBoxPy.setToolTip("Choice your Font" + "\n" +
"\n" +
"You must modify the configuration of display" + "\n" +
"Menu Edit parameter: User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__ + ":" + "\n" +
"####" + "\n" +
"switchModeTextList= 1\t# 0 = mode text normal (the switchFontComBox is enabled)" + "\n"
"\t\t\t# 1 = switchFontComBox authorized (default)" + "\n"
"\t\t\t#####" + "\n"
"switchFontComBox = 1\t# 0 = mode text in color .. faster" + "\n"
"\t\t\t# 1 = fontFamily listed ComboBox slower but beautiful (default)" + "\n"
"\t\t\t#####" + "\n"
"setSystemFonts = 1\t# 0 = matplotlib.font_manager.findSystemFonts" + "\n"
"\t\t\t# all fonts in System font" + "\n"
"\t\t\t# 1 = fontman.findSystemFonts(self.pathFont) (default)" + "\n"
"\t\t\t# all fonts in all directory and sub directory" + "\n"
"\t\t\t#####" + "\n"
"seTtextAlignement = 0\t# 0 = AlignLeft (default)" + "\n"
"\t\t\t# 1 = AlignCenter" + "\n"
"\t\t\t# 2 = AlignRight" + "\n"
"\t\t\t#####" + "\n"
"setFontByDefault = ""ARIAL""\t # ARIAL" + "\n"
"\t\t\t#####" + "\n"
"switchResetFALSE = 0\t # 0 by default." + "\n"
"If you use this option [ switchResetFALSE = 1 ] some switch can be opened when it should not be" + "\n"
"then it is advisable to do a reset after a change one option" + "\n"
"####" + "\n"
"Actual configuration : " + str(switchModeTextList) + ", " + str(switchFontComBox) + ", " + str(setSystemFonts) + ", "
+ str(seTtextAlignement) + ", " + setFontByDefault + ", " + str(switchResetFALSE) + "\n"
"####" + "\n" +
"Read the info")
#### matplotlib fin 4/5 retranslateUi #################################################################
self.groupBox_02.setTitle(_fromUtf8("Configuration"))
self.DS_Radius_Circle.setToolTip(_fromUtf8("Give the radius of circle"))
self.DS_Radius_Circle.setSuffix(_fromUtf8(" mm"))
self.label_10.setText(_fromUtf8("Radius of circle"))
self.DS_Size_Character.setToolTip(_fromUtf8("Size of the font"))
self.DS_Size_Character.setSuffix(_fromUtf8(" mm"))
self.label_4.setText(_fromUtf8("Character size"))
self.S_Begin_Angle.setToolTip(_fromUtf8("Starting text of the circle "))
self.S_Begin_Angle.setSuffix(_fromUtf8(" deg"))
self.label_13.setText(_fromUtf8("Starting angle"))
self.S_End_Angle.setToolTip(_fromUtf8("End text of the circle "))
self.S_End_Angle.setSuffix(_fromUtf8(" deg"))
self.label_14.setText(_fromUtf8("Ending angle"))
self.DS_Correction_Angle.setToolTip(_fromUtf8("Correct angle for tangent the text of thr circle or give a tilt angle" + "\n"
"this option is adding to the original angle (Sp. inclination)"))
self.DS_Correction_Angle.setSuffix(_fromUtf8(" deg"))
self.label_7.setText(_fromUtf8("Correction Angle"))
self.DS_Correction_Radius.setToolTip(_fromUtf8("Correct of the radius (depend of correction angle)" + "\n"
"this option is adding to the original radius (Radius of circle)"))
self.DS_Correction_Radius.setSuffix(_fromUtf8(" mm"))
self.label_8.setText(_fromUtf8("Correction Radius"))
self.DS_Extrude.setSuffix(_fromUtf8(" mm"))
self.DS_Extrude.setToolTip(_fromUtf8("Thickness of the extrude of character. If thickness = 0 then not extrude"))
self.CH_Extrude.setText(_fromUtf8("Extrude Char."))
self.CH_Extrude.setToolTip(_fromUtf8("Choice extrude character or not"))
####
self.DS_PlacementX.setSuffix(_fromUtf8(" X mm"))
self.DS_PlacementX.setToolTip(_fromUtf8("Placement direction X" + "\n"
"Not used with the Clock option"))
self.DS_PlacementY.setSuffix(_fromUtf8(" Y mm"))
self.DS_PlacementY.setToolTip(_fromUtf8("Placement direction Y" + "\n"
"Not used with the Clock option"))
self.DS_PlacementZ.setSuffix(_fromUtf8(" Z mm"))
self.DS_PlacementZ.setToolTip(_fromUtf8("Placement direction Z"+ "\n"
"For Clock option only this Z axis is available"))
self.CH_Sp_Placement.setText(_fromUtf8("Placement"))
self.CH_Sp_Placement.setToolTip(_fromUtf8("Placement of character in the choice"))
#carDegrees = b' \xc2\xb0'.decode("utf-8") #thanks wmayer https://forum.freecadweb.org/viewtopic.php?f=13&t=36380&p=308476#p308357
self.DS_InclinaisonX.setSuffix(_fromUtf8(" deg (Yaw)"))
self.DS_InclinaisonX.setToolTip(_fromUtf8("Inclination character in axis Z"))
self.DS_InclinaisonY.setSuffix(_fromUtf8(" deg (Pitch)"))
self.DS_InclinaisonY.setToolTip(_fromUtf8("Inclination character axis Y"))
self.DS_InclinaisonZ.setSuffix(_fromUtf8(" deg (Roll)"))
self.DS_InclinaisonZ.setToolTip(_fromUtf8("Inclination character axis X"))
self.CH_Sp_Inclination.setText(_fromUtf8("Sp. inclination"))
self.CH_Sp_Inclination.setToolTip(_fromUtf8("Inclination of character in the choice or alls plane "))
####
self.groupBox_03.setTitle(_fromUtf8("Choice"))
self.RA_Choice_Outdoor.setText(_fromUtf8("Outdoor"))
self.RA_Choice_Outdoor.setToolTip(_fromUtf8("Create the text on the outer face of the cylinder"))
self.RA_Choice_Indoor.setText(_fromUtf8("Indoor"))
self.RA_Choice_Indoor.setToolTip(_fromUtf8("Create the text on the inside of the cylinder"))
self.RA_Choice_Helix.setText(_fromUtf8("Helix"))
self.RA_Choice_Helix.setToolTip(_fromUtf8("Create the text in a helix"))
self.RA_Choice_Clock.setText(_fromUtf8("Clock"))
self.RA_Choice_Clock.setToolTip(_fromUtf8("Create the text to form a clock"))
#self.RA_Choice_Stamp.setText(_fromUtf8("Stamp"))
#self.RA_Choice_Stamp.setToolTip(_fromUtf8("Create stamp text (text reversed)"))
self.PU_Flat.setText(_fromUtf8("Mode Stand"))
self.PU_Flat.setToolTip(_fromUtf8("Click for create the text Flat"))
####
self.tabWidget.setTabText(self.tabWidget.indexOf(self.TAB_Helix), _fromUtf8("Helix"))
self.tabWidget.setTabToolTip(1,_fromUtf8("Create one helix"))
self.DS_Step_Of_The_Helix.setSuffix(_fromUtf8(" mm"))
self.DS_Step_Of_The_Helix.setToolTip(_fromUtf8("Step of the text along the helix (min Size Caractere)"))
self.label_12.setText(_fromUtf8("Step of Helix"))
self.DS_Number_Char_Per_Turn.setToolTip(_fromUtf8("Number of characters for one turn of helix"))
self.label.setText(_fromUtf8("Char. per turn"))
self.DS_Base_Helix.setToolTip(_fromUtf8("Base (begin) of helix (to activate Step of Helix must be zero)"))
self.DS_Base_Helix.setSuffix(_fromUtf8(" mm"))
self.label_2.setText(_fromUtf8("Base Helix"))
self.DS_End_Helix.setToolTip(_fromUtf8("Final height of the helix (to activate Step of Helix must be zero)"))
self.DS_End_Helix.setSuffix(_fromUtf8(" mm"))
self.label_3.setText(_fromUtf8("End Helix"))
####
self.tabWidget.setTabText(self.tabWidget.indexOf(self.TAB_Clock), _fromUtf8("Clock"))
self.tabWidget.setTabToolTip(2,_fromUtf8("Create one clock with character mode Arabic or Roman"))
self.DS_Radius_Support.setSuffix(_fromUtf8(" mm"))
self.DS_Radius_Support.setToolTip(_fromUtf8("Radius of the support the clock (By defaut : Radius of circle)"))
self.label_11.setText(_fromUtf8("Radius of support"))
self.CB_RomanOrArabic.setText(_fromUtf8("Mode Arabic"))
self.CB_RomanOrArabic.setToolTip(_fromUtf8("The characters is in Roman or Arabic (default)"))
self.DS_Number_Faces_Support.setToolTip(_fromUtf8("Number of side of the support 0=none, 1=circle, 2=rectangle, 3=triangle, 4=square, 5=pentagon . . . . (Thickness egal extrude)"))
self.label_5.setText(_fromUtf8("Support number face"))
self.CB_RedressChiffres.setText(_fromUtf8("Axial"))
self.CB_RedressChiffres.setToolTip(_fromUtf8("Click for activate the mode Redress"))
self.DS_Extrude_Support.setToolTip(_fromUtf8("Thickness of the extrude the support." + "\n"
"If thickness = 0 then not extrude" + "\n"
"If thickness of support is bigger than character" + "\n"
"the SpinBox is colored in red" + "\n"
"if the CheckBox [Extrude Char.] is not checked" + "\n"
"the SpinBox is colored in orange for warn that the character is at the base of the support"))
self.DS_Extrude_Support.setSuffix(_fromUtf8(" mm"))
self.label_6.setText(_fromUtf8("Extrude support"))
####
self.tabWidget.setTabText(self.tabWidget.indexOf(self.TAB_Path), _fromUtf8("Path")) # tab Path
self.tabWidget.setTabEnabled(3, False)
self.tabWidget.setTabToolTip(3,_fromUtf8("The string follow the wire selected (Based on X, Y plane)" + "\n"
"The buttons Outdoor, Helix, Indoor, Clock and"
"the button Mode Stand / Flat are ignored" + "\n"
"The direction of the text depend of the direction Left/Right of the wire selected" + "\n"
"in this case use the Reverse Button"))
self.RB_Path_01.setText(_fromUtf8("Orthogonal"))
self.RB_Path_01.setToolTip(_fromUtf8("The character is orthogonal"))
self.RB_Path_02.setText(_fromUtf8("Tangent"))
self.RB_Path_02.setToolTip(_fromUtf8("The character is tangent on position wire selected"))
self.RB_Position_01.setText(_fromUtf8("BB Base"))
self.RB_Position_01.setToolTip(_fromUtf8("The BoundBox of the character is on Base"))
self.RB_Position_02.setText(_fromUtf8("BB Center"))
self.RB_Position_02.setToolTip(_fromUtf8("The BoundBox of the character is on BB Center"))
self.RB_Position_03.setText(_fromUtf8("BB Top"))
self.RB_Position_03.setToolTip(_fromUtf8("The BoundBox of the character is on BB Top"))
# later self.label_Path_01.setText(_fromUtf8("Rotation str"))
# later self.label_Path_02.setText(_fromUtf8("Rotation car"))
# later self.label_Path_03.setText(_fromUtf8("Translation"))
####
# self.tabWidget.setTabText(self.tabWidget.indexOf(self.TAB_Stamp), _fromUtf8("Stamp")) # tab Stamp
# self.tabWidget.setTabToolTip(4,_fromUtf8("Stamp"))
####
self.tabWidget.setTabText(self.tabWidget.indexOf(self.TAB_Command), _fromUtf8("Command"))
self.tabWidget.setTabToolTip(0,_fromUtf8("Command section"))
self.CB_01_Points.setText(_fromUtf8("Points"))
self.CB_01_Points.setToolTip(_fromUtf8("Create points repere"))
self.CB_02_Circle.setText(_fromUtf8("Circle"))
self.CB_02_Circle.setToolTip(_fromUtf8("Create Circle repere" + "\n"
"if helix is used one helix is created with the circle"))
self.CB_03_BBox.setText(_fromUtf8("BoundBox"))
self.CB_03_BBox.setToolTip(_fromUtf8("Create BoundBox on character"))
self.CB_04_Progression.setText(_fromUtf8("Progression"))
self.CB_04_Progression.setToolTip(_fromUtf8("Visualise the character in construction"))
self.CB_05_Reset.setText(_fromUtf8("Reset"))
self.CB_05_Reset.setToolTip(_fromUtf8("Reset checkBox False by default (reset on all push button execute)" + "\n"
"If you check this option No reset is performed" + "\n"
"and if the result is not good" + "\n"
"ex: the old internal coordinate hare conserved or other..." + "\n"
"push the Reset button or " + "\n"
"uncheck this checkBox and try or restart FCCircularText"))
self.CB_06_ModeFree.setText(_fromUtf8("Free"))
self.CB_06_ModeFree.setToolTip(_fromUtf8("Mode Free, all pre-settings are ignored" + "\n"
"Free as a cloud"))
self.PB_Delete_Last.setText(_fromUtf8("Del"))
self.PB_Delete_Last.setToolTip(_fromUtf8("Delete the last object created"))
self.PU_Exit.setText(_fromUtf8("Exit"))
self.PU_Exit.setToolTip(_fromUtf8("Exit FCCircularText"))
self.PU_Reset.setText(_fromUtf8("Reset"))
self.PU_Reset.setToolTip(_fromUtf8("Reset all parameters of the macro"))
self.PU_Execute.setText(_fromUtf8("Run"))
self.PU_Execute.setToolTip("Execute the process") # without Compount
self.PU_Benchmarks.setText(_fromUtf8("Run+Comp"))
self.PU_Benchmarks.setToolTip(_fromUtf8("Execute the process and one Compount of the characters is create"))
####
#### matplotlib debut 5/5 #################################################################
def on_fontComboBoxPython(self,indeX): # 0: for fontComboBoxPython
global PolicePath
global setFontByDefault
self.index = indeX
self.lineEdit_NameFile.setText("(" + str(self.index + 1) + "/" + str(len(self.tableau)) + ") " + self.tableau[self.index][1])
PolicePath = 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.fonteComp = self.tableau[self.index][1]
setFontByDefault = self.tableau[self.index][2]
# FreeCAD.Console.PrintMessage(str(self.index) + " , " + self.tableau[self.index][1] + " , " + self.tableau[self.index][2] + " , ' " + famille + "' , ' " + typeCar + " ' \n")
#### matplotlib fin 5/5 #################################################################
def on_lineEdit_NameFile(self, setFontByDefault):
self.pathFont = self.lineEdit_NameFile.text()
try:
self.pathFont = self.pathFont.split(")") [1]
except Exception:
self.pathFont = self.pathFont
ui.searchFont(self.pathFont, setFontByDefault)
QtCore.QObject.connect(self.comboBoxPy, QtCore.SIGNAL("currentIndexChanged(int)"), self.on_fontComboBoxPython)
def on_lineEdit_NameFile_button(self): # path manual
global setPathLatestDirectoryManual
global ui
OpenName = ""
#### mint
if platform.node() == "mint":
OpenName, Filter = PySide2.QtWidgets.QFileDialog.getOpenFileName(None, u"Read a font file", setPathLatestDirectoryManual, "(otf *.otf);;(ttf *.ttf);;(ttc *.ttc);;(*.*);;(*)")#PySide2 Mint
#### mint
else:
OpenName, Filter = PySide2.QtWidgets.QFileDialog.getOpenFileName(None, u"Read a font file", setPathLatestDirectoryManual, "*.otf *.ttf *.ttc ;;OpenType Font (*.otf);;TrueType Font (*.ttf);;TrueType Collection (*.ttc);;All (*.*);;All (*)")#PySide2
try:
if OpenName != "": # "C:/Temp/FontesTemp/arial.ttf"
####new2
pathFile = os.path.dirname(OpenName) + "/" #1# = C:/Provisoire400/
racineDrive = os.path.splitdrive(OpenName)[0] #2# = C:
formatFichier = os.path.splitext(OpenName)[1] #4# = .png
OpenName = os.path.splitext(OpenName)[0] #5# = /home/kubuntu/.FreeCAD/Macro/Texture_007_H #= C:/Provisoire400/image3D
nomFichier = os.path.basename(OpenName) #3# = image3D
SaveNameformatFichier = OpenName + formatFichier #6# = C:/Provisoire400/image3D.png
pathFileSaveNameformatFichier = pathFile + nomFichier + formatFichier #7# = C:/Provisoire400/image3D.png
####new2
setPathLatestDirectoryManual = pathFile
FreeCAD.ParamGet(u"User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetString(u"setPathLatestDirectoryManual", setPathLatestDirectoryManual) #*"C:\ ???"
ui.searchFont(pathFile, nomFichier)
except Exception:
None
def on_PB_systemPath(self): # return font origin system
global ui
global setSystemFonts
global originalFontPath
global originalFontName
global setLastFontPath
global searchFontName
setSystemFonts = 1
setLastFontPath = originalFontPath
ui.searchFont(originalFontPath, originalFontName)
def on_textEdit_Changed(self): #connection textEdit
global ui
ui.on_CB_Word()
def on_PB_Reverse(self): #connection Reverse
global texte
texte = self.textEdit.toPlainText()
texte = texte[::-1]
self.textEdit.setText(_fromUtf8(texte))
def on_CB_Word(self):
global texte
texte = ""
texte = self.textEdit.toPlainText()
try:
selectedEdge = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0]
except Exception:
selectedEdge = ""
if self.CB_Word.isChecked():
texte = texte.split(" ")
mot = "word"
else:
mot = "characters"
if (texte.count(" ") == 1) or (texte.count(" ") == 0):
espace = "space"
else:
espace = "spaces"
if str(selectedEdge) != "":
self.groupBox_01.setTitle("Text to be displayed ( "+str(len(texte))+ " " + mot + " ) ( " + str(texte.count(" ")) + " " + espace + " ) ( Lenght " + str(round(selectedEdge.Length,3)) + " mm )")
else:
self.groupBox_01.setTitle("Text to be displayed ( "+str(len(texte))+ " " + mot + " ) ( " + str(texte.count(" ")) + " " + espace + " )")
if self.RA_Choice_Outdoor.isChecked():
self.Image_RA_Choice_Outdoor()
if self.RA_Choice_Indoor.isChecked():
self.Image_RA_Choice_Indoor()
def on_PU_Reset_Placement(self): # Reset_Placement
global PlacementX
global PlacementY
global PlacementZ
global coor_X
global coor_Y
global coor_Z
coor_X = coor_Y = coor_Z = 0.0
PlacementX = PlacementY = PlacementZ = 0.0
self.CH_Sp_Placement.setChecked(False) ; self.CH_Sp_Placement.setStyleSheet("QCheckBox {" + setStyleBase + "}")
self.DS_PlacementX.setValue(PlacementX)
self.DS_PlacementX.setEnabled(False) ; self.DS_PlacementX.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.DS_PlacementY.setValue(PlacementY)
self.DS_PlacementY.setEnabled(False) ; self.DS_PlacementY.setStyleSheet("QDoubleSpinBox {" +setStyleBase + "}")
self.DS_PlacementZ.setValue(PlacementZ)
self.DS_PlacementZ.setEnabled(False) ; self.DS_PlacementZ.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
# App.Console.PrintMessage(str("on_PU_Reset_Placement ")+"\n")
def on_PU_Reset_Inclination(self): # Reset_Inclination
global inclinaisonX
global inclinaisonY
global inclinaisonZ
inclinaisonX = inclinaisonY = inclinaisonZ = 0.0
self.CH_Sp_Inclination.setChecked(False); self.CH_Sp_Inclination.setStyleSheet("QCheckBox {" + setStyleBase + "}")
self.DS_InclinaisonX.setValue(inclinaisonX)
self.DS_InclinaisonX.setEnabled(False) ; self.DS_InclinaisonX.setStyleSheet("QSpinBox {" + setStyleBase + "}")
self.DS_InclinaisonY.setValue(inclinaisonY)
self.DS_InclinaisonY.setEnabled(False) ; self.DS_InclinaisonY.setStyleSheet("QSpinBox {" + setStyleBase + "}")
self.DS_InclinaisonZ.setValue(inclinaisonZ)
self.DS_InclinaisonZ.setEnabled(False) ; self.DS_InclinaisonZ.setStyleSheet("QSpinBox {" + setStyleBase + "}")
# App.Console.PrintMessage(str("on_PU_Reset_Inclination ")+"\n")
def Image_RA_Choice_Outdoor(self): #
global debout
####
pic = QtGui.QPixmap()
if debout == 1:
if self.CB_Word.isChecked():
pic.loadFromData(base64.b64decode(outDoorWord_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(outDoor_Icon_b64)) # bmp converti
else:
if self.CB_Word.isChecked():
pic.loadFromData(base64.b64decode(FlatOutDoorWord_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(FlatOutDoor_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
####
def on_RA_Choice_Outdoor(self): #
global ui
global exterieur
global epaisseurExtrus
global switchResetFALSE
ui.Image_RA_Choice_Outdoor()
epaisseurExtrus = 0.0
self.tabWidget.setCurrentIndex(0)
self.DS_Extrude.setValue(epaisseurExtrus)
self.DS_Extrude.setEnabled(False)
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}") # origin system
self.CH_Extrude.setChecked(False)
exterieur = 1
self.S_Begin_Angle.setEnabled(True)
self.S_End_Angle.setEnabled(True)
self.DS_Correction_Radius.setEnabled(True)
self.DS_Correction_Angle.setEnabled(True)
self.PU_Flat.setEnabled(True)
if switchResetFALSE == 0: # zero (False) by default = reset
ui.on_PU_Reset_Placement()
ui.on_PU_Reset_Inclination()
def Image_RA_Choice_Indoor(self): #
global debout
####
pic = QtGui.QPixmap()
if debout == 1:
if self.CB_Word.isChecked():
pic.loadFromData(base64.b64decode(inDoorWord_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(inDoor_Icon_b64)) # bmp converti
else:
if self.CB_Word.isChecked():
pic.loadFromData(base64.b64decode(FlatInDoorWord_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(FlatInDoor_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
####
def on_RA_Choice_Indoor(self): #
global ui
global exterieur
global epaisseurExtrus
global switchResetFALSE
ui.Image_RA_Choice_Indoor()
epaisseurExtrus = 0.0
self.tabWidget.setCurrentIndex(0)
self.DS_Extrude.setValue(epaisseurExtrus)
self.DS_Extrude.setEnabled(False)
self.CH_Extrude.setChecked(False)
exterieur = 0
self.S_Begin_Angle.setEnabled(True)
self.S_End_Angle.setEnabled(True)
self.DS_Correction_Radius.setEnabled(True)
self.DS_Correction_Angle.setEnabled(True)
self.PU_Flat.setEnabled(True)
if switchResetFALSE == 0: # zero (False) by default = reset
ui.on_PU_Reset_Placement()
ui.on_PU_Reset_Inclination()
def Image_RA_Choice_Helix(self): #
####
pic = QtGui.QPixmap()
pic.loadFromData(base64.b64decode(helix_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
####
def on_RA_Choice_Helix(self): #
global ui
global exterieur
global cercleClock
global nombreFaces
global debout
global epaisseurExtrus
global switchResetFALSE
ui.Image_RA_Choice_Helix()
ui.tabWidget.setTabEnabled(1, True)
ui.tabWidget.setCurrentIndex(1)
epaisseurExtrus = 0.0
self.DS_Extrude.setValue(epaisseurExtrus)
self.DS_Extrude.setEnabled(False)
self.CH_Extrude.setChecked(False)
exterieur = 2
nombreFaces = 0
self.DS_Number_Faces_Support.setValue(nombreFaces)
cercleClock = 0
self.DS_Radius_Support.setValue(cercleClock)
self.DS_Radius_Support.setEnabled(False)
debout = 1
self.PU_Flat.setText(_fromUtf8("Mode Stand"))
self.S_Begin_Angle.setEnabled(True)
self.S_End_Angle.setEnabled(True)
self.DS_Correction_Radius.setEnabled(True)
self.DS_Correction_Angle.setEnabled(True)
self.PU_Flat.setEnabled(False)##
if switchResetFALSE == 0: # zero (False) by default = reset
ui.on_PU_Reset_Placement()
ui.on_PU_Reset_Inclination()
def Image_RA_Choice_Clock(self):
global redressement
####
pic = QtGui.QPixmap()
if self.CB_RomanOrArabic.isChecked():
if redressement == 1:
pic.loadFromData(base64.b64decode(ClockRomanRedress_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(ClockRomanAxis_Icon_b64)) # bmp converti
else:
if redressement == 1:
pic.loadFromData(base64.b64decode(ClockArabicRedress_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(ClockArabicAxis_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
####
def on_RA_Choice_Clock(self):
global ui
global exterieur
global debout
global correctionRayon
global correctionAngle
global epaisseurExtrus
global switchResetFALSE
global romain
ui.Image_RA_Choice_Clock()
ui.tabWidget.setTabEnabled(2, True)
ui.tabWidget.setCurrentIndex(2)
epaisseurExtrus = 0.0
self.DS_Extrude.setValue(epaisseurExtrus)
self.DS_Extrude.setEnabled(False)
self.CH_Extrude.setChecked(False)
exterieur = 3
debout = 0
self.PU_Flat.setEnabled(False)
self.S_Begin_Angle.setEnabled(False)
self.S_End_Angle.setEnabled(False)
# correctionRayon = 0
self.DS_Correction_Radius.setEnabled(False)
self.DS_Correction_Radius.setValue(0.0)
# correctionAngle = 10.0
self.DS_Correction_Angle.setEnabled(False)
self.DS_Correction_Angle.setValue(0.0)
if switchResetFALSE == 0: # zero (False) by default = reset
ui.on_PU_Reset_Placement()
ui.on_PU_Reset_Inclination()
def on_tabWidget(self, value): # Tab
global ui
global setStylePathG
global setStyleBase
if value == 0: # Command
self.tabWidget.setStyleSheet("QTabWidget {" + setStyleBase + "}")
None
elif value == 1: # Helix
self.RA_Choice_Helix.setChecked(True)
self.on_RA_Choice_Helix()
elif value == 2: # Clock
self.RA_Choice_Clock.setChecked(True)
self.on_RA_Choice_Clock()
elif value == 3: # Path
self.tabWidget.setStyleSheet("QTabWidget {" + setStylePathG + "}")
None
elif value == 4: # Stamp
#self.tabWidget.setStyleSheet("QTabWidget {" + setStyleBase + "}")
#self.RA_Choice_Stamp.setChecked(True)
#self.on_RA_Choice_Stamp()
#self.on_RA_Choice_Stamp()
None
def on_PU_Flat(self): # Flat or Stand
global debout
pic = QtGui.QPixmap()
if debout == 1:
debout = 0
self.PU_Flat.setText(_fromUtf8("Mode Flat"))
self.PU_Flat.setToolTip(_fromUtf8("Click for create the text Stand"))
self.PU_Flat.setIcon(QtGui.QIcon(QtGui.QPixmap(flatIcon))) # icone dans une variable
# self.RA_Choice_Outdoor.setText(_fromUtf8("Indoor"))
# self.RA_Choice_Indoor.setText(_fromUtf8("Outdoor"))
if self.RA_Choice_Outdoor.isChecked():
if self.CB_Word.isChecked():
pic.loadFromData(base64.b64decode(FlatOutDoorWord_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(FlatOutDoor_Icon_b64)) # bmp converti
elif self.RA_Choice_Indoor.isChecked():
if self.CB_Word.isChecked():
pic.loadFromData(base64.b64decode(FlatInDoorWord_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(FlatInDoor_Icon_b64)) # bmp converti
else:
debout = 1
self.PU_Flat.setText(_fromUtf8("Mode Stand"))
self.PU_Flat.setToolTip(_fromUtf8("Click for create the text Flat"))
self.PU_Flat.setIcon(QtGui.QIcon(QtGui.QPixmap(standIcon))) # icone dans une variable
# self.RA_Choice_Outdoor.setText(_fromUtf8("Outdoor"))
# self.RA_Choice_Indoor.setText(_fromUtf8("Indoor"))
if self.RA_Choice_Outdoor.isChecked():
pic.loadFromData(base64.b64decode(outDoor_Icon_b64)) # bmp converti
elif self.RA_Choice_Indoor.isChecked():
pic.loadFromData(base64.b64decode(inDoor_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
# App.Console.PrintMessage(str("on_PU_Flat ")+str(debout)+"\n")
# def on_RA_Choice_Stamp(self):
# global ui
#
# if self.RA_Choice_Helix.isChecked() or self.RA_Choice_Clock.isChecked():
# self.RA_Choice_Outdoor.setChecked(True)
# self.on_RA_Choice_Outdoor()
def on_DS_Radius_Circle(self,value):
global rayon
global cercleClock
rayon = value
cercleClock = rayon
self.DS_Radius_Support.setValue(cercleClock)
def on_DS_Size_Character(self,value):
global SizeCaractere
SizeCaractere = value
def on_S_Begin_Angle(self,value): #
global debut
debut = value
def on_S_End_Angle(self,value): #
global rotation
rotation = value
def on_DS_PlacementX(self,value): #
global PlacementX
PlacementX = value
def on_DS_PlacementY(self,value): #
global PlacementY
PlacementY = value
def on_DS_PlacementZ(self,value): #
global PlacementZ
PlacementZ = value
def on_CH_Sp_Placement(self): # Placement or not Placement
global ui
if self.CH_Sp_Placement.isChecked():
self.DS_PlacementX.setEnabled(True)
self.DS_PlacementY.setEnabled(True)
self.DS_PlacementZ.setEnabled(True)
self.DS_PlacementX.setStyleSheet(u"QDoubleSpinBox {border-width: 2px; border-style: solid; border-color: #FF0000}") # Red rgb(255,0,0)
self.DS_PlacementY.setStyleSheet(u"QDoubleSpinBox {border-width: 2px; border-style: solid; border-color: #008500}") # Green rgb(0, 133, 0)
self.DS_PlacementZ.setStyleSheet(u"QDoubleSpinBox {border-width: 2px; border-style: solid; border-color: #0000FF}") # Blue rgb(0,0,255)
else:
ui.on_PU_Reset_Placement()
if self.RA_Choice_Clock.isChecked():
self.DS_PlacementX.setEnabled(False)
self.DS_PlacementY.setEnabled(False)
def on_DS_Correction_Angle(self,value): #
global correctionAngle
correctionAngle = value
def on_DS_Correction_Radius(self,value): #
global correctionRayon
correctionRayon = value
def on_DS_Extrude(self,value): #
global epaisseurExtrus
global epaisSupportClock
global setStyleBase
global setStyleRed
global setStyleOrange
global setStyleBlueLight
epaisseurExtrus = value
if self.CB_06_ModeFree.isChecked():
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
else:
if self.RA_Choice_Clock.isChecked():
if epaisseurExtrus > epaisSupportClock:
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}") # origin system
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}") # origin system
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}") # origin system
else:
if epaisSupportClock >= epaisseurExtrus:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleRed + "}")
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleRed + "}")
else:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleOrange + "}")
if epaisseurExtrus == 0:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleOrange + "}")
def on_CH_Extrude(self): #
global epaisseurExtrus
global epaisSupportClock
global setStyleBase
global setStyleOrange
global setStyleBlueLight
if self.CH_Extrude.isChecked():
self.DS_Extrude.setEnabled(True)
epaisseurExtrus = 1.0
else:
self.DS_Extrude.setEnabled(False)
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}") # origin system
epaisseurExtrus = 0.0
if self.CB_06_ModeFree.isChecked():
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
else:
if (epaisSupportClock != 0) and (epaisSupportClock >= epaisseurExtrus):
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleOrange + "}")
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleOrange + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleOrange + "}")
else:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}") # origin system
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}") # origin system
self.DS_Extrude.setValue(epaisseurExtrus)
def on_DS_InclinaisonX(self,value): #
global inclinaisonX
inclinaisonX = value
def on_DS_InclinaisonY(self,value): #
global inclinaisonY
inclinaisonY = value
def on_DS_InclinaisonZ(self,value): #
global inclinaisonZ
inclinaisonZ = value
def on_CH_Sp_Inclination(self): #
global ui
if self.CH_Sp_Inclination.isChecked():
self.DS_InclinaisonX.setEnabled(True)
self.DS_InclinaisonY.setEnabled(True)
self.DS_InclinaisonZ.setEnabled(True)
else:
ui.on_PU_Reset_Inclination()
def on_DS_Step_Of_The_Helix(self,value): #
global pasHelix
global baseHelix
global endHelix
pasHelix = value
if pasHelix == 0:
baseHelix = endHelix = 0.0
self.DS_Base_Helix.setValue(baseHelix)
self.DS_Base_Helix.setEnabled(True)
self.DS_End_Helix.setValue(endHelix)
self.DS_End_Helix.setEnabled(True)
else:
baseHelix = endHelix = 0.0
self.DS_Base_Helix.setValue(baseHelix)
self.DS_Base_Helix.setEnabled(False)
self.DS_End_Helix.setValue(endHelix)
self.DS_End_Helix.setEnabled(False)
def on_DS_Number_Char_Per_Turn(self,value):#
global nombreCarParTour
nombreCarParTour = value
def on_DS_Base_Helix(self,value): #
global baseHelix
baseHelix = value
def on_DS_End_Helix(self,value): #
global endHelix
endHelix = value
def on_RB_Path_Image(self): # Path Images a Afficher
pic = QtGui.QPixmap()
if self.RB_Path_01.isChecked(): # Orthogonal
if self.RB_Position_01.isChecked(): # Path BB Base
pic.loadFromData(base64.b64decode(PathBaseOrthogonal_Icon_b64)) # bmp converti
elif self.RB_Position_02.isChecked(): # Path BB Center
pic.loadFromData(base64.b64decode(PathCenterOrthogonal_Icon_b64))# bmp converti
elif self.RB_Position_03.isChecked(): # Path BB Top
pic.loadFromData(base64.b64decode(PathTopOrthogonal_Icon_b64)) # bmp converti
elif self.RB_Path_02.isChecked(): # Follow on direction
if self.RB_Position_01.isChecked(): # Path BB Base
pic.loadFromData(base64.b64decode(PathBase_Icon_b64)) # bmp converti
elif self.RB_Position_02.isChecked(): # Path BB Center
pic.loadFromData(base64.b64decode(PathCenter_Icon_b64)) # bmp converti
elif self.RB_Position_03.isChecked(): # Path BB Top
pic.loadFromData(base64.b64decode(PathTop_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
def on_DS_Radius_Support(self,value): # Clock
global cercleClock
cercleClock = value
def on_DS_Number_Faces_Support(self,value): # number Faces of support 0=none 1=circle 2=rectangle 3=triangle 4,5 ... polygon
global nombreFaces # Clock
global epaisSupportClock
global cercleClock
nombreFaces = value
self.DS_Radius_Support.setEnabled(True)
self.DS_Extrude_Support.setEnabled(True)
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}") # origin system
if nombreFaces == 0:
self.label_5.setText(_fromUtf8("Support number face"))
epaisSupportClock = 0.0
self.DS_Radius_Support.setEnabled(False)
self.DS_Radius_Support.setValue(cercleClock)
self.DS_Extrude_Support.setEnabled(False)
self.DS_Extrude_Support.setValue(epaisSupportClock)
elif nombreFaces == 1:
self.label_5.setText(_fromUtf8("Support Circle"))
elif nombreFaces == 2:
self.label_5.setText(_fromUtf8("Support Rectangle"))
elif nombreFaces == 3:
self.label_5.setText(_fromUtf8("Support Triangle"))
elif nombreFaces == 4:
self.label_5.setText(_fromUtf8("Support Square"))
else :
self.label_5.setText(_fromUtf8("Support Polygone"))
def on_DS_Extrude_Support(self,value): # Clock
global epaisSupportClock
global epaisseurExtrus
global setStyleBase
global setStyleRed
global setStyleOrange
epaisSupportClock = value
if epaisSupportClock >= epaisseurExtrus:
if self.CH_Extrude.isChecked():
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleRed + "}")
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleRed + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}")
else:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleOrange + "}")
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleOrange + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleOrange + "}")
else:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}")
if epaisSupportClock == 0:
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}")
self.DS_PlacementZ.setEnabled(True)
def on_PU_Roman(self): # Roman or Arabic Clock
global redressement
global romain
pic = QtGui.QPixmap()
if self.CB_RomanOrArabic.isChecked():
####
if redressement == 1:
pic.loadFromData(base64.b64decode(ClockRomanRedress_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(ClockRomanAxis_Icon_b64)) # bmp converti
####
romain = 1
self.CB_RomanOrArabic.setText(_fromUtf8("Mode Roman"))
self.CB_RomanOrArabic.setToolTip(_fromUtf8("Check for activate the mode Arabic"))
self.CB_RomanOrArabic.setIcon(QtGui.QIcon(QtGui.QPixmap(romanIcon))) # icone dans une variable
else:
####
if redressement == 1:
pic.loadFromData(base64.b64decode(ClockArabicRedress_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(ClockArabicAxis_Icon_b64)) # bmp converti
####
romain = 0
self.CB_RomanOrArabic.setText(_fromUtf8("Mode Arabic"))
self.CB_RomanOrArabic.setToolTip(_fromUtf8("Check for activate the mode Roman"))
self.CB_RomanOrArabic.setIcon(QtGui.QIcon(QtGui.QPixmap(arabicIcon))) # icone dans une variable
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
def on_PU_Redress(self): # Redress or circumferencial Clock
global redressement
global romain
pic = QtGui.QPixmap()
# if redressement == 1:
if self.CB_RedressChiffres.isChecked():
####
if romain == 1:
pic.loadFromData(base64.b64decode(ClockRomanRedress_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(ClockArabicRedress_Icon_b64)) # bmp converti
####
redressement = 1
self.CB_RedressChiffres.setText(_fromUtf8("Redress"))
self.CB_RedressChiffres.setIcon(QtGui.QIcon(QtGui.QPixmap(redressIcon))) # icone dans une variable
self.CB_RedressChiffres.setToolTip(_fromUtf8("Click for activate the mode Axial"))
else:
####
if romain == 1:
pic.loadFromData(base64.b64decode(ClockRomanAxis_Icon_b64)) # bmp converti
else:
pic.loadFromData(base64.b64decode(ClockArabicAxis_Icon_b64)) # bmp converti
####
redressement = 0
self.CB_RedressChiffres.setText(_fromUtf8("Axial"))
self.CB_RedressChiffres.setIcon(QtGui.QIcon(QtGui.QPixmap(axialIcon))) # icone dans une variable
self.CB_RedressChiffres.setToolTip(_fromUtf8("Click for activate the mode Redress"))
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
def on_CB_05_Reset(self): #
global switchResetFALSE
if self.CB_05_Reset.isChecked():
switchResetFALSE = 1
self.CB_05_Reset.setText(_fromUtf8("Not Reset"))
self.CB_05_Reset.setIcon(QtGui.QIcon(QtGui.QPixmap(setIconNoReset))) # reset icone dans une variable
self.CB_05_Reset.setToolTip(_fromUtf8("Reset checkBox False by default (reset on all push button execute)" + "\n"
"If you check this option No reset is performed" + "\n"
"and if the result is not good" + "\n"
"ex: the old internal coordinate hare conserved or other..." + "\n"
"push the Reset button or " + "\n"
"uncheck this checkBox and try or restart FCCircularText" + "\n"
" ACTUAL TRUE NOT RESET"))
else:
switchResetFALSE = 0
self.CB_05_Reset.setText(_fromUtf8("Reset"))
self.CB_05_Reset.setIcon(QtGui.QIcon(QtGui.QPixmap(resetIcon))) # reset icone dans une variable
self.CB_05_Reset.setToolTip(_fromUtf8("Reset checkBox False by default (reset on all push button execute)" + "\n"
"If you check this option No reset is performed" + "\n"
"and if the result is not good" + "\n"
"ex: the old internal coordinate hare conserved or other..." + "\n"
"push the Reset button or " + "\n"
"uncheck this checkBox and try or restart FCCircularText" + "\n"
" ACTUAL FALSE RESET ALL PUSH EXECUTE BUTTON"))
def on_PB_Delete_Last(self): # delete the last object created
global FcString
global FcStringPoints
global circleGuide
global helixGuide
global suppExtrude
global createCompound
global selComplete
try:
App.ActiveDocument.getObject(FcStringPoints.Name).removeObjectsFromDocument()
App.ActiveDocument.removeObject(FcStringPoints.Name)
except Exception: None
try:
App.ActiveDocument.getObject(FcString.Name).removeObjectsFromDocument()
App.ActiveDocument.removeObject(FcString.Name)
except Exception: None
try:
App.ActiveDocument.removeObject(circleGuide.Name)
except Exception: None
try:
App.ActiveDocument.removeObject(helixGuide.Name)
except Exception: None
try:
App.ActiveDocument.removeObject(suppExtrude.Name)
except Exception: None
try:
App.ActiveDocument.removeObject(createCompound.Name)
except Exception: None
App.ActiveDocument.recompute()
try:
#restore previous selection
Gui.Selection.clearSelection()
for s in selComplete:
Gui.Selection.addSelection(s.Object,s.SubElementNames)
selComplete = ""
except Exception: None
def on_CB_06_ModeFree(self): #
global ui
global setStyleBlueLight
global setStyleBase
global debout
if self.CB_06_ModeFree.isChecked():
self.RA_Choice_Outdoor.setChecked(True)
self.on_RA_Choice_Outdoor()
debout = 0
self.on_PU_Flat()
self.PU_Flat.setEnabled(True)
self.groupBox_03.setEnabled(False)
self.tabWidget.setTabEnabled(1, False)
self.tabWidget.setTabEnabled(2, False)
self.tabWidget.setTabEnabled(4, False)
self.S_Begin_Angle.setEnabled(False)
self.S_End_Angle.setEnabled(False)
self.DS_Correction_Angle.setEnabled(False)
self.DS_Correction_Radius.setEnabled(False)
self.CB_06_ModeFree.setStyleSheet("QCheckBox {" + setStyleBlueLight + "}")
self.DS_Radius_Circle.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
self.label_10.setStyleSheet("QLabel {" + setStyleBlueLight + "}")
self.DS_Size_Character.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
self.label_4.setStyleSheet("QLabel {" + setStyleBlueLight + "}")
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBlueLight + "}")
self.CH_Sp_Placement.setChecked(True) ; self.CH_Sp_Placement.setStyleSheet("QCheckBox {" + setStyleBlueLight + "}")
self.DS_PlacementX.setEnabled(True) ; self.DS_PlacementX.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
self.DS_PlacementY.setEnabled(True) ; self.DS_PlacementY.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
self.DS_PlacementZ.setEnabled(True) ; self.DS_PlacementZ.setStyleSheet("QDoubleSpinBox {" + setStyleBlueLight + "}")
self.CH_Sp_Inclination.setChecked(True) ; self.CH_Sp_Inclination.setStyleSheet("QCheckBox {" + setStyleBlueLight + "}")
self.DS_InclinaisonX.setEnabled(True) ; self.DS_InclinaisonX.setStyleSheet("QSpinBox {" + setStyleBlueLight + "}")
self.DS_InclinaisonY.setEnabled(True) ; self.DS_InclinaisonY.setStyleSheet("QSpinBox {" + setStyleBlueLight + "}")
self.DS_InclinaisonZ.setEnabled(True) ; self.DS_InclinaisonZ.setStyleSheet("QSpinBox {" + setStyleBlueLight + "}")
else:
self.CB_06_ModeFree.setStyleSheet("QCheckBox {" + setStyleBase + "}")
self.groupBox_03.setEnabled(True)
self.tabWidget.setTabEnabled(1, True)
self.tabWidget.setTabEnabled(2, True)
self.tabWidget.setTabEnabled(4, True)
self.S_Begin_Angle.setEnabled(True)
self.S_End_Angle.setEnabled(True)
self.DS_Correction_Angle.setEnabled(True)
self.DS_Correction_Radius.setEnabled(True)
self.DS_Radius_Circle.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.label_10.setStyleSheet("QLabel {" + setStyleBase + "}")
self.DS_Size_Character.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.label_4.setStyleSheet("QLabel {" + setStyleBase + "}")
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}")
self.on_PU_Reset()
def on_PU_Reset(self): #
global ui
global points
global coor_X
global coor_Y
global coor_Z
global vec
global PolicePath
global rayon
global texte
global debut
global rotation
global SizeCaractere
global precision
global correctionAngle
global correctionRayon
global debout
global exterieur
global baseHelix
global endHelix
global pasHelix
global nombreCarParTour
global PlacementX
global PlacementY
global PlacementZ
global inclinaisonX
global inclinaisonY
global inclinaisonZ
global cercleClock
global nombreFaces
global romain
global redressement
global comP
global nameL
global epaisseurExtrus
global epaisSupportClock
global compount1
global setStyleBase
texte = ""
self.CB_Word.setChecked(False)
exterieur = 1
self.RA_Choice_Outdoor.setText(_fromUtf8("Outdoor"))
self.RA_Choice_Indoor.setText(_fromUtf8("Indoor"))
self.RA_Choice_Outdoor.setChecked(True)
pic = QtGui.QPixmap()
pic.loadFromData(base64.b64decode(outDoor_Icon_b64)) # bmp converti
self.scene = QtWidgets.QGraphicsScene()
self.scene.addPixmap(QtGui.QPixmap(pic))
self.graphicsView.setScene(self.scene)
self.tabWidget.setCurrentIndex(0)
debout = 1
self.PU_Flat.setText(_fromUtf8("Mode Stand"))
self.PU_Flat.setToolTip(_fromUtf8("Click for create the text Flat"))
self.PU_Flat.setEnabled(True)
self.PU_Flat.setIcon(QtGui.QIcon(QtGui.QPixmap(standIcon))) # icone dans une variable
SizeCaractere = 2.0
self.DS_Size_Character.setValue(SizeCaractere)
self.DS_Size_Character.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
rayon = 10.0
self.DS_Radius_Circle.setValue(rayon)
self.DS_Radius_Circle.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.label_10.setStyleSheet("QLabel {" + setStyleBase + "}")
debut = 0
self.S_Begin_Angle.setValue(debut)
self.S_Begin_Angle.setEnabled(True)
rotation = 360
self.S_End_Angle.setValue(rotation)
self.S_End_Angle.setEnabled(True)
correctionAngle = 0.0
self.DS_Correction_Angle.setValue(correctionAngle)
self.DS_Correction_Radius.setEnabled(True)
correctionRayon = 0.0 #0.15
self.DS_Correction_Radius.setValue(correctionRayon)
self.DS_Correction_Angle.setEnabled(True)
epaisseurExtrus = 0.0
self.DS_Extrude.setValue(epaisseurExtrus)
self.DS_Extrude.setEnabled(False)
self.DS_Extrude.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
self.CH_Extrude.setChecked(False)
self.CH_Extrude.setStyleSheet("QCheckBox {" + setStyleBase + "}")
self.label_4.setStyleSheet("QLabel {" + setStyleBase + "}")
ui.on_PU_Reset_Placement()
ui.on_PU_Reset_Inclination()
self.CB_06_ModeFree.setChecked(False)
baseHelix = 0.0
self.DS_Base_Helix.setValue(baseHelix)
self.DS_Base_Helix.setEnabled(False)
endHelix = 0.0
self.DS_End_Helix.setValue(endHelix)
self.DS_Base_Helix.setEnabled(False)
pasHelix = 2.0
self.DS_Step_Of_The_Helix.setValue(pasHelix)
nombreCarParTour = 10
self.DS_Number_Char_Per_Turn.setValue(nombreCarParTour)
nombreFaces = 0
self.DS_Number_Faces_Support.setValue(nombreFaces)
self.label_5.setText(_fromUtf8("Support number face"))
cercleClock = rayon
self.DS_Radius_Support.setValue(cercleClock)
self.DS_Radius_Support.setEnabled(False)
epaisSupportClock = 0.0
self.DS_Extrude_Support.setEnabled(False)
self.DS_Extrude_Support.setValue(epaisSupportClock)
self.DS_Extrude_Support.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
romain = 0
self.CB_RomanOrArabic.setIcon(QtGui.QIcon(QtGui.QPixmap(arabicIcon))) # icone dans une variable
self.CB_RomanOrArabic.setText(_fromUtf8("Mode Arabic"))
self.CB_RomanOrArabic.setChecked(False)
redressement = 0
self.CB_RedressChiffres.setText(_fromUtf8("Axial"))
self.CB_RedressChiffres.setIcon(QtGui.QIcon(QtGui.QPixmap(axialIcon))) # icone dans une variable
self.CB_RedressChiffres.setToolTip(_fromUtf8("Check for activate the mode Redress"))
self.CB_RedressChiffres.setChecked(False)
compount1 = 0
ui.on_CB_Word() # texte = self.textEdit.toPlainText()
def on_PU_Benchmarks(self): # Benchmarks
try:
global compount1
global ui
compount1 = 1
ui.on_PU_Execute()
except:
sayexc("Error")
def on_PU_Execute(self): # Execute
global ui
global PolicePath
global switchResetFALSE
global points
global coor_X
global coor_Y
global coor_Z
global PlacementX
global PlacementY
global PlacementZ
global inclinaisonX
global inclinaisonY
global inclinaisonZ
global vec
global rayon
global texte
global debut
global rotation
global SizeCaractere
global ii
global precision
global correctionAngle
global correctionRayon
global debout
global exterieur
global baseHelix
global endHelix
global pasHelix
global nombreCarParTour
global cercleClock
global nombreFaces
global romain
global redressement
global comP
global nameL
global epaisseurExtrus
global epaisSupportClock
global compount1
#### for delete
global FcString
global FcStringPoints
global circleGuide
global helixGuide
global suppExtrude
global createCompound
global selComplete
#### for delete
points = []
comP = []
nameL = []
del points[:]
del comP[:]
del nameL[:]
doc = FreeCAD.ActiveDocument
if doc == None:
doc = FreeCAD.newDocument("FCCircularText")
#### Path
# create text on wire, arc, circle edge...
#
try:
ssel = FreeCADGui.Selection.getSelectionEx()
selectedEdge = lineSelected = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] # select one element
selComplete = Gui.Selection.getCompleteSelection()
except Exception:
selectedEdge = None
ssel = ""
Gui.Selection.clearSelection()
None
passNoOk = 0
if (hasattr(selectedEdge,'Surface')) or (hasattr(selectedEdge,'Point')):
passNoOk = 1
if (len(ssel) != 0) and (passNoOk == 0): # Path
textLabel = texte[0:10]
if self.CB_Word.isChecked():
textLabel = textLabel[0]
else:
textLabel = textLabel[0:10]
FreeCAD.ActiveDocument.openTransaction("FCCTp")
FcString = doc.addObject("App::DocumentObjectGroup","FcStringP_" + textLabel)
if self.CB_01_Points.isChecked():
FcStringPoints = doc.addObject("App::DocumentObjectGroup","FcStringPoints_" + textLabel)
try:
numberOfPoints = len(texte) # Decomposition number (or precision you can change)
points = selectedEdge.discretize(numberOfPoints) # discretize the element
pasTab = 0
for position in range(len(texte)): # list and display the coordinates
if texte[position] != " ":
ss=Draft.makeShapeString(String=texte[position],FontFile=PolicePath,Size=SizeCaractere,Tracking=0)
XLongueur = ss.Shape.BoundBox.XLength # Length x boundBox rectangle
YLongueur = ss.Shape.BoundBox.YLength # Length y boundBox rectangle
ZLongueur = ss.Shape.BoundBox.ZLength # Length z boundBox rectangle
XXLongueur = 0.0
YYLongueur = 0.0
ZZLongueur = 0.0
if self.RB_Position_01.isChecked():
None
elif self.RB_Position_02.isChecked():
XXLongueur = -XLongueur/2.0; YYLongueur = -YLongueur/2.0; #ZZLongueur = -ZLongueur/2.0
elif self.RB_Position_03.isChecked():
XXLongueur = 0; YYLongueur = -YLongueur; #ZZLongueur = -ZLongueur
pl = FreeCAD.Placement() # placement object
if self.RB_Path_01.isChecked():
# pl.Base=FreeCAD.Vector(points[position][0] - (XXLongueur), points[position][1] - (YYLongueur), points[position][2])
pl.Base=FreeCAD.Vector(points[position][0] + (XXLongueur), points[position][1] + (YYLongueur), points[position][2])
pl.Rotation = App.Rotation(inclinaisonX, inclinaisonY, inclinaisonZ)
pl = pl.multiply(App.Placement(App.Vector(PlacementX, PlacementY, PlacementZ), App.Rotation(0.0,0.0,0.0), App.Vector(0.0,0.0,0.0)))
else:
##Extract macro_Perpendicular_To_Wire
if pasTab == 0:
pointsDirection = []
pointsDirection = lineSelected.discretize(Number = ((len(texte)-1) * 10)) # discretize the path line first selection
pasTab = 1
try:
v=pointsDirection[position*10].sub(pointsDirection[(position*10) + 1]) # avec vecteurs 1 et 2 (direction debut ligne)
except Exception:
v=pointsDirection[-2].sub(pointsDirection[-1]) # avec vecteurs 1 et 2 (direction debut ligne)
r=App.Rotation(App.Vector(-1,0,0),v)
pl.Rotation.Q = r.Q
pl = pl.multiply(App.Placement(App.Vector(0.0,0.0,0.0), App.Rotation(inclinaisonX, inclinaisonY, inclinaisonZ), App.Vector(0.0,0.0,0.0)))
try:
pl.Base = pointsDirection[position*10]
except Exception:
pl.Base = pointsDirection[-1]
pl = pl.multiply(App.Placement(App.Vector(XXLongueur + PlacementX, YYLongueur + PlacementY, ZZLongueur + PlacementZ), App.Rotation(correctionAngle, 0.0,0.0), App.Vector(0.0,0.0,0.0)))
####
if self.CB_03_BBox.isChecked():
ss.ViewObject.BoundingBox = True
####
ssLabel = texte[position]
ss.Label = ssLabel
try:
if texte[position + 1] == " ":
ss.Label = ssLabel + "+[space]"
except Exception:
None
FcString.addObject(ss) # contener character
# FcString = doc.addObject("App::DocumentObjectGroup","FcString")
####
if epaisseurExtrus != 0: # extrusion characrters
CharExtrude = Draft.extrude(ss,Base.Vector(0.0,0.0,epaisseurExtrus))
CharExtrude.Placement=pl
CharExtrude.Label = ssLabel #texte[position]
App.ActiveDocument.getObject(CharExtrude.Name).recompute()
try:
CharExtrude.ViewObject.DisplayMode = u"Flat Lines"
except Exception:
None
####
if self.CB_03_BBox.isChecked():
CharExtrude.ViewObject.BoundingBox = True
####
comP.append(CharExtrude.Shape)
# nameL.append(CharExtrude.Name)
FcString.addObject(CharExtrude) # contener extrude
else:
ss.Placement = pl
ss.Support=None
try:
ss.ViewObject.DisplayMode = u"Flat Lines"
except Exception:
None
comP.append(ss.Shape)
# nameL.append(ss.Name)
####
if self.CB_01_Points.isChecked():
pointRepere = Draft.makePoint(pl.Base)
pointRepere.ViewObject.PointColor = (1.0,0.0,0.0)
pointRepere.Label = ssLabel #texte[position]
App.ActiveDocument.getObject(pointRepere.Name).recompute()
FcStringPoints.addObject(pointRepere)
####
if self.CB_04_Progression.isChecked():
FreeCADGui.updateGui() # rafraichi l'ecran
####
except Exception:
App.Console.PrintError(str("Discretize Error or selection error")+"\n")
FreeCAD.ActiveDocument.commitTransaction()
#### Path fin
#
#### Circular begin
else:
FreeCAD.ActiveDocument.openTransaction("FCCTc")
if ((exterieur == 0) and (debout == 0)): # normal circular
vecligne=[FreeCAD.Vector(PlacementX,PlacementY,PlacementZ),FreeCAD.Vector(rayon + correctionRayon,0.0,0.0)] #
else:
if exterieur == 3:
vecligne=[FreeCAD.Vector(PlacementX,PlacementY,PlacementZ),FreeCAD.Vector(rayon - (SizeCaractere/2),0.0,0.0)] #
elif debout == 0:
vecligne=[FreeCAD.Vector(PlacementX,PlacementY,PlacementZ),FreeCAD.Vector(rayon + correctionRayon - SizeCaractere,0.0,0.0)] #
else:
vecligne=[FreeCAD.Vector(PlacementX,PlacementY,PlacementZ),FreeCAD.Vector(rayon + correctionRayon,0.0,0.0)] #
ligne = Draft.makeWire(vecligne,closed=False,face=False,support=None) # creation de la ligne de base
lineName = ligne.Name
FreeCAD.activeDocument().recompute(None,True,True)
ii = -1
ii2 = -1
#nombre = len(texte) - 1 # moins - 1 pour aller de 0 degres a 0 degres dans la boucle pour compatible avec Path
nombre = len(texte) # si pas - 1 ex: pour 36 lettres va de 0 degres a 350 degres
coor_Z = PlacementZ
boucler = 1
helixSpline = []
texteLabel = texte[0:10]
if (exterieur == 0) or (debout == 0):
texte = texte[::-1]
if (exterieur == 0) and (debout == 0):
texte = texte[::-1]
if exterieur == 2: # helix
if nombreCarParTour == 0:
nombreCarParTour = 1
App.Console.PrintError("Insufficient number"+"\n")
pas = 0.0
nombre = nombreCarParTour
if pasHelix != 0:
pas = pasHelix / (nombreCarParTour)
else:
pas = ((((endHelix - SizeCaractere)-baseHelix)/(len(texte) / nombreCarParTour))/(nombreCarParTour)) # pas of helix
coor_Z += baseHelix
boucler = int(len(texte) / nombreCarParTour)
if (len(texte) % nombreCarParTour) != 0: # calcul number spires Helix
boucler += 1
else:
nombreCarParTour = 1
if exterieur == 3: # Clock
FcString = doc.addObject("App::DocumentObjectGroup","FcClock")
if self.CB_01_Points.isChecked():
FcStringPoints = doc.addObject("App::DocumentObjectGroup","FcStringPoints_Clock")
nombre = 12
if romain == 0:
texte = ["1","2","3","4","5","6","7","8","9","10","11","12"]
textLabel = "Arabic"
else:
texte = ["I","II","III","IIII","V","VI","VII","VIII","IX","X","XI","XII"]
textLabel = "Roman"
texte = texte[::-1]
else:
textLabel = texte[0:10]
#print(textLabel)
if self.CB_Word.isChecked():
textLabel = texteLabel[0]
else:
textLabel = texteLabel[0:10]
FcString = doc.addObject("App::DocumentObjectGroup","FcString_" + textLabel)
if self.CB_01_Points.isChecked():
FcStringPoints = doc.addObject("App::DocumentObjectGroup","FcStringPoints_" + textLabel)
# if exterieur == 2: # helix
# boucler = int(len(texte) / nombreCarParTour)
# if (len(texte) % nombreCarParTour) != 0: # calcul number spires Helix
# boucler += 1
####Boucle principale############################################################################
for hel in range(boucler):
ii = -1
####Boucle de travail#################################################
#for angleTr in range(debut,rotation,((rotation-debut)/nombre)): # old
for angleTrFloat in range((debut*10000),(rotation*10000),int((round(((float(rotation)-float(debut))/float(nombre)),4)*10000)) ): # 10000 pour 4 decimales
angleTr = (float(angleTrFloat)/10000.0)
ii += 1
ii2 += 1
ligne.Placement = App.Placement(App.Vector(PlacementX,PlacementY,PlacementZ), App.Rotation(App.Vector(0.0,0.0,1.0),angleTr), App.Vector(0.0,0.0,0.0))
ligne.ViewObject.LineColor = (1.0,0.,0.0)
lineName = ligne.Name
FreeCAD.activeDocument().recompute(None,True,True)
#print(ii+1," ",angleTr)
a = ligne.End # fin de ligne
coor_X = (a[0])
coor_Y = (a[1])
if (ii < nombre) and (ii2 < len(texte)):
if exterieur == 3: # clock
ligne.Placement = App.Placement(App.Vector(PlacementX,PlacementY,PlacementZ), App.Rotation(App.Vector(0.0,0.0,1.0),angleTr+90), App.Vector(0.0,0.0,0.0))
FreeCAD.activeDocument().recompute(None,True,True)
try:
a = ligne.Shape.Edges[0].Vertexes[1] # fin de ligne
except Exception:
a = ligne.End # 0.19 fin de ligne
try:
coor_X = (a.Point.x)
coor_Y = (a.Point.y)
except Exception:
coor_X = (a.x) # 0.19 fin de ligne
coor_Y = (a.y)
if texte[ii2] != " ":
ss = Draft.makeShapeString(String=texte[ii2],FontFile=PolicePath,Size=SizeCaractere,Tracking=0)
ssLabel = texte[ii2]
ss.Label = ssLabel
FcString.addObject(ss) # contener character
try:
if texte[ii2 + 1] == " ":
ss.Label = ssLabel = ss.Label + "+[space]"
except Exception:
None
centreX = (ss.Shape.BoundBox.Center[0])
centreY = (ss.Shape.BoundBox.Center[1])
centreZ = (ss.Shape.BoundBox.Center[2])
lengthX = (ss.Shape.BoundBox.XLength)
lengthY = (ss.Shape.BoundBox.YLength)
lengthZ = (ss.Shape.BoundBox.ZLength)
plm=""
plm=FreeCAD.Placement()
plm.Base=FreeCAD.Vector(coor_X, coor_Y, coor_Z)
FreeCAD.activeDocument().recompute(None,True,True)
if self.CB_06_ModeFree.isChecked():
plm = App.Placement(App.Vector(coor_X, coor_Y, coor_Z), App.Rotation(angleTr+inclinaisonX+correctionAngle, inclinaisonY, inclinaisonZ), App.Vector(0.0, 0.0, 0.0)) # pitch,roll...1
FreeCAD.activeDocument().recompute(None,True,True)
else:
if debout == 1: # debout
if exterieur == 0: # circumferential internal
plm = App.Placement(App.Vector(coor_X,coor_Y,coor_Z), App.Rotation(angleTr-90-correctionAngle+inclinaisonX,inclinaisonY,90+inclinaisonZ), App.Vector(0.0,0.0,0.0)) # pitch,roll...1
elif exterieur == 1: # circumferential external
plm = App.Placement(App.Vector(coor_X,coor_Y,coor_Z), App.Rotation(angleTr+90+correctionAngle+inclinaisonX,inclinaisonY,90+inclinaisonZ), App.Vector(0.0,0.0,0.0)) # pitch,roll...1
elif exterieur == 2: # circumferential helix
plm = App.Placement(App.Vector(coor_X,coor_Y,coor_Z), App.Rotation(angleTr+90+correctionAngle+inclinaisonX,inclinaisonY,90+inclinaisonZ), App.Vector(0.0,0.0,0.0)) # pitch,roll...1
coor_Z = coor_Z + pas
else: # a plat
if exterieur == 1: # exterieur (superieur)
plm = App.Placement(App.Vector(coor_X,coor_Y,coor_Z), App.Rotation(angleTr-90-correctionAngle+inclinaisonX,inclinaisonY,inclinaisonZ), App.Vector(0.0,0.0,0.0)) # pitch,roll...1
elif exterieur == 3: # circumferential plat (clock)
if redressement == 1:
plm = App.Placement(App.Vector(coor_X-centreX,coor_Y-centreY,coor_Z), App.Rotation(inclinaisonX,inclinaisonY,inclinaisonZ), App.Vector(0.0,0.0,0.0)) # pitch,roll...1
else:
plm = App.Placement(App.Vector(coor_X-centreX,coor_Y-centreY,coor_Z), App.Rotation(angleTr+inclinaisonX,inclinaisonY,inclinaisonZ), App.Vector(centreX,centreY,centreZ)) # pitch,roll...1
else: # interieur (inferieur)
plm = App.Placement(App.Vector(-coor_X,-coor_Y,-coor_Z), App.Rotation(angleTr+90+correctionAngle+inclinaisonX,180+inclinaisonY,180+inclinaisonZ), App.Vector(0.0,0.0,0.0)) # pitch,roll...1
FreeCAD.activeDocument().recompute(None,True,True)
#######################################################
#### plm = plm.multiply(App.Placement(App.Vector(0.0, 0.0, 0.0), App.Rotation(App.Vector(0.0, 0.0, 1.0), 0.0), App.Vector(0.0, 0.0, 0.0)))
#######################################################
#### ___________________Test_Memo
#### normal outdoor stand
#### Placement [Pos=(10,0,0), Yaw-Pitch-Roll=(90,0,90)]
#### _____
#### plus 90 degres "X" Yaw (macro) *Psi*
#### Placement [Pos=(10,0,0), Yaw-Pitch-Roll=(180,0,90)]
#### plus 90 Z (FC)
#### App.getDocument("FCCircularText").ShapeString.Placement=App.Placement(App.Vector(10,0,0), App.Rotation(180,0,90), App.Vector(0,0,0))
#### _____
#### plus 90 degres "Y" Pitch (macro) *Phi*
#### Placement [Pos=(10,0,0), Yaw-Pitch-Roll=(0,90,0)]
#### plus 90 Y (FC)
#### App.getDocument("FCCircularText").ShapeString.Placement=App.Placement(App.Vector(10,0,0), App.Rotation(90,90,90), App.Vector(0,0,0))
#### _____
#### plus 90 degres "Z" Roll (macro) *Theta*
#### Placement [Pos=(10,0,0), Yaw-Pitch-Roll=(90,0,180)]
#### plus 90 X (FC)
#### App.getDocument("FCCircularText").ShapeString.Placement=App.Placement(App.Vector(10,0,0), App.Rotation(90,0,180), App.Vector(0,0,0))
#### ____________________Test_Memo
######################################################
if self.RA_Choice_Helix.isChecked():
helixSpline.append(plm.Base) # helix
if epaisseurExtrus != 0: # extrusion characrters
CharExtrude = Draft.extrude(ss,Base.Vector(0,0,epaisseurExtrus))
CharExtrude.Label = ssLabel # texte[ii2]
CharExtrude.Placement=plm
try:
CharExtrude.ViewObject.DisplayMode = u"Flat Lines"
except Exception:
None
if self.CB_03_BBox.isChecked():
CharExtrude.ViewObject.BoundingBox = True
App.ActiveDocument.getObject(CharExtrude.Name).recompute()
comP.append(CharExtrude.Shape)
# nameL.append(CharExtrude.Name)
FcString.addObject(CharExtrude) # contener extrude
else: #
ss.Placement=plm
ss.Support=None
try:
ss.ViewObject.DisplayMode = u"Flat Lines"
except Exception:
None
if self.CB_03_BBox.isChecked():
ss.ViewObject.BoundingBox = True
comP.append(ss.Shape)
# nameL.append(ss.Name)
# points += [FreeCAD.Vector(coor_X,coor_Y,coor_Z)] # coordinates makeBSpline
####
if self.CB_01_Points.isChecked():
pointRepere = Draft.makePoint(plm.Base)
pointRepere.ViewObject.PointColor = (1.0,0.,0.0)
pointRepere.Label = ssLabel #texte[ii2]
App.ActiveDocument.getObject(pointRepere.Name).recompute()
FcStringPoints.addObject(pointRepere)
####
if self.CB_04_Progression.isChecked():
FreeCADGui.updateGui() # rafraichi l'ecran
####
FreeCAD.ActiveDocument.commitTransaction()
#BSpline = Draft.makeBSpline(points,closed=False) # makeBSpline repere
App.ActiveDocument.removeObject(lineName) # remove ligne de base directrice
FreeCAD.ActiveDocument.openTransaction("FCCTc")
if (self.CB_02_Circle.isChecked()) and (passNoOk == 0): # create Circle
pll = FreeCAD.Placement()
pll = App.Placement(App.Vector(PlacementX,PlacementY,PlacementZ), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
circleGuide = Draft.makeCircle(radius=rayon, placement=pll, face=False, support=None)
FreeCAD.activeDocument().recompute(None,True,True)
circleGuide.Label = "circleRepere_" + textLabel
circleGuide.ViewObject.LineColor = (1.0,0.0,0.0)
Draft.autogroup(circleGuide)
if self.RA_Choice_Helix.isChecked(): # helix
helixGuide = Draft.makeBSpline(helixSpline, closed=False, face=False, support=None)
FreeCAD.activeDocument().recompute(None,True,True)
helixGuide.Label = "helixRepere_" + textLabel
helixGuide.ViewObject.LineColor = (1.0,0.0,0.0)
Draft.autogroup(helixGuide)
if compount1 == 1: # create compount
comp = Part.makeCompound(comP)
Part.show(comp)
createCompound = App.ActiveDocument.ActiveObject
createCompound.Label = "Comp_" + textLabel
####Boucle de travail fin########################################################################
####Extrude support clock#############################################
if nombreFaces > 0: # support clock
pl = FreeCAD.Placement()
if nombreFaces == 1: # circle
pl.Base = FreeCAD.Vector(0.0,0.0,0.0)
supp = Draft.makeCircle(cercleClock,placement=pl,face=True,support=None)
if nombreFaces == 2: # rectangle
cercleClock = cercleClock * 2
pl.Base = FreeCAD.Vector(-cercleClock, (-cercleClock / 2.0), 0.0)
supp = Draft.makeRectangle((cercleClock * 2.0), cercleClock, placement=pl, face = True)
if nombreFaces > 2: # polygone with number faces
if nombreFaces == 4:
rotateSupport = 45
else:
rotateSupport = 90
pl = App.Placement(App.Vector(0.0,0.0,0.0), App.Rotation(rotateSupport,0,0), App.Vector(0,0,0))
supp = Draft.makePolygon(nombreFaces,cercleClock,inscribed = False,placement = pl,face = True,support=None)
supp.MakeFace = True
FreeCAD.activeDocument().recompute(None,True,True)
FcString.addObject(supp) # contener support
if epaisSupportClock != 0: # extrude support clock
suppExtrude = Draft.extrude(supp,Base.Vector(0,0,epaisSupportClock))
App.ActiveDocument.getObject(suppExtrude.Name).recompute()
# try:
suppExtrude.ViewObject.DisplayMode = u"Flat Lines"
if self.CB_03_BBox.isChecked():
suppExtrude.ViewObject.BoundingBox = True
# except Exception:
# None
FcString.addObject(suppExtrude) # contener support extrude
if ui.RA_Choice_Helix.isChecked():
ui.tabWidget.setCurrentIndex(1)
ui.Image_RA_Choice_Helix()
elif ui.RA_Choice_Clock.isChecked():
ui.tabWidget.setCurrentIndex(2)
ui.Image_RA_Choice_Clock()
# deselectionner tous les objets
try:
for obj in FreeCAD.ActiveDocument.Objects:# deselectionne tout
FreeCADGui.Selection.removeSelection(obj)
except Exception:
None
App.activeDocument().recompute()
FreeCAD.ActiveDocument.commitTransaction()
#### Circular end
####Info################################################
App.Console.PrintMessage("______________" +"\n")
App.Console.PrintMessage( PolicePath + "\n")
App.Console.PrintMessage("Texte : " + str(texte) + "\n")
App.Console.PrintMessage("Rayon : " + str(rayon) + "\n")
App.Console.PrintMessage("SizeCaractere : " + str(SizeCaractere) + "\n")
App.Console.PrintMessage("Rotation : " + str(debut) + "/" + str(rotation) + "\n")
App.Console.PrintMessage("Debout : " + str(debout) + "\n")
App.Console.PrintMessage("Placement : " + str(PlacementX) + ", " + str(PlacementY) + ", " + str(PlacementZ) + "\n")
App.Console.PrintMessage("Rotation : " + str(inclinaisonX) + ", " + str(inclinaisonY) + ", " + str(inclinaisonZ) + "\n")
App.Console.PrintMessage("_______________" +"\n")
####Reset################################################
if switchResetFALSE == 0: # zero (False) by default = reset
ui.on_PU_Reset()
def on_PB_Help_clicked(self):
WebGui.openBrowser("https://wiki.freecadweb.org/Macro_FCCircularText")
App.Console.PrintMessage("https://wiki.freecadweb.org/Macro_FCCircularText" + "\n")
def on_PU_Exit(self): # Exit
global ui
global s
global switchResetFALSE
global setFontByDefault
global switchModeTextList
global switchFontComBox
global setSystemFonts
global seTtextAlignement
global switchVersionSearch
global setMainWindowMoveX
global setMainWindowMoveY
global setFrameWindowSizeX
global setFrameWindowSizeY
FreeCADGui.Selection.removeObserver(s) # desinstalle la fonction residente
###### Write Configuration begin ####
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("switchResetFALSE", switchResetFALSE) # True or False (False by default)
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetString("setFontByDefault", setFontByDefault) # "Arial"
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("switchModeTextList", switchModeTextList) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("switchFontComBox", switchFontComBox) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("setSystemFonts", setSystemFonts) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetInt("seTtextAlignement", seTtextAlignement) # 0, 1, 2
#### geometry
positionWindowXY = MainWindow.geometry()
setMainWindowMoveX = positionWindowXY.x()
setMainWindowMoveY = positionWindowXY.y()
positionWindowXY = MainWindow.size()
setFrameWindowSizeX = positionWindowXY.width()
setFrameWindowSizeY = positionWindowXY.height()
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetInt("setMainWindowMoveX", setMainWindowMoveX) # setMainWindowMoveX
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetInt("setMainWindowMoveY", setMainWindowMoveY) # setMainWindowMoveY
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetInt("setFrameWindowSizeX", setFrameWindowSizeX) # setFrameWindowSizeX
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetInt("setFrameWindowSizeY", setFrameWindowSizeY) # setFrameWindowSizeY
#### geometry
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("setPathOrthogonal", ui.RB_Path_01.isChecked()) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("setPathTangent", ui.RB_Path_02.isChecked()) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("setPositionBase", ui.RB_Position_01.isChecked()) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("setPositionCenter", ui.RB_Position_02.isChecked())# True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("setPositionTop", ui.RB_Position_03.isChecked()) # True or False
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("switchVersionSearch", switchVersionSearch) # True or False
###### Write Configuration end ####
App.Console.PrintMessage("Fin FCCircularText"+"\n")
self.window.hide()
####
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetString("Version",__Version__ + " (" + __Date__ + ")")#
##StyleSheet = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/MainWindow").GetString("StyleSheet")
####### Read Configuration begin ####
#seTtextAlignement = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("seTtextAlignement")
#setSystemFonts = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setSystemFonts")
#switchFontComBox = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchFontComBox")
#switchModeTextList = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchModeTextList")
#setFontByDefault = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetString("setFontByDefault")
#switchResetFALSE = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("switchResetFALSE")
## switchResetFALSE: desactive cree des erreurs de fonctionnement attention a l utilisation !!
#setMainWindowMoveX = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setMainWindowMoveX")
#setMainWindowMoveY = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setMainWindowMoveY")
#setFrameWindowSizeX= FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setFrameWindowSizeX")
#setFrameWindowSizeY= FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetInt("setFrameWindowSizeY")
#
#setPathOrthogonal = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPathOrthogonal")
#setPathTangent = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPathTangent")
#setPositionBase = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPositionBase")
#setPositionCenter = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPositionCenter")
#setPositionTop = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).GetBool("setPositionTop")
#
#if setFontByDefault == "":
# if platform.system() == "Windows" :
# PolicePath = originalFontPath = "C:/Windows/Fonts/"
# setFontByDefault = originalFontName = "ARIAL"
# elif platform.system() == "Linux" :
# PolicePath = originalFontPath = "/usr/share/fonts/"
# setFontByDefault = originalFontName = "UBUNTU-M"
# elif platform.system() == "Darwin":
# PolicePath = originalFontPath = "/Library/Fonts/"
# setFontByDefault = originalFontName = "Arial"
#if platform.system() == "Linux" :
# PolicePath = originalFontPath = "/usr/share/fonts/"
####### Read Configuration end ####
##################################################################################################
class SelObserver:
def addSelection(self, document, object, element, position): # Selection
global ui
global PlacementX
global PlacementY
global PlacementZ
global correctionAngle
global setStylePathR # #F8E0E0
global setStylePathG # #E0F8E0
global setStyleBase
if ui.CB_06_ModeFree.isChecked():
None
else:
try:
selectedEdge = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] # select one subElement
if (hasattr(selectedEdge,'Surface')) or (hasattr(selectedEdge,'Point')):
if (hasattr(selectedEdge,'Point')):
PlacementX = position[0]
PlacementY = position[1]
PlacementZ = position[2]
ui.CH_Sp_Placement.setChecked(True)
ui.DS_PlacementX.setValue(PlacementX)
ui.DS_PlacementY.setValue(PlacementY)
ui.DS_PlacementZ.setValue(PlacementZ)
ui.on_CH_Sp_Placement()
elif (hasattr(selectedEdge,'Surface')):
None # later
else:
ui.tabWidget.setTabEnabled(3, True)
ui.tabWidget.setCurrentIndex(3)
ui.tabWidget.setStyleSheet("QTabWidget {" + setStylePathG + "}")
pathLength = "Path ( " + str(round(selectedEdge.Length, 2)) + " mm )"
ui.tabWidget.setTabText(3, _fromUtf8(pathLength))
ui.tabWidget.setTabEnabled(1, False)
ui.tabWidget.setTabEnabled(2, False)
ui.groupBox_03.setEnabled(False)
ui.groupBox_03.setStyleSheet("QGroupBox {" + setStylePathR + "}")
ui.DS_Radius_Circle.setEnabled(False)
ui.DS_Radius_Circle.setStyleSheet("QDoubleSpinBox {" + setStylePathR + "}")
ui.S_Begin_Angle.setEnabled(False)
ui.S_Begin_Angle.setStyleSheet("QSpinBox {" + setStylePathR + "}")
ui.S_End_Angle.setEnabled(False)
ui.S_End_Angle.setStyleSheet("QSpinBox {" + setStylePathR + "}")
ui.DS_Correction_Radius.setEnabled(False)
ui.DS_Correction_Radius.setStyleSheet("QDoubleSpinBox {" + setStylePathR + "}")
ui.CB_02_Circle.setChecked(False)
ui.CB_02_Circle.setEnabled(False)
ui.CB_02_Circle.setStyleSheet("QCheckBox {" + setStylePathR + "}")
correctionAngle = 0.0
ui.DS_Correction_Angle.setValue(correctionAngle)
ui.on_RB_Path_Image()
except Exception:
selectedEdge = None
ui.tabWidget.setTabEnabled(1, True)
ui.tabWidget.setTabEnabled(2, True)
None
## def setPreselection(self,doc,obj,sub): # preselection
## print "setPreselection"
## def removeSelection(self,doc,obj,sub): # Effacer l'objet selectionne
## print "removeSelection"
## def setSelection(self,doc): # Selection dans ComboView
## print "SelObserver quit macro"
def clearSelection(self,doc): # Si clic sur l'ecran, effacer la selection
global ui
if ui.CB_06_ModeFree.isChecked():
None
else:
ui.tabWidget.setStyleSheet("QTabWidget {" + setStyleBase + "}") # tab
ui.tabWidget.setTabEnabled(3, False) # tab Path
ui.tabWidget.setTabEnabled(1, True) # tab
ui.tabWidget.setTabEnabled(2, True) # tab
ui.tabWidget.setTabText(3, _fromUtf8("Path"))
ui.groupBox_03.setEnabled(True)
ui.groupBox_03.setStyleSheet("QGroupBox {" + setStyleBase + "}")
if ui.CB_06_ModeFree.isChecked():
None
else:
ui.DS_Radius_Circle.setEnabled(True)
ui.DS_Radius_Circle.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
ui.S_Begin_Angle.setEnabled(True)
ui.S_Begin_Angle.setStyleSheet("QSpinBox {" + setStyleBase + "}")
ui.S_End_Angle.setEnabled(True)
ui.S_End_Angle.setStyleSheet("QSpinBox {" + setStyleBase + "}")
ui.DS_Correction_Radius.setEnabled(True)
ui.DS_Correction_Radius.setStyleSheet("QDoubleSpinBox {" + setStyleBase + "}")
ui.CB_02_Circle.setEnabled(True)
ui.CB_02_Circle.setStyleSheet("QCheckBox {" + setStyleBase + "}")
if ui.RA_Choice_Outdoor.isChecked():
ui.Image_RA_Choice_Outdoor()
elif ui.RA_Choice_Indoor.isChecked():
ui.Image_RA_Choice_Indoor()
elif ui.RA_Choice_Helix.isChecked():
ui.Image_RA_Choice_Helix()
elif ui.RA_Choice_Clock.isChecked():
ui.Image_RA_Choice_Clock()
s=SelObserver()
FreeCADGui.Selection.addObserver(s) # installe la fonction en mode resident
###################################################################################################
# create new document
doc = FreeCAD.ActiveDocument
if doc == None:
doc = FreeCAD.newDocument("FCCircularText")
# deselectionner tous les objets
try:
for obj in FreeCAD.ActiveDocument.Objects: # deselectionne tout
FreeCADGui.Selection.removeSelection(obj)
except Exception:
None
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
@Gesiima
Copy link

Gesiima commented Nov 12, 2017

Got problem using letter L after W.
If Trying make a Cycle with word BOWLHOUSE, the L crosses the W and between L and H is a huge gab.
Please help for fix. Thanks allot.
bowlhouse

@mario52a
Copy link
Author

Hi

thanks for report this "bug" the macro is based to circle 360 degrees / number character and not with the thickness of the character,

for the moment you must correct this default with my other macro (https://gist.github.com/mario52a/2fc48333deca5a31e6232c29a9db5e4c) Macro Rotate To Point.FCMacro (wiki page (https://www.freecadweb.org/wiki/Macro_Rotate_To_Point))

here little video
fccirculartext_correction

thanks mario

@Gesiima
Copy link

Gesiima commented Feb 6, 2018

Hi, thank you for that workaround. I think its easy enough, but will it be possible to fix it in future in the macro?

@baomin
Copy link

baomin commented Mar 27, 2018

good

@afabilli
Copy link

Hi, I installed the last version of Freecad (0.18) and the macro FCCircularText not work.
The error message in the status bar says: error in line 145: ............
How resolve this problem ?
Thanks

@mario52a
Copy link
Author

Hi
@Gesiima

Hi, thank you for that workaround. I think its easy enough, but will it be possible to fix it in future in the macro?

maybe the next version
https://www.freecadweb.org/wiki/images/c/cc/Example_06_FCCircularText_Placement_Rotation_Character_Word.gif
https://www.freecadweb.org/wiki/images/9/9f/Example_05_FCCircularText_Position_Circle.gif
https://www.freecadweb.org/wiki/images/4/4b/Example_04_FCCircularText_Wire_To_Face.gif
https://www.freecadweb.org/wiki/images/7/7f/Example_03_FCCircularText_Position_Character_On_Face.gif
https://www.freecadweb.org/wiki/images/4/4c/Example_02_FCCircularText_Position_Character.gif
https://www.freecadweb.org/wiki/images/b/b4/Example_01_FCCircularText_Direction_et_Point.gif

@afabilli

Hi, I installed the last version of Freecad (0.18) and the macro FCCircularText not work.
The error message in the status bar says: error in line 145: ............

thanks for report
i have not problem , please more information FreeCAD used and the error ( View > Panel > Report view ) use the macro and report the text displayed in report view

tested with:

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16110 (Git)
Build type: Release
Branch: (HEAD detached at upstream/releases/FreeCAD-0-18)
Hash: f7dccfaa909e5b9da26bf50c4a22ccca9bb10c40
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16093 (Git)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: 690774c0effe4fd7b8d2b5e2fb2b8c8d145e21ce
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.2.0

@baomin
thanks

mario

@afabilli
Copy link

afabilli commented Jun 24, 2019 via email

@mario52a
Copy link
Author

Hi afabilli

hare you sure you have the latest version now 00.14-1"Date = "2019/06/11
siete sicuro di avere l'ultima versione ?

the line 114 is now "default= defaultWindows" (and not "if default.class == unicode:")

it work with

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16117 (Git)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: dbb4cc6415bac848a294f03b80f65e888d531742
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0

OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.16993 (Git)
Build type: Release
Branch: master
Hash: 5ea062f6699666b2f284f6a52105acf20828b481
Python version: 3.6.8
Qt version: 5.12.1
Coin version: 4.0.0a
OCC version: 7.3.0

many problem with the unicode and the character over 127 the next upgrade i delete the "° ² ..." character and replace it by "deg" "2" ....

mario

@afabilli
Copy link

afabilli commented Jun 25, 2019 via email

@gupi
Copy link

gupi commented Jul 21, 2019

Hi Mario,
I failed to run the macro

report:

Traceback (most recent call last):
File "/Users/gunterpietzsch/Library/Preferences/FreeCAD/Macro/Macro_FCCircularText.FCMacro", line 1640, in
ui.setupUi(MainWindow)
File "/Users/gunterpietzsch/Library/Preferences/FreeCAD/Macro/Macro_FCCircularText.FCMacro", line 773, in setupUi
self.retranslateUi(MainWindow)
File "/Users/gunterpietzsch/Library/Preferences/FreeCAD/Macro/Macro_FCCircularText.FCMacro", line 796, in retranslateUi
self.DS_InclinaisonX.setSuffix(unicode(" "+chr(176))) #degree
<type 'exceptions.UnicodeDecodeError'>: 'ascii' codec can't decode byte 0xb0 in position 0: ordinal not in range(128)

System details:
OS: macOS Sierra (10.12)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.15310 (Git)
Build type: Release
Branch: (HEAD detached at c88a64e8e)
Hash: c88a64e8e7a3bb66a23b965b655b5a5040dfa4d2
Python version: 2.7.15
Qt version: 5.11.2
Coin version: 4.0.0a
OCC version: 7.2.0
Locale: German/Germany (de_DE)

@mario52a
Copy link
Author

hi Gupi
thanks for report and use my little macro

always problem with the character over 128 i modify the code and i uses the wmayer code https://forum.freecadweb.org/viewtopic.php?f=13&t=36380&p=308476#p308357 and work well in all version tested

i upgrade my macro now version 00.14-2 you can download it with AddonManager

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.16.6712 (Git)
Build type: Release
Branch: releases/FreeCAD-0-16
Hash: da2d364457257a7a8c6fb2137cea12c45becd71a
Python version: 2.7.8
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 6.8.0.oce-0.17

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.17.13541 (Git)
Build type: Release
Branch: releases/FreeCAD-0-17
Hash: 9948ee4f1570df9216862a79705afb367b2c6ffb
Python version: 2.7.14
Qt version: 4.8.7
Coin version: 4.0.0a
OCC version: 7.2.0

OS: Windows 10
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.18.16117 (Git)
Build type: Release
Branch: releases/FreeCAD-0-18
Hash: dbb4cc6415bac848a294f03b80f65e888d531742
Python version: 3.6.6
Qt version: 5.6.2
Coin version: 4.0.0a
OCC version: 7.3.0

OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.17271 (Git)
Build type: Release
Branch: master
Hash: 2d8f7ef2b47a335f99036bf328f51da1e6d015d9
Python version: 3.6.8
Qt version: 5.12.1
Coin version: 4.0.0a
OCC version: 7.3.0

enjoy
mario

@MasterCATZ
Copy link

Traceback (most recent call last):
File "/home/aio/.FreeCAD/FCCircularText.FCMacro", line 68, in
if int(FreeCAD.Version()[1]) < 18: # Version de FreeCAD
<class 'ValueError'>: invalid literal for int() with base 10: '18.4'

I meet these dependancies
runs only on versions 0.18 or higher (requires PySide2/Qt5)
Ubuntu 20.04

@mario52a
Copy link
Author

Hi

thanks for report i correct with suppress the FC 0.18 test

mario

@droscy
Copy link

droscy commented Dec 5, 2021

Hi Mario, why did you comment out line 1455?

self.lineEdit_NameFile.returnPressed.connect(self.on_lineEdit_NameFile) 

That is the only way, I found, to use user-installed fonts on Linux.
Is there a different/better method?

Thanks

@mario52a
Copy link
Author

mario52a commented Dec 6, 2021

Hi

Tanks for report this problem , i don't remember it is commented from the beginning (but good to know)

for testing please : comment the line 1455 (as origin)

and check by 0 the setSystemFonts variable line (1153) for obtain :

global setSystemFonts    ; setSystemFonts    = 0        # 0 = matplotlib.font_manager.findSystemFonts("C:/", "ttf") 
                                                        #     fait toutes les fontes (dans tous les dossiers et sous dossiers du DD) time !!

and tray

i wait you report thanks

mario

@droscy
Copy link

droscy commented Dec 7, 2021

Hello Mario, setting setSystemFonts=0 (either in source file or in FreeCAD parameters) has no effect, no user-installed font are listed.

In Linux, user-installed fonts can be found in /home/$USER/.fonts or /home/$USER/.local/share/fonts, so you can add those folders to search paths in the macro code, but I think it could be better to leave line 1455 uncommented, at least on Linux, to allow the user to choose a custom folder, maybe I have a temporary font on /tmp... so just type /tmp[enter] et voila I can use that font.

Thanks, bye

@mario52a
Copy link
Author

mario52a commented Dec 8, 2021

Hi

ok , other test i change line 198 by original macro without change the configuration :

PolicePath="C://" #cm.get("PolicePath","/usr/share/fonts/","C:/Windows/Fonts/ARIAL.TTF","/Library/Fonts/Arial.ttf")

and ths macro search +/- 30 minutes and give 940 fonts files in my DD and "(1/389) on "C:/Windows/Fonts/ "

Do you want to do a test ? please , tray with root path one slatch root/ and after two slatch root//
(maybe /home/ and /home// in Linux ??)

what your linux is ?

i have to work on the paths maybe the same as my other macro with button supplementary :

https://wiki.freecadweb.org/Macro_Fonts_Win10_PYMP

thanks for report

mario

@droscy
Copy link

droscy commented Dec 12, 2021

Hi Mario, on Linux if you want to search the whole disk you need to use /, so I tried / (and // because you suggested) on line 198 with no success, it always finds 466 system fonts.

Then I changed line 3680 to PolicePath = '/' and it finds no fonts, using two slashes // it runs for ~10sec and finds 1067 fonts (system and user fonts). If I set it to /home/droscy/ (with final slash) it finds only my user installed fonts.
Maybe also line 3674 should be edited the same way...

My system is Debian Linux 10.9 (buster).

@mario52a
Copy link
Author

mario52a commented Dec 12, 2021

Hi droscy

thanks , then if i replace the path by "//" lines 3671 and 3680 without touch the line 198 all is good ?

ex lines 3671 and 3680 :

PolicePath = "//"

mario

@droscy
Copy link

droscy commented Feb 20, 2022

Yes, exactly!

Sorry for the very very late answer.

@mario52a
Copy link
Author

Hi drosci

not problem for the time , many thanks for reply

I will put a QtWidgets.QFileDialog and not trust the automatism of matplotlib
je vais mettre un QtWidgets.QFileDialog et ne plus faire confiance a l'automatisme de matplotlib

your mind ?

mario

@skintigh
Copy link

Can this macro be run from a script?

@mario52a
Copy link
Author

mario52a commented Mar 30, 2022

Hi

I have never thought about !

but:

for command in the FreeCAD Python console or appeal it in a macro

give a complete example script or command line desired

thanks

mario

@skintigh
Copy link

skintigh commented Apr 15, 2022

This is an example using external workbench freecad.gears https://wiki.freecadweb.org/FCGear_Workbench

name = "GearA"
teeth= 25
gear = freecad.gears.commands.CreateInvoluteGear.create()
gear.teeth = teeth
text_to_use = name + " z" + str(teeth)
# desired command: make curved text using text_to_use and place it on the side of the gear :)
#     If possible, I'd love text that's a different color than the gear so that it's readable when I export the gear as a "Flattened SVG." 
#         I want that because my laser cutter will turn filled, colored text into laser-etched/engraved text on the side of the gear!

Thanks!
Seth

@mario52a
Copy link
Author

Hi

Ok i see what i can do

I need to learn how to do a command line

thanks appreciate my little macro

mario

@MrAndy42
Copy link

Fantastic macro, thanks for sharing it!

I have a feature request though: If the extrusion height is negative could you make the characters as (sub surface) pockets?

I would also like to bump the requests about manually adjusting start and end angles. It would be great to just specify the start and let the macro use 'standard' spacing for the font.

@mario52a
Copy link
Author

mario52a commented May 9, 2022

Hi @MrAndy42

Fantastic macro, thanks for sharing it!

many thanks

If the extrusion height is negative could you make the characters as (sub surface) pockets?

as this ? https://forum.freecadweb.org/viewtopic.php?p=513384#p513384 (addition in progress)

I would also like to bump the requests about manually adjusting start and end angles. It would be great to just specify the start and let the macro use 'standard' spacing for the font.

for the moment the principle of my macro work with angle by degrees : circle cut in x part = x degrees

here more explanation how it work https://forum.freecadweb.org/viewtopic.php?p=523393#p523393

i search for work with the boundBox and https://forum.freecadweb.org/viewtopic.php?p=421829#p421829

i need to study a method for ameliorate but ...

mario

@mario52a
Copy link
Author

Hi
@droscy

would you like to try the new version
I have added a button for free path and a back button for origin font

mario

@droscy
Copy link

droscy commented Jun 26, 2022

Yes, great, many thanks. It works.
Now I can choose a custom folder easily and switch back to system font.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment