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=\
"""
iVBORw0KGgoAAAANSUhEUgAAAMgAAABaCAIAAABylI6BAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAKnRFWHRBdXRob3IARnJlZUNBRCAoaHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZylLpZ5SAAAAKHRFWHRDcmVhdGlvbiBUaW1lAHNhbS4gbWFycyAyNyAxNjoxNDo0OCAyMDIxU/IYRgAAAY56VFh0RGVzY3JpcHRpb24AACiRVZJbb5wwEIXf91dYfsc3vASQIcpFkSJlo6rbRH11yIi4DSYy3rD597VZ2AY/IJ3x8eczY9TlsXtHn+AG09sKc8IwAtv0r8a2FX76dZfk+LJGG7W7v75CwWuH8jiYCr95/1FSOo4jGVPSu5YKxjj9vXvYN2/Q6cTYwWvbAEbBX9r+UXcwfOgGTvsPfaP9dOdM+nMA14JNnIEW3okFT3fmRU8fQY7DK0bPS0yBQySkng2M9QYhtdPemWMoxaU5rzAjLMvyfIuDFJOcVpTpWsoKJ1FzJrd4Jgi+8gixAoo1QcwEmcqsWAjpmpCuM6SBkHBS8HybF1GfEEXGxPYcQq4Rco2Q6xBSTo93khFAw2AUnSek9v3BNTDN6saB9r2rn+xf249W0aVw3gwjvtUe6kF3BHXaDUhcIJ6VXJYyR4IJPh9ajP9P2nb/NXjo6jsHcHN1ixjhxeI+b0b/D+3846F7gW9JvtWi5Sd8mvjedWhM0bOKfS39KBr/y3rzD6i8wRKgalZVAAAAEHRFWHRTb2Z0d2FyZQBGcmVlQ0FEYxpizwAAACZ0RVh0VGl0bGUAQzovUHJvdmlzb2lyZTQwMC9GbGF0aW5kb29yMi5wbmcIk9lDAAALgklEQVR4nO2da3AT1xXHz3r4pGmndNpOm1FbQXgEL4/AlEyaNn2QQsIbbGIRGyy/sBxjzNOAn5Itvx9gwts2fmMbMNjFJoQQEtJOpm3aySRtErmE0qC2d9pO26k77ehzPxz7suxKQrtaafde8Rt9uHv37r3n3PPXuatde1dYvtwJj3mM3swQBMFoG0zNzf/9PGD9i1/4YYwtYYvHwnqIN//7M1mN1ecN2JLYRFnNS1/8UVRsYpMZCQnxLqw3/vMuLQeTkRJlS6nU1nzpx5GaxTjxm7GuT97GQvhiCo20HyqytTNX6NI5c8SjsF7/9zugn54CQjsnIALAui+/EL2xzEl8LYXj/3oboiwpGTgWymvDV34Ss3ENJ14y1tg/b0FsJSVFKq+NX11piA0xJi6EdfUfbxklKSlUXpu+tspoW6IO50vh6N9vgnGJKiBWnxdTV9LXXzTalijCc8Ya+dubppIUhaau5G+8ZLQt0YJPYV356w0wWaJSQlPXlidWG22L/nC4FA6TN0wuKQpNXSnWNUbbojO8ZaxLf7nOiqoomLrs31xrtCF6wpWwLv75deZUhaC2tn5rndGG6AY/S+GQ75q+qlLeZlai44iorVTber06NBZOMtbg/XFdYiwVU9qsDQBwPauJ1qztPiRvDw/aR24AagvHZR0ehDXw+ViEQaV62jZ7I628ntkoa6acK2l7KrJIjEFtSbtlFOaXwv57VyMJJEoqfc4m3ExQNNjQVwwA444GAAg9V7QTVFgkVrEeFOAjY2kDJeWYu3ksvV7o3xysmXR+wpwrx9zNAEBA1KYtTFrYCbuwLazeu6PagkdsYsa8pKvb68ZgAgDG0usBYNP5UmVLDcJCMuYlaU5dqK2MeUlqDzQPDC+F3XdGNKsq66lkuuolDZaNptWCxXJ1e13SYJmssXR+1M5V1lPJoDV1obawBxZhO2OpBZe/7AVbBICR1BoASB4qH02rAQDw++HhnJQ8VD6SWjOaVktr1M4VDgEAxK0xdbEbHVaF1TlxWW2ciE3MSXwZAKQO09gjstnYcqHiyivVwfaGQHoUAMysmthyoUJt6sKkhTYzR0JCgsDcR5uqchemSDtJueTCXSmXXLSsHCv03mAfOq702NyFKeFcdJVi9Xk7Jy4bPuFaPgKDqIoNqsq5yK7sxz7sBoBhu2fY7gEA+7A79Ihhmjds94DFAgBgsQzbPXQUQRCci+xqtRX+uObCbq9U66extH18UVW6IjYxb/HWiy9X4ubWy5WyBrhLWa8Z2iEdVNa/Nhf0Mi82MPyrMHykAVb6mzpSBQAJymujWkkdqRpKdj8Y1GIBvz/CeWYuTIydvJ/+aEjtd31m1QSW00Y9g0muoWQ3lqNiX0D8/rRRj3Sady5NVXUij2fxO5emRsW86MCYsFRBbGLBsrQBqMDNwSQXJg+wWAaTXNt+Wh368EiQda6c44JlaWp/JLIVKZaWwhMfDIQfCWITC7+zLQEgfaymf2P5VK3fTzcNdBwNmPwwUdVRDEUK+M5Y1DXHeG3fhqlL6hhUx3itIX5TMwBgZtUEcYebtHA13L18e9RM0xk+hUVs4p5n0qWOZVyr611fSsuxd5qOjgZMlZ5Rd8OHoWAxsxS2vt+n6oxE6VfW9frpXbpZpRa0gRrQvbZk8jfhLoiYtPY964iSbfrCYcYiNnH/dzPM6RWd7a41xRH2YHI4FBaYcvZzbjR2rj4s01POjUZ4js/VkJmlUBWdqw9jIfdmU+iWRoGGaViUWYmXkJvbbLQNj6bpva4wv9PEJh56Prt91UHlLudbhnkqtSegGWod1M2yqMHhUohRzLvVAgBtK4uk9VgZe/JutbStLMLRI59vJkLG4VKY/84RmF5lsHzmhQO4q21lEdYYYpVev0aZCBmHGSugRztvH53eG1trogATIeNKWMQmlq1wKv0peLfV5F6WrXCS2+H+NmQiZLwthZy5ExAmfGQgY3luneXvMo+U4z/YAwCTb4d7CZ4JHxkQlirM785rz+8GgD3vHdd2uNXnJbdE96p8XY3Sn8fCiinHvl+IBZSXZkzuJjwWlknY94uTbjgVfnvzuznD9Baqo/V7u0Ls3f/LkzGzJIQBR5/bJbNEbRTMHzXeMlZoTOLsgV+ditAQkzgSAt4yFgAUvT+1prQ8W0A3scyNs+Z3hLeMdfDXp2UOSR3kwFliE2vXFZrfDQYyVt36QnIt/KvSoWrM72w4MOEFbxlL6Q5nGQsY8YKBjBU+Vp+XjIsNG6cuERV/cAamv9/SsgkpHjuu5u5CVG3RhxkPP9WHD/jzSAYDDnKVsRD+PJLBhIO8nWNBkFOQumV5pR+2xd6YaMBEyITSUjam++DosfD/Krw5aS/drF2aR8tlH5nRWc2umRkOMxZMf6drnnYGrI891JLy37ZH2BUr8eLwHAsABAGql0zFsuJ3U7GsXuKsedpJN2MDNQNBhUltOHClVeUzZ/QyLbpwmLGsPi+5IsIScH3cAZJIyDZjCQ4NAJ7FuWCxVC9x0hq1sBKvBEEAJj6tKftVPb3T/UmH4TZ7FufKLHF/0jH93G8QBNh/+aiqBzO1puw33KkwPyw93DZ8VVl93n3DR421tmpRLj7iVlZf+ek5AKhalCuo8Qgxwg+NGPfglShj9Xn3XjLmXwiRyk/PYXKqXLjjofrpzb2XjqhKV8fsB/S1MKqwlLFe21qk9lnWxhpc5e2s8nYCQOXCHbQSDcN6hnxRC5+/ChGrz0suisdfKZLVuxJzaNkzoTrAIXAl5ig79Ex0uhJz3OL0oBYL+P17LraofQcCW5ESPJ4uo21QR+FQs9oHJ59IffBMjooF8idqVP9enxmgPQfssGJB9tSjdQEm3YmRuMAEzPwqpB8NBDu85k6XbK8uhlUsyFburbnTpU1VShfY+NTUdGuJlaEUDDSp/caf2nYIAMrmZwFA7WfdZfOzaP6o/UzdDGAniPTYhzpX7I3ceLZg6eSdotZJq89bMNA0daDFUjY/q+5uD6oKAp0Ul83PCja0VFUAIG1Je6u720MHkh2uVlXBLGSAuroetX6agfz+Rg0vADuTfrhkbqa0sv4PPdLNMPdivWxTeTgmRdyb398I6l9ZiDarOsQksHpL56yjmPSpf/1fvzgJifQlKA33eqXeF8/JQCk03OstnpMBQe6f0KOwmawT2oZ2WDI3U9t5FbGJZx3FTIYn0Gvbecbq81p93kl3YsO9Xoy9HL8fUBAA0kIwAnZCKxvu9YLfr01VrMNqxgKAtowS0qv1dct9IvbwyMbK+ZHWHH7S0fjHvmAN8nrrJ0GjqohNbMsoYTU2rP/ZTHtmCenRqC0AIL1ie6ZcW02f9wHAodkOLCvnR1Zz+EkHHiJt4OypB00vgUaITWzPZFhVwHTGihyrz0t6pu4RdWSVNt/vPzgrHSWFJ1sBJsdiOTTb0Xy/HwAOzkpXNpt0JzqhPpK1j9jEjqxS1qMiNDf3G21DpOzoqov8JAbvQp7LLi2ypWNNiy/AzNC9FNpsR1cdRJClpJacyy59dDtzI7S0nDfaBh3I6azV5QRZepO7M6csWLMD394OAEf+dD6ns5ZW6mVAiHEZQjhyhAdhAUD2OX20RQnnLyl0H7FrBw+qAp7Osbpzy0mHlhP5YMT4GgGxid255ZwEg/VfhTJ6nOWkXU9txQxiE3uc/KgK+PsX+x5nBWkXIeb5RjO44PY4K4w2RGe4ylhIb14FAJA2BlIXsYloLXdB4OgcS0bfqy5y1tTaIjax71UXn7PPZcai9Oe7yBkzLou4/PXnc6sq4DhjIed3ugGAnDZR6iI2Ea3ied75zliUgQI3OWV86sJENVDgjoMp5z1jUQZ3VQIAOWmMvFBSaENcTHecZCzKUGElAJATU5fUo60weu0ex42nmY6bjCXlwu4qLJDj0UpgKCk6UNxNMcD/AdrsIMEWx26aAAAAAElFTkSuQmCC
"""
FlatInDoorWord_Icon_b64=\
"""
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
"""
FlatOutDoor_Icon_b64=\
"""
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
"""
FlatOutDoorWord_Icon_b64=\
"""
iVBORw0KGgoAAAANSUhEUgAAAMgAAABaCAIAAABylI6BAAAPjHpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjarZltchsxj4T/8xR7BH6BII9DEmTV3mCPvw9GsmMneZNs1Vq2JY1m+AE0uhujcP7nv2/4L35qLD1U0d5Ga5GfOurIkxc9/vg57+fXsRTr8//jJ73/p/D1Ay3vjzNH/PX7vdb38fI+/jFQ+3xmoN98kOSnC8rn/PnbxPNz4vxtRVXijV9/+o+/e63fe167m7URhvba1GuK8DEMJy6GKs9ljYfyJ7zW5zF49DjjTjVa3HHx2GmknEq8qSYLaaabTjKed9qsseaTleecdy7PsV40j7xLLKlUf6SbtYxipZdcdj6llBpK/lxLeuYdz3w7dWa2xKk5MVjikj8+wt9O+JfHvTsSo5Q8mFqeWPE/Z89D8jAW/89pJCTdd97kCfDH4/MnfElsIYPyhLmzwRnXa4gl6Qe2ygOAwnnC8wtfSc2zlh+UVOYWFpMKKYgtFUktRc1ZU6oldxI0WXkuNS8ykESyschcS2nkpoMj5uYaTc+5WfLrOKVCfqS0ouRmlEmyahXwo7WDoSlFqog0UekyZIZWWm3SWtPmNTe1aFXRpqpdh85eeu3SW9fe++hz5FEoSRlt6OhjjDmZc9YwZXL15Iw5V15l1SWrLV19jTU38Nl1y25bd99jT8tWrJpYM7Vuw+ZJByiFU4+cdvT0M868YO2WW6/cdvX2O+78zNo7q788/g9ZS++s5SdTfp5+Zo2jqj7QM0RynhHPGRnLNZFx9QwA6Ow5iz3Vmj1znrM4MlUhmUWK58ZSnCE1UlhPynLTZ+5+ZO6f8xaI9d/ylv8lc8FT9/+QuRxO+Slvv8maORPu+KpGr0KPaSxU3y3bYLg9R7hNEqswWSwxcqg0qXdlJqqyYy/P51Nf5+dDMT0fSjnPuUlJFh8GH+01WF9k5zVS675/0zK7bR2praRjMMqwtTrCotbWAh7QaW1rl9HCyrJkCtTVWFMl5zDMkd3PVIKc5Ggrq8iE40bu1TzMZ7U+GSmfaXw8Z28hZZVR2qrESbOcpBcStpZvL3t3X7WOC0DO5tS0Y+rnwp3Kpq4vrUxZaUjQCpnkszrhz8jD7Kc2LaartWmnj1bSIcHgIpHdWfKGAyHpugvpzVp3IzdOtXkNYjDG2nmd3AaQumXt0ffKQyrIPrPqnvWWfg5r6SLIQJ+7cbqWXUQ0UbTAp7Zy917Kgs+dydAUZW3C2XOkZbaq3VYGkV7CWlcfmXJs6UBrYLAYyDamsFunjlz7JWFkdo+S5vRFxTKAYCpnWY2XNXeAI7fK0ENWOhnbbWW7Yc6zL1vfZ1fiVxkeCYpvmAEMOUYgjhh1k/q0WcdoqbYjw/ohr6bpXAlGFaPAzLqPMHQFSElzm3lpA1F7KpppTE6J5r1d70uuprrvScNiqYSmnDBTMV+eUOMUr61NgQAovTKtdsrY2YDqUYefjdnM99s3n0UyMM7Yp44Ubh/wYp5HfQApM7GNfJolmIAQExBRQFlVURPeGvU18mrX6s27dZAJK8WAVJeeI+hBQCjsYbXBDr4cMA+H7AXVrQEJSSWv0kHhWUIGqdAFK0FNeewAq1yRRdzyeBYKt3wJtRfsOTX9tZzDf67n7+UM7SnsvYqBi/eo5qG1cdjEhkbY4+c08/qZ3T+UVj5HgZ1+HsWnWyAHuPhnEvon0VA5tqjfNPuGA245lN9OLU6NleLIaw4rS/qKVteuKZsZhYkTqt0C7AmkFZ7h9EPlXCkwTZ0H3hfYe0Z4wYu2FOtySBxUgp2Te248Oll8v2cFYcxmELvjasK0S/3XTlmz2lln3XlsJVu9QOiSJfKBl+UaluEdmfBz1GAz73kazrBtXxZJKmUn5j0VB3hvF3hq20xIyGH8cQASQnFE4aZCANphZSHBDI5ZWHJRmKUuo+I6kdK145Heq8cFUoPoxlbUbEdW1M4GSV4z6c54ZtCb2A9uE7gqJAEFUWqzjXKB860OTtAz253KGicj78rRWY+j19rkBFYVWO2itqjtjq46XA8Izp39QEX4WeFXuh4v8c2p1vSaDd9FwW8thMwaWVtgxCiEAYGnDJGV1GxC+VfHqQQOKRmMRwkhcugdrLVqOvi1bpCzQuYFWgxzYK6hSpQYtsI6xHKuQj/NEzsFXi9D8BVXklgqBEihLipdzNn/Ot2yLVTkUobsZ5aLyu7IBZYMnoZPOiDc26JC/RuojtQV4NI/TMLJuOcU+E1ykTDOMaaA/IwrUPfkooFQA03U3xRxOsvVzsYiuhv2GrgRUA1M4DekLI52Q+ygbO5uJD6zud0b+du6YiEop7EMbSiJzb1SwuqQ1z3hm3RVQLc9FaeLFTE0cVqGvkJSW/gEMA+U5J6B0jZfcdtoFBXtNXuJP/L29IQwNkFjaQHfhfB1RgKTpGGSp6xI2oScE+VbyHhdk1DqFoiFNZjAs4j8ZovxVsCOqzVItHcUoBmgjS27KwRycwNlNurUzRwdC7UwpC44zSr6pLAu8t9Ws0vtBgeKKOV4cQW3bRfAzFbiF655U80lTGDr9+wUvtPTD3b6pL5/Yr5Wwot4d/scLL8Y8efDb0b06aX/mOM9ZW1h+3wfk7znfBi8lc8NvNkWiOdse0fY+tlX9lrOeIWJQALf2BF1EoDczYSDGICkI7ALJZK5oD/mLgXWEuwMVAL2uAAW7UrgDddlzpC3ZhokPHo/mFa6Ve9XBxkfkWIrn6dKRZW+HanxOWBGNkNbcPOAfSintfAwlOg+MTnYOZNt0KThvjCGmChQAPkDRyiHWitFN55sCM6/gw+3xlpB21kFjR1YHJwFHNyoAwxickdZ0rjuYIhVPeMuRCNtaBGaxfOcMB7hw4VVQozyRz9t+0inY6g6MJd0cXmwEbr9u8zh19F+eUvuv+fu97gIvwNG/xRsS6vN+kXnF86HIvz1QPjdKRSRevFntn8wJVjMHJf7QFK+OGtn6gXxbVBkpVUBIAGuJEQZcsFp9nbcnEZ6M4BEaLK7KHeoQs8CT1gflLjCWXAX+KSJsrP5l3BsKBlJwEJfXk3vfwZ5X8QaYwwbmOOLmIPhjepH7wZnOnAXpIY/Ty61dEcNmaUfjI2l7xF3SWB2s8hx8F/OLXQ7OOnGXjqFRed3O1SANib6hETEWf4KLvI4XcBKHhOgikRs1QNVOMJoC99gRmaKZy3rgBNfWKfV7Fuivw8/H/j2XkAoxh5i2wp7NrdnIAKXS0rWipF4nNMXbj+QeERHUY1Km+SiDuMA8EFR4+EaDoFuWeVunEn1VgOXTfwyzrjh7y/r5vngRpxxL005djvhpW24PKIEtAzjDVZaCyJh7nNkz9jQU1ZfnZqBNb1G7WGfPCXifXnhHMhAbj4/XOUTH/EO/tuRGH8+EOKvp7xZIx97ygBouO1k5z8f9urILySPoM8RkPzUkhsIT9F6Dth6FR6M4N0RtpvcZaQZDSj0XDTCVBEIQPwCXSFdApaQZoMX/XgHSQOHMFWO4uSu1hX3BX0z0cYBUux9pqjJMbS0iRjwD1gn3YZK0eYefDzNLj4fX1cHipV9bcNA1cISnOgeMuF8DZjTXRJ5Zbn4mxl4TbOaUcFZopthZYInLd5a74pRo1PYrAk7utC/hAfI1Z2wUDZgdF10fQdO9lsnoxvpFqCCO6awxnXBH9QHHfYo1IxkmirkAp+WXQHABG8uki7MLLgRXeWCO/4GfZlAA1MvPKDU26S3wUWgsIz5RNbradFsY7tQlLgqzZQ3P2Hisuc1v50o3mUviou4UY2NXtO7jVTvK8VzDb8HhCl9Ukvy04AMhneRLcAgNP0F718wGuYmF2OenKx3VTdqNNSjP43FdERNwswV+fVWEEWaPOTIb+N27OjO170kWlYhEHevtALe6uLy+njChoRE3fQSg2wUHBR8UUfx+zV1Buwtyezy3M2mMcZ0Qpm4XLZ/aVdWXcgH/hj66efuTnDJiJ5GkBIBfaxcXgFbPgmpbOyOIpoObcqQ7n/UTEqYGmtsw+9f8o/u9WX1QBgJch3FiaaBYT9xeD+8O+0x8gihYfZLQxPBIB5PZbOHiXmAASZbi7T0VByXcDBF2gJilsNTfSxlAArkWEeFZGac3lGQbE5GKxoWdzdDX1KlkNRbJvqtr6UZ3rXpQrGxxH29tEyegm32Urq/VL4XfvhR+fm798iRtuh5VdoHwfzhQPhxBGzAhIgVstbHoMtH7VioaxeLJHkgigahTy8GlMJrf4r4/RiBs2k/WknAY9A6CUkQbAZ7JUSTJtDvt0DgtAbUAaE6y2nBl4Etw59TvhQwRevvBtW7PT+t5ZNqSrv0a6SCTkhmdl5G95YHrpIE15O0KGWl+YKaKxTw3IdsngRz1++3Vqrv5x6w+46wsdyTsDgFBKDUvMMnYg5B/XVy67ka5E9b2vdlwoYZUJpO3DpLpkQgAgpwGt3wGGAB2WJt0AeX0/31NNZ7k+Na6ChZzsntHVTERUoHPqOVlBLN3+outbL0Ngxewx/YLeCSfme3Rg0RhOtfQASqAQI+9GvDuRVSobFC5dky7hZ0Y7XI36BoELKRWCgOOM7XN0qOLLQV/g+sHeJN0/XeDHA/lt+L9W6j9aS21e+qVSPOmInRC13RYx+JrnRIwNu0E5rfk2iRJ2drv5/j3+NMp3HxW5w0YYg9TkC9M1P3qce/WDC6ZeiZPhl3s02CN8Ko7EJhcAOD1rqAN3p6wJCm22YnBdotdpOp9IUjeLCcPcyEL/q9S8uBP4wUhHP8Mrw6fhoz8L0Y8JG/9+o/DoRfjnDgfTkQ/tBbKdRoeddo+S7Or6vDl7Of+1QfTvZ79X/6pm/V/3Xk8H1ojJJWZXsR/UhVCXl8VoQKuBI89x+QdCoI54PS4peu35SRAFc9t/Ywr7WlbId0YIq9Fzoo6Wo6kF2KgqxObO1B4EoH1eArKhVOxUOwqEgEKxXtq6+rBt2WN7M0SLNz5a40DguQ1bj9WytcKAVMgtHexDAUSEFboJHsFgFmb88d3wVw/CYINc2LdRbie++kcvANNvw7kdQbNVFuf24XUXt+S2OCI3Q/k3X4iIrucqL6LealeG0mpzOK9IbN/UNmFahnxxvSK9ITqlcxiOxbQ6Eqst+rxHM0ufoJhi+5pxIfPv9TRsOfUvoLWP6AlfBXsECRHb2v0Z/oU/7Dc/hyYNTk7QbdIgbAFSwiwM0zOse6z5cXCJ4rbDt+q5xzMPJyvGGU0P1OolvjxkKFvOIDYUe6IiBI8V96YjoiaAzdxgWAJ6p/+Ty1idJTg8aM0mIq183pIHYMjjmA/f0s1YFteC0s/sNzeF7oBTgxhv8FLDGEwxoX18IAAAAGYktHRADTAAAAADcWvvYAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAHdElNRQflAxsVFgU8+qocAAAK90lEQVR42u1da3AT1xU+ayhNbyYTJpNHO2UgTRtCCiQUaJPQkLaAAQMmYHCwCTjB4IdkW1hYfiHjt41sbOSn5BeYV2weAQIuODycTELDhCQ4FAgFEkhxCRPCdIZfd9o/aX/c1dXVai1btoX3ru43+rG6e1d7zr3ffuecXe2uNH16PAgIDDVGSpIkRkFAEGuwOGdpULS8VJEoeDD0xAoJCXbFEiMQCEivvGIMHm/Pmh2AEGDsbnJ9nWE3CjaIUDgQfJJaDwAerGK+ilxThMLBYmZNMl0+Y6oDhAjt2PaA4oypTmGGDkPhzJkpQcKnj1NqycJrtSnKdldAVKwKkAEUAd2dCIVDjI+SaxQtf6ozeRxM3i4HLCB6GEPTO9eCjuOv3kLhh8bqPuo+hD5KrvmLY72yE0KA8eBHQ2kAQm7i0vQOY2JASIh+a21JX1ChC8CHxmpJkmY5U1nRopjlTJ3lTAWMASHSc8BQoTXGgLG8C5c9s5ypkt6hn1DYlWhnv85uMLONCjc/MFSRDt7wscovsD8iSdCVaCeiOLvBHAwFqD6rwtCmDYoo05VoD23awMYjFcd9rOr3fgHgVPxWQIhwmm3p7cdPxW+lPfVTFYaGpunGmZNxlWRhbnOaooVgXovlxLoKmvfQbqrbDtYSNrvyuUcFhsQAURUG5nCRpBPrKlRXubmFEJlaucVHzeg/PBjsksN5LRb6272Zp5tSUZo/P103fOqM3QIAYdvT6bJ33Uc6dMZuUV7bcYFsDgDtP3T52Ff0k7P7aY/iZ+V2Vs+oSWqdeSVWWFiGXvPH42vKVdsXtGZ4rHUxbEFrRtvd0+7sG3zNbhe4ebDyqTn93PuC1gy5HSHAmFjivYmiXYRCLWLhjkyycOztMjbWLNyRKbdgDAD3bVPb4PQcyT2jvsdlDrh7nr4rE+LNn4e6d+SpSUq2YbxwRyY79tQ8fURDPV8rDN+VpXoSkrpMOuy+cxIAQkMy+yRTr8WgJHP31PdlihqT7KIjxkaWO2JsVCB9jLwOJkW3inV09WYAWLw720d2vOu7EwAwd8TAKaUs6EZkAsBJWxkAjM7qpvsiZnTEbCasIl97G/jFu7N1MCf6JNaRVaUsh+hXtnHn7ffnjsgKxN7Jz5602d4aM191dL3H/MiqUp1dQNT132YQ8qAUQoDx0jbrztudADD/J1kBvVI3PyTr/du2NWPDyNfDK0tofFSMubwKAACWtln1cQFRn4oV0Z5zKLrYnTgTMcA4oj2nted42KjsoYp9vhE2KruzZzMAxI5b0JtiHYoupjlZRHuObmZDtznWsr2bAOBgVBFbmm2/dTxs1MYHaQbZXeetUva8Bh3zg1FFbPGop7mQli/PheBA882/Lvipdbj2fvy/JSSdVwRrwqrI/XqbBSkyMi8YWNV0o2PhQ9bhteHYf0pGZ3V7n99644AOpyAobqZo/Oboop9ZteDninfz9y3P77NI1INiRUUV6JtVzutHwlGORozpwMWG8a+3R+QBQPQhPY98kNz+pRUfw9GmjutFKw8XQu8nSAWxOED91cOLH87VlIeLH849eq0wacJSfR/K+r+vUJsO6n7Y9axYNV8dXPKIFguuJY/kvXelwDRxmSAWt7mVpGXb9Dzyug2F9osHIh7N16xvEY/mH7qcb34hUigWj3IlCQsFsYYSlRf2LRtdKKgvQmEgyi6tWxj5WOGBC7npU6OEYnEWCUW8FsQKrnowKIilv1C4+bN3VjxezItXek1FdHsntDBVECt442D0kyXt56zWl1eLUKgJ1L6W6t2Y8nEVd5m7jqMhT4pVM9PzMXz0kRsYU7aZzlRzF190GTT4IFb1qyYlnzBWfaQHcYevmRLEGm647uKiDamfyM8hrvpjCulQ/arp/t+mCsUSxOob9hnJNOSZz9apJunms3X2GcnMw4/5Uyy3my6PeCeWKPe05JT73kOhWA8KaZ/W92Zs5ctJ7KzwUhXuvpNZ9Oe1ErUfPJ44TxrTPq0XijXccsVhKHRTCgAALOfqK15KUnSwnOOPW5LF4tC+lVv+YKRqlP6ZQ27xPvXg6mD9oOWtMeXa92vn7Qz29mjiGsGPP/6P5Ry7SijWkMKlRjKlFK8PwRgAMj53ULniKUdBCDDO+NzB2jxihMfbNIjXxEGRYz0IngHGmV842QhYNt1wv2sqL2lW5hfOsukGACj/vZE6ouIsQqQP3Uoo1hAg67yzP7mXbZqBo/qxtSfdFhpX1g+bs847Zdf4qRlH8nVZDQBs0xKZEW9QjSyjs7pbbelrxm7Rfo7L5oiEPVnnG2QfvYtcjNVd1h5CJAn4+ihIZpuWSFdldzfwcni09qSXzY0nNmd3N7BXFNxHDsYAkN3dIHuNENEqLj485Vilv0tQSdt7uSRSPi+h9UR67DjtihZr9sYvG2XvGL82ftnoHfV4ma+R/OXuTNpOpoFOifVCo/VCY8mUBC5qQzeTXMaTBWI/a3zJlATCNuuFRl7mixvFKn4xnh7KOX9vkltoxaSQLoRKpiTkSE3bOtPXPl2hNV+2/dPi8XQ/hFg+Ee8osWQ3uZIr3hQLYwDYdLGJ2LzpojwBRS/Eu8nnVS1qzcGWby3K5/p5RvbiF+Opa6zv1HGhWAFPTQhyLzUXTo7zSL9cArZ1oaHlmCXumUptHiS5l5ppg+wCACBED5XcS83UO75mKoS7YrBwclzh5DjF2rzLzXmXmxV//SOr7IsMzTe18gbA5ptp9kUGhYXUBTfnXH+OZb3jq3jn5p3Q+V+10HQEAAomxRVMivP9QmjaATxfAj1caL6ZVhVuLJgUx6qvwkfykbmFkLePvICntyDII87Qy7uDPDGeqAo3Nt0Y5hfjNt3YUBVu9M9TjAEgf+I64BB8Xitk/rSkur7gyjZFxV69OKnp6Ib4X9uHiVVmam3BlW15v11Ljo38ieuoqX6llRykwgUF23g8IHKfXwsAhf/wz3jTkfqE3zxobjV+Y655PUnVfvYtrwpf5A7++ygUa1Aourp9AKcSapckN75nTnz2wXGr4Wtz7ZJkyYf0uriV+/xa4tSmCbG8yxUASEVF2yHIkHy4DgAM4wNOL+d1c93SZN99cp6LdWeNaje0FV/jcoKC5DnvHqiPSAEA5yFz4LjlvG4mO+rv4KpRCgBKrrdyOj9SSckOCFYYD9YAgGF81VCzKtWxzDSADTc++zZdLv2a73mRSkuDl1gEhndrAMD43GDp5bgmP1HCudwEQY9gDIXK/DpyPQA4Dsi0SJpQ7Xdsvbqe/g5w98/JABFLDAFLLwCoP+Dx6BFVnhEmeW8rIBRLicxnYuQl1wvIy27uAoD6/SqkaXzD4zlKYgRViSUGQQ0IEaqVr9jFNmf8KgYAMiGm/NtdYpCEYvlC+tOrCZM8av6+rhqJcROK5R8qbu0GAMu41S4CqYgZYCzGTShWvwIfYFzZs4cyqbJnT9rYVUKxhGINAVTFKW3sqq3/2tOvzgJCsSjMY96kGVV/xQlj++13BLGEYg1EsVJ/yRKOaRQJVv8QAiAF86fquzY5xwLwXOVBOa9GSXx8f4RiydGt+k6bcigQUm8XCZbIsfqE6RfRAzhfJUpCkWP5wbDa79sVMtabOFE6AoByKwGhWABQd3dv8lNRCh2iLaoloVAvoVj+ACGWTwT1P+xVHx/m+o8YQKFY6nDc22d8YoVbilykcdzb19v1HMDYcW+fIJZQLP8qRFXGGB5f4WOtgFAsFTT8e79a6eersxg23/g/mXvYz95OsgMAAAAASUVORK5CYII=
"""
####
helix_Icon_b64=\
"""
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
"""
####
ClockArabicAxis_Icon_b64=\
"""
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
"""
ClockRomanAxis_Icon_b64=\
"""
iVBORw0KGgoAAAANSUhEUgAAAMgAAABaCAIAAABylI6BAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAKnRFWHRBdXRob3IARnJlZUNBRCAoaHR0cDovL3d3dy5mcmVlY2Fkd2ViLm9yZylLpZ5SAAAAKHRFWHRDcmVhdGlvbiBUaW1lAHZlbi4gbWFycyAyNiAyMzozOToyOCAyMDIxNyAJugAAAYp6VFh0RGVzY3JpcHRpb24AACiRVZLdTuMwEIXv+xSW7+P/3W0iN4gFIa1E0YpSxK0Jo2AgDnLcpvv2a6dNwb6wdGaOP8+MrS8O3Qfagx9s71aYE4YRuKZ/sa5d4e3DTbHEFzVa6PWf35coet1QHQa7wq8hfFaUjuNIRkl631LBGKdP69tN8wqdKawbgnENYBT9levvTAfDp2ngmL/tGxOmO0+ktx34FlzhLbTwQRwEurbPZtoEOQwvGD3OZQocS0L60cJYLxDSaxO8PcRQWobzFWaElazkCkcpJjmtJGUu1VFKUf7AJ4DgmUWIjCdygIiAYiLwks8EmRNkXoKMhOIXI0umxFKmwMyIFDUzVM5QOUPlVSg1Pd5RJgCNg9H0NCG96Xe+gWlWVx5M6H29de+uH52mc+CcjCO+NgHqPTiCOuMHJH4iIStZVmKJBBP8dGg2fp107ebfEKCrbzzA1eU1YoSXs/ucTP6/xoe7XfcM3yr5FkuWe9jb9N51bEzTs0p9zf1omv5lvfgPa47A6yDhDRkAAAAQdEVYdFNvZnR3YXJlAEZyZWVDQURjGmLPAAAALXRFWHRUaXRsZQBDOi9Qcm92aXNvaXJlNDAwL0Nsb2NrUm9tYW5BeGlzXzAwMC5wbmcZq+c1AAAIpElEQVR4nO2ca1cbxxnH/6PjV88naJvGadO0LjhxnGtPnNaN4xIf05NzGiclAWOHYIwoRiAJAcYYkEBgYu4gg7kEOzZgJ24uJ2mbOCklcWP7tOfUae3m1jRN4ksvX2Be98WIRQJJLIbVambnd/bF7Oyu5v/MPHqe3Z2R2P33l0KjWW3WMMbs1qBREO1YGktY43Jpx9KsPjpiJeWCbwhEm9qKFuxeaDgOzjf1lhsFW2VmKNqxkvJw377zB45d8A093LcPAIjAudFdiwuaWHQqTAnnIDrvPSK86icDFS5X9IjRb7oDE+LciHXOM7h50JP6nM2DnnOeQRCJcmxX6YiVGic61vsVAwBAdM4z+NNIpcmrFnSUdqzUOC4Vzpb3g2hL115RWNp8IpEQ368Y2DJUZVQvNxXOlvfHXq48LuYwhNmMsUeHvQBmy/tTnDwbGAPw6LBX+NaCTzAKSyKceMXaZcIRqXCmrFcUth71AZh/uJtzl+RX0dYeN2PYetQ34x/5Q/Xo1h63OMpMp8KZst4FT5ROwDGpkAjAjH8EIHAurM4Z9b/rPTrjH8npK0t81dyZogzhJRwQGZBzmEmFRKIt44nSCbCcnGq7NaSJd/Z2izEGAM4fG6uer5zbtapRyz4/Y3FEKhRsGw8AOFs5BABE71QNg/Nt44GzJV2w7uGOSLTimG6O4phUGAvn2ydq3iruBNHZyqHtkRoAVuSpt4o7Ado+UeOoJChwUMQyyD1Wyxhyj9X+7rnDomwVzrtnN2C5uXV2a0gfvy16HkQ/H1rihbtm5TgvFcY+6Gksgz3+eL3dGjQK4sR7LE0aUCQVvlbQ9sR0g90qNPOoELFezQ+nmJnR2ALbsaPRbg2rwCvF3eD8ydPS2/LKM60genJC+tf0iqRCMZ0stS1n8lpAFDuVKTUqpEKDM3ktC2ryzjTbomRZvPzLkOFSQvCZvJAUylPA8vKCdmu4eV56Kjg/r7yIp0/UplPMTfDSU0EguvxBqJ23iPOnfx20T9pKkTwViuWd8bv5r4bEnhwzdHOaXS6c2tEsvCp/sg6y6E8Cy89fmD7kZXpnB4CCqf12C1k20080GYGq4DUVRkSpe6zUK0IzlqmCQ+IGa+frrQBkk58YyVNhPLveCJ98pn3qF4273gjbrWU5cC4ES537FqBWxEJ0AbFcRu1+s00qvaZQzbGe/U07VMkmUqNUKtRkDqpFLE2GoB1LYwk6FWosQUcsjSVox9JYgk6FGkuQL2INbfGXz/aYr9fYgnyOBaKhLf597/UaFUce8YEIXLIX7gk58ogvYX2svVIgYSrkHERHchs8b7cDGNzsFStPPOf6VJhrS7K8TLphYh5Pv90aboaBbTE/h+S88o9SWqEwEqZCAefGAqaqDwYkNWIx/T9O/J+oVR8MpFnJCpHSsfpy6sQCJu/5wb6cuv7H9ouy3bpWgySpULphYl5vxG4Ny6P3Z7UAfL8/PF+zqULcZvkuSGaLwqyR7ZsAcO6/GImV7b8Y6XmoAkqslhGGLMZ/UbLvjJSpMFnvy2jLQlRJhRJGrGS/9+JcPlsWEZjtTFgvnWnyRaya97qSHZLNFJWRMGJpZEC+iKWRAh2xNJawBtCepVl9FIlYh+4tE+9I6y8dtVuLBlDjHqv9HrfxDkIBc9RA7ojVttFt/LNUw19HALTf4xYF6WjbKKvyhMgascJ3lxoudfBvowDaNkZrZLRImNO2yWeYIzvSRiwicN54eRTxTtZ4eVQ6i1o3lApDWjeUgij8kNcwTV5YY+OY3RpWRMuPqgCA86YrYwBa7toLoqY/ybTub6EJ8buSwpqaZFUfunOvsdav+e9jCWukIIUhzX+W6RsSi6z3WACCH40H15cEPxoHELqzxMiGokYWswwTgutLQBR6sMowIbi+RN7RYc3N43ZrWBFiPAAY4yERi8VLbU4sEkesKETgPPTxC4iJUs3Ze0RB1Gcmzdl7hLzm7D0gCj5QaRgiDkk9MiwUytyuN0lTVtSNFi/VavlL5i6Eb7rPAwCct3zyAoQVRMhszeZxMfkBkZE+wHnrpUj0P7o5t1taKlovRQCAqClrD2Os9dMJIbvpPo/d0lYBad9jxRD+MG49OGPR/Bj+bCLDrQt/GDm4rhhEjfdWCMEADq4rznDZZmDh8DG7NawyDRv3gfO2f8hkV8MPnjOCrlzKkyH/zXs8B+4uB9D++XG5zGr//DiAA98vgirz6CqkQoP6DeUADl0eSmhU/R1Fh/55PM2SloWQp8aIqBaxOq4MJzWIqP6Ooo4vXkyrIKeiwP+zzNNxZTjZof13/QpAxxcv7v/es6KssRTVIlZC6m7fLWZ7mHg3IQppahfP/+tEGtrKNFyMQflNONPhL0+IkT785QnjUN3tu61tl8jSJjJ2Uz9i1XxnF0CdX500PMwwuSbbDVDtd3d3fnXSquY5B1Ht+rLOj9VZHWoGpZ4KExN1JgSy3AC6vj4pTA5kuY0/2bKqEzgH0PXJSCDLXZPtBuddX1vmwRmG4hGrem0hQN1XJwO3FRq3WdVrC4W3dV+drP5haffVSQv7gIgx1v3pqGg0cNuu7quTljWWQSgesXquTSJmkqfn2qThVdEyKEUP+G8tBFHPZ6MJd00iPr/n2qS4vHptoVClNipMQptBZCX/ulLhVb3Xp9icQ6W6Kv4EkTf9txaabLT3+lTs5b3Xp4ymlUfxiGXQd2MKgPeWnaIQtXru9is14gTvLTtFMgWlCnKL8X072qiQ4ZAOdwHMOVvfjen4GkGKS2JOIALnfTemEXUyk40u2YSam1MiVgrMRKyqbxUA1P/vaeNks/3GeexVzkHxp8Il4HzgP6dMOBaLK0Szoal+M/P5SuKIN+/JtsH/nkp9giDmzWr0KgCV38y3XX8mb86OWObwfCMfoMj/Tsd1lemg5UxYJHLabg0aBdERS2MJ+qlQYwk6Ymks4f9F+9KmnMxKIgAAAABJRU5ErkJggg==
"""
ClockArabicRedress_Icon_b64=\
"""
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
"""
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()
@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