Macro FCCircularText/it: Difference between revisions
(Updating to match new version of source page) |
(Created page with "File:YamahaDrumBadge00.gif|Utilizzo esemplificativo ([https://forum.freecad.org/viewtopic.php?t=82577 Curved text on a flat surface?])") |
||
(71 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
<div class="mw-translate-fuzzy"> |
|||
{{Macro/it |
{{Macro/it |
||
|Name=Macro FCCircularText |
|Name=Macro FCCircularText |
||
|Translate=Testo Circolare |
|Translate=Testo Circolare |
||
|Icon=FCCircularTextButtom.png |
|Icon=FCCircularTextButtom.png |
||
|Description=Questa macro utilizza lo strumento [[Draft ShapeString]] per creare una riga di testo posizionata con diversi orientamenti circolari, inclusi circonferenza ed elicoidale (alla maniera di una colonna Traiana). Può anche essere usata per creare un quadrante di orologio con numeri arabi ''1, 2, 3,'' ecc., o numeri romani ''I, II, III,'' ecc. |
|||
|Description={{ColoredText|#ff0000|#ffffff|La nuova GUI della versione modificata per l'HD dpi (QGridLayout) esegue solo la versione FC 0.18 e successive (PySide2 Qt5)}} <br/><br/>Per la versione precedente vedere [https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/db47f78f2b20a35137ac213b8d1a62d30f525dcb/Macro_FCCircularText.FCMacro FCCircularText] and install it manually. <br/><br/>Questa macro crea un testo intorno ad un cilindro.<br />Ultima Versione=0.14 Date=2019/04/27<br />Download the [https://www.freecadweb.org/wiki/images/c/c1/FCCircularTextButtom.png toolBar icon]<br /> |
|||
|Author=Mario52 |
|Author=Mario52 |
||
|Version=0. |
|Version=0.22c |
||
|Date= |
|Date=2023/11/17 |
||
|FCVersion=0. |
|FCVersion=0.19 è più |
||
|Download=[https://www.freecadweb.org/wiki/images/c/c1/FCCircularTextButtom.png ToolBar Icon] |
|Download=[https://www.freecadweb.org/wiki/images/c/c1/FCCircularTextButtom.png ToolBar Icon] |
||
}} |
}} |
||
</div> |
|||
<span id="Description"></span> |
|||
==Descrizione== |
==Descrizione== |
||
Questa macro utilizza lo strumento [[Image:Draft_ShapeString.svg|24px|link=Draft ShapeString]] [[Draft ShapeString/it|Draft Forma da testo]] per creare una riga di testo posizionata con diversi orientamenti circolari, inclusi circonferenza ed elicoidale alla maniera di una [http://en.wikipedia.org/wiki/Trajan%27s_Column Colonna di Traiano]. Può anche essere usata per creare un quadrante di orologio con numeri arabi ''1, 2, 3,'' ecc., o numeri romani ''I, II, III,'' ecc. Quest'ultimo utilizzo è stato ispirato dalla discussione del Forum [http://forum.freecadweb.org/viewtopic.php?f=22&t=5013&hilit=Clock Macro per creare il quadrante dell'orologio] del membro della comunità FC, cblt2l. |
|||
<div class="mw-translate-fuzzy"> |
|||
Questa macro usa [[Image:Draft_ShapeString.svg|24px|link=Draft ShapeString]] [[Draft ShapeString/it|Draft ShapeString]] è scrive un testo, in piedi o coricato, circonferenziale o elicoidale nel modo di [http://en.wikipedia.org/wiki/Trajan%27s_Column Trajan Column] e crea un orologio con numeri arabi '''1 2 3 ...''' o Romani '''I II III ...''' (ispirata a [http://forum.freecadweb.org/viewtopic.php?f=22&t=5013&hilit=Clock Macro to Create Clock Face]) FC community member, cblt2l. |
|||
</div> |
|||
{{Codeextralink|https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/ |
{{Codeextralink|https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/7ab8a1e9dd7f924a62ecef83ec1d2ad8723e37d6/Macro_FCCircularText.FCMacro}} |
||
[[File:FCCircularText 01.png|400px|texte 360 degrees]] |
[[File:FCCircularText 01.png|400px|texte 360 degrees]] |
||
{{Caption|Esempio di macro che mostra il testo con un orientamento a 360 gradi}} |
{{Caption|Esempio di macro che mostra il testo con un orientamento a 360 gradi}} |
||
<span id="Usage"></span> |
|||
==Utilizzo== |
==Utilizzo== |
||
Usare la macro '''FcString''' per creare dei caratteri e il file '''FcClock''' per creare degli orologi. |
Usare la macro '''FcString''' per creare dei caratteri e il file '''FcClock''' per creare degli orologi. |
||
<div class="mw-translate-fuzzy"> |
|||
Tutti i caratteri sono e rimangono indipendenti. Quando si creano le estrusioni non viene eliminato nulla. Se viene creato un Compound (oggetto Composto) con {{Button|Run Comp}} esso viene copiato in una nuova cartella. |
Tutti i caratteri sono e rimangono indipendenti. Quando si creano le estrusioni non viene eliminato nulla. Se viene creato un Compound (oggetto Composto) con {{Button|Run Comp}} esso viene copiato in una nuova cartella. |
||
</div> |
|||
Di default le opzioni sono disattivate e si attivano quando si seleziona {{CheckBox|TRUE|}} una delle funzioni: |
Di default le opzioni sono disattivate e si attivano quando si seleziona {{CheckBox|TRUE|}} una delle funzioni: |
||
Line 40: | Line 37: | ||
Fatta eccezione per la casella '''Z''' di Placement per Clock che è attiva e che sposta il testo lungo l'asse Z per consentire posizionare il testo sulla superficie di appoggio. |
Fatta eccezione per la casella '''Z''' di Placement per Clock che è attiva e che sposta il testo lungo l'asse Z per consentire posizionare il testo sulla superficie di appoggio. |
||
<span id="Notes"></span> |
|||
==Nota== |
==Nota== |
||
<div class="mw-translate-fuzzy"> |
|||
Le opzioni che sono facoltative per la funzione selezionata sono inattive e quindi non utilizzabili. |
Le opzioni che sono facoltative per la funzione selezionata sono inattive e quindi non utilizzabili. |
||
</div> |
|||
<span id="Interface"></span> |
|||
== L'interfaccia grafica di Circular Text == |
|||
== Interfaccia == |
|||
Panoramica |
Panoramica |
||
Line 53: | Line 50: | ||
{{clear}} |
{{clear}} |
||
<span id="First_section"></span> |
|||
===Prima sezione=== |
===Prima sezione=== |
||
Line 58: | Line 56: | ||
{{clear}} |
{{clear}} |
||
<div class="mw-translate-fuzzy"> |
|||
* La finestra di editazione del testo che consente di inserire il testo da visualizzare (cliccando su {{Button|Reset}}, nella finestra del titolo si può vedere quanti caratteri contiene la stringa di input) |
* La finestra di editazione del testo che consente di inserire il testo da visualizzare (cliccando su {{Button|Reset}}, nella finestra del titolo si può vedere quanti caratteri contiene la stringa di input) |
||
* Il pulsante {{Button|Reverse}} serve per invertire il testo |
* Il pulsante {{Button|Reverse}} serve per invertire il testo |
||
* {{CheckBox|Word}} selezionata, questa opzione considera il testo come parola, il testo viene tagliato nello spazio e scrive il testo parola per parola (invece carattere per carattere nell'uso normale) |
|||
* LineEdit : visualizza il percorso e il nome del font del file |
|||
* Il {{Button|Help}} visualizza la pagina wiki nel browser FreeCAD |
* Il {{Button|Help}} visualizza la pagina wiki nel browser FreeCAD |
||
* LineEdit : visualizza il percorso e il nome del font del file |
|||
* {{Button|Other}} per cercare altre font in altri directory |
|||
* ComboView per il font scelto |
* ComboView per il font scelto |
||
* {{Button|Origin}} ritorna al l'origine sistema font ex: "C:/Windows/Fonts/" |
|||
** ARIAL.TTF è il font di default |
** ARIAL.TTF è il font di default |
||
</div> |
|||
<span id="Options_available"></span> |
|||
====Opzioni disponibili==== |
====Opzioni disponibili==== |
||
Dopo il primo utilizzo, è possibile modificare i parametri vedere: |
|||
<div class="mw-translate-fuzzy"> |
|||
Dopo il primo utilizzo, è possibile modificare i parametri vedere: |
|||
</div> |
|||
'''User parameter:BaseApp/Preferences/Macros/FCMmacros/FCCircularText''' |
'''User parameter:BaseApp/Preferences/Macros/FCMmacros/FCCircularText''' |
||
Line 117: | Line 115: | ||
{{clear}} |
{{clear}} |
||
<div class="mw-translate-fuzzy"> |
|||
[[File:FCCirculatText Config 1001A0.png]] |
[[File:FCCirculatText Config 1001A0.png]] |
||
#switchModeTextList= {{TRUE}} |
#switchModeTextList= {{TRUE}} |
||
#switchFontComBox = {{FALSE}} |
#switchFontComBox = {{FALSE}} |
||
#setSystemFonts = {{FALSE}} |
#setSystemFonts = {{FALSE}} |
||
#seTtextAlignement = 1 ''(0=Left, 1=Centered, 2= |
#seTtextAlignement = 1 ''(0=Left, 1=Centered, 2=Right)'' |
||
{{clear}} |
{{clear}} |
||
</div> |
|||
[[File:FCCirculatText Config 1101A0.png]] |
[[File:FCCirculatText Config 1101A0.png]] |
||
Line 133: | Line 129: | ||
{{clear}} |
{{clear}} |
||
<span id="Second_Section"></span> |
|||
== Seconda sezione == |
== Seconda sezione == |
||
Configurare i caratteri in FCCircularText |
Configurare i caratteri in FCCircularText |
||
Line 139: | Line 137: | ||
{{clear}} |
{{clear}} |
||
<span id="First_zone"></span> |
|||
====Prima zona==== |
====Prima zona==== |
||
Scegliere: |
Scegliere: |
||
Line 171: | Line 171: | ||
</center> |
</center> |
||
<span id="Second_area"></span> |
|||
==== Seconda zona ==== |
==== Seconda zona ==== |
||
Questa sezione permette di configurare il comportamento complessivo dei caratteri in tutte le scelte disponibili, ma con qualche variazione. |
Questa sezione permette di configurare il comportamento complessivo dei caratteri in tutte le scelte disponibili, ma con qualche variazione. |
||
I comandi non utilizzabili con l'opzione scelta sono visualizzati in grigio. |
I comandi non utilizzabili con l'opzione scelta sono visualizzati in grigio. |
||
Line 189: | Line 191: | ||
=====Outdoor===== |
=====Outdoor===== |
||
Modo di default. Il testo viene scritto all'esterno della circonferenza del cerchio. |
Modo di default. Il testo viene scritto all'esterno della circonferenza del cerchio. |
||
Line 200: | Line 203: | ||
=====Indoor===== |
=====Indoor===== |
||
Il testo viene scritto all'interno della circonferenza del cerchio |
Il testo viene scritto all'interno della circonferenza del cerchio |
||
Line 211: | Line 215: | ||
=====Helix===== |
=====Helix===== |
||
Il testo viene inserito all'esterno di un'elica. |
Il testo viene inserito all'esterno di un'elica. |
||
Line 234: | Line 239: | ||
* '''End Helix''' Fine di passo dell'elica che è calcolato rispetto all'altezza e al numero di caratteri per spira. |
* '''End Helix''' Fine di passo dell'elica che è calcolato rispetto all'altezza e al numero di caratteri per spira. |
||
=====Clock===== |
|||
=====Orologio===== |
|||
Le figure sono parte di un cerchio con numeri arabi o romani. |
Le figure sono parte di un cerchio con numeri arabi o romani. |
||
Line 278: | Line 283: | ||
* {{Button|Axial}} : I dati sono scritti assialmente. |
* {{Button|Axial}} : I dati sono scritti assialmente. |
||
===Path section=== |
|||
[[File:FCCircularText_06_Path.png]] |
|||
{{clear}} |
|||
La sezione del titolo cambia e visualizza la lunghezza del filo selezionato. |
|||
Se selezioni un filo, un arco, un cerchio, una linea e un bordo, il percorso della sezione è colorato in {{ColoredText|#E0F8E0|green}} e il comando inutilizzato è colorato in {{ColoredText|#F8E0E0|red}} |
|||
#{{RadioButton|Orthogonal}} il carattere è ortogonale alla vista |
|||
#{{RadioButton|Tangent}} il carattere è tangente al percorso del punto sul filo |
|||
#{{RadioButton|BB Base}} il punto base del carattere deve puntare il percorso sul filo |
|||
#{{RadioButton|BB Center}} il centro del bounBox del personaggio deve indicare il percorso sul filo |
|||
#{{RadioButton|BB Top}} il boundBox superiore del carattere deve indicare il percorso sul filo |
|||
l'ultimo pulsante di opzione utilizzato viene salvato nel parametro di FreeCAD |
|||
<span id="Command_section"></span> |
|||
===Sezione comandi=== |
===Sezione comandi=== |
||
Line 287: | Line 311: | ||
* {{Button|Run Comp}} : Lancia la macro e crea un oggetto Composto da tutti i caratteri. |
* {{Button|Run Comp}} : Lancia la macro e crea un oggetto Composto da tutti i caratteri. |
||
* {{Button|Run}} : Lancia la macro |
* {{Button|Run}} : Lancia la macro |
||
<span id="Parameters_available"></span> |
|||
===Parametri disponibili=== |
|||
Alcuni parametri sono disponibili nei parametri di FreeCAD vedere:{{MenuCommand|Menu → Tools → Edit parameters...}} |
|||
*User parameter: BaseApp/Preferences/Macros/FCMmacros/FCCircularText |
|||
**{{incode|switchModeTextList}} : |
|||
***{{FALSE}} normale modalità di testo (e nero) si trasforma off switchFontComBox |
|||
***{{TRUE}} permettere switchFontComBox 1 (default) |
|||
**{{incode|switchFontComBox}} : |
|||
***{{FALSE}} (é switchModeTextList = 1) modalità testo (a colori) nell'elenco ComboBox più veloce (predefinito) |
|||
***{{TRUE}} (and switchModeTextList = 1) Famiglia di caratteri nell'elenco ComboBox più lento ma più bello! |
|||
**{{incode|setSystemFonts}} : |
|||
***{{FALSE}} matplotlib.font_manager.findSystemFonts ("C: /", "ttf") fare tutti i caratteri (in tutte le cartelle e sottocartelle dell'HD) tempo !! |
|||
***{{TRUE}} fontman.findSystemFonts (self.pathFont)</br>crea tutti i caratteri nella directory (e in tutte le sottocartelle) (predefinito) |
|||
**{{incode|seTtextAlignement}} : 0 = AlignLeft (default) 1 = AlignCenter 2 = AlignRight |
|||
**{{incode|setFontByDefault}} : Carattere predefinito (l'ultimo utilizzato) |
|||
**{{incode|switchResetFALSE}} : {{FALSE}} reset (default), {{TRUE}} no reset (non consigliato) alcuni interruttori possono rimanere aperti o chiudersi inaspettatamente! |
|||
**{{incode|setPathOrthogonal}} : {{TRUE}} {{FALSE}} |
|||
**{{incode|setPathTangent}} : {{TRUE}} {{FALSE}} |
|||
**{{incode|setPositionBase}} : {{TRUE}} {{FALSE}} |
|||
**{{incode|setPositionCenter}} : {{TRUE}} {{FALSE}} |
|||
**{{incode|setPositionTop}} : {{TRUE}} {{FALSE}} |
|||
**{{incode|switchVersionSearch}} : {{TRUE}} {{FALSE}} |
|||
**{{incode|Version}} : FCCircularText versione |
|||
Usare la macro '''FcString''' per creare dei caratteri e il file '''FcClock''' per creare degli orologi. |
Usare la macro '''FcString''' per creare dei caratteri e il file '''FcClock''' per creare degli orologi. |
||
==Script== |
==Script== |
||
Scaricare lo script da: |
|||
L'icona per |
L'icona per il pulsante: |
||
- in .PNG [[File:FCCircularTextButtom.png]] |
- in .PNG [[File:FCCircularTextButtom.png]] |
||
Line 301: | Line 351: | ||
Per maggiori informazioni vedere [[Customize_Toolbars/it|Personalizzare la barra degli strumenti]] |
Per maggiori informazioni vedere [[Customize_Toolbars/it|Personalizzare la barra degli strumenti]] |
||
===Script=== |
|||
<div class="toccolours mw-collapsible mw-collapsed"> |
|||
===Vedi il Codice=== |
|||
<div class="mw-collapsible-content"> |
|||
'''Macro_Circular_Text.FCMacro''' |
'''Macro_Circular_Text.FCMacro''' |
||
{{MacroCode|code= |
|||
# -*- coding: utf-8 -*- |
|||
from __future__ import unicode_literals |
|||
""" |
|||
*************************************************************************** |
|||
* Copyright (c) 2014 2015 2016 2017 2018 2019 2020 <mario52> * |
|||
* * |
|||
* This file is a supplement to the FreeCAD CAx development system. * |
|||
* * |
|||
* This program is free software; you can redistribute it and/or modify * |
|||
* it under the terms of the GNU Lesser General Public License (LGPL) * |
|||
* as published by the Free Software Foundation; either version 2 of * |
|||
* the License, or (at your option) any later version. * |
|||
* for detail see the LICENCE text file. * |
|||
** ** |
|||
* 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 # |
|||
# |
|||
################################################################################################## |
|||
#OS: Windows 10 (10.0) #OS: Ubuntu 19.04 |
|||
#Word size of OS: 64-bit #Word size of OS: 64-bit |
|||
#Word size of FreeCAD: 64-bit #Word size of FreeCAD: 64-bit |
|||
#Version: 0.19.21280 (Git) #Version: 0.18.16131 (Git) AppImage |
|||
#Build type: Release #Build type: Release |
|||
#Branch: master #Branch: (HEAD detached at 0.18.3) |
|||
#Hash: 6f3160db3e88733536c7eaf97ad7d6ebd21baccd #Hash: 3129ae4296e40ed20e7b3d460b86e6969acbe1c3 |
|||
#Python version: 3.6.8 #Python version: 3.6.7 |
|||
#Qt version: 5.12.1 #Qt version: 5.6.2 |
|||
#Coin version: 4.0.0a #Coin version: 4.0.0a |
|||
#OCC version: 7.3.0 #OCC version: 7.3.0 |
|||
#Locale: French/Mars (fr_MA) #Locale: French/Mars (fr_MA) |
|||
################################################################################################## |
|||
# |
|||
__Title__ = "FCCircularText" |
|||
__Author__ = "Mario52" |
|||
__Version__ = "0.16c" |
|||
__Date__ = "2020/07/24" #YYYY/MMM/DD |
|||
__Comment__ = "This macro creates a text around a cylinder" |
|||
__Web__ = "https://forum.freecadweb.org/viewtopic.php?f=3&t=7384%22" |
|||
__Wiki__ = "https://wiki.freecadweb.org/Macro_FCCircularText" |
|||
__Icon__ = "/usr/lib/freecad/Mod/plugins/icons/FCCircularTextButtom.png" |
|||
__IconW__ = "C:/Users/YourUserName/AppData/Roaming/FreeCAD/Macro" |
|||
__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" |
|||
# |
|||
#### Test FreeCAD.Version simple ############################################################################################################ |
|||
if int(FreeCAD.Version()[1]) < 18: # Version de FreeCAD |
|||
FreeCAD.Console.PrintMessage("This version " + __Title__ + " rmu work with the FreeCAD 0.18 or higher." + "\n\n") |
|||
FreeCAD.Console.PrintMessage("For the precedent version see the page " + "\n\n") |
|||
FreeCAD.Console.PrintMessage("https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/db47f78f2b20a35137ac213b8d1a62d30f525dcb/Macro_FCCircularText.FCMacro" + "\n\n") |
|||
#### Test FreeCAD.Version simple ############################################################################################################ |
|||
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 ########################################### |
|||
def vesionSearch(): |
|||
import requests |
|||
contentPage = requests.get("https://wiki.freecadweb.org/Macro_" + __Title__).text |
|||
for i in contentPage.split("\n"): # list page to line |
|||
if "ctEven macro-version" in i: |
|||
versionDetect = (i.split(">")[1]) |
|||
if "ctEven macro-date" in i: |
|||
dateDetect = (i.split(">")[1]) |
|||
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.exec_() |
|||
except Exception: |
|||
None |
|||
# return versionDetect, dateDetect |
|||
# |
|||
#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 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) |
|||
# return unicode(encoder).encode('iso-8859-1') |
|||
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 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 |
|||
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 = 10.0 |
|||
global correctionRayon ;correctionRayon = 0.15 |
|||
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 PivotCharachter ;PivotCharachter = 0.0 # pivot character sur lui meme |
|||
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 roman or arabic |
|||
global redressement ;redressement = 0 # character V or circular |
|||
global comP ;comP = "" # contener |
|||
global nameL ;nameL = "" # contener |
|||
global epaisseur ;epaisseur = 0.0 # epaisseur extrusion character |
|||
global epaisSupp ;epaisSupp = 0.0 # epaisseur extrusion support |
|||
global compount1 ;compount1 = 0 # cree un compose des caracteres |
|||
# pointColor |
|||
global red ;red = 1.0 # 1 = 255 [ color num x = (1/255)*x ] |
|||
global green ;green = 0.0 # |
|||
global blue ;blue = 0.0 # |
|||
#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")# |
|||
###################################################################### |
|||
indoorIcon = [ |
|||
"60 46 9 1", |
|||
" c None", |
|||
". c #6F2322", |
|||
"+ c #343433", |
|||
"@ c #CE1416", |
|||
"# c #3E3E6E", |
|||
"$ c #5C5A58", |
|||
"% c #5D5C85", |
|||
"& c #7A7B99", |
|||
"* c #8E8DA5", |
|||
"************************************************************", |
|||
"************************************************************", |
|||
"************************************************************", |
|||
"************************************************************", |
|||
"************************************************************", |
|||
"********************************++++++++++++****************", |
|||
"***************************+++++$$$$$$$$$$$$++**************", |
|||
"************************+++$$$$$$$$$$$$$$$$$$$++************", |
|||
"**********************++$$$$$$$$$$$$$$$$$$$$$$$$++**********", |
|||
"*******************+++$$$$$$$$$$$$$$$$$$$$$$$$$$$$+*********", |
|||
"******************++$$$$$$$$$$$$$++++$$$$$$$$$$$$$$+********", |
|||
"****************++$$$$$$$$$$+++++$$$$+++++$$$$$$$$$+********", |
|||
"***************+$$$$$$$$++++$$$$$$$@@@$$$$++$$$$$+++********", |
|||
"*************++$$$$$$$$+$$$$$@@@$$$@$$$$$$$$+$$$+$$+********", |
|||
"************+$$$$$$$$++$$$$$$@$$$$$@$$$$$$@@$+++$$$$+*******", |
|||
"***********+$$$$$$$$+$$@@@$$$@@@$$$@$$$$$@@@$+$$$$$$+*******", |
|||
"**********+$$$$$$$$+$$$@$$$$$@$$$$$@@@$$$@$@$+$$$$$$+*******", |
|||
"*********+$$$$$$$$+$$$$@@@$$$@@@$$$$+++++@@@$++$$$$$+*******", |
|||
"********+$$$$$$$$+$$$$$@$$$$$$$$$+++****@@*@+@@@$$$+********", |
|||
"*******+$$$$$$$$+$@@@$$@@@$$$++++************@*@@++*********", |
|||
"******+$$$$$$$$+$$@$@.$$$$$++****************@**@***********", |
|||
"******+$$$$$$$$+$$@@@$$$$++******************@@*@***********", |
|||
"*****+$$$$$$$$++$$@$@.$++********************@@@@***********", |
|||
"*****+$$$$$$$$++$$@$$@+*************************************", |
|||
"*****+$$$$$$++$$$$$$+***************************************", |
|||
"****+$$$$$$$+$$$$$++****************************************", |
|||
"****+$$$$$$$+$@@@.+*****************************************", |
|||
"****+$$$$$$$+$@$$+******************************************", |
|||
"****+$$$$$$$+$@@@+******************************************", |
|||
"****+$$$$$$$$.@$+*******************************************", |
|||
"****+$$$$$$$$.@$+*******************************************", |
|||
"****+$$$$$$$++$$+*******************************************", |
|||
"****+$$$$$$+++$$+*******************************************", |
|||
"*****+$$$++$$$+$+*******************************************", |
|||
"*****+$++$$$$$+$+*******************************************", |
|||
"******+$$$$$$$+++*******************************************", |
|||
"*******+$$$$$$$++*******************************************", |
|||
"*******+$$$$$$$+********************************************", |
|||
"********+$$$$$$+********************************************", |
|||
"********+$$$$++*********************************************", |
|||
"********++$++***********************************************", |
|||
"*********++*************************************************", |
|||
"************************************************************", |
|||
"************************************************************", |
|||
"************************************************************", |
|||
"************************************************************"] |
|||
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", |
|||
" ", |
|||
" ........ ", |
|||
" .++++++++. ", |
|||
" .++..+....+. ..... ", |
|||
" .+.. .+....+. .+++. ", |
|||
" .+. .+....+..+.+. ", |
|||
" ... .+....+.+.+. ", |
|||
" .+....+..+. ", |
|||
" .+......+. ", |
|||
" .+.....+. ", |
|||
" .+....+. ", |
|||
" ...... .+...+. ", |
|||
" .++++. .++++. ", |
|||
" .+...+. ...... ", |
|||
" .+....+. ", |
|||
" .+.....+. ", |
|||
" .+......+. ", |
|||
" .+..+....+. ", |
|||
" .+.+.+....+. ... ", |
|||
" .+.+..+....+. .+. ", |
|||
" .+++. .+....+. ..+. ", |
|||
" ..... .+....+..++. ", |
|||
" .++++++++. ", |
|||
" ........ "] |
|||
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", |
|||
" ", |
|||
" ", |
|||
"++ ++. ", |
|||
" + + ", |
|||
" + .. +. ", |
|||
" + . +. ", |
|||
"+++ +++ + ", |
|||
" ++ ", |
|||
" @ + ", |
|||
" @ ", |
|||
" @ @ ", |
|||
" @ @ + +", |
|||
" @@@ + + +", |
|||
" @@ .+.+.", |
|||
" ", |
|||
" "] |
|||
#### 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 |
|||
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" |
|||
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 |
|||
##### |
|||
global switchResetFALSE ; switchResetFALSE = 0 # 0 = reset (default) |
|||
# 1 = pas de reset (non conseille) certains switch peuvent rester ouvert ou fermer inopinement ! |
|||
##### |
|||
#### Config End matplotlib font ######################### |
|||
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): |
|||
global PolicePath |
|||
global setSystemFonts |
|||
global seTtextAlignement |
|||
global switchFontComBox |
|||
global switchModeTextList |
|||
global setFontByDefault |
|||
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 epaisseur |
|||
global epaisSupp |
|||
MainWindow.setObjectName(_fromUtf8("MainWindow")) |
|||
MainWindow.resize(360, 400) |
|||
# MainWindow.setMaximumSize(QtCore.QSize(370, 638)) |
|||
# MainWindow.setMinimumSize(QtCore.QSize(400, 640)) |
|||
self.centralWidget = QtWidgets.QWidget(MainWindow) |
|||
self.centralWidget.setObjectName(_fromUtf8("centralWidget")) |
|||
self.groupBox_00 = QtWidgets.QGroupBox() |
|||
self.groupBox_01 = QtWidgets.QGroupBox() |
|||
# self.groupBox_01.setMaximumHeight(180) |
|||
self.textEdit = QtWidgets.QTextEdit() |
|||
# self.textEdit.setMaximumHeight(100) |
|||
self.PB_Reverse = QtWidgets.QPushButton() |
|||
self.PB_Reverse.clicked.connect(self.on_PB_Reverse) |
|||
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) |
|||
self.comboBoxPy = QtWidgets.QComboBox() |
|||
#### |
|||
self.pathFont = PolicePath[:len(PolicePath)-(PolicePath[::-1].index("/"))-1] |
|||
#### |
|||
ui.searchFont(self.pathFont) |
|||
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_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(epaisseur) |
|||
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.RA_Choice_Outdoor = QtWidgets.QRadioButton() |
|||
self.RA_Choice_Outdoor.setChecked(True) |
|||
self.RA_Choice_Outdoor.clicked.connect(self.on_RA_Choice_Outdoor) #connection radioButton |
|||
self.RA_Choice_Indoor = QtWidgets.QRadioButton() |
|||
self.RA_Choice_Indoor.clicked.connect(self.on_RA_Choice_Indoor) #connection radioButton |
|||
self.RA_Choice_Helix = QtWidgets.QRadioButton() |
|||
self.RA_Choice_Helix.clicked.connect(self.on_RA_Choice_Helix) #connection radioButton |
|||
self.RA_Choice_Clock = QtWidgets.QRadioButton() |
|||
self.RA_Choice_Clock.clicked.connect(self.on_RA_Choice_Clock) #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) |
|||
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(215,60) |
|||
# pic = QtGui.QPixmap(indoorIcon) # png |
|||
# self.scene = QtWidgets.QGraphicsScene() |
|||
# self.scene.addPixmap(QtGui.QPixmap(pic)) # png (bmp) |
|||
# self.graphicsView.setScene(self.scene) |
|||
####Screen Graphic BitMap |
|||
#### |
|||
self.groupBox_04 = QtWidgets.QGroupBox() |
|||
self.groupBox_04.setEnabled(False) |
|||
self.groupBox_04.setCheckable(False) |
|||
self.groupBox_04.setVisible(False) |
|||
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() |
|||
#### |
|||
self.groupBox_05 = QtWidgets.QGroupBox() |
|||
self.groupBox_05.setEnabled(False) |
|||
self.groupBox_05.setVisible(False) |
|||
self.DS_Radius_Support = QtWidgets.QDoubleSpinBox() |
|||
self.DS_Radius_Support.setMaximum(99999999.99) |
|||
self.DS_Radius_Support.setValue(cercleClock) |
|||
self.DS_Radius_Support.valueChanged.connect(self.on_DS_Radius_Support) #connection doubleSpinBox |
|||
self.label_11 = QtWidgets.QLabel() |
|||
self.PU_Roman = QtWidgets.QPushButton() |
|||
self.PU_Roman.setIcon(QtGui.QIcon(QtGui.QPixmap(arabicIcon))) # icone dans une variable |
|||
self.PU_Roman.clicked.connect(self.on_PU_Roman) |
|||
self.S_Number_Faces_Support = QtWidgets.QSpinBox() |
|||
self.S_Number_Faces_Support.setMaximum(999) |
|||
self.S_Number_Faces_Support.setValue(nombreFaces) |
|||
self.S_Number_Faces_Support.valueChanged.connect(self.on_S_Number_Faces_Support) #connection SpinBox |
|||
self.label_5 = QtWidgets.QLabel() |
|||
self.PU_Redress = QtWidgets.QPushButton() |
|||
self.PU_Redress.setIcon(QtGui.QIcon(QtGui.QPixmap(axialIcon))) # icone dans une variable |
|||
self.PU_Redress.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(epaisSupp) |
|||
self.DS_Extrude_Support.valueChanged.connect(self.on_DS_Extrude_Support) #connection doubleSpinBox |
|||
self.label_6 = QtWidgets.QLabel() |
|||
#### |
|||
self.groupBox_06 = QtWidgets.QGroupBox() |
|||
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) |
|||
#### |
|||
self.DS_Pivot_Char = QtWidgets.QDoubleSpinBox() |
|||
self.DS_Pivot_Char.setEnabled(False) |
|||
self.DS_Pivot_Char.setMinimum(-360.0) |
|||
self.DS_Pivot_Char.setMaximum(360.0) |
|||
self.DS_Pivot_Char.setValue(0.0) |
|||
self.DS_Pivot_Char.valueChanged.connect(self.on_DS_Pivot_Char) #connection doubleSpinBox |
|||
self.CH_Pivot_Character = QtWidgets.QCheckBox() |
|||
self.CH_Pivot_Character.clicked.connect(self.on_CH_Pivot_Character) #connection checkBox |
|||
#### |
|||
#### gridLayout begin ####################### |
|||
self.gridLayout = QtWidgets.QGridLayout(self.centralWidget) |
|||
self.gridLayout.setContentsMargins(10, 10, 10, 10) |
|||
## |
|||
self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_00) |
|||
self.groupBox_00.setMaximumHeight(650) |
|||
self.gridLayout_2.setContentsMargins(10, 10, 10, 10) |
|||
# self.gridLayout_2.setSpacing(6) |
|||
## |
|||
self.gridLayout_Texte = QtWidgets.QGridLayout(self.groupBox_01) # groupes ..... |
|||
self.groupBox_01.setMaximumHeight(130) |
|||
# self.gridLayout_Texte.setSpacing(6) |
|||
self.gridLayout_Texte.setContentsMargins(10, 10, 10, 10) |
|||
self.gridLayout_Texte.addWidget(self.textEdit, 0, 0, 1, 1) |
|||
self.gridLayout_Texte.addWidget(self.PB_Reverse, 0, 1, 1, 1) |
|||
self.gridLayout_Texte.addWidget(self.lineEdit_NameFile,1, 0, 1, 1)#_Font |
|||
self.gridLayout_Texte.addWidget(self.PB_Help,1, 1, 1, 1) |
|||
self.gridLayout_Texte.addWidget(self.comboBoxPy,2, 0, 1, 1) |
|||
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.groupBox_02.setMaximumHeight(450) |
|||
self.groupBox_02.setMinimumHeight(250) |
|||
# self.gridLayout_Config.setSpacing(6) |
|||
self.gridLayout_Config.addWidget(self.groupBox_03, 0, 0, 7, 2) |
|||
# self.groupBox_03.setMaximumHeight(300) |
|||
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) |
|||
self.gridLayout_Choice.addWidget(self.RA_Choice_Clock, 1, 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.gridLayout_Helix = QtWidgets.QGridLayout(self.groupBox_04) |
|||
self.gridLayout_Helix.setContentsMargins(10, 10, 10, 10) |
|||
self.groupBox_04.setMaximumHeight(100) |
|||
# self.gridLayout_Helix.setSpacing(6) |
|||
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.gridLayout_2.addWidget(self.groupBox_04, 3, 0, 1, 1) |
|||
#### |
|||
self.gridLayout_Clock = QtWidgets.QGridLayout(self.groupBox_05) |
|||
self.gridLayout_Clock.setContentsMargins(10, 10, 10, 10) |
|||
self.groupBox_05.setMaximumHeight(140) |
|||
# self.gridLayout_Clock.setSpacing(6) |
|||
self.gridLayout_Clock.addWidget(self.DS_Radius_Support, 0, 0, 1, 1) |
|||
self.gridLayout_Clock.addWidget(self.label_11, 0, 1, 1, 1) |
|||
self.gridLayout_Clock.addWidget(self.PU_Roman, 0, 2, 1, 1) |
|||
self.gridLayout_Clock.addWidget(self.S_Number_Faces_Support, 1, 0, 1, 1) |
|||
self.gridLayout_Clock.addWidget(self.label_5, 1, 1, 1, 1) |
|||
self.gridLayout_Clock.addWidget(self.PU_Redress, 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.gridLayout_2.addWidget(self.groupBox_05, 4, 0, 1, 1) |
|||
#### |
|||
self.gridLayout_Command = QtWidgets.QGridLayout(self.groupBox_06) |
|||
self.gridLayout_Command.setContentsMargins(10, 10, 10, 10) |
|||
self.groupBox_06.setMaximumHeight(70) |
|||
# self.gridLayout_Command.setSpacing(6) |
|||
self.gridLayout_Command.addWidget(self.PU_Exit, 0, 0, 1, 1) |
|||
self.gridLayout_Command.addWidget(self.PU_Reset, 0, 1, 1, 1) |
|||
self.gridLayout_Command.addWidget(self.PU_Benchmarks, 0, 2, 1, 1) |
|||
self.gridLayout_Command.addWidget(self.PU_Execute, 0, 3, 1, 1) |
|||
self.gridLayout_2.addWidget(self.groupBox_06, 5, 0, 1, 1) |
|||
#### |
|||
self.gridLayout.addWidget(self.groupBox_00, 0, 0, 1, 1) |
|||
#### gridLayout end ####################### |
|||
MainWindow.setCentralWidget(self.centralWidget) |
|||
self.retranslateUi(MainWindow) |
|||
QtCore.QMetaObject.connectSlotsByName(MainWindow) |
|||
def retranslateUi(self, MainWindow): |
|||
MainWindow.setWindowFlags(PySide2.QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenetre en avant |
|||
MainWindow.setWindowTitle(_fromUtf8("FCCircularText")) |
|||
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" |
|||
"Click the button Reset for calculate the number of characters")) |
|||
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.PB_Help.setText(_fromUtf8("Help")) |
|||
self.PB_Help.setToolTip(_fromUtf8("Help Wiki page")) |
|||
# self.PB_Decompose.setText(_fromUtf8("Decompose")) |
|||
#### 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 ")) |
|||
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)")) |
|||
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")) |
|||
self.DS_InclinaisonX.setToolTip(_fromUtf8("Inclination character in axis X")) |
|||
self.DS_InclinaisonY.setSuffix(_fromUtf8(" deg")) |
|||
self.DS_InclinaisonY.setToolTip(_fromUtf8("Inclination character axis Y")) |
|||
self.DS_InclinaisonZ.setSuffix(_fromUtf8(" deg")) |
|||
self.DS_InclinaisonZ.setToolTip(_fromUtf8("Inclination character axis Z")) |
|||
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.PU_Flat.setText(_fromUtf8("Mode Stand")) |
|||
self.PU_Flat.setToolTip(_fromUtf8("Click for create the text Flat")) |
|||
#### |
|||
self.groupBox_04.setTitle(_fromUtf8("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.groupBox_05.setTitle(_fromUtf8("Clock")) |
|||
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.PU_Roman.setText(_fromUtf8("Mode Arabic")) |
|||
self.PU_Roman.setToolTip(_fromUtf8("The characters is in Roman or Arabic (default)")) |
|||
self.S_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.PU_Redress.setText(_fromUtf8("Axial")) |
|||
self.PU_Redress.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.groupBox_06.setTitle(_fromUtf8("Command")) |
|||
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 the macro and give the number of the characters of windows Textedit")) |
|||
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")) |
|||
#### |
|||
self.DS_Pivot_Char.setSuffix(_fromUtf8(" deg")) |
|||
self.DS_Pivot_Char.setToolTip(_fromUtf8("Pivot the character")) |
|||
self.CH_Pivot_Character.setText(_fromUtf8("Pivot Character")) |
|||
self.CH_Pivot_Character.setToolTip(_fromUtf8("Pivot the character")) |
|||
#### 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): |
|||
self.pathFont = self.lineEdit_NameFile.text() |
|||
print(self.pathFont) |
|||
try: |
|||
self.pathFont = self.pathFont.split(")") [1] |
|||
except Exception: |
|||
self.pathFont = self.pathFont |
|||
print(self.pathFont) |
|||
ui.searchFont(self.pathFont) |
|||
QtCore.QObject.connect(self.comboBoxPy, QtCore.SIGNAL("currentIndexChanged(int)"), self.on_fontComboBoxPython) |
|||
def on_PB_Reverse(self): #connection Reverse |
|||
global texte |
|||
texte = self.textEdit.toPlainText() |
|||
texte = texte[::-1] |
|||
self.textEdit.setText(_fromUtf8(texte)) |
|||
def on_CH_Pivot_Character(self): #connection checkBox |
|||
global PivotCharachter |
|||
if self.CH_Pivot_Character.isChecked(): |
|||
self.DS_Pivot_Char.setEnabled(True) |
|||
else: |
|||
PivotCharachter = 0.0 |
|||
self.DS_Pivot_Char.setEnabled(False) |
|||
self.DS_Pivot_Char.setValue(PivotCharachter) |
|||
# App.Console.PrintMessage("PivotCharachter check" + "\n") |
|||
def on_DS_Pivot_Char(self, value): #connection doubleSpinBox |
|||
global PivotCharachter |
|||
PivotCharachter = value |
|||
App.Console.PrintMessage("PivotCharachter " + str(PivotCharachter)+"\n") |
|||
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.DS_PlacementX.setValue(PlacementX) |
|||
self.DS_PlacementX.setEnabled(False) |
|||
self.DS_PlacementY.setValue(PlacementY) |
|||
self.DS_PlacementY.setEnabled(False) |
|||
self.DS_PlacementZ.setValue(PlacementZ) |
|||
self.DS_PlacementZ.setEnabled(False) |
|||
# 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.DS_InclinaisonX.setValue(inclinaisonX) |
|||
self.DS_InclinaisonX.setEnabled(False) |
|||
self.DS_InclinaisonY.setValue(inclinaisonY) |
|||
self.DS_InclinaisonY.setEnabled(False) |
|||
self.DS_InclinaisonZ.setValue(inclinaisonZ) |
|||
self.DS_InclinaisonZ.setEnabled(False) |
|||
# App.Console.PrintMessage(str("on_PU_Reset_Inclination ")+"\n") |
|||
def on_RA_Choice_Outdoor(self): # |
|||
global ui |
|||
global exterieur |
|||
global epaisseur |
|||
self.groupBox_04.setVisible(False) |
|||
self.groupBox_05.setVisible(False) |
|||
epaisseur = 0.0 |
|||
self.DS_Extrude.setValue(epaisseur) |
|||
self.CH_Extrude.setChecked(False) |
|||
self.DS_Extrude.setEnabled(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) |
|||
self.groupBox_04.setEnabled(False) |
|||
self.groupBox_05.setEnabled(False) |
|||
ui.on_PU_Reset_Placement() |
|||
ui.on_PU_Reset_Inclination() |
|||
# App.Console.PrintMessage(str("on_RA_Choice_Outdoor ")+" "+str(exterieur)+"\n") |
|||
def on_RA_Choice_Indoor(self): # |
|||
global ui |
|||
global exterieur |
|||
global epaisseur |
|||
self.groupBox_04.setVisible(False) |
|||
self.groupBox_05.setVisible(False) |
|||
epaisseur = 0.0 |
|||
self.DS_Extrude.setValue(epaisseur) |
|||
self.CH_Extrude.setChecked(False) |
|||
self.DS_Extrude.setEnabled(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) |
|||
self.groupBox_04.setEnabled(False) |
|||
self.groupBox_05.setEnabled(False) |
|||
ui.on_PU_Reset_Placement() |
|||
ui.on_PU_Reset_Inclination() |
|||
# App.Console.PrintMessage(str("on_RA_Choice_Indoor ")+" "+str(exterieur)+"\n") |
|||
def on_RA_Choice_Helix(self): # |
|||
global ui |
|||
global exterieur |
|||
global cercleClock |
|||
global nombreFaces |
|||
global debout |
|||
global epaisseur |
|||
self.groupBox_04.setVisible(True) |
|||
self.groupBox_05.setVisible(False) |
|||
epaisseur = 0.0 |
|||
self.DS_Extrude.setValue(epaisseur) |
|||
self.CH_Extrude.setChecked(False) |
|||
self.DS_Extrude.setEnabled(False) |
|||
exterieur = 2 |
|||
cercleClock = 0 |
|||
nombreFaces = 0 |
|||
debout = 1 |
|||
self.RA_Choice_Outdoor.setText(_fromUtf8("Outdoor")) |
|||
self.RA_Choice_Indoor.setText(_fromUtf8("Indoor")) |
|||
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)## |
|||
self.groupBox_04.setEnabled(True) |
|||
self.groupBox_05.setEnabled(False) |
|||
ui.on_PU_Reset_Placement() |
|||
ui.on_PU_Reset_Inclination() |
|||
def on_RA_Choice_Clock(self): |
|||
global ui |
|||
global exterieur |
|||
global debout |
|||
global correctionRayon |
|||
global correctionAngle |
|||
global epaisseur |
|||
global PivotCharachter |
|||
self.groupBox_04.setVisible(False) |
|||
self.groupBox_05.setVisible(True) |
|||
epaisseur = 0.0 |
|||
self.DS_Extrude.setValue(epaisseur) |
|||
self.CH_Extrude.setChecked(False) |
|||
self.DS_Extrude.setEnabled(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) |
|||
PivotCharachter = 0.0 |
|||
self.DS_Pivot_Char.setEnabled(False) |
|||
self.DS_Pivot_Char.setValue(PivotCharachter) |
|||
self.CH_Pivot_Character.setChecked(False) |
|||
self.groupBox_04.setEnabled(False) |
|||
self.groupBox_05.setEnabled(True) |
|||
ui.on_PU_Reset_Placement() |
|||
ui.on_PU_Reset_Inclination() |
|||
# App.Console.PrintMessage(str("on_RA_Choice_Clock ")+str(exterieur)+"\n") |
|||
def on_PU_Flat(self): # Flat or Stand |
|||
global debout |
|||
if debout == 1: |
|||
debout = 0 |
|||
self.RA_Choice_Outdoor.setText(_fromUtf8("Indoor")) |
|||
self.RA_Choice_Indoor.setText(_fromUtf8("Outdoor")) |
|||
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 |
|||
else: |
|||
debout = 1 |
|||
self.RA_Choice_Outdoor.setText(_fromUtf8("Outdoor")) |
|||
self.RA_Choice_Indoor.setText(_fromUtf8("Indoor")) |
|||
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 |
|||
# App.Console.PrintMessage(str("on_PU_Flat ")+str(debout)+"\n") |
|||
def on_DS_Radius_Circle(self,value): |
|||
global rayon |
|||
global cercleClock |
|||
rayon = value |
|||
cercleClock = rayon |
|||
# App.Console.PrintMessage("on_DS_Radius_Circle Radius"+str(rayon)+"\n") |
|||
def on_DS_Size_Character(self,value): |
|||
global SizeCaractere |
|||
SizeCaractere = value |
|||
# App.Console.PrintMessage("on_DS_Size_Character Size"+str(SizeCaractere)+"\n") |
|||
def on_S_Begin_Angle(self,value): # |
|||
global debut |
|||
debut = value |
|||
# App.Console.PrintMessage(str("on_S_Begin_Angle ")+str(debut)+"\n") |
|||
def on_S_End_Angle(self,value): # |
|||
global rotation |
|||
rotation = value |
|||
# App.Console.PrintMessage(str("on_S_End_Angle ")+str(rotation)+"\n") |
|||
def on_DS_PlacementX(self,value): # |
|||
global PlacementX |
|||
PlacementX = value |
|||
# App.Console.PrintMessage(str("on_DS_PlacementX ")+str(PlacementX)+"\n") |
|||
def on_DS_PlacementY(self,value): # |
|||
global PlacementY |
|||
PlacementY = value |
|||
# App.Console.PrintMessage(str("on_DS_PlacementY ")+str(PlacementY)+"\n") |
|||
def on_DS_PlacementZ(self,value): # |
|||
global PlacementZ |
|||
PlacementZ = value |
|||
# App.Console.PrintMessage(str("on_DS_PlacementZ ")+str(PlacementZ)+"\n") |
|||
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) |
|||
# App.Console.PrintMessage(str("on_CH_Sp_Placement ")+str("True")+"\n") |
|||
else: |
|||
ui.on_PU_Reset_Placement() |
|||
if self.RA_Choice_Clock.isChecked(): |
|||
self.DS_PlacementX.setEnabled(False) |
|||
self.DS_PlacementY.setEnabled(False) |
|||
# App.Console.PrintMessage(str("on_CH_Sp_Placement ")+str("False")+"\n") |
|||
def on_DS_Correction_Angle(self,value): # |
|||
global correctionAngle |
|||
correctionAngle = value |
|||
# App.Console.PrintMessage(str("on_DS_Correction_Angle ")+str(correctionAngle)+"\n") |
|||
def on_DS_Correction_Radius(self,value): # |
|||
global correctionRayon |
|||
correctionRayon = value |
|||
# App.Console.PrintMessage(str("on_DS_Correction_Radius ")+str(correctionRayon)+"\n") |
|||
def on_DS_Extrude(self,value): # |
|||
global epaisseur |
|||
global epaisSupp |
|||
epaisseur = value |
|||
if epaisseur > epaisSupp: |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.DS_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.CH_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
else: |
|||
if epaisSupp >= epaisseur: |
|||
self.DS_Extrude.setStyleSheet("background-color: rgb(224, 0, 0)") |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: rgb(224, 0, 0)") |
|||
# App.Console.PrintMessage("on_DS_Extrude "+str(epaisseur)+"\n") |
|||
def on_CH_Extrude(self): # |
|||
global epaisseur |
|||
global epaisSupp |
|||
if self.CH_Extrude.isChecked(): |
|||
self.DS_Extrude.setEnabled(True) |
|||
epaisseur = 1.0 |
|||
else: |
|||
self.DS_Extrude.setEnabled(False) |
|||
epaisseur = 0.0 |
|||
if (epaisSupp != 0) and (epaisSupp >= epaisseur): |
|||
self.DS_Extrude.setStyleSheet("background-color: rgb(255, 165, 0)") |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: rgb(255, 165, 0)") |
|||
self.CH_Extrude.setStyleSheet("background-color: rgb(255, 165, 0)") |
|||
else: |
|||
self.DS_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.CH_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.DS_Extrude.setValue(epaisseur) |
|||
# App.Console.PrintMessage(str("on_CH_Extrude ")+" "+str(epaisseur)+"\n") |
|||
def on_DS_InclinaisonX(self,value): # |
|||
global inclinaisonX |
|||
inclinaisonX = value |
|||
# App.Console.PrintMessage(str("on_DS_InclinaisonX ")+str(inclinaisonX)+"\n") |
|||
def on_DS_InclinaisonY(self,value): # |
|||
global inclinaisonY |
|||
inclinaisonY = value |
|||
# App.Console.PrintMessage(str("on_DS_InclinaisonY ")+str(inclinaisonY)+"\n") |
|||
def on_DS_InclinaisonZ(self,value): # |
|||
global inclinaisonZ |
|||
inclinaisonZ = value |
|||
# App.Console.PrintMessage(str("on_DS_InclinaisonZ ")+str(inclinaisonZ)+"\n") |
|||
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() |
|||
# App.Console.PrintMessage(str("on_CH_Sp_Inclination ")+str(self.CH_Sp_Inclination.isChecked())+"\n") |
|||
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) |
|||
# App.Console.PrintMessage(str("on_DS_Step_Of_The_Helix ")+str(SizeCaractere)+"\n") |
|||
def on_DS_Number_Char_Per_Turn(self,value):# |
|||
global nombreCarParTour |
|||
nombreCarParTour = value |
|||
# App.Console.PrintMessage(str("on_DS_Number_Char_Per_Turn ")+str(nombreCarParTour)+"\n") |
|||
def on_DS_Base_Helix(self,value): # |
|||
global baseHelix |
|||
baseHelix = value |
|||
# App.Console.PrintMessage(str("on_DS_Base_Helix ")+str(baseHelix)+"\n") |
|||
def on_DS_End_Helix(self,value): # |
|||
global endHelix |
|||
endHelix = value |
|||
# App.Console.PrintMessage(str("on_DS_End_Helix ")+str(endHelix)+"\n") |
|||
def on_DS_Radius_Support(self,value): # |
|||
global cercleClock |
|||
cercleClock = value |
|||
# App.Console.PrintMessage(str("on_DS_Radius_Support ")+str(cercleClock)+"\n") |
|||
def on_S_Number_Faces_Support(self,value): # number Faces of support 0=none 1=circle 2=rectangle 3=triangle 4,5 ... polygon |
|||
global nombreFaces |
|||
nombreFaces = value |
|||
self.DS_Extrude_Support.setEnabled(True) |
|||
if nombreFaces == 0: |
|||
self.label_5.setText(_fromUtf8("Support number face")) |
|||
self.DS_Extrude_Support.setEnabled(False) |
|||
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")) |
|||
# App.Console.PrintMessage(str("on_S_Number_Faces_Support ")+str(nombreFaces)+"\n") |
|||
def on_DS_Extrude_Support(self,value): # |
|||
global epaisSupp |
|||
global epaisseur |
|||
epaisSupp = value |
|||
if epaisSupp >= epaisseur: |
|||
if self.CH_Extrude.isChecked(): |
|||
self.DS_Extrude.setStyleSheet("background-color: rgb(224, 0, 0)") |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: rgb(224, 0, 0)") |
|||
self.CH_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
else: |
|||
self.DS_Extrude.setStyleSheet("background-color: rgb(255, 165, 0)") |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: rgb(255, 165, 0)") |
|||
self.CH_Extrude.setStyleSheet("background-color: rgb(255, 165, 0)") |
|||
else: |
|||
self.DS_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.CH_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
if epaisSupp == 0: |
|||
self.DS_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.CH_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.DS_PlacementZ.setEnabled(True) |
|||
# App.Console.PrintMessage(str("on_DS_Extrude_Support ")+str(epaisSupp)+"\n") |
|||
def on_PU_Roman(self): # Roman or Arabic Clock |
|||
global romain |
|||
if romain == 1: |
|||
romain = 0 |
|||
self.PU_Roman.setText(_fromUtf8("Mode Arabic")) |
|||
self.PU_Roman.setToolTip(_fromUtf8("Click for activate the mode Roman")) |
|||
self.PU_Roman.setIcon(QtGui.QIcon(QtGui.QPixmap(arabicIcon))) # icone dans une variable |
|||
else: |
|||
romain = 1 |
|||
self.PU_Roman.setText(_fromUtf8("Mode Roman")) |
|||
self.PU_Roman.setToolTip(_fromUtf8("Click for activate the mode Arabic")) |
|||
self.PU_Roman.setIcon(QtGui.QIcon(QtGui.QPixmap(romanIcon))) # icone dans une variable |
|||
# App.Console.PrintMessage(str("romain ")+str(romain)+"\n") |
|||
def on_PU_Redress(self): # Redress or circumferencial Clock |
|||
global redressement |
|||
if redressement == 1: |
|||
redressement = 0 |
|||
self.PU_Redress.setText(_fromUtf8("Axial")) |
|||
self.PU_Redress.setIcon(QtGui.QIcon(QtGui.QPixmap(axialIcon))) # icone dans une variable |
|||
self.PU_Redress.setToolTip(_fromUtf8("Click for activate the mode Redress")) |
|||
else: |
|||
redressement = 1 |
|||
self.PU_Redress.setText(_fromUtf8("Redress")) |
|||
self.PU_Redress.setIcon(QtGui.QIcon(QtGui.QPixmap(redressIcon))) # icone dans une variable |
|||
self.PU_Redress.setToolTip(_fromUtf8("Click for activate the mode Axial")) |
|||
# App.Console.PrintMessage(str("redressement ")+str(redressement)+"\n") |
|||
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 PivotCharachter |
|||
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 epaisseur |
|||
global epaisSupp |
|||
global compount1 |
|||
texte = "" |
|||
exterieur = 1 |
|||
self.RA_Choice_Outdoor.setText(_fromUtf8("Outdoor")) |
|||
self.RA_Choice_Indoor.setText(_fromUtf8("Indoor")) |
|||
self.RA_Choice_Outdoor.setChecked(True) |
|||
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 |
|||
SizeCaractere = 2.0 |
|||
self.DS_Size_Character.setValue(SizeCaractere) |
|||
rayon = 10.0 |
|||
self.DS_Radius_Circle.setValue(rayon) |
|||
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 = 10.0 |
|||
self.DS_Correction_Angle.setValue(correctionAngle) |
|||
self.DS_Correction_Radius.setEnabled(True) |
|||
correctionRayon = 0.15 |
|||
self.DS_Correction_Radius.setValue(correctionRayon) |
|||
self.DS_Correction_Angle.setEnabled(True) |
|||
PivotCharachter = 0.0 |
|||
self.DS_Pivot_Char.setEnabled(False) |
|||
self.DS_Pivot_Char.setValue(PivotCharachter) |
|||
self.CH_Pivot_Character.setChecked(False) |
|||
epaisseur = 0.0 |
|||
self.DS_Extrude.setValue(epaisseur) |
|||
self.DS_Extrude.setEnabled(False) |
|||
self.DS_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
self.CH_Extrude.setChecked(False) |
|||
self.CH_Extrude.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
ui.on_PU_Reset_Placement() |
|||
ui.on_PU_Reset_Inclination() |
|||
self.groupBox_04.setEnabled(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) |
|||
self.groupBox_05.setEnabled(False) |
|||
cercleClock = rayon |
|||
self.DS_Radius_Support.setValue(cercleClock) |
|||
nombreFaces = 0 |
|||
self.S_Number_Faces_Support.setValue(nombreFaces) |
|||
self.label_5.setText(_fromUtf8("Support number face")) |
|||
epaisSupp = 0.0 |
|||
self.DS_Extrude_Support.setEnabled(False) |
|||
self.DS_Extrude_Support.setValue(epaisSupp) |
|||
self.DS_Extrude_Support.setStyleSheet("background-color: QPalette.Base") # origin system |
|||
romain = 0 |
|||
self.PU_Roman.setText(_fromUtf8("Mode Arabic")) |
|||
self.PU_Roman.setIcon(QtGui.QIcon(QtGui.QPixmap(arabicIcon))) # icone dans une variable |
|||
self.PU_Roman.setToolTip(_fromUtf8("Click for activate the mode Roman")) |
|||
redressement = 0 |
|||
self.PU_Redress.setText(_fromUtf8("Axial")) |
|||
self.PU_Redress.setIcon(QtGui.QIcon(QtGui.QPixmap(axialIcon))) # icone dans une variable |
|||
self.PU_Redress.setToolTip(_fromUtf8("Click for activate the mode Redress")) |
|||
compount1 = 0 |
|||
texte = self.textEdit.toPlainText() |
|||
self.groupBox_01.setTitle("Text to be displayed ( "+str(len(texte))+" characters )") |
|||
# App.Console.PrintMessage(str("on_PU_Reset ")+str()+"\n") |
|||
def on_PU_Benchmarks(self): # Benchmarks |
|||
try: |
|||
global compount1 |
|||
global ui |
|||
compount1 = 1 |
|||
ui.on_PU_Execute() |
|||
except: |
|||
sayexc("Error") |
|||
# App.Console.PrintMessage(str("Benchmarks")+"\n") |
|||
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 PivotCharachter |
|||
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 epaisseur |
|||
global epaisSupp |
|||
global compount1 |
|||
points = [] |
|||
comP = [] |
|||
nameL = [] |
|||
del points[:] |
|||
del comP[:] |
|||
del nameL[:] |
|||
doc = FreeCAD.ActiveDocument |
|||
if doc == None: |
|||
doc = FreeCAD.newDocument() |
|||
texte = self.textEdit.toPlainText() |
|||
self.groupBox_01.setTitle("Text to be displayed ( "+str(len(texte))+" characters )") |
|||
if ((exterieur == 0) and (debout == 0)): |
|||
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 |
|||
ii = -1 |
|||
ii2 = -1 |
|||
nombre = len(texte) |
|||
coor_Z = PlacementZ |
|||
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 |
|||
else: |
|||
nombreCarParTour = 1 |
|||
if exterieur == 3: # Clock |
|||
FcString = doc.addObject("App::DocumentObjectGroup","FcClock") |
|||
nombre = 12 |
|||
if romain == 0: |
|||
texte = ["1","2","3","4","5","6","7","8","9","10","11","12"] |
|||
else: |
|||
texte = ["I","II","III","IIII","V","VI","VII","VIII","IX","X","XI","XII"] |
|||
texte = texte[::-1] |
|||
else: |
|||
FcString = doc.addObject("App::DocumentObjectGroup","FcString") |
|||
####Boucle principale############################################################################ |
|||
boucler = int(len(texte) / nombreCarParTour) |
|||
# if (len(texte) % nombreCarParTour) != 0: # calcul number spires Helix |
|||
# boucler += 1 |
|||
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)) ): # pour 4 decimales |
|||
angleTr = (float(angleTrFloat)/10000) |
|||
ii += 1 |
|||
ii2 += 1 |
|||
ligne.Placement = App.Placement(App.Vector(PlacementX,PlacementY,PlacementZ), App.Rotation(App.Vector(0,0,1),angleTr), App.Vector(0,0,0)) |
|||
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,1),angleTr+90), App.Vector(0,0,0)) |
|||
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) |
|||
ss=Draft.makeShapeString(String=texte[ii2],FontFile=PolicePath,Size=SizeCaractere,Tracking=0) |
|||
ss.Label = texte[ii2] |
|||
FcString.addObject(ss) # contener character |
|||
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) |
|||
coor_X = coor_X + PlacementX |
|||
coor_Y = coor_Y + PlacementY |
|||
plm="" |
|||
plm=FreeCAD.Placement() |
|||
plm.Base=FreeCAD.Vector(coor_X,coor_Y,coor_Z) |
|||
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+PivotCharachter,90+inclinaisonZ), App.Vector(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+PivotCharachter,90+inclinaisonZ), App.Vector(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+PivotCharachter,90+inclinaisonZ), App.Vector(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+PivotCharachter,inclinaisonY,inclinaisonZ), App.Vector(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+PivotCharachter,inclinaisonY,inclinaisonZ), App.Vector(0,0,0)) # pitch,roll...1 |
|||
else: |
|||
plm = App.Placement(App.Vector(coor_X-centreX,coor_Y-centreY,coor_Z), App.Rotation(angleTr+inclinaisonX+PivotCharachter,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+PivotCharachter,180+inclinaisonY,180+inclinaisonZ), App.Vector(0,0,0)) # pitch,roll...1 |
|||
if epaisseur > 0: # extrusion characrters |
|||
CharExtrude = Draft.extrude(ss,Base.Vector(0,0,epaisseur)) |
|||
CharExtrude.Placement=plm |
|||
try: |
|||
CharExtrude.ViewObject.DisplayMode = u"Flat Lines" |
|||
except Exception: |
|||
None |
|||
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 |
|||
comP.append(ss.Shape) |
|||
# nameL.append(ss.Name) |
|||
# points += [FreeCAD.Vector(coor_X,coor_Y,coor_Z)] # coordinates makeBSpline |
|||
# BSpline = Draft.makeBSpline(points,closed=False) # makeBSpline repere |
|||
App.ActiveDocument.removeObject(lineName) # remove ligne de base directrice |
|||
if compount1 == 1: # create compount |
|||
comp = Part.makeCompound(comP) |
|||
Part.show(comp) |
|||
####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) |
|||
supp = Draft.makeRectangle((cercleClock * 2), 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 |
|||
App.activeDocument().recompute() |
|||
FcString.addObject(supp) # contener support |
|||
if epaisSupp != 0: # extrude support clock |
|||
suppExtrude = Draft.extrude(supp,Base.Vector(0,0,epaisSupp)) |
|||
try: |
|||
suppExtrude.ViewObject.DisplayMode = u"Flat Lines" |
|||
except Exception: |
|||
None |
|||
FcString.addObject(suppExtrude) # contener support extrude |
|||
App.activeDocument().recompute() |
|||
####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("_______________" +"\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") |
|||
# print("Help ") |
|||
def on_PU_Exit(self): # Exit |
|||
global switchModeTextList |
|||
global switchFontComBox |
|||
global setSystemFonts |
|||
global seTtextAlignement |
|||
global setFontByDefault |
|||
###### Write Configuration begin #### |
|||
FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__).SetBool("switchResetFALSE", switchResetFALSE) # True or False |
|||
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 |
|||
###### 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__ + ")")# |
|||
###### 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") |
|||
if setFontByDefault == "": |
|||
if platform.system() == "Windows" : |
|||
PolicePath = "C:/Windows/Fonts/" |
|||
setFontByDefault = "ARIAL" |
|||
elif platform.system() == "Linux" : |
|||
PolicePath = "/usr/share/fonts/" |
|||
setFontByDefault = "UBUNTU-M" |
|||
elif platform.system() == "Darwin": |
|||
PolicePath = "/Library/Fonts/" |
|||
setFontByDefault = "Arial" |
|||
if platform.system() == "Linux" : |
|||
PolicePath = "/usr/share/fonts/" |
|||
###### Read Configuration end #### |
|||
# |
|||
MainWindow = QtWidgets.QMainWindow() |
|||
ui = Ui_MainWindow() |
|||
ui.setupUi(MainWindow) |
|||
MainWindow.show() |
|||
}} |
|||
</div> |
|||
</div> |
|||
o tele carica lo script : |
o tele carica lo script : |
||
- on github [https://gist.github.com/mario52a/a25e802498bae6959335 Macro_FCCircularText.FCMacro] ver 0.21 2022/05/31 |
|||
<div class="mw-translate-fuzzy"> |
|||
- on github [https://gist.github.com/mario52a/a25e802498bae6959335 Macro_FCCircularText.FCMacro] ver 0.16 2020/06/07 |
|||
</div> |
|||
- o dal forum [http://forum.freecadweb.org/viewtopic.php?f=3&t=7384&p=87642#p87642 Extrude from curved surface of cylinder] |
- o dal forum [http://forum.freecadweb.org/viewtopic.php?f=3&t=7384&p=87642#p87642 Extrude from curved surface of cylinder] |
||
<span id="Example"></span> |
|||
== Esempi == |
|||
== Esempio == |
|||
<div class="mw-translate-fuzzy"> |
|||
<center> |
<center> |
||
<gallery widths="300" heights="200"> |
<gallery widths="300" heights="200"> |
||
Line 2,778: | Line 378: | ||
</center> |
</center> |
||
<br /> |
<br /> |
||
< |
<center> |
||
<gallery widths="300" heights="200"> |
|||
Image:FCCircularText IndoorFlat 01.png|Configuration Superior.(click to elarge) |
|||
Image:FCCircularText IndoorFlat 02.png|Configuration Inferior.(click to elarge) |
|||
</gallery> |
|||
</center> |
|||
<br /> |
|||
<br /> |
<br /> |
||
Line 2,815: | Line 421: | ||
</center> |
</center> |
||
<br /> |
<br /> |
||
<center> |
|||
<gallery widths="300" heights="200"> |
|||
Image:FCCircularText_Path_00_002_000.png| {{CheckBox|TRUE|Word}} Il testo sta tagliando sul carattere dello spazio |
|||
</gallery> |
|||
</center> |
|||
<br /> |
|||
<span id="Example_onto_Ellipse"></span> |
|||
==Esempi su ellisse== |
==Esempi su ellisse== |
||
<center> |
<center> |
||
Line 2,880: | Line 493: | ||
<br /> |
<br /> |
||
==Example section path== |
|||
==Limitativo== |
|||
<center> |
|||
<gallery widths="300" heights="200"> |
|||
Image:FCCircularText_Path_00_Orth_Base_000.png|Testo su BoundBox Base (normale) |
|||
Image:FCCircularText_Path_00_Orth_Center_000.png|Testo sul carattere BoundBox Center |
|||
</gallery> |
|||
</center> |
|||
<br /> |
|||
<center> |
|||
<gallery widths="300" heights="200"> |
|||
Image:FCCircularText_Path_00_Orth_Top_000.png|Text on BoundBox Top character |
|||
Image:FCCircularText_Path_00_001_000_000.png|Text on selected line:<br />1: Orthogonal<br />2: Tangent |
|||
</gallery> |
|||
</center> |
|||
<br /> |
|||
<center> |
|||
<gallery widths="797" heights="624"> |
|||
File:YamahaDrumBadge00.gif|Utilizzo esemplificativo ([https://forum.freecad.org/viewtopic.php?t=82577 Curved text on a flat surface?]) |
|||
</gallery> |
|||
</center> |
|||
<br /> |
|||
<span id="Limitations"></span> |
|||
==Limitazioni== |
|||
{{Emphasis|Note}} (PS: è possibile che si verifichi un errore tra le versioni. Pubblica il problema sul forum e attendi la correzione aggiornata o il rollback a una versione precedente della macro. Grazie) |
{{Emphasis|Note}} (PS: è possibile che si verifichi un errore tra le versioni. Pubblica il problema sul forum e attendi la correzione aggiornata o il rollback a una versione precedente della macro. Grazie) |
||
Line 2,895: | Line 533: | ||
(non totalmente sviluppato) |
(non totalmente sviluppato) |
||
In |
In progetto: |
||
Scrivere un testo circolare posizionato su un oggetto selezionato |
Scrivere un testo circolare posizionato su un oggetto selezionato |
||
<span id="Change_log"></span> |
|||
==Currently:== |
|||
==Registro delle modifiche:== |
|||
*ver 0.22c 2023/11/17 : adding restore selection after delete the last object , by TheMarkster , thanks |
|||
see [https://forum.freecad.org/viewtopic.php?p=719353#p719353 Curved text on a flat surface?] |
|||
{{Code|code= |
|||
sel = Gui.Selection.getCompleteSelection() |
|||
#delete objects |
|||
#restore previous selection |
|||
Gui.Selection.clearSelection() |
|||
for s in sel: |
|||
Gui.Selection.addSelection(s.Object,s.SubElementNames) |
|||
}} |
|||
*ver 0.22b 2023/11/15 : upgrade correction '''stylesheet''' and '''FreeCAD.activeDocument().recompute(None,True,True)''' |
|||
*ver 0.22 2022/06/06 : adding QScrollArea cause : [https://forum.freecadweb.org/viewtopic.php?f=3&t=69206 Unable to run FCCircularText [Problem with screen size<nowiki>]</nowiki>] |
|||
*ver 0.21 2022/05/31 : adding button search other path fontmanuelly, and button return font origin of system |
|||
*ver 0.20 2021/04/05 : adding icone in macro, Tab for diminish the heigth of the macro, remove all dimensions of widgets now fully compatible with the stylesheet, revisite the search version for compatibility and other little change. |
|||
*ver 1.19 2021/03/15 : adding button {{Button|Delette}} the last object created and the code {{incode|FreeCAD.ActiveDocument.openTransaction("FCCTc")}} for Undo/Redo system |
|||
**Adding CheckBox {{CheckBox|FALSE|Reset}} for switched/activated (''requested by users'') the natural reset after all push button {{Button|Run}}and {{Button|Run comp}}. This use checkBox is {{ColoredText|not advised}}, is you constade one malfunction pusch the {{Button|Reset}} button or quit FCCircularText and restart. |
|||
*ver 0.18 2021/01/19 : correction bug see [https://forum.freecadweb.org/viewtopic.php?f=22&t=54524&p=468687#p468687 FCCircularText Macro issues] |
|||
*ver 0.17b 2020/09/28 : correction little bug (pl instead plm in path section) and arrange the window (dimension) Clock, Helix, Path |
|||
*ver 0.17 2020/09/26 : adding create circular text on wire (curve, arc, spline, line ...) selected, mode word |
|||
ver 16d 2020/09/15 : vedi [https://gist.github.com/mario52a/a25e802498bae6959335 MasterCATZ commented Sep 14, 2020 message] |
|||
Elimina il FC 0.18 test sezione: |
|||
{{Code|code= |
|||
#### Test FreeCAD.Version simple ############################################################################################################ |
|||
if int(FreeCAD.Version()[1]) < 18: # Version de FreeCAD |
|||
FreeCAD.Console.PrintMessage("This version " + __Title__ + " rmu work with the FreeCAD 0.18 or higher." + "\n\n") |
|||
FreeCAD.Console.PrintMessage("For the precedent version see the page " + "\n\n") |
|||
FreeCAD.Console.PrintMessage("https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/db47f78f2b20a35137ac213b8d1a62d30f525dcb/Macro_FCCircularText.FCMacro" + "\n\n") |
|||
#### Test FreeCAD.Version simple ############################################################################################################ |
|||
}} |
|||
*ver 0.16c 2020/07/24 : modify text proposed by Kunda1 [https://forum.freecadweb.org/viewtopic.php?f=22&t=48902#p418776 Please review FCVerticalText Macro] |
*ver 0.16c 2020/07/24 : modify text proposed by Kunda1 [https://forum.freecadweb.org/viewtopic.php?f=22&t=48902#p418776 Please review FCVerticalText Macro] |
||
Line 3,027: | Line 707: | ||
(2537) |
(2537) |
||
<span id="Links"></span> |
|||
=== Link === |
=== Link === |
||
I commenti nella pagina del forum: [http://forum.freecadweb.org/viewtopic.php?f=3&t=7384 Extrude from curved surface of cylinder] |
I commenti nella pagina del forum: [http://forum.freecadweb.org/viewtopic.php?f=3&t=7384 Extrude from curved surface of cylinder] |
||
{{clear}} |
|||
{{Draft Tools navi{{#translation:}}}} |
{{Draft Tools navi{{#translation:}}}} |
||
{{Userdocnavi{{#translation:}}}} |
{{Userdocnavi{{#translation:}}}} |
Latest revision as of 16:51, 4 January 2024
Descrizione |
---|
Questa macro utilizza lo strumento Draft ShapeString per creare una riga di testo posizionata con diversi orientamenti circolari, inclusi circonferenza ed elicoidale (alla maniera di una colonna Traiana). Può anche essere usata per creare un quadrante di orologio con numeri arabi 1, 2, 3, ecc., o numeri romani I, II, III, ecc. Versione macro: 0.22c Ultima modifica: 2023/11/17 Versione FreeCAD: 0.19 è più Download: ToolBar Icon Autore: Mario52 |
Autore |
Mario52 |
Download |
ToolBar Icon |
Link |
Raccolta di macro Come installare le macro Personalizzare la toolbar |
Versione macro |
0.22c |
Data ultima modifica |
2023/11/17 |
Versioni di FreeCAD |
0.19 è più |
Scorciatoia |
Nessuna |
Vedere anche |
Nessuno |
Descrizione
Questa macro utilizza lo strumento Draft Forma da testo per creare una riga di testo posizionata con diversi orientamenti circolari, inclusi circonferenza ed elicoidale alla maniera di una Colonna di Traiano. Può anche essere usata per creare un quadrante di orologio con numeri arabi 1, 2, 3, ecc., o numeri romani I, II, III, ecc. Quest'ultimo utilizzo è stato ispirato dalla discussione del Forum Macro per creare il quadrante dell'orologio del membro della comunità FC, cblt2l.
Temporary code for external macro link. Do not use this code. This code is used exclusively by Addon Manager. Link for optional manual installation: Macro
# This code is copied instead of the original macro code # to guide the user to the online download page. # Use it if the code of the macro is larger than 64 KB and cannot be included in the wiki # or if the RAW code URL is somewhere else in the wiki. from PySide import QtGui, QtCore diag = QtGui.QMessageBox(QtGui.QMessageBox.Information, "Information", "This macro must be downloaded from this link\n" "\n" "https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/7ab8a1e9dd7f924a62ecef83ec1d2ad8723e37d6/Macro_FCCircularText.FCMacro" + "\n" "\n" "Quit this window to access the download page") diag.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) diag.setWindowModality(QtCore.Qt.ApplicationModal) diag.exec_() import webbrowser webbrowser.open("https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/7ab8a1e9dd7f924a62ecef83ec1d2ad8723e37d6/Macro_FCCircularText.FCMacro")
Esempio di macro che mostra il testo con un orientamento a 360 gradi
Utilizzo
Usare la macro FcString per creare dei caratteri e il file FcClock per creare degli orologi.
Tutti i caratteri sono e rimangono indipendenti. Quando si creano le estrusioni non viene eliminato nulla. Se viene creato un Compound (oggetto Composto) con Run Comp esso viene copiato in una nuova cartella.
Di default le opzioni sono disattivate e si attivano quando si seleziona una delle funzioni:
Fatta eccezione per la casella Z di Placement per Clock che è attiva e che sposta il testo lungo l'asse Z per consentire posizionare il testo sulla superficie di appoggio.
Nota
Le opzioni che sono facoltative per la funzione selezionata sono inattive e quindi non utilizzabili.
Interfaccia
Panoramica
Prima sezione
- La finestra di editazione del testo che consente di inserire il testo da visualizzare (cliccando su Reset, nella finestra del titolo si può vedere quanti caratteri contiene la stringa di input)
- Il pulsante Reverse serve per invertire il testo
- Word selezionata, questa opzione considera il testo come parola, il testo viene tagliato nello spazio e scrive il testo parola per parola (invece carattere per carattere nell'uso normale)
- Il Help visualizza la pagina wiki nel browser FreeCAD
- LineEdit : visualizza il percorso e il nome del font del file
- Other per cercare altre font in altri directory
- ComboView per il font scelto
- Origin ritorna al l'origine sistema font ex: "C:/Windows/Fonts/"
- ARIAL.TTF è il font di default
Opzioni disponibili
Dopo il primo utilizzo, è possibile modificare i parametri vedere:
User parameter:BaseApp/Preferences/Macros/FCMmacros/FCCircularText
switchModeTextList
- 0 = modalità testo normale (e nero) chiude switchFontComBox
- 1 = consente switchFontComBox 1
switchFontComBox
- 0 = (e switchModeTextList = 1) modalità testo (a colori) nell'elenco ComboBox, più veloce
- 1 = (e switchModeTextList = 1) font ComboBoxst più lento ma più bello!
setSystemFonts
- 0 = matplotlib.font_manager.findSystemFonts ("C:/", "ttf")
- fare tutti i caratteri (in tutte le cartelle e sottocartelle del DD) tempo !!
- 1 = fontman.findSystemFonts (self.pathFont)
- esegue tutti i caratteri nella directory (e in tutte le sottocartelle)
seTtextAlignement
- 0 = AlignLeft (default)
- 1 = AlignCenter
- 2 = AlignRight
setFontByDefault
- Font impostazione predefinita (ultimo utilizzato)
switchResetFALSE
- 0 = reset (predefinito)
- 1 = nessun reset (sconsigliato) alcuni switch possono rimanere aperti o chiusi inaspettatamente!
Esempio
- switchModeTextList=
false
- switchFontComBox =
false
- setSystemFonts =
false
- seTtextAlignement = 0
- switchModeTextList=
true
- switchFontComBox =
false
- setSystemFonts =
false
- seTtextAlignement = 0
- switchModeTextList=
true
- switchFontComBox =
false
- setSystemFonts =
false
- seTtextAlignement = 1 (0=Left, 1=Centered, 2=Right)
- switchModeTextList=
true
- switchFontComBox =
true
- setSystemFonts =
false
- seTtextAlignement = 1
Seconda sezione
Configurare i caratteri in FCCircularText
Prima zona
Scegliere:
-
Outdoor esterno
-
Indoor interno
-
Helix elicoidale
-
Clock orologio
- Mode Stand o Mode Flat : Il testo può essere messo in piedi o coricato e le opzioni Outdoor e Indoor indicano se è rivolto verso l'esterno o verso l'interno .
-
Mode Stand Outdoor Il testo è disposto verticale, leggibile dall'esterno.
-
Mode Flat Outdoor Il testo è posizionato orizzontale, leggibile dall'esterno.
-
Mode Flat Indoor Il testo è orizzontale, leggibile dall'interno.
-
Mode Stand Indoor Il testo è verticale, leggibile dall'interno.
Seconda zona
Questa sezione permette di configurare il comportamento complessivo dei caratteri in tutte le scelte disponibili, ma con qualche variazione. I comandi non utilizzabili con l'opzione scelta sono visualizzati in grigio.
- 10.0 mm Radius of circle : Raggio del cerchio. (Default 10)
- 2.0 mm Size character : Altezza del carattere. (Default 2)
- 0 deg Begin angle : Angolo a cui posizionare il primo carattere. (Default 0 °)
- 360 deg End angle : Angolo a cui posizionare l'ultimo carattere. (Default 360)
- 10.0 deg Correction angle : Angolo di correzione per rendere il carattere tangente al cerchio. (Default 10 °)
- 0.15 mm Correction radius: Corregge il raggio del cerchio dei caratteri (optional). (Default 0.15)
- Extrude Char : Estrusione dei caratteri. (di default è disattivato)
- Placement : Posizione del testo nella vista 3D. (di default è disattivato)
- Sp. inclination : Inclinazione del testo rispetto agli assi X, Y e Z (ad esempio per scrivere su un cono). (di default è disattivato)
Outdoor
Modo di default. Il testo viene scritto all'esterno della circonferenza del cerchio.
-
Outdoor
-
-
Indoor
Il testo viene scritto all'interno della circonferenza del cerchio
-
Indoor
-
-
Helix
Il testo viene inserito all'esterno di un'elica.
-
Helix
-
-
- Tutte le opzioni di configurazione dei caratteri sono disponibili.
- Step of helix passo dell'elica
- Char. per turn numero di caratteri per ogni spira dell'elica.
- Se Step of helix (passo dell'elica) è zero, i campi Base Helix e End Helix sono attivi.
- Base Helix fornisce la base per iniziare l'elica (anche Placement Z). Se 'Placement Z' è diverso da zero, il punto di partenza viene aggiunto a Placement Z.
- End Helix Fine di passo dell'elica che è calcolato rispetto all'altezza e al numero di caratteri per spira.
Clock
Le figure sono parte di un cerchio con numeri arabi o romani.
-
Clock
-
Axial
-
Redress
- Quando si seleziona l'orologio, diventano utilizzabili le seguenti funzioni:
- Angolo iniziale.
- Angolo finale.
- Angolo di correzione.
- Correzione del raggio.
- I pulsanti Mode Stand o Mode Flat.
- L'area Clock è attiva.
- Radius of support : Se viene dato un valore, viene creato un supporto (default 0).
- Se Support number face è diverso da zero viene creato un supporto. Se Extrude support = zero viene creata una faccia.
- 1 = Viene creato un cerchio. Appare un cerchio.
- 2 = Viene creato un rettangolo. Lunghezza = (Radius of media * 1.5) width = Radius of support. Appare un rettangolo.
- 3 = Viene creato un triangolo circoscritto. Appare un triangolo.
- 4 = Viene creato un quadrato, raggio del supporto. Appare un quadrato.
- 5 = Viene creato un poligono circoscritto con il numero di facce indicate. Appare un poligono.
- Extrude support viene attivato e si può fornire una dimensione di estrusione.
- Se Support number face è uguale a zero non c'è il supporto.
- Mode Roman : La scrittura è in cifre romane I II III IIII V VI VII VIII IX X XI XII
- Axial : I dati sono scritti assialmente.
Path section
La sezione del titolo cambia e visualizza la lunghezza del filo selezionato.
Se selezioni un filo, un arco, un cerchio, una linea e un bordo, il percorso della sezione è colorato in green e il comando inutilizzato è colorato in red
- Orthogonal il carattere è ortogonale alla vista
- Tangent il carattere è tangente al percorso del punto sul filo
- BB Base il punto base del carattere deve puntare il percorso sul filo
- BB Center il centro del bounBox del personaggio deve indicare il percorso sul filo
- BB Top il boundBox superiore del carattere deve indicare il percorso sul filo
l'ultimo pulsante di opzione utilizzato viene salvato nel parametro di FreeCAD
Sezione comandi
- Exit : Esce dalla macro macro.
- Reset : Ripristina tutti i valori e visualizza il numero di caratteri visualizzati nella finestra.
- Run Comp : Lancia la macro e crea un oggetto Composto da tutti i caratteri.
- Run : Lancia la macro
Parametri disponibili
Alcuni parametri sono disponibili nei parametri di FreeCAD vedere:Menu → Tools → Edit parameters...
- User parameter: BaseApp/Preferences/Macros/FCMmacros/FCCircularText
switchModeTextList
:false
normale modalità di testo (e nero) si trasforma off switchFontComBoxtrue
permettere switchFontComBox 1 (default)
switchFontComBox
:false
(é switchModeTextList = 1) modalità testo (a colori) nell'elenco ComboBox più veloce (predefinito)true
(and switchModeTextList = 1) Famiglia di caratteri nell'elenco ComboBox più lento ma più bello!
setSystemFonts
:false
matplotlib.font_manager.findSystemFonts ("C: /", "ttf") fare tutti i caratteri (in tutte le cartelle e sottocartelle dell'HD) tempo !!true
fontman.findSystemFonts (self.pathFont)
crea tutti i caratteri nella directory (e in tutte le sottocartelle) (predefinito)
seTtextAlignement
: 0 = AlignLeft (default) 1 = AlignCenter 2 = AlignRightsetFontByDefault
: Carattere predefinito (l'ultimo utilizzato)switchResetFALSE
:false
reset (default),true
no reset (non consigliato) alcuni interruttori possono rimanere aperti o chiudersi inaspettatamente!setPathOrthogonal
:true
false
setPathTangent
:true
false
setPositionBase
:true
false
setPositionCenter
:true
false
setPositionTop
:true
false
switchVersionSearch
:true
false
Version
: FCCircularText versione
Usare la macro FcString per creare dei caratteri e il file FcClock per creare degli orologi.
Script
L'icona per il pulsante:
Per maggiori informazioni vedere Personalizzare la barra degli strumenti
Script
Macro_Circular_Text.FCMacro
o tele carica lo script :
- on github Macro_FCCircularText.FCMacro ver 0.21 2022/05/31
- o dal forum Extrude from curved surface of cylinder
Esempio
-
Testo verticale (in piedi), compreso tra 180 gradi (Begin angle) e 360 gradi (End angle), esterno alla curva.
-
Testo interno alla curva.
-
Testo interno e esterno alla curva.
-
Testo circolare orizzontale (coricato) su un oggetto piano.
-
Configuration Superior.(click to elarge)
-
Configuration Inferior.(click to elarge)
-
Testo estruso, esterno alla curva.
-
Testo estruso, interno alla curva.
-
Interno e sottratto.
-
esterno alla curva.
-
interno e sottratto.
-
Estrusione su un cono con Sp. Inclination di 45° sull'asse Z.
-
Anello, interno alla curva con sottrazione.
-
Caratteri ruotati di 0°, 90°, ....
Esempi su ellisse
-
Crea l'ellisse di 100x50.
-
Estruderla di 50 mm.
-
Discretizzare il perimetro e creare punti con la macro Work Features.
Tab Point > Point 2/3 > Points=Cut (Wire) -
Creare il cerchio da 3 punti con la macro Work Features.
Tab Circle Circle=(3 Points)
-
Creare centro del cerchio con la macro Work Features.
Tab Point > Point 1/3 > Circle(s) center. -
Creare le linee di riferimento e configurare FCCircularText.
-
Crea il testo con Run Comp.
-
Eliminare il cerchio, i punti e le linee.
-
Ellisse.
Modalità rilievo:
-
Selezionare il rettangolo e l'ellisse poi creare un composto
Attivare il modulo Part, poi il menu Part > Crea composto. -
Estrudere il composto in Solido.
-
Selezionare Shape (il testo) e il Composto poi eseguire Cut.
-
Il testo viene intagliato nella forma dell'ellisse.
-
Selezionare Ellisse estruso e il Cut (testo) e poi fonderli.
Example section path
-
Testo su BoundBox Base (normale)
-
Testo sul carattere BoundBox Center
-
Text on BoundBox Top character
-
Text on selected line:
1: Orthogonal
2: Tangent
-
Utilizzo esemplificativo (Curved text on a flat surface?)
Limitazioni
Note (PS: è possibile che si verifichi un errore tra le versioni. Pubblica il problema sul forum e attendi la correzione aggiornata o il rollback a una versione precedente della macro. Grazie)
È possibile che due caratteri si sovrappongano, qui un piccolo rimedio con Macro_Rotate_To_Point
-
Character overlap issue and the workaround
(non totalmente sviluppato)
In progetto:
Scrivere un testo circolare posizionato su un oggetto selezionato
Registro delle modifiche:
- ver 0.22c 2023/11/17 : adding restore selection after delete the last object , by TheMarkster , thanks
see Curved text on a flat surface?
sel = Gui.Selection.getCompleteSelection()
#delete objects
#restore previous selection
Gui.Selection.clearSelection()
for s in sel:
Gui.Selection.addSelection(s.Object,s.SubElementNames)
- ver 0.22b 2023/11/15 : upgrade correction stylesheet and FreeCAD.activeDocument().recompute(None,True,True)
- ver 0.22 2022/06/06 : adding QScrollArea cause : Unable to run FCCircularText [Problem with screen size]
- ver 0.21 2022/05/31 : adding button search other path fontmanuelly, and button return font origin of system
- ver 0.20 2021/04/05 : adding icone in macro, Tab for diminish the heigth of the macro, remove all dimensions of widgets now fully compatible with the stylesheet, revisite the search version for compatibility and other little change.
- ver 1.19 2021/03/15 : adding button Delette the last object created and the code
FreeCAD.ActiveDocument.openTransaction("FCCTc")
for Undo/Redo system
- ver 0.18 2021/01/19 : correction bug see FCCircularText Macro issues
- ver 0.17b 2020/09/28 : correction little bug (pl instead plm in path section) and arrange the window (dimension) Clock, Helix, Path
- ver 0.17 2020/09/26 : adding create circular text on wire (curve, arc, spline, line ...) selected, mode word
ver 16d 2020/09/15 : vedi MasterCATZ commented Sep 14, 2020 message
Elimina il FC 0.18 test sezione:
#### Test FreeCAD.Version simple ############################################################################################################
if int(FreeCAD.Version()[1]) < 18: # Version de FreeCAD
FreeCAD.Console.PrintMessage("This version " + __Title__ + " rmu work with the FreeCAD 0.18 or higher." + "\n\n")
FreeCAD.Console.PrintMessage("For the precedent version see the page " + "\n\n")
FreeCAD.Console.PrintMessage("https://gist.githubusercontent.com/mario52a/a25e802498bae6959335/raw/db47f78f2b20a35137ac213b8d1a62d30f525dcb/Macro_FCCircularText.FCMacro" + "\n\n")
#### Test FreeCAD.Version simple ############################################################################################################
- ver 0.16c 2020/07/24 : modify text proposed by Kunda1 Please review FCVerticalText Macro
- ver 0.16b 2020/07/24 : correct __title__ to __Title__ in 0.18 FC test (see Please review FCVerticalText Macro)
- ver 0.16 2020/06/07 : little bug in Linux with the path, impost PolicePath = "/usr/share/fonts/" (stay on path /xx/xx/xx/xx/xx/xx/ on entry)
- ver 0.15 2020/06/01 : For PySide2 Qt5 adding matplotlib fonts in comboView, config on parameter
- ver 0.14-4 2020/04/25 : corretto con "DisplayMode = u"Flat Lines" :
- ver 0.14-3 2020/04/25 : adatto per :
OS: Windows 10 (10.0)
Word size of OS: 64-bit
Word size of FreeCAD: 64-bit
Version: 0.19.20655 (Git)
Build type: Release
Branch: master
Hash: e8e67e8c5ebbc9f9ed9ea67aba5b891969595ece
Python version: 3.6.8
Qt version: 5.12.1
Coin version: 4.0.0a
OCC version: 7.3.0
- ver 0.14-2 2019/07/22 replace chr(176) (give error <FC 0.18) and replace with the wmayer code, see Fehler in Version 0.19 pre ??
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(carDegrees) self.DS_InclinaisonY.setSuffix(carDegrees) self.DS_InclinaisonZ.setSuffix(carDegrees)
- ver 0.14-1 2019/06/11 replace "°" to chr(176)
- ver 0.14 2019/04/27 compatibile con Python 3.6.6 and Qt 5.6.2 (cause: unicode() )
latest testing:
#OS: Windows 10
#Word size of OS: 64-bit
#Word size of FreeCAD: 64-bit
#Version: 0.19.16523 (Git)
#Build type: Release
#Branch: master
#Hash: 9b3ec233c8b21e0df66fada487cd10f471d60cac
#Python version: 3.6.6
#Qt version: 5.6.2
#Coin version: 4.0.0a
#OCC version: 7.3.0
- ver 0.13 30/01/2018 add feature Pivot for rotate the character on himself
ver 0.13 09/08/2016 replace the button "New font" to "fontComboBox" cause , with Windows 10 the window Font stay empty the files are hidden
- ver 0.12 03/07/2016 optimize the code for accept the decimal number in determination angle
replace the line
for angleTr in range(debut,rotation,((rotation-debut)/nombre)):
to
for angleTrFloat in range((debut*10000),(rotation*10000),int((round(((float(rotation)-float(debut))/float(nombre)),4)*10000)) ): # pour 4 decimales
angleTr = (float(angleTrFloat)/10000)
- ver 0.10 17/05/2015 adding lines 1365, 1366 only created more clock face ?? ()
supp.MakeFace = True
App.activeDocument().recompute()
- ver 0.9 11/05/2015 thank you NormandC for testing
replace
self.DS_InclinaisonX.setSuffix(" X°")
self.DS_InclinaisonY.setSuffix(" Y°")
self.DS_InclinaisonZ.setSuffix(" Z°")
to
self.DS_InclinaisonX.setSuffix(unicode(" X°"))
self.DS_InclinaisonY.setSuffix(unicode(" Y°"))
self.DS_InclinaisonZ.setSuffix(unicode(" Z°"))
- ver 0.8 10/05/2015 replace "String=texte[ii2]" to "String=unicode(texte[ii2])" line 1290. cause "TypeError: Property 'FontFile': type must be str or unicode, not QString"
# ver 0.8 10/05/2015 /_ # testing with OS :
##################################################################################################
# OS: Ubuntu 14.04.1 LTS # OS: Ubuntu 14.04.2 LTS
# Platform: 32-bit # Word size of OS: 32-bit
# Version: 0.14.2935 (Git) # Word size of FreeCAD: 32-bit
# Branch: master # Version: 0.16.4928 (Git)
# Hash: eab159b6ee675012bf79de838c206a311e911d85 # Branch: master
# Python version: 2.7.6 # Hash: d8f63bcfd10301f3d1e141cced4370f0782238d0
# Qt version: 4.8.6 # Python version: 2.7.6
# Coin version: 4.0.0a # Qt version: 4.8.6
# SoQt version: 1.6.0a # Coin version: 4.0.0a
# OCC version: 6.7.0 # OCC version: 6.8.0.oce-0.17
##################################################################################################
# OS: Windows Vista # OS: Windows Vista
# Word size of OS: 32-bit # Word size of OS: 32-bit
# Word size of FreeCAD: 32-bit # Word size of FreeCAD: 32-bit
# Version: 0.15.4527 (Git) # Version: 0.15.4671 (Git)
# Branch: master # Branch: releases/FreeCAD-0-15
# Hash: 0da2e4c45a9a259c26abd54c2a35393e1c15696f # Hash: 244b3aef360841646cbfe80a1b225c8b39c8380c
# Python version: 2.7.8 # Python version: 2.7.8
# Qt version: 4.8.6 # Qt version: 4.8.6
# Coin version: 4.0.0a # Coin version: 4.0.0a
# OCC version: 6.7.1 # OCC version: 6.8.0.oce-0.17
##################################################################################################
- ver 0.7 02/02/2015 suppression 2 str App.Console.PrintMessage(str(PolicePath)+"\n") to App.Console.PrintMessage((PolicePath)+"\n") that caused an error with the characters above 128 in the police path.
- ver 0.6 23/11/2014 corrected "texte = unicode(self.textEdit.toPlainText())" now accept "'éèà@..."
- ver 0.5 19/11/2014 Gui
- ver 0.4 10/10/2014 add variable "rotation" in the loop (for i in range(0,rotation,(rotation/nombre)): # 360 a parametrer)
- ver 0.4 27/08/2014 correction error of de radius (exterieur=0, debout=1)
- ver 0.3 26/08/2014 add creation text of flat curve
- ver 0.2 26/08/2014 add creation text of internal curve
- ver 0.1
(2537)
Link
I commenti nella pagina del forum: Extrude from curved surface of cylinder
- Drafting: Line, Polyline, Fillet, Arc, Arc by 3 points, Circle, Ellipse, Rectangle, Polygon, B-spline, Cubic Bézier curve, Bézier curve, Point, Facebinder, ShapeString, Hatch
- Annotation: Text, Dimension, Label, Annotation styles, Annotation scale
- Modification: Move, Rotate, Scale, Mirror, Offset, Trimex, Stretch, Clone, Array, Polar array, Circular array, Path array, Path link array, Point array, Point link array, Edit, Subelement highlight, Join, Split, Upgrade, Downgrade, Wire to B-spline, Draft to sketch, Set slope, Flip dimension, Shape 2D view
- Draft Tray: Select plane, Set style, Toggle construction mode, AutoGroup
- Snapping: Snap lock, Snap endpoint, Snap midpoint, Snap center, Snap angle, Snap intersection, Snap perpendicular, Snap extension, Snap parallel, Snap special, Snap near, Snap ortho, Snap grid, Snap working plane, Snap dimensions, Toggle grid
- Miscellaneous: Apply current style, Layer, Manage layers, Add a new named group, Move to group, Select group, Add to construction group, Toggle normal/wireframe display, Create working plane proxy, Heal, Show snap toolbar
- Additional: Constraining, Pattern, Preferences, Import Export Preferences, DXF/DWG, SVG, OCA, DAT
- Context menu:
- Layer container: Merge layer duplicates, Add new layer
- Layer: Activate this layer, Select layer contents
- Text: Open hyperlinks
- Wire: Flatten
- Working plane proxy: Write camera position, Write objects state
- Getting started
- Installation: Download, Windows, Linux, Mac, Additional components, Docker, AppImage, Ubuntu Snap
- Basics: About FreeCAD, Interface, Mouse navigation, Selection methods, Object name, Preferences, Workbenches, Document structure, Properties, Help FreeCAD, Donate
- Help: Tutorials, Video tutorials
- Workbenches: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Hubs: User hub, Power users hub, Developer hub