# -*- coding: utf-8 -*- from __future__ import unicode_literals """ *************************************************************************** * Copyright (c) <mario52> 2014 2015 2016 2017 2018 2019 2020 2021 2022 * * 2023 2024 2025 * * 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 * *************************************************************************** * WARNING! All changes in this file will be lost and * * may cause malfunction of the program * *************************************************************************** """ # FCInfo.FCMacro en # https://fr.wikipedia.org/wiki/Kilogramme # Select an object or launch the application and select an object, and a series of information appear. # Calculations FreeCAD unit, which is the mm on each new selection, the unit of length-based his return still on mm and decimal degrees angle. # Always leave by the "Exit" button if it exits the program without going through the button "Exit" the program remains in memory and continues to run. # Should leave FreeCAD to erase memory. # Only the first 200 objects are visible in the table if there are more than 200 items in the object a signal will be displayed by '(!+ 200), # The complete list of data is visible in the backup file # # 05_01 01/14 Docked PyQt4 + PySide 19/12/2015 suppression de PyQt4 21/06/2017 ajout style 8 points et nouveau path # 12/12/2017 upgrade de la section Matrix of inertia de "pinq" voir "https://forum.freecadweb.org/viewtopic.php?f=22&t=23888" # other: Momentof Interia - FCInfo macro: https://forum.freecad.org/viewtopic.php?t=64653 # ajout de Plans, Axes, Points et optimisation # 16/04/2019 upgrade pour 0.17.13541 (Git), 0.18.16093 (Git), 0.19.16474 (Git)Qt: 5.6.2 Python: 3.6.6 OCC: 7.3.0 # 30/05/2019 ver "01.21-rmu" rmu change fixed positions to qt layouts grid.addWidget() by rmu75 see the rmu75 fork "https://gist.github.com/rmu75/b165147bd1c2f2659c014103793ae1d8" # 07/11/2019 ver "01.21-3-rmu" replace character micro = "U", square = "2", cube = "3", degrees = " deg" see "https://forum.freecadweb.org/viewtopic.php?f=3&t=6005&start=70#p345819" # 12/11/2020 ver "01.22-rmu" replace self window(hide) by "self.window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)" # 18/11/2021 ver "01.23 rmu" ajout icones, RB clipBoard, Decimal, Hauteur texte, compatible Sketcher editeur ouvert # 25/11/2021 ver "01.23cb rmu" delete "import Sketcher * " create conflict with open(OpenName, "r") ?? # 02/12/2021 ver "01.24 rmu" add adjustedGlobalPlacement(,), boundbox tracing # 10/12/2021 ver "01.25 rmu" PySide2 and add comboBox materials # 11/12/2021 ver "01.25b, 12/12/2021 ver "01.25c, 13/12/2021 ver "01.25d, 2021/12/27 ver "1.25e" # 2022/02/06 ver "1.26" Mesh, Points, Couleurs, 2022/02/20 ver 1.26b upgrade BSPline, 2022/04/19 ver 1.26c upgrade BSpline error with Gear Bspline=Line # 2023/06/24 ver "1.27" optimize styleSheet and litle bug # 2023/09/01 ver "1.28" modify variable name, possibility hidden each sector, save data spreadSheet in document, surface radius, add button webWiki and webForum # 2024/05/06 ver "1.29" port to PySide6 by sylvainbx https://gist.github.com/sylvainbx/af09a30be3e1427de56305825331fb29 # 2024/05/10 ver "1.29b" PySide2 modify Inertia " MatrixX1*uniteM to (MatrixX1*uniteM) " and adding spinBox inertia #https://forum.freecad.org/viewtopic.php?p=713935#p713935 # Moment of inertias calculation #https://forum.freecad.org/viewtopic.php?t=64653 # Momentof Interia - FCInfo macro # 2025/01/02 ver 1.30 delette all reference to PySide PySide2 and QtWidgets modify the (Qt) Save file, 2025/01/25 1.30b replace slash Windows by slash Python "/" , 2025/01/28 comboBox ArchLinux # #OS: Windows 10 build 19045 #Word size of FreeCAD: 64-bit #Version: 0.22.0dev.37100 (Git) #Build type: Release #Branch: main #Hash: ede6c811fd39d68a44949601f2eb7ecc8a67fdb7 #Python 3.11.9, Qt 5.15.13, Coin 4.0.2, Vtk 9.2.6, OCC 7.7.2 #Locale: French/Mars (fr_MA) # __Title__ = "FCInfo" __Author__ = "Mario52" __Url__ = "https://gist.github.com/mario52a/8d40ab6c018c2bde678f" __Version__ = "1.30c" __Date__ = "2025/01/28" __Comment__ = "gives different information about the selected object with the possibility of saving information" __Forum1__ = "http://forum.freecadweb.org/viewtopic.php?f=10&t=3185" __Forum2__ = "https://forum.freecadweb.org/viewtopic.php?f=3&t=6005" __Wiki__ = "https://www.freecadweb.org/wiki/Macro_FCInfo" __Gist__ = "https://gist.github.com/mario52a/6afc64081c4eb8be3b93" __IconL__ = "" __IconW__ = "" __Help__ = "Start the macro select an object and read the info displayed" __Status__ = "stable" __Requires__ = "freecad 0.19 and more" __Communication__ = "http://forum.freecadweb.org/viewtopic.php?f=10&t=3185" # import PySide try: from PySide import QtWidgets from PySide.QtWidgets import * except Exception: None from PySide import QtGui , QtCore from PySide.QtGui import * from PySide.QtCore import * #import PySide.QtXml import os import platform import warnings warnings.simplefilter("ignore") import Draft, Part, FreeCAD, PartGui, FreeCADGui import FreeCAD as App import FreeCADGui as Gui from FreeCAD import Base import Sketcher import Points import Mesh import pivy from pivy import coin import Spreadsheet import math import decimal from math import sqrt, pi, sin, cos, asin, acos, atan, atan2, degrees, radians, tan import csv import codecs import sys import copy # pour copier 2 tableaux import re ####path######################################################################### global path ; path = "" # #path = FreeCAD.ConfigGet(u"AppHomePath") # path FreeCAD installation #path = FreeCAD.ConfigGet(u"UserAppData") # path FreeCAD User data #path = "your path" # your directory path param = FreeCAD.ParamGet(u"User parameter:BaseApp/Preferences/Macro")# macro path path = param.GetString(u"MacroPath","") + "/" # macro path path = path.replace(u"\\","/") # convert the "\" to "/" #print( u"Path for the icons : " , path ) # ################################################################################# try: import webbrowser except Exception: None #### Detect version macro ########################################### #22/03/2021 try: import urllib from urllib import request except Exception: None #### Detect version macro ########################################### #22/03/2021 def versionSearch(): try: contentPage = request.urlopen(u"https://wiki.freecadweb.org/Macro_" + __Title__).readlines() versionDetect = dateDetect = "" effacer = 0 for i in contentPage: if "ctEven macro-version" in str(i): versionDetect = str((str(i).split(">")[1])) versionDetect = versionDetect.split("\\")[0] if "ctEven macro-date" in str(i): dateDetect = str((str(i).split(">")[1])) dateDetect = dateDetect.split("\\")[0] if (versionDetect != "") and (dateDetect != ""): break try: if (versionDetect == __Version__) and (dateDetect == __Date__): None else: msg = (u"New version availlable : " + "\n" + str(versionDetect) + ":" + str(dateDetect) + "\n" + "You can install with AddonManager" + "\n" + "For desactivate this Info window go to " + "\n" + "parameter:BaseApp/Preferences/Macros/FCMmacros/FCInfo " + "\n" + "set the [ switchVersionSearch ] parameter to False") App.Console.PrintMessage(u"your actual version : " + str(__Version__) + " : " + str(__Date__) + "\n") App.Console.PrintMessage(u"new version availlable : " + str(versionDetect) + " : " + str(dateDetect) + "\n") diag = QMessageBox(QMessageBox.Information, 'New Version', msg) diag.setWindowModality(QtCore.Qt.ApplicationModal) diag.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenetre en avant diag.exec_() except Exception: None return versionDetect, dateDetect except Exception: App_Console_PrintError(u"Not search version not connected for testing or internal error" + "\n") global FreeCAD_ParamGetSet ; FreeCAD_ParamGetSet = FreeCAD.ParamGet(u"User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__) # FreeCAD_ParamGetSet global switchVersionSearch; switchVersionSearch = 0 # Search version switchable in # Tools/Edit parameter/BaseApp/Preferences/Macros/FCMmacros/FCCircularText switchVersionSearch = FreeCAD_ParamGetSet.GetBool(u"switchVersionSearch") FreeCAD_ParamGetSet.SetBool(u"switchVersionSearch", switchVersionSearch) #*True or False if switchVersionSearch == 1: versionSearch() #### Detect version macro ########################################### try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QApplication.translate(context, text, disambig) #################################################################################### def iso8859(encoder): # ori 0.18 Py 27 return unicode(encoder).encode('iso-8859-1') verPython = sys.version_info if int(verPython.major) < 3: return unicode(encoder).encode('iso-8859-1') else: encoder = str(encoder) return encoder def utf8(unio): return unicode(unio).encode('UTF8') def heure(): return QtCore.QTime().currentTime().toString('hh:mm:ss') def dateEu(): return QtCore.QDate().currentDate().toString('dd/MM/yyyy') # forme euro def dateUs(): return QtCore.QDate().currentDate().toString('MM/dd/yyyy') # forme us def dateUk(): return QtCore.QDate().currentDate().toString('yyyy/MM/dd') # forme Uk def dateComp(): return QtCore.QDate().currentDate().toString('dddd d MMMM yyyy') # Return "dimanche 20 Juillet 2013" def Around(a) : global seTDecimalValue if seTDecimalValue == -1: seTDecimalValue = 1000 ard = round(a, seTDecimalValue) return ard global uniteAs ; uniteAs = " deg" # HTML: ° def degMinSec(angle0): # give the angle in degrees global uniteAs try: deg = int(angle0) min = int((angle0 - deg)*60) sec = Around((((angle0 - deg)*60)-min)*60) angle = str(deg)+" deg"+" "+str(min)+u"' "+str(sec)+u"''" uniteAs = "" return angle except Exception: return 0 def angleGrade(angle0): # give the angle in degrees global uniteAs try: angle = float(angle0) angle = (200.0 * angle) / 180.0 uniteAs = " gon" #return round(angle,6) return angle except Exception: return 0 def anglePourcent(angle0): # give the angle in degrees global uniteAs #angle0 = round(abs(angle0)) angle0 = abs(angle0) if (angle0 == 90): return 0.0 else: try: if angle0 in range(90 ,181): angle0 = 180 - angle0 if angle0 in range(180,271): angle0 = angle0 - 180 if angle0 in range(270,361): angle0 = 360 - angle0 #angle = abs(round((tan(radians(angle0))*100),2)) angle = abs(tan(radians(angle0))*100) uniteAs = u"%" #return round(angle,6) return angle except Exception: return 0.0 def angle2(vecteur_x1, vecteur_y1, vecteur_x2, vecteur_y2, modeTypeAngle): # calculation of the slope of a line using two vectors # If 'modeTypeAngle' = 1 then display in degrees else in radians global uniteAs try: deltaX = vecteur_x2 - vecteur_x1 deltaY = vecteur_y2 - vecteur_y1 if modeTypeAngle == 1: angle = degrees(atan2(float(deltaY),float(deltaX))) # degrees uniteAs = " deg" else: angle = atan2(float(deltaY),float(deltaX)) # radian uniteAs = " rad" #return round(angle,6) return angle except Exception: return 0 #### Configuration begin ################################################ #### NOT MODIFY THE CODE HERE #### #### for modify : go to : FreeCAD >Menu >Tools >Edit parameters... >BaseApp/Preferences/Macros/FCMmacros/FCInfo #### ## FreeCAD_ParamGetSet.SetString(u"Version", __Version__ + " (" + __Date__ + ")") ## global switchNotInfoOnBeginning # switchNotInfoOnBeginnin = 0 # display or not the inf on beginning run macro False switchNotInfoOnBeginning = FreeCAD_ParamGetSet.GetBool(u"switchNotInfoOnBeginning") FreeCAD_ParamGetSet.SetBool(u"switchNotInfoOnBeginning", switchNotInfoOnBeginning) #*True or False ## global switchWarning # display or not the little window "Warning Error Selection" switchWarning = FreeCAD_ParamGetSet.GetBool(u"switchWarning") FreeCAD_ParamGetSet.SetBool(u"switchWarning", switchWarning) #*True or False #Config global switchCreatePoint #; switchCreatePoint = 0 # for point False switchCreatePoint = FreeCAD_ParamGetSet.GetBool(u"switchCreatePoint") ## global switchCreateAxis #; switchCreateAxis = 1 # for axis True switchCreateAxis = FreeCAD_ParamGetSet.GetBool(u"switchCreateAxis") ## global switchCreatePlane #; switchCreatePlane = 1 # for plane True switchCreatePlane = FreeCAD_ParamGetSet.GetBool(u"switchCreatePlane") ## global switchDisplayInfoObject #; switchDisplayInfoObject = 0 # switchDisplayInfoObject = FreeCAD_ParamGetSet.GetBool(u"switchDisplayInfoObject") FreeCAD_ParamGetSet.SetBool(u"switchDisplayInfoObject", switchDisplayInfoObject) #*True or False ## global switchDisplayErrorInfo #; switchDisplayErrorInfo = 0 # switchDisplayErrorInfo = FreeCAD_ParamGetSet.GetBool(u"switchDisplayErrorInfo") FreeCAD_ParamGetSet.SetBool(u"switchDisplayErrorInfo", switchDisplayErrorInfo) #*True or False ## global switchClearDisplayReportView #; switchClearDisplayReportView = 0 # switchClearDisplayReportView = FreeCAD_ParamGetSet.GetBool(u"switchClearDisplayReportView") FreeCAD_ParamGetSet.SetBool(u"switchClearDisplayReportView", switchClearDisplayReportView) #*True or False ## global seTWidgetPosition #; seTWidgetPosition = 0 # position the widget Left or Right seTWidgetPosition = FreeCAD_ParamGetSet.GetBool(u"seTWidgetPosition") # True or False FreeCAD_ParamGetSet.SetBool(u"seTWidgetPosition", seTWidgetPosition) ## global switchBoundBoxCreateText #; switchBoundBoxCreateText = 0 # switchBoundBoxCreateText = FreeCAD_ParamGetSet.GetBool(u"switchBoundBoxCreateText") ## global seTBoundBoxTextHeigth #; seTBoundBoxTextHeigth = 3.0 # seTBoundBoxTextHeigth = FreeCAD_ParamGetSet.GetFloat(u"seTBoundBoxTextHeigth") if seTBoundBoxTextHeigth == 0: seTBoundBoxTextHeigth = 3.0 ## global seTBoundBoxTextArround #; seTBoundBoxTextArround = 3 # seTBoundBoxTextArround = FreeCAD_ParamGetSet.GetInt(u"seTBoundBoxTextArround") if seTBoundBoxTextArround == 0: seTBoundBoxTextArround = 3 FreeCAD_ParamGetSet.SetInt(u"seTBoundBoxTextArround", seTBoundBoxTextArround) # 3 ## global seTBoundBoxDisplayModeText #; seTBoundBoxDisplayModeText = str(u"Screen") # available : u"Screen" or u"World" seTBoundBoxDisplayModeText = FreeCAD_ParamGetSet.GetString(u"seTBoundBoxDisplayModeText") if seTBoundBoxDisplayModeText == "": seTBoundBoxDisplayModeText = str(u"Screen") FreeCAD_ParamGetSet.SetString(u"seTBoundBoxDisplayModeText", seTBoundBoxDisplayModeText) ## global seTBoundBoxJustificationText #; seTBoundBoxJustificationText = str(u"Center") # available : "Center" or "Left" or "Right" seTBoundBoxJustificationText = FreeCAD_ParamGetSet.GetString(u"seTBoundBoxJustificationText") if seTBoundBoxJustificationText == "": seTBoundBoxJustificationText = str(u"Center") FreeCAD_ParamGetSet.SetString(u"seTBoundBoxJustificationText", seTBoundBoxJustificationText) ## global seTMemoClipBoard #; seTMemoClipBoard = 0 # seT format du memo 0=None ou 1=F...CAD(1,1,1) ou 2=1,1,1 ou 3=1 1 1 seTMemoClipBoard = FreeCAD_ParamGetSet.GetInt(u"seTMemoClipBoard") ## global seTTextHeigthValue #; seTTextHeigthValue = 11 # heigth Text value seTTextHeigthValue = FreeCAD_ParamGetSet.GetInt(u"seTTextHeigthValue") if seTTextHeigthValue == 0: seTTextHeigthValue = 11 ## global seTDecimalValue #; seTDecimalValue = 4 # number of decimal value seTDecimalValue = FreeCAD_ParamGetSet.GetInt(u"seTDecimalValue") if seTDecimalValue == 0: seTDecimalValue = 4 ## global seTMaterialCurrentIndex #; seTMaterialCurrentIndex = ? # index materiel seTMaterialCurrentIndex = FreeCAD_ParamGetSet.GetInt(u"seTMaterialCurrentIndex") ## global seTMaterialFileName #; seTMaterialFileName = u"FCInfo_material.txt" or other seTMaterialFileName = FreeCAD_ParamGetSet.GetString(u"seTMaterialFileName") if seTMaterialFileName == "": seTMaterialFileName = u"FCInfo_material.txt" FreeCAD_ParamGetSet.SetString(u"seTMaterialFileName", seTMaterialFileName) #*"FCInfo_material.txt" ## #### new version since 1.25f separate path and name of file more logic 28/01/2022 the parameter/Preferences is not compatible "you must delete the name file and extension in preferences" global seTMaterialReadPathName #; seTMaterialReadPathName = path global seTMaterialSavePathName #; seTMaterialSavePathName = path seTMaterialSavePathName = FreeCAD_ParamGetSet.GetString(u"seTMaterialSavePathName") if seTMaterialSavePathName == "": seTMaterialSavePathName = path seTMaterialSavePathName = os.path.dirname(seTMaterialSavePathName) + "/" # = C:/Provisoire400/ seTMaterialReadPathName = seTMaterialSavePathName FreeCAD_ParamGetSet.SetString(u"seTMaterialSavePathName", seTMaterialSavePathName) #*"C:/.../Macro/" ## global seTMaterialPrice #; seTMaterialPrice = 1.0 # price seTMaterialPrice = FreeCAD_ParamGetSet.GetFloat(u"seTMaterialPrice") if seTMaterialPrice == 0: seTMaterialPrice = 0.0 ## global seTMaterialSuffixDevise #; seTMaterialSuffixDevise = " Eu # Suffix Devise seTMaterialSuffixDevise = FreeCAD_ParamGetSet.GetString(u"seTMaterialSuffixDevise") if seTMaterialSuffixDevise == "": seTMaterialSuffixDevise = " Eu (by Kg)" ## global seTMaterialSuffixCost #; seTMaterialSuffixCost = " Eu # Suffix Cost seTMaterialSuffixCost = FreeCAD_ParamGetSet.GetString(u"seTMaterialSuffixCost") if seTMaterialSuffixCost == "": seTMaterialSuffixCost = " Eu" ## global seTMaterialCost #; seTMaterialCost = 1.0 # (by Kg) seTMaterialCost = FreeCAD_ParamGetSet.GetFloat(u"seTMaterialCost") if seTMaterialCost == 0: seTMaterialCost = 1.0 ## global seTDensiteValue #; seTDensiteValue = 1.0 # (steel = 7,32 to 7,86 kg by dm3) seTDensiteValue = FreeCAD_ParamGetSet.GetFloat(u"seTDensiteValue") if seTDensiteValue == 0: seTDensiteValue = 1.0 FreeCAD_ParamGetSet.SetFloat(u"seTDensiteValue", seTDensiteValue) ## global seTDensiteDecimalNumber #; seTDensiteDecimalNumber = 4 # number of decimal value seTDensiteDecimalNumber = FreeCAD_ParamGetSet.GetInt(u"seTDensiteDecimalNumber") if seTDensiteDecimalNumber == 0: seTDensiteDecimalNumber = 4 FreeCAD_ParamGetSet.SetInt(u"seTDensiteDecimalNumber", seTDensiteDecimalNumber) #*4 ## global seTDensiteSingleStep #; seTDensiteSingleStep = 1.0 # increse step seTDensiteSingleStep = FreeCAD_ParamGetSet.GetFloat(u"seTDensiteSingleStep") if seTDensiteSingleStep == 0: seTDensiteSingleStep = 1.0 FreeCAD_ParamGetSet.SetFloat(u"seTDensiteSingleStep", seTDensiteSingleStep) #*1.0 ## global seTIndexUnitWeight ; seTIndexUnitWeight = 0 # item Poids #seTIndexUnitWeight = FreeCAD_ParamGetSet.GetInt(u"seTIndexUnitWeight") ## global seTIndexUnitLength ; seTIndexUnitLength = 0 # item Longueur #seTIndexUnitLength = FreeCAD_ParamGetSet.GetInt(u"seTIndexUnitLength") ## global seTPositionFlyRightLeft #; seTPositionFlyRightLeft = 2 # 1 = fly, 2 = RightDock other= LeftDock seTPositionFlyRightLeft = FreeCAD_ParamGetSet.GetInt(u"seTPositionFlyRightLeft") if seTPositionFlyRightLeft == 0: seTPositionFlyRightLeft = 2 # 1 , 2, other ## global seTUnitSymbolMicro #; seTUnitSymbolMicro = u"U" # micro hex="\xB5", html=<span>µ</span> seTUnitSymbolMicro = FreeCAD_ParamGetSet.GetString(u"seTUnitSymbolMicro") if seTUnitSymbolMicro == "": seTUnitSymbolMicro = "U" FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolMicro", seTUnitSymbolMicro) #*"U" ## global seTUnitSymbolCube #; seTUnitSymbolCube = u"3" # cube hex="\xb3", html=<span>³</span> seTUnitSymbolCube = FreeCAD_ParamGetSet.GetString(u"seTUnitSymbolCube") if seTUnitSymbolCube == "": seTUnitSymbolCube = "3" FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolCube", seTUnitSymbolCube) #*"3" ## global seTDensiteSuffixChain #; seTDensiteSuffixChain = kg # Suffix (by dm3) seTDensiteSuffixChain = FreeCAD_ParamGetSet.GetString(u"seTDensiteSuffixChain") if seTDensiteSuffixChain == "": seTDensiteSuffixChain = " kg (by dm)" + seTUnitSymbolCube FreeCAD_ParamGetSet.SetString(u"seTDensiteSuffixChain", seTDensiteSuffixChain) #*" kg (by dm3)" ## global seTUnitSymbolCarre #; seTUnitSymbolCarre = u"2" # carre hex="\xb2", html=<span>²</span> seTUnitSymbolCarre = FreeCAD_ParamGetSet.GetString(u"seTUnitSymbolCarre") if seTUnitSymbolCarre == "": seTUnitSymbolCarre = "2" FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolCarre", seTUnitSymbolCarre) #*"2" ## global setPathLatestDirectory #; setPathLatestDirectory = "C:/ ???" setPathLatestDirectory = FreeCAD_ParamGetSet.GetString(u"setPathLatestDirectory") if setPathLatestDirectory == "": setPathLatestDirectory = path FreeCAD_ParamGetSet.SetString(u"setPathLatestDirectory", setPathLatestDirectory) #*"C:/ ???" ## global setBSplineToByArcValue #; setBSplineToByArcValue = 0.00001 setBSplineToByArcValue = FreeCAD_ParamGetSet.GetFloat(u"setBSplineToByArcValue") if setBSplineToByArcValue == 0.0: setBSplineToByArcValue = 0.00001 FreeCAD_ParamGetSet.SetFloat(u"setBSplineToByArcValue", setBSplineToByArcValue) #*0.00001 global BSplinetoByArcValeurS # string pour afficher en "0.00001" pas en 1.e5 BSplinetoByArcValeurS = str("%.12f" % setBSplineToByArcValue) BSplinetoByArcValeurS = str(BSplinetoByArcValeurS.rstrip('0')) ## global setMeshTopologyValue #; setMeshTopologyValue = 0.1 setMeshTopologyValue = FreeCAD_ParamGetSet.GetFloat(u"setMeshTopologyValue") if setMeshTopologyValue == 0.0: setMeshTopologyValue = 0.1 FreeCAD_ParamGetSet.SetFloat(u"setMeshTopologyValue", setMeshTopologyValue) #*0.1 ## global switchBSplineCreateCircleConstructorAxis#; switchBSplineCreateCircleConstructorAxis = 0 # for create points with toByArcs() switchBSplineCreateCircleConstructorAxis = FreeCAD_ParamGetSet.GetBool(u"switchBSplineCreateCircleConstructorAxis") FreeCAD_ParamGetSet.SetBool(u"switchBSplineCreateCircleConstructorAxis", switchBSplineCreateCircleConstructorAxis)#*True or False ## global switchBSplineCreateCircleConstructor #; switchBSplineCreateCircleConstructor = 0 # for create circles with toByArcs() switchBSplineCreateCircleConstructor = FreeCAD_ParamGetSet.GetBool(u"switchBSplineCreateCircleConstructor") FreeCAD_ParamGetSet.SetBool(u"switchBSplineCreateCircleConstructor", switchBSplineCreateCircleConstructor) #*True or False ## global switchCreateLineDiVatNatOnClick #; switchCreateLineDiVatNatOnClick = 0 # for position line on click mouse switchCreateLineDiVatNatOnClick = FreeCAD_ParamGetSet.GetBool(u"switchCreateLineDiVatNatOnClick") FreeCAD_ParamGetSet.SetBool(u"switchCreateLineDiVatNatOnClick", switchCreateLineDiVatNatOnClick) #*True or False ## global setMomentOfInertia_16 #; setMomentOfInertia_16 = 1 setMomentOfInertia_16 = FreeCAD_ParamGetSet.GetInt(u"setMomentOfInertia_16") if setMomentOfInertia_16 == 0: setMomentOfInertia_16 = 1 FreeCAD_ParamGetSet.SetInt(u"setMomentOfInertia_16", setMomentOfInertia_16) ## global setMomentOfInertiaMassique_17 #; setMomentOfInertiaMassique_17 = 1 setMomentOfInertiaMassique_17 = FreeCAD_ParamGetSet.GetInt(u"setMomentOfInertiaMassique_17") if setMomentOfInertiaMassique_17 == 0: setMomentOfInertiaMassique_17 = 1 FreeCAD_ParamGetSet.SetInt(u"setMomentOfInertiaMassique_17", setMomentOfInertiaMassique_17) #### #### section GroupBox begin global switch_setVisible_GBox_001_Document # switch_setVisible_GBox_001_Document = True (1) switch_setVisible_GBox_001_Document = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_001_Document", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_001_Document", switch_setVisible_GBox_001_Document) # *True or False global switch_setVisible_GBox_002_Coordinate_Mouse # switch_setVisible_GBox_002_Coordinate_Mouse = True (1) switch_setVisible_GBox_002_Coordinate_Mouse = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_002_Coordinate_Mouse", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_002_Coordinate_Mouse", switch_setVisible_GBox_002_Coordinate_Mouse) # *True or False global switch_setVisible_GBox_003_Color # switch_setVisible_GBox_003_Color = True (1) switch_setVisible_GBox_003_Color = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_003_Color", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_003_Color", switch_setVisible_GBox_003_Color) # *True or False global switch_setVisible_GBox_004_Object_Mesh # switch_setVisible_GBox_004_Object_Mesh = True (1) switch_setVisible_GBox_004_Object_Mesh = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_004_Object_Mesh", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_004_Object_Mesh", switch_setVisible_GBox_004_Object_Mesh) # *True or False global switch_setVisible_GBox_005_Value_Unit # switch_setVisible_GBox_005_Value_Unit = True (1) switch_setVisible_GBox_005_Value_Unit = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_005_Value_Unit", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_005_Value_Unit", switch_setVisible_GBox_005_Value_Unit) # *True or False global switch_setVisible_GBox_006_Inclination # switch_setVisible_GBox_006_Inclination = True (1) switch_setVisible_GBox_006_Inclination = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_006_Inclination", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_006_Inclination", switch_setVisible_GBox_006_Inclination) # *True or False global switch_setVisible_GBox_007_Surface_and_Volume # switch_setVisible_GBox_007_Surface_and_Volume = True (1) switch_setVisible_GBox_007_Surface_and_Volume = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_007_Surface_and_Volume", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_007_Surface_and_Volume", switch_setVisible_GBox_007_Surface_and_Volume) # *True or False global switch_setVisible_GBox_008_Cost_And_Price # switch_setVisible_GBox_008_Cost_And_Price = True (1) switch_setVisible_GBox_008_Cost_And_Price = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_008_Cost_And_Price", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_008_Cost_And_Price", switch_setVisible_GBox_008_Cost_And_Price) # *True or False global switch_setVisible_GBox_009_BoundBox # switch_setVisible_GBox_009_BoundBox = True (1) switch_setVisible_GBox_009_BoundBox = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_009_BoundBox", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_009_BoundBox", switch_setVisible_GBox_009_BoundBox) # *True or False global switch_setVisible_GBox_010_Center_Mass # switch_setVisible_GBox_010_Center_Mass = True (1) switch_setVisible_GBox_010_Center_Mass = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_010_Center_Mass", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_010_Center_Mass", switch_setVisible_GBox_010_Center_Mass) # *True or False global switch_setVisible_GBox_011_Inertia # switch_setVisible_GBox_011_Inertia = True (1) switch_setVisible_GBox_011_Inertia = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_011_Inertia", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_011_Inertia", switch_setVisible_GBox_011_Inertia) # *True or False global switch_setVisible_GBox_012_SpreadSheet # switch_setVisible_GBox_012_SpreadSheet = True (1) switch_setVisible_GBox_012_SpreadSheet = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_012_SpreadSheet", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_012_SpreadSheet", switch_setVisible_GBox_012_SpreadSheet) # *True or False global switch_setVisible_GBox_013_SpreadSheet_Creation # switch_setVisible_GBox_013_SpreadSheet_Creation = True (1) switch_setVisible_GBox_013_SpreadSheet_Creation = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_013_SpreadSheet_Creation", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_013_SpreadSheet_Creation", switch_setVisible_GBox_013_SpreadSheet_Creation) # *True or False global switch_setVisible_GBox_014_Main_Tools # switch_setVisible_GBox_014_Main_Tools = True (1) switch_setVisible_GBox_014_Main_Tools = FreeCAD_ParamGetSet.GetBool(u"switch_setVisible_GBox_014_Main_Tools", True) FreeCAD_ParamGetSet.SetBool(u"switch_setVisible_GBox_014_Main_Tools", switch_setVisible_GBox_014_Main_Tools) # *True or False #### section GroupBox end #### global switch_Set_Placeholder_Text # switch_Set_Placeholder_Text = True (1) switch_Set_Placeholder_Text = FreeCAD_ParamGetSet.GetBool(u"switch_Set_Placeholder_Text", True) FreeCAD_ParamGetSet.SetBool(u"switch_Set_Placeholder_Text", switch_Set_Placeholder_Text) # *True or False #### Configuration end ################################################ ## ####tools after in FreeCAD.ParamGet########################################################### ## global ui ; ui = "" # QMainWindow() global FCmw ; FCmw = "" # Docked RightDock LeftDock global myNewFreeCADWidget; myNewFreeCADWidget = "" ## ####tools after in FreeCAD.ParamGet########################################################### # def App_Console_PrintMessage(textInfo): global switchDisplayInfoObject if switchDisplayInfoObject == 1 : App.Console.PrintMessage(textInfo) def App_Console_PrintError(textInfo): global switchDisplayErrorInfo if switchDisplayErrorInfo == 1 : App.Console.PrintMessage(textInfo) def errorDialog(msg): global switchWarning if switchWarning == 0: None else: diag = QMessageBox(QMessageBox.Critical,"Error Message",msg ) diag.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # PySide #cette fonction met la fenetre en avant #diag.setWindowModality(QtCore.Qt.ApplicationModal) # la fonction a ete desactivee pour favoriser "WindowStaysOnTopHint" diag.exec_() global sel ; sel = u"" global document_ ; document_ = u"FCInfo" global object_Label ; object_Label = u"" global object_Name ; object_Name = u"" global typeObject ; typeObject = u"" # ShapeType : Compound global object_Type ; object_Type = u"" # Part::Feature global subElemName ; subElemName = u"" global RotationToEuler; RotationToEuler = u"" global position0 ; position0 = 0.0 global position1 ; position1 = 0.0 global position2 ; position2 = 0.0 global diffuseColorRF ; diffuseColorRF = 0.0 # color face Red Float 0.0 a 1.0 global diffuseColorVF ; diffuseColorVF = 0.0 # color face Vert/Green Float 0.0 a 1.0 global diffuseColorBF ; diffuseColorBF = 0.0 # color face Blue Float 0.0 a 1.0 global diffuseColorTF ; diffuseColorTF = 0.0 # color face Transparent Float 0.0 a 1.0 global transparenceFace ; transparenceFace = 0 # taux de transparence de fa face 0 a 100 Int global unsignedEncodeColor; unsignedEncodeColor = "" # resultat format 25144423565 unsigned FC global cols ; cols = [] global colorShapeFace ; colorShapeFace = [] global colorShapeLine ; colorShapeLine = [] global colorShapePoint ; colorShapePoint = [] global colorShapeFaceDiffuseColor; colorShapeFaceDiffuseColor = [] global longueurObjet ; longueurObjet = 0.0 global rayonObjet ; rayonObjet = 0.0 global perimetre ; perimetre = 0.0 global numberEdges ; numberEdges = 0 global typeLongueur ; typeLongueur = u"Length of object " global nombreArretesMesh; nombreArretesMesh = 0 global nombreFacesMesh ; nombreFacesMesh = 0 global nombrePointsMesh ; nombrePointsMesh = 0 global Plan_xy ; Plan_xy = 0.0 global Plan_xy_V ; Plan_xy_V = u"" global Plan_yz ; Plan_yz = 0.0 global Plan_yz_V ; Plan_yz_V = u"" global Plan_zx ; Plan_zx = 0.0 global Plan_zx_V ; Plan_zx_V = u"" global surface ; surface = 0.0 global surfaceFace ; surfaceFace = 0.0 global volume_ ; volume_ = 0.0 global poids ; poids = 0.0 global uniteM ; uniteM = 1.0 # unit of measurement length global uniteMs ; uniteMs = u"mm" # micro hex="\xB5", html=<span>µ</span> global uniteS ; uniteS = 1.0 # unit of measurement surface global uniteSs ; uniteSs = u"mm"+seTUnitSymbolCarre # carre hex="\xb2", html=<span>²</span> global uniteV ; uniteV = 1.0 # unit of measurement volume global uniteVs ; uniteVs = u"mm"+seTUnitSymbolCube # cube hex="\xb3", html=<span>³</span> global uniteP ; uniteP = 1.0 # unit of measure Mass global unitePs ; unitePs = u"g" #global uniteAs ; uniteAs = " deg" #place plus haut global boundBox_ ; boundBox_ = 0.0 global boundBoxLX ; boundBoxLX = 0.0 global boundBoxLY ; boundBoxLY = 0.0 global boundBoxLZ ; boundBoxLZ = 0.0 global boundBox_S ; boundBox_S = u"" global BDvol ; BDvol = FreeCAD.Placement() global switchBoundBoxCreateVolume ; switchBoundBoxCreateVolume = 0 # 1 = create Volume global massOrGravity ; massOrGravity = " Mass " global adaptWithBody ; adaptWithBody = 1 # 1 = adaptWithBody passe par adjustedGlobalPlacement() / 0 = mode normal ## Verify this section by person knowing the inertia position ## ## ONLY IF THE OBJECT IS PRESENT IN ONE BODY ## ## and post your knowledges in the forum tread if it is not correct ## ## http://forum.freecadweb.org/viewtopic.php?f=10&t=3185 ## global boundBoxCenterX ; boundBoxCenterX = 0.0 global boundBoxCenterY ; boundBoxCenterY = 0.0 global boundBoxCenterZ ; boundBoxCenterZ = 0.0 global boundBoxXMin ; boundBoxXMin = 0.0 global boundBoxYMin ; boundBoxYMin = 0.0 global boundBoxZMin ; boundBoxZMin = 0.0 global boundBoxCenter; boundBoxCenter= 0.0 global boundBoxDiag ; boundBoxDiag = 0.0 global CenterOfMassX ; CenterOfMassX = 0.0 global CenterOfMassY ; CenterOfMassY = 0.0 global CenterOfMassZ ; CenterOfMassZ = 0.0 global MatrixX1 ; MatrixX1 = 0.0 global MatrixY1 ; MatrixY1 = 0.0 global MatrixZ1 ; MatrixZ1 = 0.0 global Matrix_1 ; Matrix_1 = 0.0 global MatrixX2 ; MatrixX2 = 0.0 global MatrixY2 ; MatrixY2 = 0.0 global MatrixZ2 ; MatrixZ2 = 0.0 global Matrix_2 ; Matrix_2 = 0.0 global MatrixX3 ; MatrixX3 = 0.0 global MatrixY3 ; MatrixY3 = 0.0 global MatrixZ3 ; MatrixZ3 = 0.0 global Matrix_3 ; Matrix_3 = 0.0 global Matrix12 ; Matrix12 = 0.0 global Matrix13 ; Matrix13 = 0.0 global Matrix14 ; Matrix14 = 0.0 global Matrix15 ; Matrix15 = 0.0 global MatrixOfInertiaRaw; MatrixOfInertiaRaw = "" global MatrixX1_16 ; MatrixX1_16 = 0.0 global MatrixY1_16 ; MatrixY1_16 = 0.0 global MatrixZ1_16 ; MatrixZ1_16 = 0.0 global MatrixX2_16 ; MatrixX2_16 = 0.0 global MatrixY2_16 ; MatrixY2_16 = 0.0 global MatrixZ2_16 ; MatrixZ2_16 = 0.0 global MatrixX3_16 ; MatrixX3_16 = 0.0 global MatrixY3_16 ; MatrixY3_16 = 0.0 global MatrixZ3_16 ; MatrixZ3_16 = 0.0 global MatrixX1_17 ; MatrixX1_17 = 0.0 global MatrixY1_17 ; MatrixY1_17 = 0.0 global MatrixZ1_17 ; MatrixZ1_17 = 0.0 global MatrixX2_17 ; MatrixX2_17 = 0.0 global MatrixY2_17 ; MatrixY2_17 = 0.0 global MatrixZ2_17 ; MatrixZ2_17 = 0.0 global MatrixX3_17 ; MatrixX3_17 = 0.0 global MatrixY3_17 ; MatrixY3_17 = 0.0 global MatrixZ3_17 ; MatrixZ3_17 = 0.0 global DeterminantM ; DeterminantM = 0.0 global refreshMatrix ; refreshMatrix = 1 global Vertx ; Vertx = u"" global Edges ; Edges = u"" global ReperEdge ; ReperEdge = 0 global EdgesLong ; EdgesLong = 0.0 global Faces ; Faces = u"" global FacesSurf ; FacesSurf = 0.0 global FacesCoor ; FacesCoor = 0.0 global compt_E ; compt_E = 0 global compt_F ; compt_F = 0 global compt_VF ; compt_VF = 0 global placement_ ; placement_ = u"" global RowCount ; RowCount = 200 global RowCountTest ; RowCountTest = 0 global SaveName ; SaveName = u"" global ESCAPE ; ESCAPE = u"\t" # tabulation SpreadSheet separation global angleX1 ; angleX1 = 0.0 global angleY1 ; angleY1 = 0.0 global angleZ1 ; angleZ1 = 0.0 global angleX2 ; angleX2 = 0.0 global angleY2 ; angleY2 = 0.0 global angleZ2 ; angleZ2 = 0.0 global directionObj ; directionObj = "[]" global direcValueAt ; direcValueAt = "[]" global direcNormalAt ; direcNormalAt = "[]" global typeNormalAt ; if switchCreateLineDiVatNatOnClick == 0: typeNormalAt = u"NormalAt(0,0)" else: typeNormalAt = u"*NormalAt(0,0)" global switchInertia ; switchInertia = 0 # 0 = pass / 1 = stop for create plane without refresh global BsplineDetect ; BsplineDetect = u"" global BsplinePointsCoor ; BsplinePointsCoor = [] global BsplineNombreDeNoeuds ; BsplineNombreDeNoeuds = 0 global BsplineArcsRadius ; BsplineArcsRadius = [] global BsplineArcsLocation ; BsplineArcsLocation = [] global BsplineRayonApproximatif; BsplineRayonApproximatif = u"" global BsplineCercleToolTip ; BsplineCercleToolTip = u"Bspline détecté " global BsplineNumberElement ; BsplineNumberElement = 0 global BsplineCutLength ; BsplineCutLength = 0.0 global detected ; detected = u"" global newSpreadSheetName ; newSpreadSheetName = "FCSpreadSheet" global TextColorText_R ; TextColorText_R = 0.627451 # color red 1 = 255 global TextColorText_G ; TextColorText_G = 0.627451 # color green 1 = 255 global TextColorText_B ; TextColorText_B = 0.643137 # color blue 1 = 255 global TextColorText_L ; TextColorText_L = 1.000000 # transparency 1 = 255 ################################################################################## Macro_FCInfo_01 = [ " 24 24 8 1", "` c #a90d0e", ". c #a39697", "# c #875e5e", " c None", "b c #e10c0d", "c c #ed5f60", "d c #e1a1a1", "e c #8d3130", " ", " d.ccccdd ", " .ebbccccce#d ", " #bbbcd dcbb`. ", " ebbbbc cbbbb# ", " #bbbbbd ccbbbb. ", " .bbbccbd cddcbbe ", " ebbc cc d dbbb# ", " d`bbd cc cd cbbe ", " .bbbd dbc cc dbb`d ", " cbbc cbc bbd dbbbd ", " ebbc cbbd cbbd dbbbd ", " ebbc cbbbccbbbd dbbbd ", " #bbbd dbbbbbbbbd cbb`d ", " .bbbd cbbbbbbd cbb` ", " d`bbc dcbbbbd dbbb# ", " #bbbc dddd dcbb`. ", " d`bbbcd ddcbbb# ", " .`b`bbcddddcbbbbed ", " #`b```bbbb``bbe. ", " .ebbbbbbbbb`#d ", " d#e`````e#. ", " ddddd ", " "] Macro_FCInfo_02 = [ " 24 23 8 1", "` c #4478b4", ". c #a4c0de", "# c #7b9ac1", " c None", "b c #c8d0db", "c c #6391c5", "d c #89aad1", "e c #5b80ad", " bdd##ddb ", " ddbbbbb.d#d b# ", " d.bbbbb...b.#. bcd ", " ..b..dd.bb....dc#.d ", " #bc``dbbd#..ddddddd ", " #e`` dcdd###dd ", " .ecd# ddd##dd ", " b`b.. ddd##dd ", " bd bdddddd. ", " b b`#c###c. ", " cd###ded b ", " .b...bd d ", " d.d..c b# ", " d....c b #c ", " d.dd..cdb . d`. ", " d...d###ee##ce#ee` ", " ...cddccc###cceecce ", " d.#b#cd#ccccccccceb ", " #ebbb.ec##cccccce. ", " bb bbbb.#eeeeee#b b ", " bbbbbbbbb.bb b ", " bbbbb ", " "] Macro_FCInfo_03 = [ " 24 24 8 1", "` c #293444", ". c #619ee5", "# c #366ab3", "a c #6f7885", "b c #b7b8b8", "c c #ecedec", "d c #344861", "e c #919aa2", "bccbccbcbbaaecccbccbcbcc", "ecbebbebd#aaaddcbcbebeec", "bcbbbbbd.#.b..aabcbbbbbc", "ebcacbda.a#a...adbbaceec", "ccccce`abce#a..e#bcccccc", "bccbcaacbcced...#ecbcbcc", "aaadaaaadaad`a.#.ddaaecc", "aabbbbeaaaaa`#.#.ddadacc", "aecbbcbaa``#d.##..#d`acc", "beccccb`ead..#####.adbcc", "e```````da#d#ddd`d#`dacc", "aacbbbedabbd##``##deeacc", "aacebbedabba`##d#dabbacc", "aebebbedabbee`#.dabeeabc", "b`ddddd``````d`````d`ecc", "aaeaeea`deeabaadaeeaaacc", "aabbbcedebbecbbbeeebeacc", "aabeebedeebebbbeeeeeeabc", "e````d````d`d`d``````abc", "baeeeea`aeeeeeeeeeeeaecc", "aecbcbbdacbecbbcebbbbacc", "aacbccedacbbbbbbbbcbbacc", "aaaaaaaddaaaaaaaaaaaaabc", "bccbccbcbccbccccbccbcbbc"] Macro_FCInfo_04 = [ " 24 24 8 1", "` c #2e383f", ". c #7a9abf", "# c #4870a2", "a c #7a8592", " c None", "c c #adb0b1", "d c #425264", "e c #5b89c3", " ca ", " .dacc ", " cad.c . ", " adac ca` ", " cd`c cddacc ", " adacdc caddac . ", " ccac adddac cadc ", " caac cad`a .ddaca ", " caadddac#. cadd. c ", " caada .`ddac cada ", " .aa#a cad`a c.ddac. ", " c#dd`d`d.ddcca``#.c cc", " cd#.....e..eee...aaac ", " .de.eeee.e.eeeee... ", " ad..eeeeeeeeeeeeeec ", " .d......e.....eeeec ", " ad............eeeec ", " ad.....eeeeeeeeeeec ", " #deeeee#########ee. ", " #d################. ", " dd##############e#c ", " #deeeeeeeeeeeeeeedc ", " d`ddddddddddddddd#c ", " aaaaaaaaaaaaaaaaaac "] Macro_FCInfo_05 = [ " 24 24 8 1", "` c None", ". c #280000", "# c #8ae234", "a c #729fcf", "b c #2a1018", "c c #c8a9a7", "d c #ef2929", "e c #000000", " . ", " ... ", " .#. ", " ... .#. ", " .aa. ..#.. ", " .aaa... .###. ", " .aaaa.. .###. ", " .aaaa. ..#.. ", " .aaaa. .#. ", " ..aaaa. .#. ", " ...aaa. .#. ", " .aab....#...", " .bacccc#ccc", " .acccc#ccc", " .caccc#ccc", " .ccacc#ccc", " .ccacc#ccc", " .cccac#ccc", " .... .cccca#ccc", " ....dd........cccca#ccc", "..ddddddddddddddddddaddd", " ....dd........ccccc#acc", " .... .ccccc#acc", " .ccccc#cac"] Macro_FCInfo_06 = [ " 24 24 8 1", "` c #2c0204", ". c #749ecc", "# c #ccaaa4", "a c #0dfa0d", "b c #8ce234", "c c #ec2a2c", " c None", "e c #fcfefc", " ` ", " `````` ``` ", " ```aaaa``` `b` ", " ```aaaaaaaa``` `b` ", " `aaaaaaaaaaaa` ``b`` ", " ``aaaaaaaaaaaa```bbb` ", " `aaaaaaaaaaaaea``bbb` ", " ``aaaaaaaaaaaeea```b`` ", " `aaaaaaaaaaaeeeaa``b` ", " `aaaeeaaaaaeeeeaa``b` ", " `aaaeeeaaaeeeeaaa``b` ", " `aaaeeeeaeeeeaaaa``b```", " ``aaaeeeeeeeaaaa``#b###", " `aaaaeeeeeaaaaa`##b###", " ``aaaaeeeaaaaa``##b###", " `aaaaaeaaaaaa`.##b###", " ```aaaaaaaa```.##b###", " ```aaaa```###.#b###", " ````````` `####.b###", " ````cc````````####.b###", "``cccccccccccccccccc.ccc", " ````cc````````#####b.##", " ```` `#####b.##", " `#####b#.#"] Macro_FCInfo_07 = [ " 24 24 8 1", " c None", ". c #280000", "# c #ef2929", "a c #8ae234", "b c #ffffff", "c c #c8a9a7", "d c #729fcf", "e c #000000", " . ", " ......... ... ", " ..#######.. .a. ", " ..#########.. .a. ", " ..###########.. ..a.. ", " ..##bb#####bb##...aaa. ", " .###bbb###bbb###..aaa. ", " .####bbb#bbb####...a.. ", " .#####bbbbb#####. .a. ", " .######bbb######. .a. ", " .#####bbbbb#####. .a. ", " .####bbb#bbb####...a...", " .###bbb###bbb###.ccaccc", " ..##bb#####bb##..ccaccc", " ..###########..cccaccc", " ..#########..cdccaccc", " ..#######..ccdccaccc", " ..........cccdcaccc", " .... .ccccdaccc", " ....##........ccccdaccc", "..##################d###", " ....##........cccccadcc", " .... .cccccadcc", " .cccccacdc"] Macro_FCInfo_08 = [ "21 24 8 1", "` c #fc0507", ". c #fc9494", "# c #fc4c4b", "a c #fcd1d0", " c None", "c c #fcb9b9", "d c #fc3433", "e c #fc6f6f", " a````e.a ", " c```dd````d.aa ", " e`dd` a.#````d", " d`# e` c```", " a``e e` c```", " .``a e` a`d``", "e``e e` a`` #`", "``````e.#` a`` d`", "`da.ed`````#.a#`a #`", "`# ad`d````c #`", "`# e` a`d #`", "`# e` d` #`", "`# e`c d` #`", "`# e``````` #`", "`# #`#ac#````#c #`", "`# ``e d`d`````", "`# a``c d` ce``", "`#c``a d` a``", "```d d` a`` ", "```c d` a`` ", "c````ea dda`` ", " ce````dc #```a ", " a.d```d.d``a ", " .`````a "] Macro_FCInfo_09 = [ " 24 24 8 1", "` c #b7201c", ". c #cba938", "# c #e1cb42", "a c #d6d1bd", "b c #f4e256", "c c #b7752b", "d c #c7b295", " c None", " dda ", " a.c.a ", " dcdcd ", " a.cc. ", " dccca ", " a.ccc a ", " accc## ", " d.bbbca ", " b#bbac`` ", " a#.c`c`.a ", " d```cbbb. ", " d``.bbbb## ", " d#bbbb####a ", " #bbbb####b# ", " ##bbb###.#ab ", " .b#####.####ab ", " a##########.ba ", " a#.#####.####a ", " aaadb.###.b.#daaa ", " a aaa#.#.#b..ddaaaa ", " aaaddb###ddddaaaa ", " aaadadadaaaaa ", " a aa a a ", " "] Macro_FCInfo_10 = [ " 24 24 8 1", "` c #486ea4", ". c #b8babd", "# c #868e98", "a c #dfdfe1", "b c #9da5b1", "c c #6687b4", "d c #d0d2d2", " c None", " aaa ", " .bcc#bb ", " .cbbbbbcc ", " accccbbbbcb ", " cc.adccbcbca ", " aca cbcbcb ", " d.b####ccccb`####. ", " aa.a...bcccb`b....a ", " dda#ccbbcccbbc`d.d ", " #aaacccccc``cc.aa# ", " d.aa dcc````cc.aaabd ", " #a aaad`c``c`bddadd# ", " ab daada.`c`ccdddaaa#a ", " .aaaaadddbccc.ddddddd. ", " .aadadaaddb`..dddddddb ", "a.a adaddadaddadddda d.a", "a.aaaaaaadadadadadadddba", "a.d...........b.b.bbb.#a", "a...##bbb.bbbb.b..bb.b#a", "a...##bbbb.b.b.bb.bb.b#a", "a.....bb.bb.bb.bb.bb.b#a", "abddddd.d........bbbbb#a", " .b###################. ", " addddddaddddddddaaa "] Macro_FCInfo_11 = [ " 24 24 8 1", "` c #040204", ". c #749ecc", "# c #ec2a2c", "a c #244a84", "b c #fcea4c", " c None", "d c #040234", "e c #040644", " ", " ", " ```````` ", " ```.....```````` ", " ```...........```` ", " ````````.....de`aa` ", " `.....````````aaaa` ", " `............`aaaa` ", " `....bbb.....`aaaa` ", " `...bbbbb....`aaaa` ", " `...b``bb....`aaa`` ", " ``...```bb...``aaa`` ", " ``..``#`b....``aaa` ", " `..``##`.....`aaaa` ", " `.``###`.....`aaaa` ", " ```####`.....`aaaa` ", " ``#####`.....`aaaa` ", " ``######`.....`aaa`` ", " ```#####`.....`a``` ", " `#####````..``` ", " `###`#` ````` ", " `##```` ", " ```` ", " "] Macro_FCInfo_12 = [ " 24 24 8 1", "` c #060407", ". c #049a9c", "# c #c5a107", "a c #ec2a2c", " c None", "c c #34e2e4", "d c #342a34", "e c #fcae3c", " `ccccccccccc`...` ", " `cccccccccccc`...` ", " `ccccccccccc`.....` ", " ````cccccccc`.....` ", " `###````ccc`.....` ", " `#######```......` ", " `###`#####`.....` ", " `#`a`####`.....` ", " ``aaa`####`...` ", " `aaaa`#````````d``d```", " `aaa`##`eeeeeeeeeeeee`", " `aaa``#``eeeeeeeeeeee`", " `aaa` ``a`eeeeeeeeeee`", " `aaa` `aa`eeeeeeeeee`", " `aaaa` `aaa`eeeeeeeee`", " `aaaa`aaaaa`eeeeeeee`", " `aaaaaaaaaa`eeeeeee`", " `aaaaaaaaa`eeeeeee`", " ``aaaaaa`eeeeeeee`", " `aaaa`eeeeeeeee`", " `aa`eeeeeeeeee`", " `a`eeeeeeeeeee`", " ``eeeeeeeeeeee`", " ```````````````"] Macro_FCInfo_13J = [ "24 24 4 1", " c None", ". c #280000", "+ c #EF2929", "@ c #FBE852", "... ", ".++... ++ ", ".+++++.. ++++ ", " .+++++.. +++ + ", " .++@@. +++ + ", " .++@@@. ++ + + ", " .+.@@@. + + ", " .. .@@@. +++ + ", " . .@@@. + ", " .@@@. + ++ ", " .@@@. + ++++ ", " .@@@. ++ + ", " .@@@. + ", " .@@@. ", " .@@@. ", " .@@@. ", " .@@@. ", " .@@@. ", " .@@@. ", " .@@@. ", " .@@@. ", " .@@@.", " .@++", " .++"] Macro_FCInfo_13M = [ "24 24 5 1", " c None", ". c #280000", "+ c #EE292B", "@ c #EF2929", "# c #FE19FF", "... ", ".@@... ++ ", ".@@@@@.. ++ ", " .@@@@@.. ++ ", " .@@##. ++ ", " .@@###. ++ +++ ", " .@.###. ++++++ ", " .. .###. ++ +++ ", " . .###. ++++++ ", " .###. ++ + + +", " .###. +++ ++", " .###. + ++ ", " .###. + ++ ", " .###. ++ ", " .###. + ", " .###. + ", " .###. ", " .###. ", " .###. ", " .###. ", " .###. ", " .###.", " .#@@", " .@@" ] Macro_FCInfo_13C = [ "24 24 5 1", " c None", ". c #280000", "+ c #EE292B", "@ c #EF2929", "# c #19FEFF", "... ", ".@@... ++ ", ".@@@@@.. +++ ", " .@@@@@.. +++ ", " .@@##. ++ + ++ ", " .@@###. + +++ + ", " .@.###. ++ +++ ", " .. .###. ++ ++ ++ ", " . .###. ++ ++ ", " .###. ++ ++ ++ ", " .###. +++ ++++", " .###. + ++ +", " .###. ++ + +", " .###. + +++", " .###. + ", " .###. + ", " .###. ", " .###. ", " .###. ", " .###. ", " .###. ", " .###.", " .#@@", " .@@" ] Macro_FCInfo_Point = [ "24 24 8 1", " c None", ". c #000100", "+ c #B0A22C", "@ c #E9D235", "# c #6B6014", "$ c #F7E66C", "% c #FBF4BC", "& c #D5B716", " ", " ", " ", " ", " ...... ", " ..+@@@@+.. ", " .#$$$@@@@@#. ", " .#$%%$@@@@@@#. ", " .$%%%$@@@@@@@. ", " .+$%%$@@@@@@@@+. ", " .@$$$@@@@@&&&&&. ", " .@@@@@@@&&&&&&&. ", " .@@@@@&&&&&&&&&. ", " .@@@@&&&&&&&&&&. ", " .+@@&&&&&&&&&&+. ", " .@&&&&&&&&&&&. ", " .#&&&&&&&&&&#. ", " .#&&&&&&&&#. ", " ..+&&&&+.. ", " ...... ", " ", " ", " ", " " ] Macro_FCInfo_Plane = [ "24 24 8 1", " c None", ". c #A40000", "+ c #204A87", "@ c #208020", "# c #EF2929", "$ c #729FCF", "% c #8AE234", "& c #729ECE", " . ", " .. + @ ", " .#. +$+ @@ ", " .##.+$$$+ @%@ ", " .###.$$$$@%%@ ", " .####.$$@%%%@ ", " ..####.@%%%%@ ", " ++.##.@.%%%@+ ", " +&$+..@@#.%@+$+ ", " +&$&&+@%@##.+$$$+ ", " +&$&&&@%%@###.$$$$+ ", " +&$&&&@%%%@####.$$$$+ ", " +$&&@%%%%@#####.$$$$+ ", " +$&@%%%@+.#####.$$$+ ", " +&@%%@+$+.####.$$+ ", " +@%@+$$$+.###.$+ ", " @@+$$$$$+.##.+ ", " @+$$$$$$$+.#. ", " @%+$$$$$$$+.. ", " @%%+$$$$$$+#. ", " @%@ +$&$$+##. ", " @@ +$$+ .#. ", " @ ++ .. ", " . " ] Macro_FCInfo_Axis = [ "24 24 6 1", " c None", ". c #204B86", "+ c #247F23", "@ c #A30701", "# c #204A87", "$ c #208023", " ", " ", " .. ", " .. ", " .. ", " . ", " . ", " ++ .. ", " +++ .. @ ", " +++ .. @@@@ ", " +++ .# @@@@ ", " +$#@@@@ ", " @@@@##@ ", " @@@@@ ..+++ ", " @@ .. +++ ", " .. +++ ", " .. ++ ", " .. ", " . ", " . ", " .. ", " .. ", " .. ", " " ] Macro_FCInfo_Info = [ "24 24 10 1", " c None", ". c #F57900", "+ c #BCBCB3", "@ c #555755", "# c #ECEEEB", "$ c #D8DAD7", "% c #DBDDDA", "& c #E6E9E5", "* c #F2F4F1", "= c #EFF1EE", " ", " ", " . . . . ", " +..+..+..+..++ ", " @@..@..@..@..@+ ", " @#.##.##.##.#@+ ", " @############@+ ", " @#$$$$$$$$$$#@+ ", " @#++++++++++#@+ ", " @#$%%%%%$$$##@+ ", " @#++++++++++#@+ ", " @#$%%%$$$$%#&@+ ", " @#++++++++%##@+ ", " @#$%$$$$$$$%#@+ ", " @#+++++++++%#@+ ", " @#$$$$$$$$$$*@+ ", " @#++++$######@+ ", " @#$$$$$####@@@+ ", " @####&=*##@@@++ ", " @###&#***#@@++ ", " @@@@@@@@@@@++ ", " +++++++++++ ", " ", " " ] Macro_FCInfo_Radian = [ "24 24 6 1", " c None", ". c #0C0000", "+ c #171018", "@ c #EE2C29", "# c #749FCE", "$ c #FFFFFF", " ", " ", " ....... +++ ", " ...#####... + + ", " ..#########@@ ++ ", " ..##########$@@ + + ", " ..##########$##@@ ", " .##########$####@ ", " ..##########$####@@ ", " .##########$######@ ", " .#########$#######@ ", " .########$$$$$$$$$$ ", " .#################. ", " .##########+++####. ", " ..#########+#+###.. ", " .#########++####. ", " ..########+#+##.. ", " ..###########.. ", " ..#########.. ", " ...#####... ", " ....... ", " ", " ", " " ] Macro_FCInfo_Pourcent = [ "24 24 4 1", " c None", ". c #000000", "+ c #A40000", "@ c #FFFFFF", " ", " ", " ", " ", " + ", " +++ ", " +@+ ", " ++@++ ", " ++@@@++ ", " +@@@@@+ ", " ++@.@.@++ ", " ++@@.@..@++ ", " +@@@.@@.@@+ ", " ++@.@@@@@@@++ ", " ++@....@@@@@@++ ", " +@.......@@@@@+ ", " ++@.........@@@++ ", " ++@............@@++ ", " +@...............@+ ", " ++@@@@@@@@@@@@@@@@@++ ", " +++++++++++++++++++++ ", " ", " ", " " ] Macro_FCInfo_Degrees = [ "24 24 5 1", " c None", ". c #000000", "+ c #EE2C29", "@ c #3965A3", "# c #FFFFFF", " ", " ", " ", " ..", " . ... ..", " . . . . ", " ... . . ", " . . . ", " #+ . ... ", " ##++ ", " ##@@++ ", " ##@@@@+ ", " ##@@@@@++ ", " ###@@@@@@@++ ", " ###@@@@@@@@@++ ", " ##@@@@@@@@@@@@+ ", " ##@@@@@@@@@@@@@++ ", " ##@@@@@@@@@@@@@@@+ ", " ##@@@@@@@@@@@@@@@@+ ", " ################### ", " ", " ", " ", " " ] Macro_FCInfo_DegreesMinSec = [ "24 24 6 1", " c None", ". c #000000", "+ c #A40000", "@ c #204A87", "# c #4E9A06", "$ c #FCAF3E", " ", " ", " +++++++ ", " +++$@$@$+++ ", " ++$$$@.@$$$++ ", " ++$@$$$$$$.@$++ ", " ++$.$@$$$$$$$$$++ ", " +$@..$$$$$$$$$$$+ ", " ++$$@..$$$$$.$$.@++ ", " +$$$$$..$$$..$$$$$+ ", " +$$$$$$..$..$$$$$$+ ", " +@@.$$$$...$$$$.@@+ ", " +$$$$$$$$.$$$$$$$$+ ", " +$$$$$$$$$$$$$$$$$+ ", " ++$$.$$$###$$$$.$++ ", " +$@$$$$$#$$$$$$@+ ", " ++$$$$$$$$$.$$$++ ", " ++$$.$$$$$$@$++ ", " ++@$$$.$$$$++ ", " +++$$@$$+++ ", " +++++++ ", " ", " ", " " ] Macro_FCInfo_Grade = [ "24 24 5 1", " c None", ". c #000000", "+ c #A40000", "@ c #C4A000", "# c #FFFFFF", " ", " ", " # # ", " #...#... # ", " #+++#++..#. ", " #@@@@@@+#+... # ", " #@@@@@@@@@++..# ", " #@@#@@@@@@@@+#. ", " #@@#@@@#@@@@@+.. ", " #@@#@@#@@@@@@@+.. ", " #@@#@@#@@@#@@@@+..# ", " #@#@@#@@@#@@@@@@+# ", " #@#@@#@@#@@@@@@@#. ", " #@#@#@@#@@@@@#@@+.. ", " #@#@#@#@@@@##@@@@+. ", " #@##@#@@@##@@@@@@+. ", " #@###@@##@@@@@@@@+. ", " ####@##@@@@@@@@@@#### ", " #####@@@@######@@+. ", " #########@@@@@@@@+. ", " +#################### ", " ", " ", " " ] Macro_FCInfo_ClipBoard_None = [ "24 24 9 1", " c None", ". c #A30500", "+ c #555755", "@ c #BCBCB3", "# c #D7DAD6", "$ c #DBDDDA", "% c #E7E9E6", "& c #EBEEEA", "* c #F1F4F0", " ", " @...@@@@@@@@@@@ ... ", " ++....+++++++++@.... ", " +$....$$$$$$$$+..... ", " +$$....$$$$$$$..... ", " +$$.....$$$$......@@@ ", " +$$@....+++......+++@ ", " +$$$$....&......&&&+@ ", " +$$@@.........&&&&&+@ ", " +$$$$$.......&&&&&&+@ ", " +$$@@@+.....@@@@@@&+@ ", " +$$$$$......$$###&&+@ ", " +$$@@........@@@@@&+@ ", " +$$..........###$&%+@ ", " +$......&@....@@$&&+@ ", " +......&&$.....##$&+@ ", " .....$+&&@@....@@$&+@ ", " .....$$+&&&&&....&&*+@ ", " ....++++&&&&&.....&&+@ ", " ... +&&&&&&....+++@ ", " +&&&&%**....+@@ ", " +&&&%&**....@@ ", " +++++++++...@ ", " @@@@@@@@@@@ " ] Macro_FCInfo_ClipBoard_FC = [ "24 24 9 1", " c None", ". c #A30500", "+ c #154A89", "@ c #555755", "# c #BCBCB3", "$ c #DADDDA", "% c #E7E9E6", "& c #EBEEEA", "* c #F1F4F0", " ", " ############### ", " @@@@@@@@@@@@@@@# ", " @$$$$$$$$$$$$$@# ", " @$$$$$$$$$$$$$@# ", " @$$$$$$$$$$$$$@###### ", " @$$###@@@@@@@@@@+@@@# ", " @$$$.......+&&&++&&@# ", " @$$#.......++&++&&&@# ", " @$$$.......++++&&&&@# ", " @$$#...&+++++++###&@# ", " @$$$.....+$%$++++&&@# ", " @$$#......%%%+++++&@# ", " @$$$.....+$%$++++&%@# ", " @$$$...&+++++++#$&&@# ", " @$$$...++$+++$++$$&@# ", " @$$$..++&#+++##++$&@# ", " @$$$..+&&&&+&&&&+&*@# ", " @@@@@@@&&&&&&&&&&&&@# ", " @&&&&&&&&&&@@@# ", " @&&&&%**&&@@@## ", " @&&&%&***&@@## ", " @@@@@@@@@@@## ", " ########### " ] Macro_FCInfo_ClipBoard_Comma = [ "24 24 9 1", " c None", ". c #000000", "+ c #A30500", "@ c #2C4A85", "# c #555755", "$ c #52990C", "% c #BCBCB3", "& c #DADDD9", "* c #ECEEEB", " ", " %%%%%%%%%%%%%%% ", " ###############% ", " #&&&&&&&&&&&&&#% ", " #&&&&&&&&&&&&&#% ", " #&&&&&&&&&&&&&#%%%%%% ", " #&&%%%##############% ", " ++&&&&++*$$**$$*@@@@@@ ", " +++&%+++*$$$&$$&@@@@@@ ", " ++&&++#**$$*$$****@@% ", " #++++%#**$$%$$%%%%@@% ", " #&++&&#**&$$$$&&&@@#% ", " #&++%%#**%$$$$%%%@@#% ", " #++++&#**&&$$&&&&@@#% ", " ++&&++#**%%$$%%%@@*#% ", " +&&&&+#**&$$$&&&@@*#% ", " ++&&&&++..%$$..%@@@@@@ ", " +#&&&&&+..*$$..*@@@@@@ ", " #######*.****.*****#% ", " #..***..***###% ", " ..***..***###%% ", " #*********##%% ", " ###########%% ", " %%%%%%%%%%% " ] Macro_FCInfo_ClipBoard_Raw = [ "24 24 9 1", " c None", ". c #000000", "+ c #A30500", "@ c #2C4A85", "# c #555755", "$ c #52990C", "% c #BCBCB3", "& c #DADDD9", "* c #ECEEEB", " ", " %%%%%%%%%%%%%%% ", " ###############% ", " #&&&&&&&&&&&&&#% ", " #&&&&&&&&&&&&&#% ", " #&&&&&&&&&&&&&#%%%%%% ", " #&&%%%##############% ", " ++&&&&++*$$**$$*@@@@@@ ", " +++&%+++*$$$&$$&@@@@@@ ", " ++&&++#**$$*$$****@@% ", " #++++%#**$$%$$%%%%@@% ", " #&++&&#**&$$$$&&&@@#% ", " #&++%%#**%$$$$%%%@@#% ", " #++++&#**&&$$&&&&@@#% ", " ++&&++#**%%$$%%%@@*#% ", " +&&&&+#**&$$$&&&@@*#% ", " ++&&&&++**%$$%%%@@@@@@ ", " +#&&&&&+***$$***@@@@@@ ", " #######************#% ", " #**********###% ", " #*********###%% ", " #*********##%% ", " ###########%% ", " %%%%%%%%%%% " ] Macro_FCInfo_BoundBoxTracing = [ "24 24 8 1", " c None", ". c #A30500", "+ c #ED2928", "@ c #69678E", "# c #6B6990", "$ c #6D6B92", "% c #706E95", "& c #746F91", " ", " ", " +++. ", " ++++..++. ", " ++++.... ++. ", " +++.... +.+. ", " ++. +.+. ", " +.+. +++. +. ", " +. +. ++++..+. +. ", " +. ++++... +. +. ", " +. +.. +++. +. ", " +. +. ++++...+.+. ", " +. ++++.... ++. ", " +++.+.. +. ", " +..+. +. ", " +.+. ++. ", " +.+. ++++.. ", " ++. ++++.... ", " +++.... ", " ... ", " ", " ", " ", " " ] Macro_FCInfo_BoundBoxVolume = [ "24 24 9 1", " c None", ". c #000000", "+ c #140300", "@ c #A40709", "# c #CE000B", "$ c #ED2928", "% c #F02C30", "& c #6A698F", "* c #706E95", " ", " ++++ ", " ++++$$$+ ", " ++++$$$$%%%$+ ", " +++$$$$%%%%%%%$+ ", " ..$$%%%%%%%%%%%%$+ ", " .$.%%%%%%%%%%%%..+ ", " .#$.%%%%%%%%...@@$+ ", " .##$.%%%....@@@@@$+ ", " .###$...@@@@@@@@@$+ ", " .###$.@@@@@@@@@@@$+ ", " .###$.@@@@@@@@@@@$+ ", " .###$.@@@@@@@@@@@$+ ", " .$##$.@@@@@@@@@@@$+ ", " .$#$.@@@@@@@@@@@$+ ", " .$$.@@@@@@@@@@$$+ ", " .$$.@@@@@@$$$$+++ ", " .$.@@$$$$++++ ", " ..$$++++ ", " +++ ", " ", " ", " ", " " ] Macro_FCInfo_DeleteLineMaterial = [ "24 24 9 1", " c None", ". c #A30500", "+ c #555755", "@ c #F67904", "# c #BCBCB3", "$ c #D8DAD7", "% c #E7E9E6", "& c #EBEEEA", "* c #F1F4F0", " ", " ", " @ @ @ @ ", " #@@#@@#@@#@@## ", ". ++@@+@@+@@+@@+# .", "... +&@&&@&&@&&@&+# ...", ".....+&&&&&&&&&&&&+.....", ".......$$$$$$$$$$.......", " ........######........ ", " ........$$........ ", " ..............# ", " +&..........%+# ", " +&..........&+# ", " ..............# ", " ........##........ ", " ........$$$$$$........ ", ".......####$&&&&&.......", ".....+&$$$$$&&&&+++.....", "... +&&&&%**&&+++## ...", ". +&&&%&***&++## .", " +++++++++++## ", " ########### ", " ", " " ] Macro_FCInfo_Beer = [ "25 25 7 1", " c None", ". c #000000", "+ c #C17D11", "@ c #BABDB6", "# c #BDBDBA", "$ c #D7D9D6", "% c #EEEEEC", " ", " ", " % % ", " %%%% %% % ", " % %% %% %% ", " % %%%% %%% % % ", " %%%@%%@%%%@%@%%% ", " %%%%%@%%@%%%%%%% % ", " %%%%@@%%%@%%@%. ", " %%@%@%%@%%@%@%#... ", " %%%$%%%%%%%%%%####.. ", " %.$$%%@%%@%%%##.##. ", " ..$.%%%%%%@.#. .#. ", " .#%@.@.@.%%#. .#. ", " .#+%%+@%%%+#. .#. ", " .#+++++++++#. .#. ", " .#+++++++++#. .#. ", " .##++++++++#. .#. ", " ..#++++++++#..##. ", " .#++++++++#.##. ", " .###+++++##... ", " ...#####... ", " ....... ", " ", " " ] Macro_FCInfo_Save_Material = [ "24 24 9 1", " c None", ". c #000000", "+ c #A30500", "@ c #555755", "# c #CD5D01", "$ c #F67904", "% c #BCBCB3", "& c #EBEEEA", "* c #F1F3F0", " ", " ", " $ $ $ $ ", " %$$%$$%$$%$$%% ", " @@$$@$$@$$@$$@% ", " @&$&&$&&$&&$&@% ", " @&&&&&&&&&&&&@% ", " @&&&&&&&&&&&&@% ", " @&&%%%%%%%%&&@% ", " @&&&&&&&&&&&&@% ", " @&&%%..%&&&&&@% ", " @&&&&.@@&&&&&@% ", " @&&%%%@@@&&&&@% ", " @&&&&&&@++&&&@% ", " @&&%%%%++++&&@% ", " @&&&&&&&++++&@% ", " @&&%%%&&&++++@% ", " @&&&&&&&&&++++% ", " @&&&&&**&&@+++# ", " @&&&&&***&@@+##$ ", " @@@@@@@@@@@%%#$$$ ", " %%%%%%%%%%% $$$$ ", " $$ ", " " ] Macro_FCInfo_Work = [ "24 24 8 1", " c None", ". c #C17D11", "+ c #8F5902", "@ c #BABDB6", "# c #EDD400", "$ c #A40000", "% c #CE5C00", "& c #171018", " ", " ..... ", " ++........ ", " +...++++++... ", " +..@@@@#@@@++.. ", " +..#@@@@#@@@@#+.. ", " +..@@#@@@#@@$#@@+.. ", " +.#@@@%@@%@@$@@@#+. ", " +..@#@@@@@#@$@@@#@+.. ", " +.@@@%@@@@@$$@@%@@@+. ", " +.@@@@@@@@@$$@@@@@@+. ", " +.@@@@@@@@&&@@@@@@@+. ", " +.###%@@@@&&@@@%###+. ", " +.@@@@@@@@$$@@@@@@@+. ", " +.@@@%@@@@@$$@@%@@@+. ", " +..@#@@@@@#$$$@@#@+.. ", " +.#@@@%@@%@$$@@@#+. ", " ..@@#@@@#@@$$@@+.. ", " +..#@@@@#@@@$#+.. ", " +..@@@@#@@@++.. ", " +...++++++... ", " ++........ ", " ...... ", " " ] Macro_FCInfo_Color = [ "24 24 9 1", " c None", ". c #16D0D2", "+ c #D3D7CF", "@ c #C17D11", "# c #EDD400", "$ c #73D216", "% c #F57900", "& c #3465A4", "* c #CC0000", " .... ", " +++ .... @@@@ ", " ++#### .... $$$ @@@@ ", " ++####%%%...&&$$$ @@@@ ", " ####%%% &&&&$$$ @@@@ ", " ####%%%+&&&&** ", " $$$$ ++&&&&**##%%% ", "@@@@$$$$ ++++ ***##%%% ", "@@@@$$$$ ++++ ####%%% ", "@@@@ &&&$$$$## ", "@@@$$$$ %%&&&$$$$ %%%% ", " $$$$ %%&***$$$ %%%% ", "...$$$$ %%%***$$$ %%%% ", "...$$$$*** ***&&&+%%%% ", "....%%%***### &&&+++@@@@", "....%%%***### &&&+++@@@@", " +++%% ### .... @@@@", " +++ &&& $$$..####@@@@", " +++ &&****$$..#### ", " #### &&****$&&&###**** ", " ####+++**...&&&###**** ", " ####+++**...&&&& **** ", " ####+++ ...&&&& **** ", " .... " ] Macro_FCInfo_Face = [ "24 24 9 1", " c None", ". c #A30500", "+ c #9C0C04", "@ c #9C0D0C", "# c #EF2B29", "$ c #5468F8", "% c #A9B0CB", "& c #98B5D8", "* c #9EB7D5", " ", " ", " ## ", " ##++## ", " ##++++++## ", " ##++++++++++## ", " ##@+++++++## ", " ## $$*#++++++#**$ ", " ##***##++##***$$ # ", " ##**##***##***$$*$## ", " #.#***##*****$*&*# # ", " #..##***#$*$$**##$ # ", " #....#***%$**##**$ # ", " #.....##%%$*#****$ # ", " #......#%%$#*****$ # ", " #......#%%$#*****$ # ", " #......#%%$#***&*$ # ", " #......#%%$#***$$ # ", " ##.....#%%$#*$$ ## ", " ##...#$%$#$ # ", " ##.# $$# ## ", " ## ### ", " # # ", " " ] Macro_FCInfo_WebForum = [ "24 24 4 1", " c None", ". c #1E4C89", "+ c #EBF0F3", "@ c #FFFFFF", " ", " .......... ", " ..@@@@@@@@.. ", " ..@@......@@.. ", " ..@@........@+.. ", " ..@@...@@@@...@@.. ", " ..@@...@@@@@@...@@.. ", " ..@@...@@@..@@@...@@.. ", " .@@....@@....@@....@@. ", " .@...........@@.....@. ", " .@..........@@@.....@. ", " .@.........@@@......@. ", " .@........@@@.......@. ", " .@........@@........@. ", " .@........@@........@. ", " .@@.......@@.......@@. ", " ..@@..............@@.. ", " ..@@............@@.. ", " ..@@....@@....@@.. ", " ..@@...@@...@@.. ", " ..@@......@@.. ", " ..@@@@@@@@.. ", " .......... ", " " ] Macro_FCInfo_WebWiki = [ "24 24 9 1", " c None", ". c #091756", "+ c #194C8B", "@ c #214B97", "# c #50627D", "$ c #BC727C", "% c #9DAAC0", "& c #C7D0DF", "* c #FFFFFF", " ", " ++++++++++ ", " ++********++ ", " ++**++++++**++ ", " ++**++++++++**++ ", " ++**+++****+++**++ ", " ++**+++******+++**++ ", " ++**+++***++***+++**++ ", " +**++++**++++**++++**+ ", " +*+++++++++++**+++++*+ ", " +*+++++++++............", " +*+++++++++.**@@@@****.", " +*++++++++*.*@%&%%@***.", " +*++++++++*.@%%%*%%@**.", " +*++++++++*.@&%**$%@**.", " +**+++++++*.@%**$$%@**.", " ++**+++++++.@%%$$$%@**.", " ++**++++++.*@%%%%@***.", " ++**++++*.**@@@@%#**.", " ++**+++*.******#%#*.", " ++**+++.*....**#%#.", " ++****.**%%%***#%.", " +++++.*********#.", " ............" ] Macro_FCInfo_SpreadSheet = [ "27 24 8 1", " c #383C3E", ". c #4D5153", "+ c #6C6F70", "@ c #868A8C", "# c #9DA1A1", "$ c #BFC1BE", "% c #D6D9D5", "& c #EFF1EE", "&&&&&&&&&&&&&&&&&&&&&&&&&&&", "&$@@@@@@@@@@@@@@@@@@@@@@@@&", "&$######@ ###############@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%$$$$$@ %&&&&&&&&&&&&&%@&", "&$ @&", "&$######@ ###############@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%$$$$$@ %&&&&&&&&&&&&&%@&", "&$ @&", "&$######@ ###############@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%$$$$$@ %&&&&&&&&&&&&&%@&", "&$ @&", "&$######@ ###############@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%&&&&&@ %&&&&&&&&&&&&&%@&", "&$%$$$$$@ %&&&&&&&&&&&&&%@&", "&$#######################@&", "&$$$$$$$$$$$$$$$$$$$$$$$$$&", "&&&&&&&&&&&&&&&&&&&&&&&&&&&" ] #### Material, Gravity By Default Begin global materialAssociated ; materialAssociated = [] # material associate materialAssociated = [ (u"Liquid Water (H2o),1,10.0,adapt Price"), (u"Mater Beton,2.4,10.0,adapt Price"), (u"Metal Aluminium (Al),2.7,10.0,adapt Price"), (u"Metal Copper (Cu),8.96,10.0,adapt Price"), (u"Metal Gold (Au),19.3,10.0,Gratis"), (u"Metal Iron (Fe),7.87,10.0,adapt Price"), (u"Metal Lead (Pb),11.35,10.0,adapt Price"), (u"Metal Magnesium (Mg),1.43,10.0,adapt Price"), (u"Metal Nickel (Ni),8.27,10.0,adapt Price"), (u"Metal Pewter (Sn),7.29,10.0,adapt Price"), (u"Metal Platinum (Pt),21.45,10.0,adapt Price"), (u"Metal Silver (Ag),10.5,10.0,adapt Price"), (u"Metal Sodium (Na),0.97,10.0,adapt Price"), (u"Metal Titanium (Ti),4.4,10.0,adapt Price"), (u"Metal Zinc (Zn),7.1,10.0,adapt Price"), (u"Wood Beechwood,0.8,10.0,adapt Price"), (u"Wood MDF,0.75,10.0,adapt Price"), (u"Wood Mahogany,0.6,10.0,adapt Price"), (u"Wood Oak,0.7,10.0,adapt Price"), (u"Wood White pine,0.4,10.0,adapt Price") ] if os.path.exists(path): #App.Console.PrintMessage(str(os.path.exists(path)) + "\n") #App.Console.PrintMessage(str(os.path.isfile(path + "FCInfo_material.txt")) + "\n") # #if not file one file (data default in macro) is created in the Macro location or in the seTMaterialSavePathName path if (os.path.isfile(seTMaterialSavePathName + seTMaterialFileName) == False) or (os.path.getsize(seTMaterialSavePathName + seTMaterialFileName) == 0): # default "FCInfo_material.txt" App.Console.PrintMessage(u"Save " + str(seTMaterialSavePathName) + str(seTMaterialFileName) + "\n") materialAssociated.sort() App_Console_PrintMessage(u"Number material : " + str(len(materialAssociated)) + "\n") try: f = open(seTMaterialSavePathName + seTMaterialFileName, 'w') # write for i in materialAssociated: f.write(i + "\n") f.close() App_Console_PrintMessage(u"Create/Save file : " + seTMaterialFileName + "\n") except Exception: App_Console_PrintError(u"Not file " + seTMaterialFileName + "\n") seTMaterialCurrentIndex = 0 seTDensiteValue = float(materialAssociated[0].split(",")[1]) else: try: App_Console_PrintMessage(u"Read the file " + str(seTMaterialReadPathName) + str(seTMaterialFileName) + "\n") f = open(seTMaterialReadPathName + seTMaterialFileName, 'r') # read # read the file materialAssociated = [] for i in f: i2 = i.rstrip() # .lstrip(), .rstrip(), .split(",") materialAssociated.append(i2) f.close() seTDensiteValue = float(materialAssociated[0].split(",")[1]) App_Console_PrintMessage(u"Load the file : " + seTMaterialFileName + "\n") except Exception: App_Console_PrintError(u"Not read file " + seTMaterialFileName + " saved" + "\n") #### Material, Gravity End global infoFaceMesh; global indexFaceMesh ; indexFaceMesh = 0 global coordPointsMesh; coordPointsMesh = "" #import warnings #warnings.simplefilter("ignore") def getNormal(cb): #https://wiki.freecadweb.org/Code_snippets#Get_the_normal_vector_of_a_surface_from_a_STL_file global infoFaceMesh; global indexFaceMesh try: pp = cb.getPickedPoint() indexFaceMesh = coin.cast(pp.getDetail(), "SoFaceDetail").getFaceIndex() except Exception: None def Around(a) : global seTDecimalValue if seTDecimalValue == -1: seTDecimalValue = 1000 ard = round(a, seTDecimalValue) return ard #### BoundBox Tracing #### def adjustedGlobalPlacement(obj, locVector): '''find global placement to make locVector the local origin with the correct orientation''' # extract BoundingBox_Tracing #2021/07/10 modified by edwilliams16 to handle objects in nested part containers #https://forum.freecadweb.org/viewtopic.php?f=22&t=59852 # try: objectPlacement = obj.Placement objectGlobalPlacement = obj.getGlobalPlacement() locPlacement = App.Placement(locVector, App.Rotation(App.Vector(1,0,0),0)) return objectGlobalPlacement.multiply(objectPlacement.inverse()).multiply(locPlacement) except Exception: locPlacement = App.Placement(App.Vector(0,0,0), App.Rotation(0,0,0), App.Vector(0,0,0)) App_Console_PrintError(u"Error adjustedGlobalPlacement") return locPlacement def bounBoxTracing(): #import PySide global BDvol global switchBoundBoxCreateVolume # 1 = create Volume global switchBoundBoxCreateText # 1 = create dimension info : 0 = not dimension info global seTBoundBoxTextHeigth # text heigth global seTBoundBoxTextArround # arrondi text dimensions global seTBoundBoxDisplayModeText # u"Screen" or u"World" global seTBoundBoxJustificationText # u"Center" or u"Left" or u"Right" ##### Section configuration begin ################## FontSizeText = seTBoundBoxTextHeigth# text info dimension #### TextColorText_R = 0.0 # text color info red 1 = 255 TextColorText_G = 0.0 # text color info green 1 = 255 TextColorText_B = 0.0 # text color info blue 1 = 255 LineColor_red = 1.0 # Line Color rectangle 1 = 255 LineColor_green = 0.0 # Line Color rectangle 1 = 255 LineColor_blue = 0.0 # Line Color rectangle 1 = 255 arrondi = seTBoundBoxTextArround # round the info ex: 3 = 3 decimals ##### Section configuration end #################### sel = FreeCADGui.Selection.getSelection() selEx = FreeCADGui.Selection.getSelectionEx() objs = [selobj.Object for selobj in selEx] if len(objs) >= 1: if hasattr(objs[0], "Shape"): s = objs[0].Shape elif hasattr(objs[0], "Mesh"): # upgrade with wmayer thanks #http://forum.freecadweb.org/viewtopic.php?f=13&t=22331 s = objs[0].Mesh elif hasattr(objs[0], "Points"): s = objs[0].Points FreeCAD.ActiveDocument.openTransaction(u"FCInfo BBox") # memorise les actions (avec annuler restore) #FreeCAD.ActiveDocument.commitTransaction() # restore les actions (avec annuler restore) #FreeCAD.ActiveDocument.abortTransaction() # abandonne les actions(avec annuler restore) # boundBox if sel[0].isDerivedFrom("Fem::FemPostWarpVectorFilter"): boundBox_ = sel[0].ViewObject.getBoundingBox() else: boundBox_ = s.BoundBox boundBoxLX = boundBox_.XLength boundBoxLY = boundBox_.YLength boundBoxLZ = boundBox_.ZLength boundBoxXMin = boundBox_.XMin boundBoxYMin = boundBox_.YMin boundBoxZMin = boundBox_.ZMin boundBoxLocation = App.Vector(boundBox_.XMin,boundBox_.YMin,boundBox_.ZMin) nameLabel = sel[0].Label try: try: import unicodedata nameLabel = str(unicodedata.normalize('NFKD', nameLabel).encode('ascii','ignore'))[2:] except Exception: None boundBoxLocation = App.Vector(boundBoxXMin,boundBoxYMin,boundBoxZMin) nameLabel = sel[0].Label # create Volume if (switchBoundBoxCreateVolume == 1): if (boundBoxLX > 0) and (boundBoxLY > 0) and (boundBoxLZ > 0): # Create Volume BDvol = App.ActiveDocument.addObject("Part::Box",nameLabel + "_BoundBoxVolume") #BDvol.Label = "BoundBoxVolume" BDvol.Length.Value = boundBoxLX BDvol.Width.Value = boundBoxLY BDvol.Height.Value = boundBoxLZ BDvol.Placement = adjustedGlobalPlacement(objs[0], boundBoxLocation) BDPl = BDvol.Placement oripl_X=BDvol.Placement.Base.x oripl_Y=BDvol.Placement.Base.y oripl_Z=BDvol.Placement.Base.z #if debug: print(f'global {globalObjectPlacement}\n local {localObjectPlacement} BB {BBlocPlacement}') FreeCADGui.ActiveDocument.getObject(BDvol.Name).LineColor = (LineColor_red, LineColor_green, LineColor_blue) FreeCADGui.ActiveDocument.getObject(BDvol.Name).PointColor = (LineColor_red, LineColor_green, LineColor_blue) FreeCADGui.ActiveDocument.getObject(BDvol.Name).ShapeColor = (LineColor_red, LineColor_green, LineColor_blue) FreeCADGui.ActiveDocument.getObject(BDvol.Name).Transparency = 80 switchBoundBoxCreateVolume = 0 #App_Console_PrintMessage(nameLabel + "_BoundBoxVolume : " + str(BDvol.Shape.Volume)+"\r\n") # create Text for volume if switchBoundBoxCreateText == 1: # section create dimension info conteneurVol = [] del conteneurVol[:] conteneurVol = App.activeDocument().addObject("App::DocumentObjectGroup",nameLabel + "_BoundBoxVolume_Info") BDtext = FreeCAD.Placement() BDtext = adjustedGlobalPlacement(objs[0], boundBoxLocation) BDPl = BDtext #pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],point=FreeCAD.Vector(oripl_X + (boundBoxLX/2), oripl_Y, oripl_Z)) pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement = BDPl.multVec(App.Vector(boundBoxLX/2,0,0))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Volume_X_" + str(round(boundBoxLX,arrondi)) conteneurVol.addObject(pl_0C1) #pl_0C2 = Draft.make_text([str(round(boundBoxLY,arrondi))],point=FreeCAD.Vector(oripl_X, oripl_Y + (boundBoxLY/2), oripl_Z)) pl_0C2 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement = BDPl.multVec(App.Vector(0, boundBoxLY/2, 0))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Volume_Y_" + str(round(boundBoxLY,arrondi)) conteneurVol.addObject(pl_0C2) #pl_0C3 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=FreeCAD.Vector(oripl_X, oripl_Y, oripl_Z + (boundBoxLZ/2))) pl_0C3 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement = BDPl.multVec(App.Vector(0, 0, boundBoxLZ/2))) pl_0C3.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C3.ViewObject.Justification = seTBoundBoxJustificationText pl_0C3.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C3.ViewObject.FontSize = FontSizeText pl_0C3.Label = nameLabel + "_Volume_Z_" + str(round(boundBoxLZ,arrondi)) conteneurVol.addObject(pl_0C3) App.ActiveDocument.recompute() else: #create rectangles conteneurRectangle = [] del conteneurRectangle[:] conteneurRectangle = App.activeDocument().addObject("App::DocumentObjectGroup",nameLabel + "_BoundBoxRectangle") if switchBoundBoxCreateText == 1: # conteneur dimension info conteneurInfo = [] del conteneurInfo[:] conteneurInfo = App.activeDocument().addObject("App::DocumentObjectGroup",nameLabel + "_BoundBoxRectangle_Info") try: if (boundBoxLX and boundBoxLY) > 0.0: #pl_0 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(0.0,0.0,0.0)) pl_0 = adjustedGlobalPlacement(objs[0], boundBoxLocation) double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLY,placement=pl_0,face=False,support=None) #OK double.Label = nameLabel + "_BoundBoxRectangle_Bo" FreeCADGui.activeDocument().activeObject().LineColor = (LineColor_red, LineColor_green, LineColor_blue) conteneurRectangle.addObject(double) if switchBoundBoxCreateText == 1: # section create dimension info #pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=FreeCAD.Vector(pl_0.Base.x + (boundBoxLX/2), pl_0.Base.y, pl_0.Base.z)) # XY -> XY pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=pl_0.multVec(App.Vector(boundBoxLX/2, 0, 0))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Rectangle_Bo_0X_" + str(round(boundBoxLX,arrondi)) conteneurInfo.addObject(pl_0C1) #pl_0C2 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=FreeCAD.Vector(pl_0.Base.x, pl_0.Base.y + (boundBoxLY/2), pl_0.Base.z)) pl_0C2 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=pl_0.multVec(App.Vector(0., boundBoxLY/2, 0.))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Rectangle_Bo_0Y_" + str(round(boundBoxLY,arrondi)) conteneurInfo.addObject(pl_0C2) except: App_Console_PrintError(u"not done 0"+"\n") try: if (boundBoxLX and boundBoxLY) > 0.0: #pl_1 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z+boundBoxLZ), App.Rotation(0.0,0.0,0.0)) pl_1 =adjustedGlobalPlacement(objs[0], boundBoxLocation + App.Vector(0,0,boundBoxLZ)) double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLY,placement=pl_1,face=False,support=None) #Ok double.Label = nameLabel + "_BoundBoxRectangle_To" FreeCADGui.activeDocument().activeObject().LineColor = (LineColor_red, LineColor_green, LineColor_blue) conteneurRectangle.addObject(double) if switchBoundBoxCreateText == 1: # section create dimension info #pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=FreeCAD.Vector(pl_1.Base.x + (boundBoxLX/2), pl_1.Base.y, pl_1.Base.z)) #XY -> XY pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=pl_1.multVec(App.Vector(boundBoxLX/2, 0, 0))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Rectangle_To_1X_" + str(round(boundBoxLX,arrondi)) conteneurInfo.addObject(pl_0C1) #pl_0C2 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=FreeCAD.Vector(pl_1.Base.x, pl_1.Base.y + (boundBoxLY/2), pl_1.Base.z)) pl_0C2 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=pl_1.multVec(App.Vector(0., boundBoxLY/2, 0))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Rectangle_To_1Y_" + str(round(boundBoxLY,arrondi)) conteneurInfo.addObject(pl_0C2) except: App_Console_PrintError(u"not done 1"+"\n") try: if (boundBoxLX and boundBoxLZ) > 0.0: #pl_2 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(0.0,0.0,90)) pl_2 = pl_0.multiply(App.Placement(App.Vector(0.,0.,0.),App.Rotation(0.0,0.0,90))) double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLZ,placement=pl_2,face=False,support=None) #Ok double.Label = nameLabel + "_BoundBoxRectangle_Fr" FreeCADGui.activeDocument().activeObject().LineColor = (LineColor_red, LineColor_green, LineColor_blue) conteneurRectangle.addObject(double) if switchBoundBoxCreateText == 1: # section create dimension info #pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=FreeCAD.Vector(pl_2.Base.x + (boundBoxLX/2), pl_2.Base.y, pl_2.Base.z)) #XZ -> XY pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=pl_2.multVec(App.Vector(boundBoxLX/2, 0, 0))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Rectangle_Fr_2X_" + str(round(boundBoxLX,arrondi)) conteneurInfo.addObject(pl_0C1) #pl_0C2 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=FreeCAD.Vector(pl_2.Base.x, pl_2.Base.y, pl_2.Base.z + (boundBoxLZ/2))) pl_0C2 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=pl_2.multVec(App.Vector(0, boundBoxLZ/2, 0))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Rectangle_Fr_2Z_" + str(round(boundBoxLZ,arrondi)) conteneurInfo.addObject(pl_0C2) except: App_Console_PrintError(u"not done 2"+"\n") try: if (boundBoxLX and boundBoxLZ) > 0.0: #pl_3 = App.Placement(App.Vector(oripl_X,oripl_Y+boundBoxLY,oripl_Z), App.Rotation(0.0,0.0,90)) pl_3 = adjustedGlobalPlacement(objs[0], boundBoxLocation+App.Vector(0, boundBoxLY, 0)).multiply(App.Placement(App.Vector(0.,0.,0.),App.Rotation(0.0,0.0,90))) double = Draft.makeRectangle(length=boundBoxLX,height=boundBoxLZ,placement=pl_3,face=False,support=None) #Ok double.Label = nameLabel + "_BoundBoxRectangle_Re" FreeCADGui.activeDocument().activeObject().LineColor = (LineColor_red, LineColor_green, LineColor_blue) conteneurRectangle.addObject(double) if switchBoundBoxCreateText == 1: # section create dimension info #XZ -> XY pl_0C1 = Draft.make_text([str(round(boundBoxLX,arrondi))],placement=pl_3.multVec(App.Vector(boundBoxLX/2, 0, 0))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Rectangle_Re_3X_" + str(round(boundBoxLX,arrondi)) conteneurInfo.addObject(pl_0C1) pl_0C2 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=pl_3.multVec(App.Vector(0, boundBoxLZ/2, 0))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Rectangle_Re_3Z_" + str(round(boundBoxLZ,arrondi)) conteneurInfo.addObject(pl_0C2) except: App_Console_PrintError(u"not done 3"+"\n") try: if (boundBoxLY and boundBoxLZ) > 0.0: #pl_4 = App.Placement(App.Vector(oripl_X,oripl_Y,oripl_Z), App.Rotation(90,0.0,90)) pl_4 = pl_0.multiply(App.Placement(App.Vector(0.,0.,0.),App.Rotation(90,0,90))) double = Draft.makeRectangle(length=boundBoxLY,height=boundBoxLZ,placement=pl_4,face=False,support=None) #Ok double.Label = nameLabel + "_BoundBoxRectangle_Le" FreeCADGui.activeDocument().activeObject().LineColor = (LineColor_red, LineColor_green, LineColor_blue) conteneurRectangle.addObject(double) if switchBoundBoxCreateText == 1: # section create dimension info #pl_0C1 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=FreeCAD.Vector(pl_4.Base.x, pl_4.Base.y + (boundBoxLY/2), pl_4.Base.z)) #YZ ->XY pl_0C1 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=pl_4.multVec(App.Vector(boundBoxLY/2, 0., 0.))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Rectangle_Le_4Y_" + str(round(boundBoxLY,arrondi)) conteneurInfo.addObject(pl_0C1) #pl_0C2 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=FreeCAD.Vector(pl_4.Base.x, pl_4.Base.y, pl_4.Base.z + (boundBoxLZ/2))) pl_0C2 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=pl_4.multVec(App.Vector(0., boundBoxLZ/2, 0))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Rectangle_Le_4Z_" + str(round(boundBoxLZ,arrondi)) conteneurInfo.addObject(pl_0C2) except: App_Console_PrintError(u"not done 4"+"\n") try: if (boundBoxLY and boundBoxLZ) > 0.0: #pl_5 = App.Placement(App.Vector(oripl_X+boundBoxLX,oripl_Y,oripl_Z), App.Rotation(90,0.0,90)) pl_5 = adjustedGlobalPlacement(objs[0], boundBoxLocation+App.Vector(boundBoxLX,0,0)).multiply(App.Placement(App.Vector(0.,0.,0.),App.Rotation(90,0.0,90))) double = Draft.makeRectangle(length=boundBoxLY,height=boundBoxLZ,placement=pl_5,face=False,support=None) #Ok double.Label = nameLabel + "_BoundBoxRectangle_Ri" FreeCADGui.activeDocument().activeObject().LineColor = (LineColor_red, LineColor_green, LineColor_blue) conteneurRectangle.addObject(double) if switchBoundBoxCreateText == 1: # section create dimension info #YZ-> XY pl_0C1 = Draft.make_text([str(round(boundBoxLY,arrondi))],placement=pl_5.multVec(App.Vector(boundBoxLY/2, 0, 0))) pl_0C1.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C1.ViewObject.Justification = seTBoundBoxJustificationText pl_0C1.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C1.ViewObject.FontSize = FontSizeText pl_0C1.Label = nameLabel + "_Rectangle_Ri_5Y_" + str(round(boundBoxLY,arrondi)) conteneurInfo.addObject(pl_0C1) pl_0C2 = Draft.make_text([str(round(boundBoxLZ,arrondi))],placement=pl_5.multVec(App.Vector(0, boundBoxLZ/2, 0 ))) pl_0C2.ViewObject.DisplayMode = seTBoundBoxDisplayModeText pl_0C2.ViewObject.Justification = seTBoundBoxJustificationText pl_0C2.ViewObject.TextColor = (TextColorText_R, TextColorText_G, TextColorText_B) pl_0C2.ViewObject.FontSize = FontSizeText pl_0C2.Label = nameLabel + "_Rectangle_Ri_5Z_" + str(round(boundBoxLZ,arrondi)) conteneurInfo.addObject(pl_0C2) except: App_Console_PrintError(u"not done 5"+"\n") ##### App.ActiveDocument.recompute() except Exception: App_Console_PrintError(u"Bad selection"+"\n") else: App_Console_PrintMessage(u"Select an object !"+"\n") ############################################################################################################## def axisPlane( posX = 0.0, posY = 0.0, posZ = 0.0, namePlane = "FCPlane"): # plane creation global sel global document_ global object_Name global boundBoxDiag global switchInertia global seTMemoClipBoard global switchCreatePoint global switchCreateAxis global switchCreatePlane global directionObj FreeCAD.ActiveDocument.openTransaction(u"FCInfo Plane") # memorise les actions (avec annuler restore) #FreeCAD.ActiveDocument.commitTransaction() # restore les actions (avec annuler restore) #FreeCAD.ActiveDocument.abortTransaction() # abandonne les actions(avec annuler restore) sel = FreeCADGui.Selection.getSelection() retour = Macro_FCInfo_05 # icone dans une variable (ok / ko) switchInertia = 1 if seTMemoClipBoard >= 1: # memo clipBoard memo = QApplication.clipboard() memo.clear(mode=memo.Clipboard ) if seTMemoClipBoard == 1: memo.setText(u"FreeCAD.Vector("+str(Around(posX))+", "+str(Around(posY))+", "+str(Around(posZ))+")", mode = memo.Clipboard) # format : FreeCAD.Vector(x, y, z) elif seTMemoClipBoard == 2: memo.setText(str(Around(posX))+", "+str(Around(posY))+", "+str(Around(posZ)), mode = memo.Clipboard) # format : x, y, z elif seTMemoClipBoard == 3: memo.setText(str(Around(posX))+" "+str(Around(posY))+" "+str(Around(posZ)), mode = memo.Clipboard) # format : x y z if switchCreatePoint == 1: try: # create point point = Draft.makePoint( posX, posY, posZ) point.ViewObject.PointColor = (1.0,0.0,0.0) point.Label = u"FCPoint" + namePlane retour = Macro_FCInfo_06 FreeCADGui.updateGui() # updateGui App.ActiveDocument.recompute() except Exception: retour = Macro_FCInfo_07 if switchCreatePlane == 1: try: # create plane doc = App.activeDocument() if boundBoxDiag == 0.0: boundBoxDiag = 10.0 boundBoxLX = boundBoxLY = boundBoxLZ = boundBoxDiag FCSpring = doc.addObject(u"App::DocumentObjectGroup", "FCPlane" + namePlane) plr = FreeCAD.Placement() plr.Base = FreeCAD.Vector( posX, posY, posZ) ### PlaneX-R plan = App.ActiveDocument.addObject("Part::Plane","PlaneX-R") plan.Length=boundBoxLZ plan.Width=boundBoxLX plan.Placement = plr plan.Placement.Rotation = plan.Placement.Rotation.multiply(App.Rotation(0.0,-90.0,0.0)) plan.Placement = plan.Placement.multiply(App.Placement(App.Vector(-float(plan.Length)/2.0,-float(plan.Width)/2.0,0.0), App.Rotation(App.Vector(0.0,0.0,0.0),0.0), App.Vector(0.0,0.0,0.0))) plan.ViewObject.LineColor = (1.0,0.66667,0.0) plan.ViewObject.ShapeColor = (0.6, 0.0, 0.0) plan.ViewObject.Transparency = 90 plan.ViewObject.LineWidth = 1.0 FCSpring.addObject(plan) ### PlaneY-V plan = App.ActiveDocument.addObject("Part::Plane","PlaneY-V") plan.Length=boundBoxLY plan.Width=boundBoxLZ plan.Placement = plr plan.Placement.Rotation = plan.Placement.Rotation.multiply(App.Rotation(0.0,0.0,90.0)) plan.Placement = plan.Placement.multiply(App.Placement(App.Vector(-float(plan.Length)/2.0,-float(plan.Width)/2.0,0.0), App.Rotation(App.Vector(0.0,0.0,0.0),0.0), App.Vector(0.0,0.0,0.0))) plan.ViewObject.LineColor = (1.0, 0.66667, 0.0) plan.ViewObject.ShapeColor = (0.0, 0.6, 0.0) plan.ViewObject.Transparency = 90 plan.ViewObject.LineWidth = 1.0 FCSpring.addObject(plan) ### PlaneZ-B plan = App.ActiveDocument.addObject("Part::Plane","PlaneZ-B") plan.Length=boundBoxLX plan.Width=boundBoxLY plan.Placement = plr plan.Placement = plan.Placement.multiply(App.Placement(App.Vector(-float(plan.Length)/2.0,-float(plan.Width)/2.0,0.0), App.Rotation(App.Vector(0.0,0.0,0.0),0.0), App.Vector(0.0,0.0,0.0))) plan.ViewObject.LineColor = (1.0,1.0,1.0) plan.ViewObject.ShapeColor = (0.0,0.0,0.6) plan.ViewObject.Transparency = 90 plan.ViewObject.LineWidth = 1.0 FCSpring.addObject(plan) FreeCADGui.updateGui() # updateGui App.ActiveDocument.recompute() retour = Macro_FCInfo_06 except Exception: retour = Macro_FCInfo_07 if switchCreateAxis == 1: # create axis try: doc = App.activeDocument() if boundBoxDiag == 0.0: boundBoxDiag = 10.0 boundBoxLX = boundBoxLY = boundBoxLZ = boundBoxDiag FCSpring = doc.addObject("App::DocumentObjectGroup", "FCAxis" + namePlane) plr = FreeCAD.Placement() plr.Base = FreeCAD.Vector( posX, posY, posZ) #create axis points=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(0.0,0.0,boundBoxLX)] centerX = Draft.makeWire(points,closed=False,face=False,support=None) centerX.Placement = plr centerX.Placement.Rotation = centerX.Placement.Rotation.multiply(App.Rotation(0.0,90.0,0.0)) centerX.Placement = centerX.Placement.multiply(App.Placement(App.Vector(0.0,0.0,-float(boundBoxLX)/2.0), App.Rotation(App.Vector(0.0,0.0,0.0),0.0), App.Vector(0.0,0.0,0.0))) centerX.ViewObject.LineColor = (1.0,1.0,1.0) centerX.ViewObject.LineWidth = 1.0 centerX.ViewObject.DrawStyle = str(u"Dashdot") centerX.Label = str(u"Axis White PlaneX") FCSpring.addObject(centerX) points=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(0.0,0.0,boundBoxLX)] centerY = Draft.makeWire(points,closed=False,face=False,support=None) centerY.Placement = plr centerY.Placement.Rotation = centerY.Placement.Rotation.multiply(App.Rotation(0.0,90.0,90.0)) centerY.Placement = centerY.Placement.multiply(App.Placement(App.Vector(0.0,0.0,-float(boundBoxLX)/2.0), App.Rotation(App.Vector(0.0,0.0,0.0),0.0), App.Vector(0.0,0.0,0.0))) centerY.ViewObject.LineColor = (1.0,1.0,1.0) centerY.ViewObject.LineWidth = 1.0 centerY.ViewObject.DrawStyle = str(u"Dashdot") centerY.Label = str(u"Axis White PlaneY") FCSpring.addObject(centerY) points=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(0.0,0.0,boundBoxLX)] centerZ = Draft.makeWire(points,closed=False,face=False,support=None) centerZ.Placement = plr centerZ.Placement.Rotation = centerZ.Placement.Rotation.multiply(App.Rotation(0,0,0)) centerZ.Placement = centerZ.Placement.multiply(App.Placement(App.Vector(0.0,0.0,-float(boundBoxLX)/2.0), App.Rotation(App.Vector(0.0,0.0,0.0),0.0), App.Vector(0.0,0.0,0.0))) centerZ.ViewObject.LineColor = (1.0,1.0,1.0) centerZ.ViewObject.LineWidth = 1.0 centerZ.ViewObject.DrawStyle = str(u"Dashdot") centerZ.Label = str(u"Axis White PlaneZ") FCSpring.addObject(centerZ) FreeCADGui.updateGui() # updateGui App.ActiveDocument.recompute() retour = Macro_FCInfo_06 except Exception: retour = Macro_FCInfo_07 try: Gui.Selection.addSelection(App.ActiveDocument.getObject(object_Name)) except Exception: None #FreeCAD.ActiveDocument.commitTransaction() # restore les actions (avec annuler restore) #FreeCAD.ActiveDocument.abortTransaction() # abandonne les actions(avec annuler restore) FreeCADGui.updateGui() # updateGui switchInertia = 0 return retour def tableau(): global sel global subElemName global perimetre global numberEdges global Vertx global Edges global EdgesLong global Faces global FacesSurf global FacesCoor global compt_E global compt_F global compt_VF global RowCountTest global angleX1 global angleY1 global angleZ1 global angleX2 global angleY2 global angleZ2 if len(sel) != 0: Vertx=[] Edges=[] Faces=[] compt_E = 0 compt_F = 0 compt_VF = 0 perimetre = 0.0 EdgesLong = [] angleX1 = 0.0 angleY1 = 0.0 angleZ1 = 0.0 angleX2 = 0.0 angleY2 = 0.0 angleZ2 = 0.0 numberEdges = len(sel[0].Shape.Edges) for j in enumerate(sel[0].Shape.Edges): # search Edges compt_E+=1 Edges.append("Edge%d" % (j[0]+1)) EdgesLong.append(str(sel[0].Shape.Edges[compt_E-1].Length)) perimetre += (sel[0].Shape.Edges[compt_E-1].Length) a = sel[0].Shape.Edges[compt_E-1].Vertexes[0] Vertx.append(u"X1: "+str(a.Point.x)) Vertx.append(u"Y1: "+str(a.Point.y)) Vertx.append(u"Z1: "+str(a.Point.z)) try: a = sel[0].Shape.Edges[compt_E-1].Vertexes[1] # search Vertexes Edges Vertx.append(u"X2: "+str(a.Point.x)) Vertx.append(u"Y2: "+str(a.Point.y)) Vertx.append(u"Z2: "+str(a.Point.z)) except Exception: Vertx.append(u"-") Vertx.append(u"-") Vertx.append(u"-") FacesSurf = [] FacesCoor = [] for j in enumerate(sel[0].Shape.Faces): # search Faces compt_F+=1 Faces.append(u"Face%d" % (j[0]+1)) FacesSurf.append(str(sel[0].Shape.Faces[compt_F-1].Area)) fco = 0 for f0 in sel[0].Shape.Faces[compt_F-1].Vertexes: # search Vertexes face fco += 1 FacesCoor.append(u"X"+str(fco)+": "+str(f0.Point.x)) FacesCoor.append(u"Y"+str(fco)+": "+str(f0.Point.y)) FacesCoor.append(u"Z"+str(fco)+": "+str(f0.Point.z)) compt_VF += 1 FacesCoor += (u"T",) RowCountTest = compt_E + compt_F + compt_VF # encoder 3 couleurs et transparence renvoye la valeur (unsigned pour Preferences FC) def unsignedEncode(red = 0, green = 0, blue = 0, transparent = 1): # #(255 *256*256*256 ) + (85 *256*256) + (51 *256) +(1*255) = 4283773951 red = int(red*255) green = int(green*255) blue = int(blue*255) transparent = int(transparent*255) value = int((red*pow(256,3)) + (green*pow(256,2)) + (blue*pow(256,1)) + (transparent*pow(256,0))) return value # converti decimal en hexadecimal def decimalTohexa(decimal = 0): # 5 = "05" hexa = str(hex(int(decimal)))[2:4] if len(hexa) == 1: hexa = "0" + hexa return hexa def affect(passTableau): global ui global sel global document_ global object_Label global object_Name global typeObject global object_Type global subElemName global RotationToEuler global position0 global position1 global position2 global diffuseColorRF global diffuseColorVF global diffuseColorBF global diffuseColorTF global transparenceFace global unsignedEncodeColor global cols global colorShapeFace global colorShapeLine global colorShapePoint global BsplineRayonApproximatif global longueurObjet global rayonObjet global perimetre global numberEdges global nombreArretesMesh global nombreFacesMesh global nombrePointsMesh global Plan_xy global Plan_xy_V global Plan_yz global Plan_yz_V global Plan_zx global Plan_zx_V global surface global surfaceFace global volume_ global seTDensiteValue global poids global uniteM global uniteMs global uniteS global uniteSs global uniteV global uniteVs global uniteP global unitePs global uniteAs global boundBox_ global boundBoxLX global boundBoxLY global boundBoxLZ global boundBox_S global BDvol global adaptWithBody global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ global boundBoxDiag global boundBoxXMin global boundBoxYMin global boundBoxZMin global CenterOfMassX global CenterOfMassY global CenterOfMassZ global massOrGravity global MatrixX1 global MatrixY1 global MatrixZ1 global Matrix_1 global MatrixX2 global MatrixY2 global MatrixZ2 global Matrix_2 global MatrixX3 global MatrixY3 global MatrixZ3 global Matrix_3 global Matrix12 global Matrix13 global Matrix14 global Matrix15 global DeterminantM global FacesSurf global EdgesLong global FacesCoor global angleX1 global angleY1 global angleZ1 global angleX2 global angleY2 global angleZ2 global directionObj global direcValueAt global direcNormalAt global typeNormalAt global switchDisplayInfoObject global MatrixOfInertiaRaw global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 global MatrixX3_16 global MatrixY3_16 global MatrixZ3_16 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global refreshMatrix global typeLongueur global BsplineDetect global BsplineNombreDeNoeuds global BsplinePointsCoor global BsplineArcsRadius global BsplineArcsLocation global switchBSplineCreateCircleConstructorAxis global switchBSplineCreateCircleConstructor global setBSplineToByArcValue global BsplineCercleToolTip global BsplineNumberElement global BsplineCutLength global BSplinetoByArcValeurS global colorShapeFaceDiffuseColor global detected global indexFaceMesh global coordPointsMesh detected = "" try: atest = sel[0].Shape.Vertexes except Exception: #################### selEx = FreeCADGui.Selection.getSelectionEx() objs = [selobj.Object for selobj in selEx] if len(objs) >= 1: ui.on_ZeroInfo() # zero 25-07-2023 if hasattr(objs[0], "Shape"): colorShapeFace = colorShapeLine = colorShapePoint = colorShapeFaceDiffuseColor = [] s = objs[0].Shape elif hasattr(objs[0], "Mesh"): ##https://wiki.freecadweb.org/Mesh_API originalObject = objs[0] s = objs[0].Mesh # object mesh sel = Gui.Selection.getSelection() # object originalObject = sel[0] # object colorShapeFace = colorShapeLine = colorShapePoint = colorShapeFaceDiffuseColor = [] colorShapeFace = sel[0].ViewObject.ShapeColor colorShapeLine = sel[0].ViewObject.LineColor ##colorShapePoint = sel[0].ViewObject.PointColor detected = str(s) cols = colors = [] cols = sel[0].ViewObject.ShapeColor diffuseColorRF = cols[0] diffuseColorVF = cols[1] diffuseColorBF = cols[2] diffuseColorTF = float(transparenceFace) / 100.0 transparenceFace = FreeCAD.ActiveDocument.getObject(sel[0].Name).ViewObject.Transparency # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((diffuseColorRF), (diffuseColorVF), (diffuseColorBF), 0.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorRVB = '"' + str(int(diffuseColorRF*255.0)) + "," + str(int(diffuseColorVF*255.0)) + "," + str(int(diffuseColorBF*255.0)) + '"' diffuseColorFloat = '"' + "(" + str(Around(diffuseColorRF)) + "," + str(Around(diffuseColorVF)) + "," + str(Around(diffuseColorBF)) + ")" + '"' # unsignedEncodeColor = unsignedEncodeColor + " , " + diffuseColorHexa + " , " + diffuseColorHexaPy + " , " + diffuseColorRVB + " , " + diffuseColorFloat object_Label = sel[0].Label object_Name = sel[0].Name object_Type = sel[0].TypeId typeObject = sel[0].Module boundBox_ = s.BoundBox boundBoxLX = boundBox_.XLength boundBoxLY = boundBox_.YLength boundBoxLZ = boundBox_.ZLength boundBoxDiag = boundBox_.DiagonalLength boundBox_S = "[X: "+str(Around(boundBoxLX * uniteM))+" "+uniteMs+"] x [Y: "+str(Around(boundBoxLY * uniteM))+" "+uniteMs+"] x [Z: "+str(Around(boundBoxLZ * uniteM))+" "+uniteMs+"] Diagonal: " + str(Around(boundBoxDiag * uniteM))+" "+uniteMs #### boundBoxLocation = App.Vector(boundBox_.Center[0], boundBox_.Center[1], boundBox_.Center[2]) BDvol = adjustedGlobalPlacement(sel[0], boundBoxLocation) boundBoxCenterX = BDvol.Base[0] boundBoxCenterY = BDvol.Base[1] boundBoxCenterZ = BDvol.Base[2] #### surface = s.Area surfaceFace = s.Facets[indexFaceMesh].Area coordPointsMesh = s.Facets[indexFaceMesh].Points ###################################### mesh later # x=0 # for i in s.Facets: # print(str(Around(i.Area * uniteM )) + uniteMs) # print(str((i.getEdge(0) ))) # print(str((i.getEdge(0).Points))) # print(str(i.Points)) # print("____________________________________________") # x += 1 # if x >= 10 : break ###################################### try: # no in version 018 length0 = s.Facets[indexFaceMesh].getEdge(0).Length length1 = s.Facets[indexFaceMesh].getEdge(1).Length length2 = s.Facets[indexFaceMesh].getEdge(2).Length except Exception: length0 = length1 = length2 = 0.0 longueurObjet = length0 + length1 + length2 typeLongueur = u"Perimeter of face" if switchCreateLineDiVatNatOnClick == 0: typeNormalAt = u"Normal_____" else: typeNormalAt = u"*Normal_____" direcNormalAt = s.Facets[indexFaceMesh].Normal volume_ = s.Volume # poids poids = ((volume_ * seTDensiteValue) * uniteP) / 1000.0 # mm3 (mm base FreeCAD) CenterOfMassX = s.CenterOfGravity[0] CenterOfMassY = s.CenterOfGravity[1] CenterOfMassZ = s.CenterOfGravity[2] subElemName = "Face" + str(indexFaceMesh) DeterminantM = 0.0 nombreFacesMesh = s.CountFacets nombrePointsMesh = s.CountPoints try: # no in version 018 nombreArretesMesh = s.CountEdges except Exception: nombreArretesMesh = 0 #print(s.Topology) elif hasattr(objs[0], "Points"): s = objs[0].Points #sel = Gui.Selection.getSelection() detected = str(s) sel = Gui.Selection.getSelection() cols = colors = [] colorShapeFace = colorShapeLine = colorShapePoint = colorShapeFaceDiffuseColor = [] cols = FreeCAD.ActiveDocument.getObject(sel[0].Name).ViewObject.ShapeColor diffuseColorRF = cols[0] diffuseColorVF = cols[1] diffuseColorBF = cols[2] diffuseColorTF = float(transparenceFace) / 100.0 transparenceFace = FreeCAD.ActiveDocument.getObject(sel[0].Name).ViewObject.Transparency # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((diffuseColorRF), (diffuseColorVF), (diffuseColorBF), 0.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorRVB = '"' + str(int(diffuseColorRF*255.0)) + "," + str(int(diffuseColorVF*255.0)) + "," + str(int(diffuseColorBF*255.0)) + '"' diffuseColorFloat = '"' + "(" + str(Around(diffuseColorRF)) + "," + str(Around(diffuseColorVF)) + "," + str(Around(diffuseColorBF)) + ")" + '"' # unsignedEncodeColor = unsignedEncodeColor + " , " + diffuseColorHexa + " , " + diffuseColorHexaPy + " , " + diffuseColorRVB + " , " + diffuseColorFloat object_Label = sel[0].Label object_Name = sel[0].Name object_Type = sel[0].TypeId typeObject = sel[0].Module nombrePointsMesh = s.CountPoints boundBox_ = s.BoundBox boundBoxLX = boundBox_.XLength boundBoxLY = boundBox_.YLength boundBoxLZ = boundBox_.ZLength try: boundBoxDiag = boundBox_.DiagonalLength except Exception: boundBoxDiag = 0.0 boundBox_S = "[X: "+str(Around(boundBoxLX * uniteM))+" "+uniteMs+"] x [Y: "+str(Around(boundBoxLY * uniteM))+" "+uniteMs+"] x [Z: "+str(Around(boundBoxLZ * uniteM))+" "+uniteMs+"] Diagonal: " + str(Around(boundBoxDiag * uniteM))+" "+uniteMs #### correction boundBoxLocation = App.Vector(boundBox_.Center[0], boundBox_.Center[1], boundBox_.Center[2]) BDvol = adjustedGlobalPlacement(sel[0], boundBoxLocation) #### boundBoxCenterX = BDvol.Base[0] boundBoxCenterY = BDvol.Base[1] boundBoxCenterZ = BDvol.Base[2] CenterOfMassX = CenterOfMassY = CenterOfMassZ = 0.0 #### Fem debut elif sel[0].isDerivedFrom("Fem::FemPostWarpVectorFilter"): # same sel[0].TypeId detected = "FemPostWarpVectorFilter" object_Label = sel[0].Label object_Name = sel[0].Name object_Type = sel[0].TypeId typeObject = sel[0].Module boundBox_ = sel[0].ViewObject.getBoundingBox() boundBoxLX = boundBox_.XLength boundBoxLY = boundBox_.YLength boundBoxLZ = boundBox_.ZLength try: boundBoxDiag = boundBox_.DiagonalLength except Exception: boundBoxDiag = 0.0 boundBox_S = "[X: "+str(Around(boundBoxLX * uniteM))+" "+uniteMs+"] x [Y: "+str(Around(boundBoxLY * uniteM))+" "+uniteMs+"] x [Z: "+str(Around(boundBoxLZ * uniteM))+" "+uniteMs+"] Diagonal: " + str(Around(boundBoxDiag * uniteM))+" "+uniteMs #### correction boundBoxLocation = App.Vector(boundBox_.Center[0], boundBox_.Center[1], boundBox_.Center[2]) BDvol = adjustedGlobalPlacement(sel[0], boundBoxLocation) #### boundBoxCenterX = BDvol.Base[0] boundBoxCenterY = BDvol.Base[1] boundBoxCenterZ = BDvol.Base[2] CenterOfMassX = CenterOfMassY = CenterOfMassZ = 0.0 #### Fem fin ################## else: App_Console_PrintMessage(u"Invalid selection " + "\n") errorDialog(u"Invalid selection " + "\n" + detected ) sel = selEx = "" else: sel = FreeCADGui.Selection.getSelection() mydoc = FreeCAD.activeDocument().Name document_ = mydoc try: object_Type += " / " + sel[0].TypeId object_Type = sel[0].Shape.TypeId except Exception: object_Type = "?" try: object_Label = sel[0].Label object_Name = sel[0].Name except Exception: object_Label = "" object_Name = "" try: SubElement = FreeCADGui.Selection.getSelectionEx() subElemName = SubElement[0].SubElementNames[0] except Exception: subElemName = "" #### sketcher begin #### ## ##https://forum.freecadweb.org/viewtopic.php?f=22&t=53127 ##How to select edges inside of Sketcher? ## sketch = Gui.Selection.getSelection()[0] App.ActiveDocument.recompute() if (Gui.ActiveDocument.getInEdit() and (sketch.TypeId == "Sketcher::SketchObject")) and ("Constraint" not in subElemName): # sketcher open try: longueurObjet = rayonObjet = points1 = points2 = 0.0 directionObj = direcValueAt = direcNormalAt = "" typeLongueur = RotationToEuler = "" nameSketch = sketch.Name sketch0 = Gui.Selection.getSelectionEx()[0] subElemName = sketch0.SubElementNames[0] RotationToEuler = sketch.Placement.Rotation.toEuler() # Plan (Direction) indexSubObject = int(subElemName[4:]) - 1 # index sObject = App.ActiveDocument.getObject(nameSketch).Geometry[indexSubObject] typeObject = sketch.TypeId if isinstance(sObject,(Part.LineSegment)): #print("Part.LineSegment") points1 = sObject.StartPoint points2 = sObject.EndPoint longueurObjet = sObject.length() typeLongueur = u"Length (Sk) " directionObj = points2.sub(points1) elif isinstance(sObject,(Part.BSplineCurve)): #print("Part.BSplineCurve") points1 = sObject.StartPoint points2 = sObject.EndPoint longueurObjet = sObject.length() typeLongueur = u"Length (Sk) " directionObj = points2.sub(points1) elif isinstance(sObject,(Part.Circle)): #print("Part.Circle") longueurObjet = sObject.length() typeLongueur = u"Length (Sk) " rayonObjet = sObject.Radius elif isinstance(sObject,(Part.ArcOfCircle)): #print("Part.ArcOfCircle") points1 = sObject.StartPoint points2 = sObject.EndPoint longueurObjet = sObject.length() typeLongueur = u"Length (Sk) " rayonObjet = sObject.Radius directionObj = points2.sub(points1) else: None #### # angles if isinstance(sObject,(Part.Circle)) == False: try: angleX1 = points1.x; angleY1 = points1.y; angleZ1 = points1.z angleX2 = points2.x; angleY2 = points2.y; angleZ2 = points2.z except Exception: angleX1 = angleY1 = angleZ1 = 0.0 angleX2 = angleY2 = angleZ2 = 0.0 modeTypeAngle = 1 # 1 = degrees other = radians try: Plan_xy = Around(angle2(angleX1, angleY1, angleX2, angleY2, modeTypeAngle)) Plan_xy_V = "[,"+str(Around(angleX1))+" , "+str(Around(angleY1))+",] [,"+str(Around(angleX2))+" , "+str(Around(angleY2))+",]" except Exception: Plan_xy = 0.0; Plan_xy_V = "" try: Plan_yz = Around(angle2(angleY1, angleZ1, angleY2, angleZ2, modeTypeAngle)) Plan_yz_V = "[,"+str(Around(angleY1))+" , "+str(Around(angleZ1))+",] [,"+str(Around(angleY2))+" , "+str(Around(angleZ2))+",]" except Exception: Plan_yz = 0.0; Plan_yz_V = "" try: Plan_zx = Around(angle2(angleZ1, angleX1, angleZ2, angleX2, modeTypeAngle)) Plan_zx_V = "[,"+str(Around(angleZ1))+" , "+str(Around(angleX1))+",] [,"+str(Around(angleZ2))+" , "+str(Around(angleX2))+",]" except Exception: Plan_zx = 0.0; Plan_zx_V = "" except Exception: None ## #### sketcher end #### else: # colors (DiffuseColor) try: #### search color face selected a = FreeCADGui.Selection.getSelectionEx() # selection sous objet aa = FreeCADGui.Selection.getSelection() # selection objet colorShapeFace = colorShapeLine = colorShapePoint = colorShapeFaceDiffuseColor = [] colorShapeFace = aa[0].ViewObject.ShapeColor colorShapeLine = aa[0].ViewObject.LineColor colorShapePoint = aa[0].ViewObject.PointColor diffuseColorRF = diffuseColorVF = diffuseColorBF = diffuseColorTF = 0.0 transparenceFace = 0 cols = colors = [] if str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:5] == "Face": cols = colors = [] cols = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.DiffuseColor if len(cols) == 1: for i in aa[0].Shape.Faces: colors += [(cols[0])] cols = colors else: colors = cols fce = int(a[0].SubElementNames[0][4:])-1 indexFaceMesh = fce colorShapeFaceDiffuseColor = colors #[fce] diffuseColorRF = colors[fce][0] diffuseColorVF = colors[fce][1] diffuseColorBF = colors[fce][2] diffuseColorTF = colors[fce][3] transparenceFace = math.ceil(round(cols[fce][3]*100, 12)) # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((diffuseColorRF), (diffuseColorVF), (diffuseColorBF), 1.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorRVB = '"' + str(int(diffuseColorRF*255.0)) + "," + str(int(diffuseColorVF*255.0)) + "," + str(int(diffuseColorBF*255.0)) + '"' diffuseColorFloat = '"' + "(" + str(Around(diffuseColorRF)) + "," + str(Around(diffuseColorVF)) + "," + str(Around(diffuseColorBF)) + ")" + '"' # unsignedEncodeColor = unsignedEncodeColor + " , " + diffuseColorHexa + " , " + diffuseColorHexaPy + " , " + diffuseColorRVB + " , " + diffuseColorFloat elif str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:5] == "Edge": cols = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.LineColor diffuseColorRF = cols[0] diffuseColorVF = cols[1] diffuseColorBF = cols[2] diffuseColorTF = 0.0 transparenceFace = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.Transparency # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((diffuseColorRF), (diffuseColorVF), (diffuseColorBF), 0.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorRVB = '"' + str(int(diffuseColorRF*255.0)) + "," + str(int(diffuseColorVF*255.0)) + "," + str(int(diffuseColorBF*255.0)) + '"' diffuseColorFloat = '"' + "(" + str(Around(diffuseColorRF)) + "," + str(Around(diffuseColorVF)) + "," + str(Around(diffuseColorBF)) + ")" + '"' # unsignedEncodeColor = unsignedEncodeColor + " , " + diffuseColorHexa + " , " + diffuseColorHexaPy + " , " + diffuseColorRVB + " , " + diffuseColorFloat elif str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:7] == "Vertex": cols = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.PointColor diffuseColorRF = cols[0] diffuseColorVF = cols[1] diffuseColorBF = cols[2] diffuseColorTF = 0.0 transparenceFace = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.Transparency # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((diffuseColorRF), (diffuseColorVF), (diffuseColorBF), 0.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorRVB = '"' + str(int(diffuseColorRF*255.0)) + "," + str(int(diffuseColorVF*255.0)) + "," + str(int(diffuseColorBF*255.0)) + '"' diffuseColorFloat = '"' + "(" + str(Around(diffuseColorRF)) + "," + str(Around(diffuseColorVF)) + "," + str(Around(diffuseColorBF)) + ")" + '"' # unsignedEncodeColor = unsignedEncodeColor + " , " + diffuseColorHexa + " , " + diffuseColorHexaPy + " , " + diffuseColorRVB + " , " + diffuseColorFloat else: unsignedEncodeColor = unsignedEncodeColor = diffuseColorHexa = diffuseColorHexaPy = diffuseColorRVB = "" diffuseColorRF = 0.0; diffuseColorVF = 0.0; diffuseColorBF = 0.0; diffuseColorTF = 0.0; unsignedEncodeColor = "" except Exception: if str(aa) == "[<Part::Part2DObject>]": # (triangle) une Face du Mesh colorShapeFace = colorShapeLine = colorShapePoint = colorShapeFaceDiffuseColor = [] colorShapeFace = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.ShapeColor cols = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.LineColor diffuseColorRF = cols[0] diffuseColorVF = cols[1] diffuseColorBF = cols[2] diffuseColorTF = 0.0 transparenceFace = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.Transparency # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((diffuseColorRF), (diffuseColorVF), (diffuseColorBF), 0.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(diffuseColorRF*255.0)) + decimalTohexa(int(diffuseColorVF*255.0)) + decimalTohexa(int(diffuseColorBF*255.0)) + '"' diffuseColorRVB = '"' + str(int(diffuseColorRF*255.0)) + "," + str(int(diffuseColorVF*255.0)) + "," + str(int(diffuseColorBF*255.0)) + '"' diffuseColorFloat = '"' + "(" + str(Around(diffuseColorRF)) + "," + str(Around(diffuseColorVF)) + "," + str(Around(diffuseColorBF)) + ")" + '"' # unsignedEncodeColor = unsignedEncodeColor + " , " + diffuseColorHexa + " , " + diffuseColorHexaPy + " , " + diffuseColorRVB + " , " + diffuseColorFloat else: unsignedEncodeColor = unsignedEncodeColor = diffuseColorHexa = diffuseColorHexaPy = diffuseColorRVB = "" diffuseColorRF = 0.0; diffuseColorVF = 0.0; diffuseColorBF = 0.0; diffuseColorTF = 0.0; unsignedEncodeColor = "" # Shape # longueur Objet try: longueurObjet = Gui.Selection.getSelectionEx()[0].SubObjects[0].Length if str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:5] == "Face": typeLongueur = u"Perimeter of the face" else: typeLongueur = u"Length of the object" except Exception: longueurObjet = 0.0 typeLongueur = u"Length of the object" ######################## # # if (str(s.Curve)[1:5]) == "Line" : # FreeCAD.Console.PrintMessage( "4The Object is a Line!\n") # ############################ # rayon Objet cas cercle et Bspline Begin BsplineDetect = "" BsplinePointsCoor = [] rayonObjet = 0.0 try: BsplineDetect = str(Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve) #"<BSplineCurve object>" except Exception: BsplineDetect = "" # surface Face Radius (surveiller la position !!) try: rayonObjet = Gui.Selection.getSelectionEx()[0].SubObjects[0].Surface.Radius except Exception: rayonObjet = 0.0 try: rayonObjet = Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve.Radius BsplineDetect = "" BsplineArcsRadius = [] except Exception: # try: if str(BsplineDetect) == "<BSplineCurve object>" : BsplineDetect = Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve BsplineNombreDeNoeuds = BsplineDetect.NbKnots #### toBiArcs BsplineArcsToBiArcs = BsplineDetect.toBiArcs(setBSplineToByArcValue) BsplineNumberElement = len(BsplineArcsToBiArcs) BsplineArcsRadius = [] for i in BsplineArcsToBiArcs: # radius on point "toBiArcs(0.00001)" try: BsplineArcsRadius.append(i.Radius) # .Axis , Vector (-0.7265381966759821, 0.49597386656536946, -0.4755545946103446) # .Location (center) , Vector (47.192438328074296, -12.532928959782193, -85.17027221104478) # .Circle , Circle (Radius : 390.516, Position : (47.1924, -12.5329, -85.1703), Direction : (-0.726538, 0.495974, -0.475555)) # .Radius , 390.51645180669107 #ArcOfCircle (Radius : 90.2998, Position : (-123.212, -33.0236, 153.798), Direction : (-0.726538, 0.495974, -0.475555), Parameter : (3.37639, 3.38484)) rayonObjet = BsplineArcsRadius[0] except Exception: BsplineArcsRadius = [] rayonObjet = 0.0 #### for create points and circle creators of the BSpline if (switchBSplineCreateCircleConstructorAxis == 1) or ( switchBSplineCreateCircleConstructor == 1): try: BsplineArcsLocation = [] for i in BsplineArcsToBiArcs: BsplineArcsLocation.append(i) # .Location (center), Vector (47.192438328074296, -12.532928959782193, -85.17027221104478) except Exception: BsplineArcsLocation = [] None #### BsplineNumberToBiArcs = len(BsplineArcsToBiArcs) #### toBiArcs try: BsplineRayonApproximatif = str(Around(BsplineArcsRadius[0] * float(uniteM))) + " " + uniteMs except Exception : BsplineRayonApproximatif = u"" try: #### distance between 2 points Shape bsplineL = Gui.Selection.getSelection()[0] BsplineLength = float(bsplineL.Shape.Length) BsplineCutLength = BsplineLength / float(BsplineNumberElement) #### points noeuds for i in bsplineL.Points: # nombre de points (noeuds) BsplinePointsCoor.append(i) #### points Shape except Exception: # None #### distance between 2 points Curve.getPoles() bsplineL = Gui.Selection.getSelectionEx()[0].SubObjects[0] #.Curve BsplineLength = float(bsplineL.Length) BsplineCutLength = BsplineLength / float(BsplineNumberElement) #### points a.Curve.NbKnots for i in Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve.getPoles(): # nombre de poles (noeuds) BsplinePointsCoor.append(i) #### points a.Curve.NbKnots typeLongueur = "Length BSpline" # except Exception: # rayonObjet = 0.0 # rayon Objet cas cercle et Bspline End # tableau if passTableau == 1: tableau() # surface try: # object surface = sel[0].Shape.Area except Exception: surface = 0.0 try: # face surfaceFace = Gui.Selection.getSelectionEx()[0].SubObjects[0].Area except Exception: surfaceFace = 0.0 # volume try: volume_ = sel[0].Shape.Volume except Exception: volume_ = 0.0 # poids poids = ((volume_ * seTDensiteValue) * uniteP) / 1000.0 # mm3 (mm base FreeCAD) # boundinbox (dimensions hors tout) try: boundBox_ = sel[0].Shape.BoundBox boundBoxLX = boundBox_.XLength boundBoxLY = boundBox_.YLength boundBoxLZ = boundBox_.ZLength boundBoxDiag = boundBox_.DiagonalLength boundBox_S = "[X: "+str(Around(boundBoxLX * uniteM))+" "+uniteMs+"] x [Y: "+str(Around(boundBoxLY * uniteM))+" "+uniteMs+"] x [Z: "+str(Around(boundBoxLZ * uniteM))+" "+uniteMs+"] Diagonal: " + str(Around(boundBoxDiag * uniteM))+" "+uniteMs boundBoxXMin = boundBox_.XMin # BB tracing boundBoxYMin = boundBox_.YMin boundBoxZMin = boundBox_.ZMin except Exception: boundBox_ = boundBoxLX = boundBoxLY = boundBoxLZ = boundBoxDiag = 0.0 boundBox_S = "" if adaptWithBody == 0: # centre de la forme (boundBox) mode sans Body (normal) try: boundBoxCenterX = boundBox_.Center[0] boundBoxCenterY = boundBox_.Center[1] boundBoxCenterZ = boundBox_.Center[2] except Exception: boundBoxCenterX = boundBoxCenterY = boundBoxCenterZ = 0.0 else: # centre de la forme (boundBox) mode avec correction Body GetGlobalPlacement try: #### correction boundBoxLocation = App.Vector(boundBox_.Center[0], boundBox_.Center[1], boundBox_.Center[2]) BDvol = adjustedGlobalPlacement(sel[0], boundBoxLocation) #### boundBoxCenterX = BDvol.Base[0] boundBoxCenterY = BDvol.Base[1] boundBoxCenterZ = BDvol.Base[2] except Exception: boundBoxCenterX = boundBoxCenterY = boundBoxCenterZ = 0.0 # Perimetre tous les bords select = FreeCADGui.Selection.getSelection() numberEdges = len(select[0].Shape.Edges) perimetre = 0.0 try: for i in select[0].Shape.Edges: perimetre += i.Length except Exception: perimetre = 0.0 # vertexes pour les angles try: selectionObjects = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] if str(selectionObjects)[1:5] == "Edge": points = selectionObjects.Edges[0].Vertexes[0].Point angleX1 = points.x angleY1 = points.y angleZ1 = points.z points = selectionObjects.Edges[0].Vertexes[1].Point angleX2 = points.x angleY2 = points.y angleZ2 = points.z except Exception: angleX1 = angleY1 = angleZ1 = 0.0 angleX2 = angleY2 = angleZ2 = 0.0 modeTypeAngle = 1 try: Plan_xy = Around(angle2(angleX1,angleY1,angleX2,angleY2,modeTypeAngle)) Plan_xy_V = "[,"+str(Around(angleX1))+" , "+str(Around(angleY1))+",] [,"+str(Around(angleX2))+" , "+str(Around(angleY2))+",]" except Exception: Plan_xy = 0.0 Plan_xy_V = "" try: Plan_yz = Around(angle2(angleY1,angleZ1,angleY2,angleZ2,modeTypeAngle)) Plan_yz_V = "[,"+str(Around(angleY1))+" , "+str(Around(angleZ1))+",] [,"+str(Around(angleY2))+" , "+str(Around(angleZ2))+",]" except Exception: Plan_yz = 0.0 Plan_yz_V = "" try: Plan_zx = Around(angle2(angleZ1,angleX1,angleZ2,angleX2,modeTypeAngle)) Plan_zx_V = "[,"+str(Around(angleZ1))+" , "+str(Around(angleX1))+",] [,"+str(Around(angleZ2))+" , "+str(Around(angleX2))+",]" except Exception: Plan_zx = 0.0 Plan_zx_V = "" # angle Placement try: typeObject = sel[0].Shape.ShapeType except Exception: typeObject = "" # center of mass or gravity try: c = FreeCADGui.Selection.getSelection()[0].Shape.CenterOfMass massOrGravity = " Mass " except Exception: try: c = FreeCADGui.Selection.getSelection()[0].Shape.CenterOfGravity massOrGravity = " Gravity " except Exception: try: ###https://forum.freecad.org/viewtopic.php?p=664655#p664655 ##shp = App.ActiveDocument.Shape059.Shape ##cog = (shp.Face1.CenterOfGravity + shp.Face2.CenterOfGravity) / 2 ##Part.show(Part.Vertex(cog)) selEx = FreeCADGui.Selection.getSelectionEx() objs = [selobj.Object for selobj in selEx] s = objs[0].Shape c = s.Solids[0].CenterOfMass massOrGravity = " Mass " except Exception: c = "" massOrGravity = " Mass " if adaptWithBody == 0: # centre de la forme (CenterOfMass) mode sans Body (normal) try: CenterOfMassX = c.x CenterOfMassY = c.y CenterOfMassZ = c.z massOrGravity = " Mass " except Exception: try: c = FreeCADGui.Selection.getSelection()[0].Shape.CenterOfGravity CenterOfMassX = c.x CenterOfMassY = c.y CenterOfMassZ = c.z massOrGravity = " Gravity " except: CenterOfMassX = CenterOfMassY = CenterOfMassZ = 0.0 massOrGravity = " Mass " else: # centre de la forme (CenterOfMass) mode avec correction Body GetGlobalPlacement try: #### correction boundBoxLocation = App.Vector(c[0], c[1], c[2]) BDvol = adjustedGlobalPlacement(sel[0], boundBoxLocation) #### CenterOfMassX = BDvol.Base[0] CenterOfMassY = BDvol.Base[1] CenterOfMassZ = BDvol.Base[2] except Exception: CenterOfMassX = CenterOfMassY = CenterOfMassZ = 0.0 # inertia DeterminantM try: # inertia DeterminantM DeterminantM = FreeCADGui.Selection.getSelection()[0].Shape.MatrixOfInertia.determinant() except Exception: try: selEx = FreeCADGui.Selection.getSelectionEx() objs = [selobj.Object for selobj in selEx] s = objs[0].Shape DeterminantM = s.Solids[0].MatrixOfInertia.determinant() except Exception: DeterminantM = 0.0 try: # inertia matrixOfInertia = FreeCADGui.Selection.getSelection()[0].Shape.MatrixOfInertia except Exception: try: selEx = FreeCADGui.Selection.getSelectionEx() objs = [selobj.Object for selobj in selEx] s = objs[0].Shape matrixOfInertia = s.Solids[0].MatrixOfInertia except Exception: matrixOfInertia = "" MatrixOfInertiaRaw = str(matrixOfInertia) # Matrix of inertia ## Verify this section by person knowing the inertia position ## ## ONLY IF THE OBJECT IS PRESENT IN ONE BODY ## ## and post your knowledges in the forum tread if it is not correct ## ## http://forum.freecadweb.org/viewtopic.php?f=10&t=3185 ## try: # Matrix of inertia MatrixX1_16 = MatrixX1 = (matrixOfInertia.A[0]) MatrixY1_16 = MatrixY1 = (matrixOfInertia.A[1]) MatrixZ1_16 = MatrixZ1 = (matrixOfInertia.A[2]) Matrix_1 = (matrixOfInertia.A[3]) MatrixX2_16 = MatrixX2 = (matrixOfInertia.A[4]) MatrixY2_16 = MatrixY2 = (matrixOfInertia.A[5]) MatrixZ2_16 = MatrixZ2 = (matrixOfInertia.A[6]) Matrix_2 = (matrixOfInertia.A[7]) MatrixX3_16 = MatrixX3 = (matrixOfInertia.A[8]) MatrixY3_16 = MatrixY3 = (matrixOfInertia.A[9]) MatrixZ3_16 = MatrixZ3 = (matrixOfInertia.A[10]) Matrix_3 = (matrixOfInertia.A[11]) Matrix12 = (matrixOfInertia.A[12]) Matrix13 = (matrixOfInertia.A[13]) Matrix14 = (matrixOfInertia.A[14]) Matrix15 = (matrixOfInertia.A[15]) refreshMatrix = 1 except Exception: MatrixX1_16 = MatrixX1 = 0.0 MatrixY1_16 = MatrixY1 = 0.0 MatrixZ1_16 = MatrixZ1 = 0.0 Matrix_1 = 0.0 MatrixX2_16 = MatrixX2 = 0.0 MatrixY2_16 = MatrixY2 = 0.0 MatrixZ2_16 = MatrixZ2 = 0.0 Matrix_2 = 0.0 MatrixX3_16 = MatrixX3 = 0.0 MatrixY3_16 = MatrixY3 = 0.0 MatrixZ3_16 = MatrixZ3 = 0.0 Matrix_3 = 0.0 Matrix12 = 0.0 Matrix13 = 0.0 Matrix14 = 0.0 Matrix15 = 0.0 refreshMatrix = 0 try: # Direction verifier choix objet ou sub objet # edgeObject = Gui.Selection.getSelection()[0].Shape.Edges[0] # first edge of Shape edgeObject = Gui.Selection.getSelectionEx()[0].SubObjects[0].Edges[0] # sub object selcted directionObj = edgeObject.Vertexes[1].Point.sub(edgeObject.Vertexes[0].Point) except Exception: directionObj = "[]" try: # valueAt(0) direcValueAt = Gui.Selection.getSelectionEx()[0].SubObjects[0].Edges[0].valueAt(0) except Exception: direcValueAt = "[]" try: # normalAt(0,0) if switchCreateLineDiVatNatOnClick == 0: typeNormalAt = u"NormalAt(0,0)" else: typeNormalAt = u"*NormalAt(0,0)" direcNormalAt = Gui.Selection.getSelectionEx()[0].SubObjects[0].Faces[0].normalAt(0,0) except Exception: direcNormalAt = "[]" #### Display info if switchDisplayInfoObject == 1 : if switchClearDisplayReportView == 1: ##################### effacer la vue rapport ############################ try: #### mw=Gui.getMainWindow() #### r=mw.findChild(QTextEdit, "Report view") #### r.clear() #### except Exception: #### None #### ######################################################################### App_Console_PrintMessage(u"\n") App_Console_PrintMessage(u"FCInfo_Beginning_"+str(subElemName) +"______________________________________________________"+"\n") App_Console_PrintMessage(u"Document name : "+document_+"\n") App_Console_PrintMessage(u"Label of the object : "+object_Label+"\n") App_Console_PrintMessage(u"Internal name : "+object_Name+"\n") App_Console_PrintMessage(u"Element name : "+str(subElemName)+"\n") App_Console_PrintMessage(u"Object type : "+typeObject+"\n") App_Console_PrintMessage(u"Object type : "+object_Type+"\n") App_Console_PrintMessage(u"Mouse coordinates : X: "+str(Around(position0 * uniteM)) + " " + uniteMs + " Y:" + str(Around(position1 * uniteM)) + " " + uniteMs + " Z:" + str(Around(position2 * uniteM)) + " " + uniteMs + "\n") App_Console_PrintMessage(typeLongueur + " : "+str(Around(longueurObjet * uniteM))+", "+uniteMs+"\n\n") App_Console_PrintMessage(u"Color on selection" + "\n") App_Console_PrintMessage(u"Red" + ", " + str(int(diffuseColorRF*255.0)) + ", " + u"Green" + ", " + str(int(diffuseColorVF*255.0)) + ", " + u"Blue" + ", " + str(int(diffuseColorBF*255.0)) + ", " + u"Transparency" + ", " + str(int(diffuseColorTF*255.0)) + "\n\n") #### couleurs if len(colorShapeFace) != 0: App_Console_PrintMessage(u"Color Object (float) " + str(colorShapeFace[0])+", "+str(colorShapeFace[1])+", "+str(colorShapeFace[2])+", "+str(colorShapeFace[3])+")" + "\n") App_Console_PrintMessage(u"Color Object (int )(" + str(int(colorShapeFace[0]*255.0))+", "+str(int(colorShapeFace[1]*255.0))+", "+str(int(colorShapeFace[2]*255.0))+", "+str(int(colorShapeFace[3]*255.0))+")" + "\n\n") if len(colorShapeLine) != 0: App_Console_PrintMessage(u"Color Line(s) (float) " + str(colorShapeLine[0])+", "+str(colorShapeLine[1])+", "+str(colorShapeLine[2])+", "+str(colorShapeLine[3])+")" + "\n") App_Console_PrintMessage(u"Color Line(s) (int )(" + str(int(colorShapeLine[0]*255.0))+", "+str(int(colorShapeLine[1]*255.0))+", "+str(int(colorShapeLine[2]*255.0))+", "+str(int(colorShapeLine[3]*255.0))+")" + "\n\n") if len(colorShapePoint) != 0: try: App_Console_PrintMessage(u"Color Point(s) (float) " + str(colorShapePoint[0])+", "+str(colorShapePoint[1])+", "+str(colorShapePoint[2])+", "+str(colorShapePoint[3])+")" + "\n") App_Console_PrintMessage(u"Color Point(s) (int )(" + str(int(colorShapePoint[0]*255.0))+", "+str(int(colorShapePoint[1]*255.0))+", "+str(int(colorShapePoint[2]*255.0))+", "+str(int(colorShapePoint[3]*255.0))+")" + "\n\n") except Exception: None if detected[0:4] == "Mesh": App_Console_PrintMessage(u"Number of Edges : "+str(nombreArretesMesh)+"\n") App_Console_PrintMessage(u"Number of Faces : "+str(nombreFacesMesh)+"\n") App_Console_PrintMessage(u"Number of Points : "+str(nombrePointsMesh)+"\n\n") if detected == "<PointKernel object>": App_Console_PrintMessage(u"Number of Points : "+str(nombrePointsMesh)+"\n\n") ############### detail of Cercle BSpline begin if (rayonObjet != 0.0) or (str(BsplineDetect) == "<BSplineCurve object>"): if (str(BsplineDetect) == "<BSplineCurve object>"): App_Console_PrintMessage(u"Number of nodes : "+str(BsplineNombreDeNoeuds) +"\n") for i in enumerate(BsplinePointsCoor): # nombre de points App_Console_PrintMessage("\t" + u"X" + str(i[0]+1) + ": " + str(Around(float(BsplinePointsCoor[i[0]][0]))) + " " + "\t" + u"Y" + str(i[0]+1) + ": " + str(Around(float(BsplinePointsCoor[i[0]][1]))) + " " + "\t" + u"Z" + str(i[0]+1) + ": " + str(Around(float(BsplinePointsCoor[i[0]][2]))) + "\n") App_Console_PrintMessage(u"\n") else: App_Console_PrintMessage(u"Radius of the object : "+str(Around(rayonObjet * uniteM))+", "+uniteMs +"\n") App_Console_PrintMessage(u"Diameter of the object : "+str(Around((rayonObjet * uniteM) * 2.0))+", "+uniteMs +"\n") ############### detail of Cercle BSpline end App_Console_PrintMessage(u"Perimeter of the shape : "+str(Around(perimetre * uniteM))+", "+uniteMs+"\n\n") ############### detail of object begin if passTableau == 1: # App_Console_PrintMessage(u"Vertexes and details : ("+ str(compt_E) +") ("+ str(compt_F)+") ("+ str(compt_VF)+") ("+str(RowCountTest)+")\n") co = 0 aa = 0 for j in enumerate(Edges): App_Console_PrintMessage(u"Length "+str(j[1])+" = "+str(Around(float(EdgesLong[co]) * float(uniteM)))+" "+uniteMs+"\n") try: for a in range(aa,aa+6): chaine = str(Vertx[a]).split(":") App_Console_PrintMessage(chaine[0] + ": " + str(Around(float(chaine[1]) * float(uniteM)))+" "+uniteMs+"\n") except Exception: None co += 1 aa += 6 App_Console_PrintMessage(u"\n") co=0 cco=0 for j in enumerate(Faces): App_Console_PrintMessage(u"Area "+str(j[1])+" = "+str(Around(float(FacesSurf[co]) * float(uniteS)))+" "+uniteSs+"\n") if len(colorShapeFaceDiffuseColor) != 0: App_Console_PrintMessage(u"Color float Face" + str(j[0]+1) + " " + u"R: " + str(colorShapeFaceDiffuseColor[j[0]][0]) + ", "+ u"G: " + str(colorShapeFaceDiffuseColor[j[0]][1]) + ", "+ u"B: " + str(colorShapeFaceDiffuseColor[j[0]][2]) + ", "+ u"T: " + str(colorShapeFaceDiffuseColor[j[0]][3]) + "\n") App_Console_PrintMessage(u"Color integer Face" + str(j[0]+1) + " " + u"R: " + str(int(colorShapeFaceDiffuseColor[j[0]][0]*255.0))+", "+ u"G: " + str(int(colorShapeFaceDiffuseColor[j[0]][1]*255.0))+", "+ u"B: " + str(int(colorShapeFaceDiffuseColor[j[0]][2]*255.0))+", "+ u"T: " + str(int(colorShapeFaceDiffuseColor[j[0]][3]*255.0))+ "\n") for jj in range(cco,len(FacesCoor)): cco+=1 if FacesCoor[jj] == "T": break else: chaine = str(FacesCoor[jj]).split(":") App_Console_PrintMessage(chaine[0] + ": " + str(Around(float(chaine[1]) * float(uniteM)))+" "+uniteMs+"\n") App_Console_PrintMessage(u"\n") co += 1 cco=0 else: App_Console_PrintMessage(u"\n") ############### detail of object end #### Display info Begin App_Console_PrintMessage(u"Plane : XY: " + str(Around(Plan_xy))+uniteAs+" coordinates: " + str(Plan_xy_V)+"\n") App_Console_PrintMessage(u"Plane : YZ: " + str(Around(Plan_yz))+uniteAs+" coordinates: " + str(Plan_yz_V)+"\n") App_Console_PrintMessage(u"Plane : ZX: " + str(Around(Plan_zx))+uniteAs+" coordinates: " + str(Plan_zx_V)+"\n\n") App_Console_PrintMessage(u"The form surface : "+str(Around(surface * uniteS))+" "+uniteSs+"\n") App_Console_PrintMessage(u"The face surface : "+str(Around(surfaceFace * uniteS))+" "+uniteSs+"\n\n") App_Console_PrintMessage(u"Volume of the form : "+str(Around(volume_ * uniteV))+" "+uniteVs+"\n") App_Console_PrintMessage(u"Mass : "+str(Around(poids))+ " " +unitePs+u" (Densité : "+str(seTDensiteValue)+")\n\n") App_Console_PrintMessage(u"Center of the shape : X: "+str(Around(boundBoxCenterX * uniteM))+ " " +uniteMs+" Y: "+str(Around(boundBoxCenterY * uniteM))+ " " +uniteMs+" Z: "+str(Around(boundBoxCenterZ * uniteM))+ " " +uniteMs+"\n") App_Console_PrintMessage(u"Center of mass : X: "+str(Around(CenterOfMassX * uniteM))+ " " +uniteMs +" Y: "+str(Around(CenterOfMassY * uniteM))+ " " +uniteMs +" Z: "+str(Around(CenterOfMassZ * uniteM))+ " " +uniteMs+"\n") App_Console_PrintMessage(u"Overall dimensions : "+boundBox_S+"\n\n") if directionObj != "[]": App_Console_PrintMessage(u"Direction : "+str(directionObj)+"\n") if direcValueAt != "[]": App_Console_PrintMessage(u"ValueAt : "+str(direcValueAt)+"\n") if direcNormalAt != "[]": App_Console_PrintMessage(u"NormalAt : "+str(direcNormalAt)+"\n") App_Console_PrintMessage(u"\n") if detected[0:4] == "Mesh": None else: App_Console_PrintMessage(u"Matrix of inertia : Raw: "+str(MatrixOfInertiaRaw)+"\n") App_Console_PrintMessage(u" : " + uniteMs + "^" + str(setMomentOfInertia_16) + "\n") App_Console_PrintMessage(u" : X: "+str(Around(MatrixX1_16))+" Y: "+str(Around(MatrixY1_16))+" Z: "+str(Around(MatrixZ1_16))+" : "+str(Around(Matrix_1))+"\n") App_Console_PrintMessage(u" : X: "+str(Around(MatrixX2_16))+" Y: "+str(Around(MatrixY2_16))+" Z: "+str(Around(MatrixZ2_16))+" : "+str(Around(Matrix_2))+"\n") App_Console_PrintMessage(u" : X: "+str(Around(MatrixX3_16))+" Y: "+str(Around(MatrixY3_16))+" Z: "+str(Around(MatrixZ3_16))+" : "+str(Around(Matrix_3))+"\n") App_Console_PrintMessage(u" : X: "+str(Around(Matrix12))+" Y: "+str(Around(Matrix13))+" Z: "+str(Around(Matrix14))+" : "+str(Around(Matrix15))+"\n\n") App_Console_PrintMessage(u"Matrix inertia with mass : " +unitePs + uniteSs + "^" + str(setMomentOfInertiaMassique_17) + "\n") App_Console_PrintMessage(u" : X: "+str(Around(MatrixX1_17))+" Y: "+str(Around(MatrixY1_17))+" Z: "+str(Around(MatrixZ1_17))+"\n") App_Console_PrintMessage(u" : X: "+str(Around(MatrixX2_17))+" Y: "+str(Around(MatrixY2_17))+" Z: "+str(Around(MatrixZ2_17))+"\n") App_Console_PrintMessage(u" : X: "+str(Around(MatrixX3_17))+" Y: "+str(Around(MatrixY3_17))+" Z: "+str(Around(MatrixZ3_17))+"\n\n") App_Console_PrintMessage(u"Determinant : " + str(DeterminantM)+"\n") App_Console_PrintMessage(u"Determinant decimal : " + str(decimal.Decimal(DeterminantM))+"\n") App_Console_PrintMessage(u"FCInfo_End_"+str(subElemName)+ "____________________________________________________________"+"\n\n") #### Display info end class Ui_MainWindow(object): def setupUi(self, MainWindow): global sel global document_ global object_Label global object_Name global typeObject global object_Type global subElemName global position0 global position1 global position2 global diffuseColorRF global diffuseColorVF global diffuseColorBF global diffuseColorTF global transparenceFace global unsignedEncodeColor global longueurObjet global rayonObjet global perimetre global Plan_xy global Plan_xy_V global Plan_yz global Plan_yz_V global Plan_zx global Plan_zx_V global surface global surfaceFace global volume_ global poids global materialAssociated global seTMaterialCurrentIndex global uniteM global uniteMs global uniteS global uniteSs global uniteV global uniteVs global uniteP global unitePs global directionObj global direcValueAt global direcNormalAt global uniteAs global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ global CenterOfMassX global CenterOfMassY global CenterOfMassZ global boundBoxLX global boundBoxLY global boundBoxLZ global boundBoxDiag global MatrixX1 global MatrixY1 global MatrixZ1 global Matrix_1 global MatrixX2 global MatrixY2 global MatrixZ2 global Matrix_2 global MatrixX3 global MatrixY3 global MatrixZ3 global Matrix_3 global Matrix12 global Matrix13 global Matrix14 global Matrix15 global DeterminantM global compt_E global compt_F global compt_VF global placement_ global RowCount global RowCountTest global seTMemoClipBoard global switchCreatePoint global switchCreateAxis global switchCreatePlane global switchDisplayInfoObject global seTWidgetPosition global switchBoundBoxCreateText global seTBoundBoxTextHeigth global seTDecimalValue global seTTextHeigthValue global seTDensiteDecimalNumber global seTDensiteValue global seTDensiteSingleStep global seTDensiteSuffixChain global seTPositionFlyRightLeft global seTMaterialPrice global seTMaterialSuffixDevise global seTMaterialSuffixCost global seTIndexUnitLength global seTIndexUnitWeight global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global BsplineDetect global BsplineRayonApproximatif global BsplineArcsRadius global switch_setVisible_GBox_001_Document global switch_setVisible_GBox_002_Coordinate_Mouse global switch_setVisible_GBox_003_Color global switch_setVisible_GBox_004_Object_Mesh global switch_setVisible_GBox_005_Value_Unit global switch_setVisible_GBox_006_Inclination global switch_setVisible_GBox_007_Surface_and_Volume global switch_setVisible_GBox_008_Cost_And_Price global switch_setVisible_GBox_009_BoundBox global switch_setVisible_GBox_010_Center_Mass global switch_setVisible_GBox_011_Inertia global switch_setVisible_GBox_012_SpreadSheet global switch_setVisible_GBox_013_SpreadSheet_Creation global switch_setVisible_GBox_014_Main_Tools self.window = MainWindow #### if seTPositionFlyRightLeft == 1: MainWindow.setObjectName(_fromUtf8(u"MainWindow")) # volant MainWindow.resize(500, 515) MainWindow.setMinimumSize(QtCore.QSize(500, 515)) #MainWindow.setMaximumSize(QtCore.QSize(380, 515)) #MainWindow.move(1300, 120) # deplace la fenetre #### self.fontGlobal_08 = QtGui.QFont() self.fontGlobal_08.setFamily(u"Arial") # self.fontGlobal_08.setPointSize(seTTextHeigthValue) self.fontGlobal_08.setPixelSize(seTTextHeigthValue) #self.xxxx.setFont(self.fontGlobal_08) #self.xxxx.setStyleSheet(u"color : #ff0000; font: bold") # couleur du texte et gras# #### self.centralWidget = QWidget(MainWindow) #self.centralWidget.setMinimumSize(QtCore.QSize(500, 500)) #### grid = QGridLayout() self.centralWidget.setLayout(grid) #### self.scrollArea = QScrollArea(self.centralWidget) # cadre scrollarea contenant le widget GUI self.scrollArea.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) self.scrollArea.setWidgetResizable(True) grid.addWidget(self.scrollArea, 0, 0) vbox = QVBoxLayout() self.scrollArea.setLayout(vbox) self.scrollAreaWidgetContents_2 = QWidget() #widget contenant le GUI vbox.addWidget(self.scrollAreaWidgetContents_2) sel = FreeCADGui.Selection.getSelection() if len(sel)==0: App_Console_PrintMessage(u"Select an object"+"\n") errorDialog(u"Select an object") else: affect(0) vbox = QVBoxLayout() self.scrollAreaWidgetContents_2.setLayout(vbox) #### Document grid = QGridLayout() self.GBox_001_Document = QGroupBox() if switch_setVisible_GBox_001_Document == False: self.GBox_001_Document.setVisible(switch_setVisible_GBox_001_Document) # visibility self.GBox_001_Document.setLayout(grid) vbox.addWidget(self.GBox_001_Document) self.LA_1 = QLabel() self.LE_1 = QLineEdit() grid.addWidget(self.LA_1, 0, 0) grid.addWidget(self.LE_1, 0, 1, 1, 2) self.LA_2 = QLabel() self.LE_2 = QLineEdit() self.LE_2a = QLineEdit() grid.addWidget(self.LA_2, 1, 0) grid.addWidget(self.LE_2, 1, 1) grid.addWidget(self.LE_2a, 1, 2) self.LA_3 = QLabel() self.LA_4 = QLabel() self.LE_3 = QLineEdit() self.LE_3a = QLineEdit() self.LE_4 = QLineEdit() grid.addWidget(self.LA_3, 2, 0) grid.addWidget(self.LE_3, 2, 1) grid.addWidget(self.LE_3a, 2, 2) grid.addWidget(self.LA_4, 3, 0) grid.addWidget(self.LE_4, 3, 1, 1, 2) #### Coordinate click mouse grid = QGridLayout() self.GBox_002_Coordinate_Mouse = QGroupBox() if switch_setVisible_GBox_002_Coordinate_Mouse == False: self.GBox_002_Coordinate_Mouse.setVisible(switch_setVisible_GBox_002_Coordinate_Mouse) # visibility self.GBox_002_Coordinate_Mouse.setLayout(grid) vbox.addWidget(self.GBox_002_Coordinate_Mouse) self.LA_4x = QLabel() self.LA_4x.setStyleSheet(u"QLabel {color : #ff0000; font: bold}") # couleur du texte et gras self.LE_4x = QLineEdit() grid.addWidget(self.LA_4x, 0, 0) grid.addWidget(self.LE_4x, 1, 0) self.LA_4y = QLabel() self.LA_4y.setStyleSheet(u"QLabel {color : #008500; font: bold}") # couleur du texte et gras self.LE_4y = QLineEdit() grid.addWidget(self.LA_4y, 0, 1) grid.addWidget(self.LE_4y, 1, 1) self.LA_4z = QLabel() self.LA_4z.setStyleSheet(u"QLabel {color : #0000ff; font: bold}") # couleur du texte et gras self.LE_4z = QLineEdit() grid.addWidget(self.LA_4z, 0, 2) grid.addWidget(self.LE_4z, 1, 2) self.PB_Axis_01 = QPushButton() self.PB_Axis_01.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_01.clicked.connect(self.on_PB_Axis_Mouse) grid.addWidget(self.PB_Axis_01, 1, 3) #### couleur point clique grid = QGridLayout() self.GBox_003_Color = QGroupBox() if switch_setVisible_GBox_003_Color == False: self.GBox_003_Color.setVisible(switch_setVisible_GBox_003_Color) # visibility self.GBox_003_Color.setLayout(grid) vbox.addWidget(self.GBox_003_Color) self.LA_1_Red = QLabel() self.LA_1_Red.setStyleSheet(u"QLabel {color : #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_1_Red, 0, 0) self.LA_2_Green = QLabel() self.LA_2_Green.setStyleSheet(u"QLabel {color : #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_2_Green, 0, 1) self.LA_3_Blue = QLabel() self.LA_3_Blue.setStyleSheet(u"QLabel {color : #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_3_Blue, 0, 2) self.LA_4_Transparent = QLabel() self.LA_4_Transparent.setStyleSheet(u"QLabel {color : #000000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_4_Transparent, 0, 3) self.LE_CRed = QLineEdit() grid.addWidget(self.LE_CRed, 1, 0) self.LE_CGreen = QLineEdit() grid.addWidget(self.LE_CGreen, 1, 1) self.LE_CBlue = QLineEdit() grid.addWidget(self.LE_CBlue, 1, 2) self.LE_Transparent = QLineEdit() grid.addWidget(self.LE_Transparent, 1, 3) self.LE_ConversionUnsigned = QLineEdit() grid.addWidget(self.LE_ConversionUnsigned, 2, 0, 1, 4) self.CBox_Color_FaceObject = QCheckBox() #self.CBox_Color_FaceObject.setChecked(False) self.CBox_Color_FaceObject.clicked.connect(self.SIGNAL_CBox_Color_FaceObject) grid.addWidget(self.CBox_Color_FaceObject, 3, 0) self.PB_ChangeColor = QPushButton() self.PB_ChangeColor.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Color))) # icone dans une variable self.PB_ChangeColor.clicked.connect(self.on_PB_ChangeColor) grid.addWidget(self.PB_ChangeColor, 3, 1) self.PB_CreateFace = QPushButton() self.PB_CreateFace.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Face))) # icone dans une variable self.PB_CreateFace.clicked.connect(self.on_PB_CreateFace) grid.addWidget(self.PB_CreateFace, 3, 2) self.SBox_Transparence = QSpinBox() #self.SBox_Transparence.setEnabled(False) self.SBox_Transparence.setMinimum(0) self.SBox_Transparence.setMaximum(100) self.SBox_Transparence.setValue(transparenceFace) self.SBox_Transparence.valueChanged.connect(self.on_SBox_Transparence_valueChanged) grid.addWidget(self.SBox_Transparence, 3, 3) #### Composantes Object Mesh grid = QGridLayout() self.GBox_004_Object_Mesh = QGroupBox() if switch_setVisible_GBox_004_Object_Mesh == False: self.GBox_004_Object_Mesh.setVisible(switch_setVisible_GBox_004_Object_Mesh) # visibility self.GBox_004_Object_Mesh.setVisible(False) self.GBox_004_Object_Mesh.setLayout(grid) vbox.addWidget(self.GBox_004_Object_Mesh) self.LA_N_Edges = QLabel() self.LE_N_Edges = QLineEdit() grid.addWidget(self.LA_N_Edges, 0, 0) grid.addWidget(self.LE_N_Edges, 1, 0) self.LA_N_Facets = QLabel() self.LE_N_Facets = QLineEdit() grid.addWidget(self.LA_N_Facets, 0, 1) grid.addWidget(self.LE_N_Facets, 1, 1) self.LA_N_Points = QLabel() self.LE_N_Points = QLineEdit() grid.addWidget(self.LA_N_Points, 0, 2) grid.addWidget(self.LE_N_Points, 1, 2) #### Unit grid = QGridLayout() self.GBox_005_Value_Unit = QGroupBox() if switch_setVisible_GBox_005_Value_Unit == False: self.GBox_005_Value_Unit.setVisible(switch_setVisible_GBox_005_Value_Unit) # visibility self.GBox_005_Value_Unit.setLayout(grid) vbox.addWidget(self.GBox_005_Value_Unit) self.LA_5a = QLabel() grid.addWidget(self.LA_5a, 0, 0) self.comboBox = QComboBox() self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) self.comboBox.addItem(_fromUtf8(u"")) #self.comboBox.setCurrentIndex(seTIndexUnitLength) self.comboBox.currentTextChanged.connect(self.SIGNAL_comboBox_Changed) grid.addWidget(self.comboBox, 0, 1)#, 1, 2 #### Line Cercle et BSpline self.LA_5 = QLabel() grid.addWidget(self.LA_5, 1, 0)#, 1, 2 self.LE_5 = QLineEdit() grid.addWidget(self.LE_5, 1, 1)#, 1, 2 self.LA_5b = QLabel() grid.addWidget(self.LA_5b, 2, 0)#, 1, 2 self.LE_5b = QLineEdit() grid.addWidget(self.LE_5b, 2, 1)#, 1, 2 self.SB_Arc_ToByArcs = QSpinBox() self.SB_Arc_ToByArcs.setMinimum(1) self.SB_Arc_ToByArcs.setMaximum(99999999) self.SB_Arc_ToByArcs.setPrefix(u"arc ") # try: # self.SB_Arc_ToByArcs.setSuffix(u" / " + str(len(BsplineArcsRadius))) # BsplineRayonApproximatif = str(Around(BsplineArcsRadius[0] * float(uniteM))) + " " + uniteMs # except Exception: # BsplineRayonApproximatif = u"" self.SB_Arc_ToByArcs.valueChanged.connect(self.on_SB_Arc_ToByArcs_valueChanged) grid.addWidget(self.SB_Arc_ToByArcs, 2, 2) self.LA_6 = QLabel() grid.addWidget(self.LA_6, 3, 0)#, 1, 1 self.LE_6 = QLineEdit() grid.addWidget(self.LE_6, 3, 1) self.PB_BSplineCreateNodes = QPushButton() self.PB_BSplineCreateNodes.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Point))) # icone dans une variable self.PB_BSplineCreateNodes.clicked.connect(self.on_PB_BSplineCreateNodes) grid.addWidget(self.PB_BSplineCreateNodes, 3, 2) # if (rayonObjet != 0) or (str(BsplineDetect) == "<BSplineCurve object>"):: # if (str(BsplineDetect) == "<BSplineCurve object>"): # self.SB_Arc_ToByArcs.setVisible(True) # self.PB_BSplineCreateNodes.setVisible(True) # self.LA_5b.setVisible(True) # self.LE_5b.setVisible(True) # else: # self.SB_Arc_ToByArcs.setVisible(False) # self.PB_BSplineCreateNodes.setVisible(False) # self.LA_5b.setVisible(False) # self.LE_5b.setVisible(False) # rayonObjet = 0.0 #### Inclination grid = QGridLayout() self.GBox_006_Inclination = QGroupBox() if switch_setVisible_GBox_006_Inclination == False: self.GBox_006_Inclination.setVisible(switch_setVisible_GBox_006_Inclination) # visibility self.GBox_006_Inclination.setLayout(grid) vbox.addWidget(self.GBox_006_Inclination) self.LA_8a = QLabel(self.GBox_006_Inclination) grid.addWidget(self.LA_8a, 0, 0) self.PB_Ra = QPushButton() self.PB_Ra.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Degrees))) # icone dans une variable self.PB_Ra.clicked.connect(self.on_PB_Ra_clicked) # "Radian" grid.addWidget(self.PB_Ra, 0, 1) self.LA_8a_2 = QLabel() grid.addWidget(self.LA_8a_2, 0, 2, 1, 3) self.LA_8xy = QLabel() self.LA_8xy.setStyleSheet(u"QLabel {color : #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_8xy, 1, 0) self.LE_8xy = QLineEdit() grid.addWidget(self.LE_8xy, 1, 1) self.LE_8xya = QLineEdit() grid.addWidget(self.LE_8xya, 1, 2) self.LA_8yz = QLabel() self.LA_8yz.setStyleSheet(u"QLabel {color : #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_8yz, 2, 0) self.LE_8yz = QLineEdit() grid.addWidget(self.LE_8yz, 2, 1) self.LE_8yza = QLineEdit() grid.addWidget(self.LE_8yza, 2, 2) self.LA_8zx = QLabel() self.LA_8zx.setStyleSheet(u"QLabel {color : #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_8zx, 3, 0) self.LE_8zx = QLineEdit() grid.addWidget(self.LE_8zx, 3, 1) self.LE_8zxa = QLineEdit() grid.addWidget(self.LE_8zxa, 3, 2) self.PB_Line_Direction = QPushButton() self.PB_Line_Direction.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_13J))) # icone dans une variable self.PB_Line_Direction.clicked.connect(self.on_PB_Line_Direction) grid.addWidget(self.PB_Line_Direction, 4, 0) self.LE_9_Direction = QLineEdit() grid.addWidget(self.LE_9_Direction, 4, 1, 1, 2) self.PB_Line_ValueAT = QPushButton() self.PB_Line_ValueAT.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_13M))) # icone dans une variable self.PB_Line_ValueAT.clicked.connect(self.on_PB_Line_ValueAT) grid.addWidget(self.PB_Line_ValueAT, 5, 0) self.LE_10_ValueAt = QLineEdit() grid.addWidget(self.LE_10_ValueAt, 5, 1, 1, 2) self.PB_Line_NormalAT = QPushButton() self.PB_Line_NormalAT.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_13C))) # icone dans une variable self.PB_Line_NormalAT.clicked.connect(self.on_PB_Line_NormalAT) grid.addWidget(self.PB_Line_NormalAT, 6, 0) self.LE_10b_NormalAt = QLineEdit() grid.addWidget(self.LE_10b_NormalAt, 6, 1, 1, 2) ##### Surface and Volume grid = QGridLayout() self.GBox_007_Surface_and_Volume = QGroupBox() if switch_setVisible_GBox_007_Surface_and_Volume == False: self.GBox_007_Surface_and_Volume.setVisible(switch_setVisible_GBox_007_Surface_and_Volume) # visibility self.GBox_007_Surface_and_Volume.setLayout(grid) vbox.addWidget(self.GBox_007_Surface_and_Volume) self.LA_9 = QLabel() grid.addWidget(self.LA_9, 0, 0) self.LE_9a = QLineEdit() grid.addWidget(self.LE_9a, 0, 1) self.LA_10 = QLabel() grid.addWidget(self.LA_10, 1, 0) self.LE_10a = QLineEdit() grid.addWidget(self.LE_10a, 1, 1) self.LA_11 = QLabel() grid.addWidget(self.LA_11, 2, 0) self.LE_11a = QLineEdit() grid.addWidget(self.LE_11a, 2, 1) self.LA_Unit = QLabel() grid.addWidget(self.LA_Unit, 3, 0) self.comboBox_Unit = QComboBox() self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) self.comboBox_Unit.addItem(_fromUtf8(u"")) #self.comboBox_Unit.setCurrentIndex(seTIndexUnitWeight) self.comboBox_Unit.currentTextChanged.connect(self.SIGNAL_comboPoids_Changed) grid.addWidget(self.comboBox_Unit, 3, 1) self.LA_Weight = QLabel() grid.addWidget(self.LA_Weight, 4, 0) self.LA_Density = QLabel() grid.addWidget(self.LA_Density, 4, 1) self.LE_12a = QLineEdit() self.LE_12a.setText(str(Around(poids))+" "+unitePs) grid.addWidget(self.LE_12a, 5, 0) self.DS_Density = QDoubleSpinBox() seTDensiteValue = float(materialAssociated[seTMaterialCurrentIndex].split(",")[1]) self.DS_Density.setDecimals(seTDensiteDecimalNumber) self.DS_Density.setMinimum(-0.00000001) self.DS_Density.setMaximum(99999999.0) #self.DS_Density.setProperty(u"value", seTDensiteValue) self.DS_Density.setValue(seTDensiteValue) self.DS_Density.setSuffix(seTDensiteSuffixChain) self.DS_Density.setSingleStep(seTDensiteSingleStep) self.DS_Density.valueChanged.connect(self.on_DS_Density_valueChanged) grid.addWidget(self.DS_Density, 5, 1) self.LA_Material = QLabel() grid.addWidget(self.LA_Material, 6, 0) self.CBox_Materiel = QComboBox() for ligneMat in materialAssociated: self.CBox_Materiel.addItem(_fromUtf8(ligneMat)) self.CBox_Materiel.setCurrentIndex(seTMaterialCurrentIndex) self.CBox_Materiel.currentTextChanged.connect(self.SIGNAL_CBox_Materiel_Changed) grid.addWidget(self.CBox_Materiel,7, 0, 1, 2) self.LA_NewMaterial = QLabel() grid.addWidget(self.LA_NewMaterial, 8, 0) self.LE_Materiel = QLineEdit() self.LE_Materiel.setText(materialAssociated[seTMaterialCurrentIndex]) self.LE_Materiel.returnPressed.connect(self.on_LE_Materiel_Pressed) # connect "on_LE_Materiel_Pressed" # for validate the data with press on return touch #self.LE_Materiel.textChanged.connect(self.on_LE_Materiel_Pressed) # connect "on_LE_Materiel_Pressed" # with tips key char by char grid.addWidget(self.LE_Materiel, 9, 0, 1, 2) self.PB_Del_Material = QPushButton() self.PB_Del_Material.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_DeleteLineMaterial))) # icone dans une variable self.PB_Del_Material.clicked.connect(self.on_PB_Del_Material_clicked) grid.addWidget(self.PB_Del_Material, 10, 0) self.PB_Save_Material = QPushButton() self.PB_Save_Material.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Save_Material))) # icone dans une variable self.PB_Save_Material.clicked.connect(self.on_PB_Save_Material_clicked) grid.addWidget(self.PB_Save_Material, 10, 1) #### Cost grid = QGridLayout() self.GBox_008_Cost_And_Price = QGroupBox() if switch_setVisible_GBox_008_Cost_And_Price == False: self.GBox_008_Cost_And_Price.setVisible(switch_setVisible_GBox_008_Cost_And_Price) # visibility self.GBox_008_Cost_And_Price.setLayout(grid) vbox.addWidget(self.GBox_008_Cost_And_Price) self.LA_Cost = QLabel() grid.addWidget(self.LA_Cost, 0, 0) self.LA_Price = QLabel() grid.addWidget(self.LA_Price, 0, 1) self.LE_Cost = QLineEdit() seTMaterialCost = ((volume_ * seTDensiteValue * seTMaterialPrice) / 1000000.0) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial grid.addWidget(self.LE_Cost, 1, 0) self.DS_Price = QDoubleSpinBox() self.DS_Price.setDecimals(seTDensiteDecimalNumber) self.DS_Price.setMinimum(-0.00000001) self.DS_Price.setMaximum(99999999.0) #self.DS_Price.setProperty(u"value", seTMaterialPrice) self.DS_Price.setValue(seTMaterialPrice) self.DS_Price.setSuffix(seTMaterialSuffixDevise) self.DS_Price.setSingleStep(1) self.DS_Price.valueChanged.connect(self.on_DS_Price_valueChanged) grid.addWidget(self.DS_Price, 1, 1) ##### BoundBox grid = QGridLayout() self.GBox_009_BoundBox = QGroupBox() if switch_setVisible_GBox_009_BoundBox == False: self.GBox_009_BoundBox.setVisible(switch_setVisible_GBox_009_BoundBox) # visibility self.GBox_009_BoundBox.setLayout(grid) vbox.addWidget(self.GBox_009_BoundBox) self.LA_007_01_Xlength = QLabel() self.LA_007_01_Xlength.setStyleSheet(u"QLabel {color : #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_007_01_Xlength, 0, 0) self.LA_007_02_Ylength = QLabel() self.LA_007_02_Ylength.setStyleSheet(u"QLabel {color : #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_007_02_Ylength, 0, 1) self.LA_007_03_Zlength = QLabel() self.LA_007_03_Zlength.setStyleSheet(u"QLabel {color : #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_007_03_Zlength, 0, 2) self.LA_007_04_Diagonallength = QLabel() grid.addWidget(self.LA_007_04_Diagonallength, 0, 3) self.LE_007_BB_01_XLength = QLineEdit() grid.addWidget(self.LE_007_BB_01_XLength, 1, 0) self.LE_007_BB_02_YLength = QLineEdit() grid.addWidget(self.LE_007_BB_02_YLength, 1, 1) self.LE_007_BB_03_ZLength = QLineEdit() grid.addWidget(self.LE_007_BB_03_ZLength, 1, 2) self.LE_007_BB_04_Diagonal = QLineEdit() grid.addWidget(self.LE_007_BB_04_Diagonal, 1, 3) self.PB_BoundBox_Tracing = QPushButton() self.PB_BoundBox_Tracing.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_BoundBoxTracing))) # icone dans une variable self.PB_BoundBox_Tracing.clicked.connect(self.on_PB_BoundBox_Tracing) grid.addWidget(self.PB_BoundBox_Tracing, 2, 0) self.PB_00_BoundBox_Volume = QPushButton() self.PB_00_BoundBox_Volume.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_BoundBoxVolume))) # icone dans une variable self.PB_00_BoundBox_Volume.clicked.connect(self.On_PB_00_BoundBox_Volume) grid.addWidget(self.PB_00_BoundBox_Volume, 2, 1) self.CB_01_BoundBox_Text = QCheckBox() self.CB_01_BoundBox_Text.setChecked(switchBoundBoxCreateText) self.CB_01_BoundBox_Text.clicked.connect(self.On_CB_01_BoundBox_Text) grid.addWidget(self.CB_01_BoundBox_Text, 2, 2) self.DS_BoundBoxTextHeigth = QDoubleSpinBox() self.DS_BoundBoxTextHeigth.setMinimum(-0.00000001) self.DS_BoundBoxTextHeigth.setMaximum(99999999.0) #self.DS_BoundBoxTextHeigth.setProperty(u"value", seTBoundBoxTextHeigth) self.DS_BoundBoxTextHeigth.setValue(seTBoundBoxTextHeigth) self.DS_BoundBoxTextHeigth.setDecimals(seTDensiteDecimalNumber) self.DS_BoundBoxTextHeigth.setSingleStep(1) self.DS_BoundBoxTextHeigth.setEnabled(switchBoundBoxCreateText) self.DS_BoundBoxTextHeigth.valueChanged.connect(self.on_DS_BoundBoxTextHeigth_valueChanged) grid.addWidget(self.DS_BoundBoxTextHeigth, 2, 3) ##### Center of: grid = QGridLayout() self.GBox_010_Center_Mass = QGroupBox() if switch_setVisible_GBox_010_Center_Mass == False: self.GBox_010_Center_Mass.setVisible(switch_setVisible_GBox_010_Center_Mass) # visibility self.GBox_010_Center_Mass.setLayout(grid) vbox.addWidget(self.GBox_010_Center_Mass) self.LA_13x = QLabel() self.LA_13x.setStyleSheet(u"QLabel {color : #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_13x, 1, 0) self.LA_13y = QLabel() self.LA_13y.setStyleSheet(u"QLabel {color : #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_13y, 1, 1) self.LA_13z = QLabel() self.LA_13z.setStyleSheet(u"QLabel {color : #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_13z, 1, 2) self.LE_13x = QLineEdit() grid.addWidget(self.LE_13x, 2, 0) self.LE_13y = QLineEdit() grid.addWidget(self.LE_13y, 2, 1) self.LE_13z = QLineEdit() grid.addWidget(self.LE_13z, 2, 2) self.PB_Axis_02 = QPushButton() self.PB_Axis_02.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_02.clicked.connect(self.on_PB_Axis_Center_Shape) grid.addWidget(self.PB_Axis_02, 2, 3) self.LA_14x = QLabel() self.LA_14x.setStyleSheet(u"QLabel {color : #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_14x, 4, 0) self.LA_14y = QLabel() self.LA_14y.setStyleSheet(u"QLabel {color : #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_14y, 4, 1) self.LA_14z = QLabel() self.LA_14z.setStyleSheet(u"QLabel {color : #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_14z, 4, 2) self.LE_14x = QLineEdit() grid.addWidget(self.LE_14x, 5, 0) self.LE_14y = QLineEdit() grid.addWidget(self.LE_14y, 5, 1) self.LE_14z = QLineEdit() grid.addWidget(self.LE_14z, 5, 2) self.PB_Axis_03 = QPushButton() self.PB_Axis_03.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_03.clicked.connect(self.on_PB_Axis_Center_Mass) grid.addWidget(self.PB_Axis_03, 5, 3) ##### Inertia grid = QGridLayout() self.GBox_011_Inertia = QGroupBox() if switch_setVisible_GBox_011_Inertia == False: self.GBox_011_Inertia.setVisible(switch_setVisible_GBox_011_Inertia) # visibility self.GBox_011_Inertia.setLayout(grid) vbox.addWidget(self.GBox_011_Inertia) self.LA_16 = QLabel() grid.addWidget(self.LA_16, 0, 0, 1, 3) self.LE_16_Raw = QLineEdit() # mode RAW grid.addWidget(self.LE_16_Raw, 1, 0, 1, 5) ##oriself.LE_16_M = QLineEdit() # change en spinBox self.SB_16_M = QSpinBox() #self.SB_16_M.setEnabled(False) self.SB_16_M.setMinimum(0) self.SB_16_M.setMaximum(999999) self.SB_16_M.setPrefix(u"mm^") self.SB_16_M.setAlignment(QtCore.Qt.AlignCenter) self.SB_16_M.setValue(setMomentOfInertia_16) self.SB_16_M.valueChanged.connect(self.on_SB_16_M_valueChanged) self.SB_16_M.setStyleSheet(u"QLineEdit {color: #000000; font: bold}") # couleur du texte et gras grid.addWidget(self.SB_16_M, 2, 3, 1, 2) self.LA_16x = QLabel() self.LA_16x.setStyleSheet(u"QLabel {color: #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_16x, 2, 0) self.LA_16y = QLabel() self.LA_16y.setStyleSheet(u"QLabel {color: #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_16y, 2, 1) self.LA_16z = QLabel() self.LA_16z.setStyleSheet(u"QLabel {color: #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_16z, 2, 2) self.LE_16_1x = QLineEdit() self.LE_16_1x.setAlignment(QtCore.Qt.AlignLeft) self.LE_16_1x.cursorPosition() self.LE_16_1x.setCursorPosition(1) grid.addWidget(self.LE_16_1x, 3, 0) self.LE_16_1y = QLineEdit() self.LE_16_1y.setAlignment(QtCore.Qt.AlignLeft) self.LE_16_1y.cursorPosition() self.LE_16_1y.setCursorPosition(1) grid.addWidget(self.LE_16_1y, 3, 1) self.LE_16_1z = QLineEdit() self.LE_16_1z.setAlignment(QtCore.Qt.AlignLeft) self.LE_16_1z.cursorPosition() self.LE_16_1z.setCursorPosition(1) grid.addWidget(self.LE_16_1z, 3, 2) self.LE_16_01 = QLineEdit() self.LE_16_01.setEnabled(False) grid.addWidget(self.LE_16_01, 3, 3) self.PB_Axis_04_16_1 = QPushButton() self.PB_Axis_04_16_1.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_04_16_1.clicked.connect(self.on_PB_Axis_04_16_1) grid.addWidget(self.PB_Axis_04_16_1, 3, 4) self.LE_16_2x = QLineEdit() grid.addWidget(self.LE_16_2x, 4, 0) self.LE_16_2y = QLineEdit() grid.addWidget(self.LE_16_2y, 4, 1) self.LE_16_2z = QLineEdit() grid.addWidget(self.LE_16_2z, 4, 2) self.LE_16_02 = QLineEdit() self.LE_16_02.setEnabled(False) grid.addWidget(self.LE_16_02, 4, 3) self.PB_Axis_05_16_2 = QPushButton() self.PB_Axis_05_16_2.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_05_16_2.clicked.connect(self.on_PB_Axis_05_16_2) grid.addWidget(self.PB_Axis_05_16_2, 4, 4) self.LE_16_3x = QLineEdit() grid.addWidget(self.LE_16_3x, 5, 0) self.LE_16_3y = QLineEdit() grid.addWidget(self.LE_16_3y, 5, 1) self.LE_16_3z = QLineEdit() grid.addWidget(self.LE_16_3z, 5, 2) self.LE_16_03 = QLineEdit() self.LE_16_03.setEnabled(False) grid.addWidget(self.LE_16_03, 5, 3) self.PB_Axis_06_16_3 = QPushButton() self.PB_Axis_06_16_3.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_06_16_3.clicked.connect(self.on_PB_Axis_06_16_3) grid.addWidget(self.PB_Axis_06_16_3, 5, 4) self.LE_16_4x = QLineEdit() self.LE_16_4x.setEnabled(False) grid.addWidget(self.LE_16_4x, 6, 0) self.LE_16_4y = QLineEdit() self.LE_16_4y.setEnabled(False) grid.addWidget(self.LE_16_4y, 6, 1) self.LE_16_4z = QLineEdit() self.LE_16_4z.setEnabled(False) grid.addWidget(self.LE_16_4z, 6, 2) self.LE_16_04 = QLineEdit() self.LE_16_04.setEnabled(False) grid.addWidget(self.LE_16_04, 6, 3) self.PB_Axis_07_16_4 = QPushButton() self.PB_Axis_07_16_4.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_07_16_4.clicked.connect(self.on_PB_Axis_07_16_4) grid.addWidget(self.PB_Axis_07_16_4, 6, 4) self.LA_17 = QLabel() grid.addWidget(self.LA_17, 7, 0, 1, 3) ##self.LE_17_M = QLineEdit() # change en spinBox self.SB_17_M = QSpinBox() #self.SB_17_M.setEnabled(False) self.SB_17_M.setMinimum(0) self.SB_17_M.setMaximum(999999) self.SB_17_M.setPrefix(u"mm2^") self.SB_17_M.setAlignment(QtCore.Qt.AlignCenter) self.SB_17_M.setValue(setMomentOfInertiaMassique_17) self.SB_17_M.valueChanged.connect(self.on_SB_17_M_valueChanged) self.SB_17_M.setAlignment(QtCore.Qt.AlignCenter) self.SB_17_M.setStyleSheet(u"QLineEdit {color: #000000; font: bold}") # couleur du texte et gras grid.addWidget(self.SB_17_M, 8, 3, 1, 2) self.LA_17x = QLabel() self.LA_17x.setStyleSheet(u"QLabel {color: #ff0000; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_17x, 8, 0) self.LA_17y = QLabel() self.LA_17y.setStyleSheet(u"QLabel {color: #008500; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_17y, 8, 1) self.LA_17z = QLabel() self.LA_17z.setStyleSheet(u"QLabel {color: #0000ff; font: bold}") # couleur du texte et gras grid.addWidget(self.LA_17z, 8, 2) self.LE_17_1x = QLineEdit() grid.addWidget(self.LE_17_1x, 9, 0) self.LE_17_1y = QLineEdit() grid.addWidget(self.LE_17_1y, 9, 1) self.LE_17_1z = QLineEdit() grid.addWidget(self.LE_17_1z, 9, 2) self.PB_Axis_08_17_1 = QPushButton() self.PB_Axis_08_17_1.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_08_17_1.clicked.connect(self.on_PB_Axis_08_17_1) grid.addWidget(self.PB_Axis_08_17_1, 9, 4) self.LE_17_2x = QLineEdit() grid.addWidget(self.LE_17_2x, 10, 0) self.LE_17_2y = QLineEdit() grid.addWidget(self.LE_17_2y, 10, 1) self.LE_17_2z = QLineEdit() grid.addWidget(self.LE_17_2z, 10, 2) self.PB_Axis_09_17_2 = QPushButton() self.PB_Axis_09_17_2.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_09_17_2.clicked.connect(self.on_PB_Axis_09_17_2) grid.addWidget(self.PB_Axis_09_17_2, 10, 4) self.LE_17_3x = QLineEdit() grid.addWidget(self.LE_17_3x, 11, 0) self.LE_17_3y = QLineEdit() grid.addWidget(self.LE_17_3y, 11, 1) self.LE_17_3z = QLineEdit() grid.addWidget(self.LE_17_3z, 11, 2) self.PB_Axis_10_17_3 = QPushButton() self.PB_Axis_10_17_3.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_10_17_3.clicked.connect(self.on_PB_Axis_10_17_3) grid.addWidget(self.PB_Axis_10_17_3, 11, 4) self.PB_Axis_11_17_4 = QPushButton() self.PB_Axis_11_17_4.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05))) # icone dans une variable self.PB_Axis_11_17_4.clicked.connect(self.on_PB_Axis_11_17_4) grid.addWidget(self.PB_Axis_11_17_4, 12, 4) self.LA_determinant = QLabel() grid.addWidget(self.LA_determinant, 13, 0, 1, 1) self.LE_18_determinant = QLineEdit() grid.addWidget(self.LE_18_determinant, 13, 1, 1, 4) self.LA_determinantDecimal = QLabel() grid.addWidget(self.LA_determinantDecimal, 14, 0, 1, 1) self.LE_18_determinantDecim = QLineEdit() grid.addWidget(self.LE_18_determinantDecim, 14, 1, 1, 4) #### Disabled Module (SpreadSheet) grid = QGridLayout() self.GBox_012_SpreadSheet = QGroupBox() if switch_setVisible_GBox_012_SpreadSheet == False: self.GBox_012_SpreadSheet.setVisible(switch_setVisible_GBox_012_SpreadSheet) # visibility self.GBox_012_SpreadSheet.setCheckable(True) self.GBox_012_SpreadSheet.setChecked(False) self.GBox_012_SpreadSheet.setStyleSheet(u"QGroupBox {color : #ff0000}") self.GBox_012_SpreadSheet.clicked.connect(self.on_GBox_012_SpreadSheet) self.GBox_012_SpreadSheet.setLayout(grid) vbox.addWidget(self.GBox_012_SpreadSheet) self.tableWidget = QTableWidget() # self.GBox_012_SpreadSheet self.tableWidget.setIconSize(QtCore.QSize(15, 15)) self.tableWidget.setRowCount(RowCount) self.tableWidget.setColumnCount(8) # number of columns self.tableWidget.horizontalHeader().setVisible(False) self.tableWidget.horizontalHeader().setDefaultSectionSize(100) self.tableWidget.horizontalHeader().setMinimumSectionSize(15) self.tableWidget.verticalHeader().setVisible(True) self.tableWidget.verticalHeader().setCascadingSectionResizes(False) self.tableWidget.verticalHeader().setDefaultSectionSize(20) self.tableWidget.verticalHeader().setMinimumSectionSize(20) grid.addWidget(self.tableWidget, 0, 0, 4, 4) #### SpreadSheet (options CSV debut) grid = QGridLayout() self.GBox_013_SpreadSheet_Creation = QGroupBox() if switch_setVisible_GBox_013_SpreadSheet_Creation == False: self.GBox_013_SpreadSheet_Creation.setVisible(switch_setVisible_GBox_013_SpreadSheet_Creation) # visibility self.GBox_013_SpreadSheet_Creation.setLayout(grid) vbox.addWidget(self.GBox_013_SpreadSheet_Creation) #### SpreadSheet dans le document self.PB_03_Create_SpreadSheet = QPushButton() self.PB_03_Create_SpreadSheet.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_SpreadSheet))) # icone dans une variable self.PB_03_Create_SpreadSheet.clicked.connect(self.on_PB_03_Create_SpreadSheet_clicked) grid.addWidget(self.PB_03_Create_SpreadSheet, 0, 0, 1, 2) self.LE_SpreadSheet = QLineEdit() self.LE_SpreadSheet.setText(newSpreadSheetName) self.LE_SpreadSheet.textChanged.connect(self.on_LE_SpreadSheet_Pressed) grid.addWidget(self.LE_SpreadSheet, 0, 2, 1, 2) self.PB_SpreadSheet_Refresh = QPushButton() self.PB_SpreadSheet_Refresh.clicked.connect(self.on_PB_SpreadSheet_clicked) grid.addWidget(self.PB_SpreadSheet_Refresh, 1, 0, 1, 2) self.ComboB_SpreadSheet = QComboBox() self.ComboB_SpreadSheet.currentTextChanged.connect(self.On_ComboB_SpreadSheet) grid.addWidget(self.ComboB_SpreadSheet, 1, 2, 1, 2) #### SpreadSheet sur disque self.PB_01_Read_SpreadSheet = QPushButton() self.PB_01_Read_SpreadSheet.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_04))) # icone dans une variable self.PB_01_Read_SpreadSheet.clicked.connect(self.on_PB_01_Read_SpreadSheet_clicked) grid.addWidget(self.PB_01_Read_SpreadSheet, 2, 0, 1, 1) self.PB_02_Save_SreadSheet = QPushButton() self.PB_02_Save_SreadSheet.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_03))) # icone dans une variable self.PB_02_Save_SreadSheet.clicked.connect(self.on_PB_02_Save_SreadSheet_clicked) grid.addWidget(self.PB_02_Save_SreadSheet, 2, 1, 1, 1) self.RB_01_Tabulation = QRadioButton() self.RB_01_Tabulation.setChecked(True) self.RB_01_Tabulation.clicked.connect(self.on_RB_Separation) grid.addWidget(self.RB_01_Tabulation, 3, 0) self.RB_02_Virgule = QRadioButton() self.RB_02_Virgule.clicked.connect(self.on_RB_Separation) grid.addWidget(self.RB_02_Virgule, 3, 1) self.RB_03_Point_Virgule = QRadioButton() self.RB_03_Point_Virgule.clicked.connect(self.on_RB_Separation) grid.addWidget(self.RB_03_Point_Virgule, 3, 2) self.RB_04_Espace = QRadioButton() self.RB_04_Espace.clicked.connect(self.on_RB_Separation) grid.addWidget(self.RB_04_Espace, 3, 3) #options CSV fin #### Main grid = QGridLayout() self.GBox_014_Main_Tools = QGroupBox() if switch_setVisible_GBox_014_Main_Tools == False: self.GBox_014_Main_Tools.setVisible(switch_setVisible_GBox_014_Main_Tools) # visibility self.GBox_014_Main_Tools.setLayout(grid) vbox.addWidget(self.GBox_014_Main_Tools) self.CB_01_Info = QCheckBox() self.CB_01_Info.setChecked(switchDisplayInfoObject) self.CB_01_Info.clicked.connect(self.on_CB_01_Info) grid.addWidget(self.CB_01_Info, 0, 0, 1, 2) self.CB_02_Point = QCheckBox() self.CB_02_Point.setChecked(switchCreatePoint) self.CB_02_Point.clicked.connect(self.on_CB_02_Point) grid.addWidget(self.CB_02_Point, 0, 1) self.CB_03_Axis = QCheckBox() self.CB_03_Axis.setChecked(switchCreateAxis) #False self.CB_03_Axis.clicked.connect(self.on_CB_03_Axis) grid.addWidget(self.CB_03_Axis, 0, 2) self.CB_04_Plane = QCheckBox() self.CB_04_Plane.setChecked(switchCreatePlane) #False self.CB_04_Plane.clicked.connect(self.on_CB_04_Plane) grid.addWidget(self.CB_04_Plane, 0, 3) self.RB_00_ClipBoard = QRadioButton() if seTMemoClipBoard == 0: self.RB_00_ClipBoard.setChecked(True) self.RB_00_ClipBoard.clicked.connect(self.on_RB_00_ClipBoard) grid.addWidget(self.RB_00_ClipBoard, 1, 0) self.RB_01_ClipBoard = QRadioButton() if seTMemoClipBoard == 1: self.RB_01_ClipBoard.setChecked(True) self.RB_01_ClipBoard.clicked.connect(self.on_RB_01_ClipBoard) grid.addWidget(self.RB_01_ClipBoard, 1, 1) self.RB_02_ClipBoard = QRadioButton() if seTMemoClipBoard == 2: self.RB_02_ClipBoard.setChecked(True) self.RB_02_ClipBoard.clicked.connect(self.on_RB_02_ClipBoard) grid.addWidget(self.RB_02_ClipBoard, 1, 2) self.RB_03_ClipBoard = QRadioButton() if seTMemoClipBoard == 3: self.RB_03_ClipBoard.setChecked(True) self.RB_03_ClipBoard.clicked.connect(self.on_RB_03_ClipBoard) grid.addWidget(self.RB_03_ClipBoard, 1, 3) self.CB_05_Position = QCheckBox() self.CB_05_Position.setChecked(False) if seTPositionFlyRightLeft == 1: self.CB_05_Position.setVisible(False) elif seTPositionFlyRightLeft == 2: self.CB_05_Position.setChecked(False) else: self.CB_05_Position.setChecked(True) self.CB_05_Position.clicked.connect(self.on_CB_05_Position) grid.addWidget(self.CB_05_Position, 2, 0) self.SPBox_arrondi = QSpinBox() self.SPBox_arrondi.setMinimum(-1) self.SPBox_arrondi.setMaximum(1000) #self.SPBox_arrondi.setProperty(u"value", seTDecimalValue) self.SPBox_arrondi.setValue(seTDecimalValue) self.SPBox_arrondi.setSuffix(u" (Decimals)") self.SPBox_arrondi.valueChanged.connect(self.on_SPBox_arrondi_valueChanged) grid.addWidget(self.SPBox_arrondi, 3, 0, 1, 2) self.SP_012_01_Text = QSpinBox() self.SP_012_01_Text.setMinimum(0) self.SP_012_01_Text.setMaximum(99999999) self.SP_012_01_Text.setValue(seTTextHeigthValue) self.SP_012_01_Text.setSuffix(u" (Text Height)") self.SP_012_01_Text.valueChanged.connect(self.on_SP_012_01_Text_valueChanged) grid.addWidget(self.SP_012_01_Text, 3, 2, 1, 2) self.PB_05_Help_Forum = QPushButton() self.PB_05_Help_Forum.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_WebForum))) # icone dans une variable self.PB_05_Help_Forum.clicked.connect(self.on_PB_05_Help_Forum_clicked) grid.addWidget(self.PB_05_Help_Forum, 4, 0, 1, 2) self.PB_06_Help_Wiki = QPushButton() self.PB_06_Help_Wiki.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_WebWiki))) # icone dans une variable self.PB_06_Help_Wiki.clicked.connect(self.on_PB_06_Help_Wiki) grid.addWidget(self.PB_06_Help_Wiki, 4, 2, 1, 2) self.PB_01_Refrech = QPushButton() self.PB_01_Refrech.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_02))) # icone dans une variable self.PB_01_Refrech.clicked.connect(self.on_PB_01_Refrech_clicked) grid.addWidget(self.PB_01_Refrech, 5, 0, 1, 2) self.PB_04_Quit = QPushButton() self.PB_04_Quit.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_01))) # icone dans une variable self.PB_04_Quit.clicked.connect(self.on_PB_04_Quit) grid.addWidget(self.PB_04_Quit, 5, 2, 1, 2) ###########################################################scrollArea self.scrollArea.setWidget(self.scrollAreaWidgetContents_2) ###########################################################scrollArea self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) if seTPositionFlyRightLeft == 1: # 1=MainWindow separate #MainWindow.setWindowTitle(__Title__ + u" rmu (" + __Version__ + ") (" + __Date__ + ")") MainWindow.setCentralWidget(self.centralWidget) MainWindow.move(1000, 120) # deplace la fenetre else: #MainWindow.setWindowTitle(__Title__ + u" rmu (" + __Version__ + ") (" + __Date__ + ")") MainWindow.setWidget(self.centralWidget) platform_node = "" #platform.node() platform_system = platform.system() MainWindow.setWindowTitle(__Title__ + u" rmu (" + __Version__ + ") (" + __Date__ + ") (" + platform_system + ") (" + platform_node + ")") self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): global diffuseColorRF global diffuseColorVF global diffuseColorBF global diffuseColorTF global unsignedEncodeColor global typeLongueur global path global volume_ global longueurObjet global rayonObjet global perimetre global seTDensiteValue global seTIndexUnitWeight global seTIndexUnitLength global materialAssociated global seTMaterialFileName global seTMaterialSavePathName global seTMaterialSuffixCost global seTMaterialPrice global seTMaterialCost global seTTextHeigthValue global directionObj global direcValueAt global direcNormalAt global poids global unitePs global numberEdges global nombreArretesMesh global nombreFacesMesh global nombrePointsMesh global seTUnitSymbolMicro global BsplineDetect global BsplineNombreDeNoeuds global BsplineRayonApproximatif global BsplineCercleToolTip global BsplineNumberElement global BsplineCutLength global BsplinePointsCoor global setBSplineToByArcValue global BSplinetoByArcValeurS global switchCreateLineDiVatNatOnClick global switchSetPlaceholderText global typeNormalAt #self.LA_determinantDecimal = QLabel() #grid.addWidget(self.LA_determinantDecimal, 14, 0, 1, 1) self.on_SP_012_01_Text_valueChanged(seTTextHeigthValue) # actualise text MainWindow.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # PySide cette fonction met la fenetre en avant ##https://doc.qt.io/qt-5/qtwidgets-widgets-windowflags-example.html #MainWindow.setWindowFlags(QtCore.Qt.WindowTitleHint) # 2 absents X grise (fonctionne pas dans ComboView et desactive WindowStaysOnTopHint) #MainWindow.setWindowFlags(QtCore.Qt.WindowContextHelpButtonHint)# WindowCloseButtonHint , setCancelButton(None) MainWindow.setWindowIcon(QtGui.QIcon(path+'FCInfo.png')) # icone dans fichier pointPlanAxesTexte = ( u"Create Point or Axis or Plane or Clipboard" + "\n" + u"Mouse coordinates" + "\n\n" + u"The coordinates are cliped to this form" + "\n" + u"FreeCAD.Vector(-24.0, 240.0, 7.0)" + "\n" + u"X, Y, Z (separated by comma)" + "\n" + u"X Y Z (separated by space)" + "\n" + u"depend option on choice" + "\n" ) #### self.GBox_001_Document.setTitle(u"Document") self.LE_1.setText(document_) self.LE_1.setToolTip(u"Name of the active document.") self.LE_2.setText(object_Label) self.LE_2.setToolTip(u"Label of the selected object.") self.LE_2a.setText(object_Name) self.LE_2a.setToolTip(u"Internal name of the element.") self.LE_3.setText(str(subElemName)) self.LE_3.setToolTip(u"Name of the selected SubObject.") self.LE_3a.setText(str(typeObject)) self.LE_3a.setToolTip(u"Type of the selected (Shape) object.") self.LE_4.setText(str(object_Type)) self.LE_4.setToolTip(u"TypeID of the selected Object.") # self.LE_Curve.setText(str(curveObject)) # self.LE_Curve.setToolTip(u"Curve.") self.LA_1.setText(u"Document name") self.LA_2.setText(u"Label / Internal-Name") self.LA_3.setText(u"Sub.Shape / Type") self.LA_4.setText(u"Shape.TypeID / TypeID") # self.LA_Curve.setText(u"Curve") #### self.GBox_002_Coordinate_Mouse.setTitle(u"Coordinate click mouse") self.LA_4x.setText(u"X") self.LA_4y.setText(u"Y") self.LA_4z.setText(u"Z") self.LE_4x.setText(str(Around(position0))) self.LE_4x.setToolTip(u"X coordinate of the click of the mouse.") self.LE_4y.setText(str(Around(position1))) self.LE_4y.setToolTip(u"Y coordinate of the click of the mouse.") self.LE_4z.setText(str(Around(position2))) self.LE_4z.setToolTip(u"Z coordinate of the click of the mouse.") self.PB_Axis_01.setToolTip(pointPlanAxesTexte) #### self.GBox_003_Color.setTitle(u"Color on point") self.LA_1_Red.setText(u"Red") self.LA_2_Green.setText(u"Green") self.LA_3_Blue.setText(u"Blue") self.LA_4_Transparent.setText(u"Transparency") self.LE_CRed.setText(str(Around(diffuseColorRF))) self.LE_CRed.setToolTip(u"Color Red on clicked point (format FreeCAD)" + "\n" + u"The frame is colored with the percent of red displayed") self.LE_CRed.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb("+str(int(diffuseColorRF*255.0))+", 0, 0)}") # white and red self.LE_CGreen.setText(str(Around(diffuseColorVF))) self.LE_CGreen.setToolTip(u"Color Green on clicked point (format FreeCAD)" + "\n" + u"The frame is colored with the percent of green displayed") self.LE_CGreen.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb(0, "+str(int(diffuseColorVF*255.0))+", 0)}") # white and green self.LE_CBlue.setText(str(Around(diffuseColorBF))) self.LE_CBlue.setToolTip(u"Color Blue on clicked point (format FreeCAD)" + "\n" + u"The frame is colored with the percent of blue displayed") self.LE_CBlue.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb(0, 0, "+str(int(diffuseColorBF*255.0))+")}") # white and blue self.LE_Transparent.setText(str(Around(diffuseColorTF))) self.LE_Transparent.setToolTip(u"Transparency on clicked point (format FreeCAD)") self.LE_ConversionUnsigned.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb("+str(int(diffuseColorRF*255.0))+","+str(int(diffuseColorVF*255.0))+","+str(int(diffuseColorBF*255.0))+")}") # white self.LE_ConversionUnsigned.setText(str(unsignedEncodeColor)) self.LE_ConversionUnsigned.setToolTip(u'Give different mode codification of colors' + '\n' u'The frame is colored with the same color on point clicked' + '\n\n' + u'Example displayed :' + '\n\n' u'1:\t\t2:\t\t3:\t\t4:\t\t5:' + '\n' u'"86057986"\t, "#052123"\t, "0x52123"\t, "5,33,35"\t, "0.0196,0.1294,0.1373"' + '\n\n' u'1: 86057986\t: Mode RVBA Int unsigned (format in FreeCAD preferences) Alpha = 255' + '\n' u'2: #052123\t: Mode RVB Hexadecimal (Qt setStyleSheet("color : #052123")' + '\n' u'3: 0x052123\t: Mode RVB Hexadecimal (Python: hex(336163)' + '\n' u'4: RVB decim\t: Mode RVB (Qt setStyleSheet("background-color: rgb(5, 33, 36)"))' + '\n' u'5: RVB float\t: Mode RVB format float de 0.0 to 1.0' + '\n' u'\t\t(The number of decimals depend of the option "x (Decimals)") (seTDecimalValue)' + '\n\n') self.CBox_Color_FaceObject.setText(u"Sub.Objet") self.CBox_Color_FaceObject.setToolTip(u"Change the color of the selected object or subobject" + "\n" + u"If this box is activated the face or sub Object selected is modified or duplicated" + "\n" + u"If it is not activated (default) the object is modified (color) or duplicated") self.PB_ChangeColor.setText(u"Coul. Obj") self.PB_ChangeColor.setToolTip(u"Change the color of the shape or the face depend of the choice" + "\n" u"In case object Mesh or Points the complete object is colored" + "\n\n") #u"If a point or an edge is selected, the complete object is colored") self.PB_CreateFace.setText(u"Dupl. Obj") self.PB_CreateFace.setToolTip(u"Duplicates the face or the object depend to the chosen option" + "\n" + u"In the case of a Mesh object or Points the complete object is colored" + "\n" + u"Duplicate a Mesh object keeps the original and creates a solid shape" + "\n" + u"Duplicate a Points object keeps the original and creates a copy") self.SBox_Transparence.setToolTip(u"Degree of transparency of the selected face or object" + "\n" + u"depend on the option chosen" + "\n" + u"0 = opaque / 100 = transparent") #### self.GBox_004_Object_Mesh.setTitle(u"Components") # Mesh or Points self.LA_N_Edges.setText(u"Edges") self.LE_N_Edges.setText(str(nombreArretesMesh)) self.LE_N_Edges.setToolTip(u"Number of Edges in object Mesh") #self.PB_Axis_01.setText(u"Axis") self.LA_N_Facets.setText(u"Faces") self.LE_N_Facets.setText(str(nombreFacesMesh)) self.LE_N_Facets.setToolTip(u"Number of Faces in object objet Mesh") self.LA_N_Points.setText(u"Points") self.LE_N_Points.setText(str(nombrePointsMesh)) self.LE_N_Points.setToolTip(u"Number of Points in object") # mesh and Points #### self.GBox_005_Value_Unit.setTitle(u"Units") self.LA_5a.setText(u"Units") #http://fr.wikipedia.org/wiki/Unit%C3%A9s_de_mesure_anglo-saxonnes self.comboBox.setToolTip(u"Selects a unit of length.") # self.comboBox.setCurrentIndex(seTIndexUnitLength) self.comboBox.setCurrentIndex(6) self.comboBox.setItemText(0, u"km") #km # = 1000000 self.comboBox.setItemText(1, u"hm") #hm # = 100000 self.comboBox.setItemText(2, u"dam") #dam# = 10000 self.comboBox.setItemText(3, u"m") #m # = 1000 self.comboBox.setItemText(4, u"dm") #dm # = 100 self.comboBox.setItemText(5, u"cm") #cm # = 10 self.comboBox.setItemText(6, u"mm") #mm # = 1 self.comboBox.setItemText(7, seTUnitSymbolMicro + u"m")#Um#= 0.001 micro hex="\xB5", html=<span>µ</span> self.comboBox.setItemText(8, u"nm") #nm # * = 0.000001 nano self.comboBox.setItemText(9, u"pm") #pm # = 0.000000001 pico self.comboBox.setItemText(10, u"fm") #fm # = 0.000000000001 femto self.comboBox.setItemText(11, u"inch") #in # inch pouce = 25.400 self.comboBox.setItemText(12, u"link") #lk # link chainon = 201.168 self.comboBox.setItemText(13, u"foot") #ft # foot pied = 304.800 self.comboBox.setItemText(14, u"yard") #yd # yard verge = 914.400 self.comboBox.setItemText(15, u"perch") #rd # rod ou perch perche = 5029.200 self.comboBox.setItemText(16, u"chain") #ch # chain chaine = 20116.800 self.comboBox.setItemText(17, u"furlong") #fur# furlong = 201168 self.comboBox.setItemText(18, u"mile") #mi # mile = 1609344 self.comboBox.setItemText(19, u"league") #lea# league lieue = 4828032 self.comboBox.setItemText(20, u"nautique") #nmi# mile nautique = 1852000 # self.LA_6.setText(u"Perim. shape") self.LA_5.setText(typeLongueur) try: self.LE_5.setText(str(Around(float(longueurObjet) * float(uniteM)))+ " " +uniteMs) except Exception: self.LE_5.setText(u"") self.LE_5.setToolTip(u"Length of the object." + "\n" u"If the face is selected, the perimeter of the face is displayed.") if (rayonObjet != 0.0) or (str(BsplineDetect) == "<BSplineCurve object>"): self.LE_5b.setVisible(True) self.LA_5b.setVisible(True) if (str(BsplineDetect) == "<BSplineCurve object>"): self.SB_Arc_ToByArcs.setVisible(True) self.SB_Arc_ToByArcs.setToolTip(u"Bspline detected " + "\n" u"Number of element = " + str(BsplineNumberElement) + "\n" + u"Calcul with distance between points " + str(Around(BsplineCutLength * uniteM)) + " " + uniteMs + "\n\n" + u"toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n" u"This value can be modified in the preferences variable : setBSplineToByArcValue" + "\n") self.PB_BSplineCreateNodes.setText(u"Points(" + str(len(BsplinePointsCoor)) + ")") # Node self.PB_BSplineCreateNodes.setToolTip(u"Create on point on Poles (" + str(len(BsplinePointsCoor)) + ") of the BSpline" + "\n\n" u"Command for Shape : Gui.Selection.getSelection()[0].Points" + "\n" u"Command for SubObj : Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve.getPoles()" + "\n\n" u"Hidden Options : " + "\n\n" u"The variables " + "\n\n" u"switchBSplineCreateCircleConstructorAxis" + "\n" u"switchBSplineCreateCircleConstructor" + "\n\n" u"accessible in : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__ + "\n" u"allow to create the circles and the point axes construction of the BSpline" + "\n" u"their number (precision) depends on the value toBiArcs(BSplinetoByArcValeurS)" + "\n" u"actual toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n") self.PB_BSplineCreateNodes.setVisible(True) self.LA_5b.setText(u"Radius BSpline.") self.LE_5b.setText(BsplineRayonApproximatif) self.LE_5b.setToolTip(u"BSpline Radius on point : " + self.SB_Arc_ToByArcs.text()) self.LA_6.setText(u"BSpline Nodes") self.LE_6.setText(str(BsplineNombreDeNoeuds)) self.LE_6.setToolTip(u"Number of nodes of the BSpline.") else: self.SB_Arc_ToByArcs.setVisible(False) self.PB_BSplineCreateNodes.setVisible(False) self.LA_5b.setText(u"Radius") self.LE_5b.setText(str(Around(rayonObjet * float(uniteM))) + " " + uniteMs + (" (dia. " + str(Around(rayonObjet * float(uniteM) * 2.0)) + " " + uniteMs + ")")) self.LE_5b.setToolTip(u"Radius detected and displayed in radius and diameter." u"If one radius of face is detected, it is also displayed") if numberEdges == 1: self.LA_6.setText(u"Circumference (" + str(numberEdges) + ")") else: self.LA_6.setText(u"Perimetre of shape (" + str(numberEdges) + ")") self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) else: self.LA_6.setText(u"Perimetre of shape (" + str(numberEdges) + ")") self.SB_Arc_ToByArcs.setVisible(False) self.PB_BSplineCreateNodes.setVisible(False) self.LE_5b.setVisible(False) self.LA_5b.setVisible(False) rayonObjet = 0.0 try: self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) except Exception: perimetre = 0.0 self.LE_6.setText(str(Around(perimetre))) self.LE_6.setToolTip(u"Perimeter total of the form." + "\n" u"Display the total result of the edges") self.PB_BSplineCreateNodes.setText(u"Points(" + str(len(BsplinePointsCoor)) + ")") # Node self.PB_BSplineCreateNodes.setToolTip(u"Create on point on Poles (" + str(len(BsplinePointsCoor)) + ") of the BSpline" + "\n\n" u"Hidden feature : " + "\n\n" u"Command for Shape : Gui.Selection.getSelection()[0].Points" + "\n" u"Command for SubObj : Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve.getPoles()" + "\n\n" u"Hidden Options : " + "\n\n" u"The variables " + "\n\n" u"switchBSplineCreateCircleConstructorAxis" + "\n" u"switchBSplineCreateCircleConstructor" + "\n\n" u"accessible in : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__ + "\n" u"allow to create the circles and the point axes construction of the BSpline" + "\n" u"their number (precision) depends on the value toBiArcs(BSplinetoByArcValeurS)" + "\n" u"actual toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n") #### self.GBox_006_Inclination.setTitle(u"Inclination") self.GBox_006_Inclination.setToolTip(u"Inclination compared XY, YZ, XZ") self.LA_8a.setText(u"Plane") self.PB_Ra.setText(u"Degrees") self.PB_Ra.setToolTip(u"Toggles between decimal degrees, degrees minutes second" + "\n" u"Radian, Grade, Percent.") self.LA_8a_2.setText(u"Coordinates") self.LA_8xy.setText(u"XY") self.LE_8xy.setText(str(Plan_xy) + " " + uniteAs) self.LE_8xy.setToolTip(u"Angle in the XY plane.") self.LE_8xya.setText(str(Plan_xy_V)) self.LA_8yz.setText(u"YZ") self.LE_8yz.setText(str(Plan_yz) + " " + uniteAs) self.LE_8yz.setToolTip(u"Angle in the YZ plane.") self.LE_8yza.setText(str(Plan_yz_V)) self.LA_8zx.setText(u"ZX") self.LE_8zx.setText(str(Plan_zx) + " " + uniteAs) self.LE_8zx.setToolTip(u"Angle in the ZX plane.") self.LE_8zxa.setText(str(Plan_zx_V)) ## if switchCreateLineDiVatNatOnClick == 0: self.PB_Line_Direction.setText(u"Direction") self.PB_Line_ValueAT.setText(u"ValueAt(0)") self.PB_Line_NormalAT.setText(typeNormalAt) else: self.PB_Line_Direction.setText(u"*Direction") self.PB_Line_ValueAT.setText(u"*ValueAt(0)") self.PB_Line_NormalAT.setText(typeNormalAt) self.PB_Line_Direction.setToolTip(u"Create a line (Yellow) in the displayed direction" + "\n" u"Line is created at point 0,0,0 to Direction (switchCreateLineDiVatNatOnClick = FALSE)" + "\n" u"If switchCreateLineDiVatNatOnClick = True, the line starts at the point clicked by the mouse" + "\n" u"The button is displayed with an asterisk *Direction" + "\n") self.LE_9_Direction.setText(str(directionObj)) self.LE_9_Direction.setToolTip(u"Direction of object" + "\n" u"Direction du point(x1,y1,z1) à point(x2,y2,z2)" + "\n" u"Commande :" + "\n\n" u"edgeObject = Gui.Selection.getSelection()[0].Shape.Edges[0]" + "\n" u"directionObj = edgeObject.Vertexes[1].Point.sub(edgeObject.Vertexes[0].Point)" + "\n\n") self.PB_Line_ValueAT.setToolTip(u"Create a line (Magenta) in the direction ValueAt(0)" + "\n" u"The line is created at point 0,0,0 in the direction ValueAt(0) (switchCreateLineDiVatNatOnClick = FALSE)" + "\n" u"If switchCreateLineDiVatNatOnClick = True, the line starts at the point clicked by the mouse" + "\n" u"The button is displayed with an asterisk *ValueAt(0)" + "\n") self.LE_10_ValueAt.setText(str(direcValueAt)) self.LE_10_ValueAt.setToolTip(u"Returns the value of the vector corresponding to the 3D parameter. " + "\n" u"Command :" + "\n\n" u"Gui.Selection.getSelectionEx()[0].SubObjects[0].Edges[0].valueAt(0)" + "\n\n") self.PB_Line_NormalAT.setToolTip(u"Create a line (Cyan) in the direction NormalAt(0,0)" + "\n" u"The line is created at point 0,0,0 in the NormalAt(0,0) direction (switchCreateLineDiVatNatOnClick = FALSE)" + "\n" u"If switchCreateLineDiVatNatOnClick = True, the line starts at the point clicked by the mouse" + "\n" u"The button is displayed with an asterisk *NormalAt(0,0)" + "\n") self.LE_10b_NormalAt.setText(str(direcNormalAt)) self.LE_10b_NormalAt.setToolTip(u"Returns the value of the parameters of the normal of the selected face" + "\n" u"Command :" + "\n\n" u"Gui.Selection.getSelectionEx()[0].SubObjects[0].Faces[0].normalAt(0,0)" + "\n\n") ## #### self.GBox_012_SpreadSheet.setTitle(u"Details of the form") self.tableWidget.setToolTip(u"Details of the form :" + "\n" u"If the checkBox is checked, a complete scan of the selected form is done" + "\n" u"(Using this option may take a long time for a large object" + "\n" u"a full scan is done with each mouse click (Unchecked by default coloured re))" + "\n\n" u"If not checked the principal data are displayed" + "\n" + "\n" u"Vertexes and details : (Edges) (Faces) (Vertex Faces) ...(Total)" + "\n" u"Scoreboard only the first 200 details of the form are displayed." + "\n" u"All the elements will be visible in the file after saving it.") #### self.GBox_007_Surface_and_Volume.setTitle(u"Area and Volume") self.LA_9.setText(u"Area of the form") self.LE_9a.setText(str(Around(surface)) + " " + uniteSs) self.LE_9a.setToolTip(u"Total area of the form.") self.LA_10.setText(u"Area of the face") self.LE_10a.setText(str(Around(surfaceFace)) + " " + uniteSs) self.LE_10a.setToolTip(u"Area of the face.") self.LA_11.setText(u"Volume of the form") self.LE_11a.setText(str(Around(volume_)) + " " + uniteVs) self.LE_11a.setToolTip(u"Total volume of the form.") self.LA_Unit.setText(u"Unit") self.comboBox_Unit.setCurrentIndex(5) self.comboBox_Unit.setItemText(0, u"tonne") #t # = 1000000 self.comboBox_Unit.setItemText(1, u"quintal") #q # = 100000 self.comboBox_Unit.setItemText(2, u"kilo gram") #kg # = 1000 self.comboBox_Unit.setItemText(3, u"hecto gram") #hg # = 100 self.comboBox_Unit.setItemText(4, u"decagram") #dag # = 10 self.comboBox_Unit.setItemText(5, u"gram") #g # = 1 self.comboBox_Unit.setItemText(6, u"decigram") #dg # = 0.1 self.comboBox_Unit.setItemText(7, u"centigram") #cg # = 0.01 self.comboBox_Unit.setItemText(8, u"milligram") #mg # = 0.001 self.comboBox_Unit.setItemText(9, u"microgram") #Ug # = 0.000001 micro hex="\xB5", html=<span>µ</span> self.comboBox_Unit.setItemText(10, u"nanogram") #ng # = 0.000000001 self.comboBox_Unit.setItemText(11, u"picogram") #pg # = 0.000000000001 self.comboBox_Unit.setItemText(12, u"femtogram") #fg # = 0.000000000000001 femtogram self.comboBox_Unit.setItemText(13, u"grain") #gr # = 0.06479891 g self.comboBox_Unit.setItemText(14, u"drachm") #dr # = 1.7718451953125 g self.comboBox_Unit.setItemText(15, u"once") #oz # = 28.3495231250 g self.comboBox_Unit.setItemText(16, u"once troy") #oz t # = 31.1034768 g once troy self.comboBox_Unit.setItemText(17, u"livre troy") #lb t # = 373.2417216 g livre de troy self.comboBox_Unit.setItemText(18, u"livre av") #lb # = 453.59237 g livre avoirdupois pound self.comboBox_Unit.setItemText(19, u"stone") #st # = 6350.29318 g self.comboBox_Unit.setItemText(20, u"quarter") #qtr # = 12700.58636 g self.comboBox_Unit.setItemText(21, u"hundredweight") #cwt # = 50802.34544 g self.comboBox_Unit.setItemText(22, u"tonneau fr") # # = 0.00000102145045965 g self.comboBox_Unit.setItemText(23, u"carat") #ct # = 0.2 g self.comboBox_Unit.setToolTip(u"Select a unit of mass.") self.LA_Weight.setText(u"Mass") self.LA_Density.setText(u"Density") self.LE_12a.setText(str(Around(poids)) + " " + unitePs) self.LE_12a.setToolTip(u"Mass of the form in the selected unit.") seTMaterialCost = ((volume_ * seTDensiteValue * seTMaterialPrice) / 1000000.0) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial self.DS_Density.setToolTip(u"Give the volume density in Kg by dm3.") self.GBox_008_Cost_And_Price.setTitle(u"Cost") self.LA_Cost.setText(u"Cost total") self.LA_Price.setText(u"Price (kg/dm3)") self.PB_Del_Material.setText(u"Delete (" + str(self.CBox_Materiel.currentIndex() + 1) + "/" + str(len(materialAssociated)) + ")") self.PB_Del_Material.setToolTip(u"Delete the curent material ") self.PB_Save_Material.setText(u"Save") self.PB_Save_Material.setToolTip(u"Save the curent material" + "\n" u"The material is also saved with the Exit button") self.LA_Material.setText(u"Material") self.CBox_Materiel.setToolTip(u"The material data is saved in the macro location (by default)" + "\n\n" u"First run one Material file is created with 20 components" + "\n" u"(You can adding all components material you want)" + "\n" u"Location : " + seTMaterialSavePathName + " file name : " + seTMaterialFileName + "\n" u"Actual : " + str(len(materialAssociated)) + " materials listed" + "\n" u"If the file is deleted or empity one new file of material is created" + "\n" u"with the basic material include in the macro") self.LA_NewMaterial.setText(u"New material or editing") self.LE_Materiel.setToolTip(u"Enter your new material and press enter for validate" + "\n\n" u"Format : newNameMaterial, Density, Price (by kg), Info" + "\n\n" u"newNameMaterial : the material name" + "\n" u"Density \t : density of the material in Kg by dm3" + "\n" u"Price \t : price of the material" + "\n" u"Info \t : info of the material of other" + "\n\n" u"Each field is separated by a comma" + "\n\n" u"Other format is not accepted and the background is coloured in red" + "\n" u"The current material is displayed you can change or complete the data material" + "\n" u"If the name is changed, on new material is created" + "\n") #### self.GBox_009_BoundBox.setTitle(u"BoundBox") self.LA_007_01_Xlength.setText(u"X Length") self.LA_007_02_Ylength.setText(u"Y Length") self.LA_007_03_Zlength.setText(u"Z Length") self.LA_007_04_Diagonallength.setText(u"Diagonal Length") self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_01_XLength.setToolTip(u"Dimensions of the form:" + "\n" u"Direction X") self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setToolTip(u"Dimensions of the form:" + "\n" u"Direction Y") self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setToolTip(u"Dimensions of the form:" + "\n" u"Direction Z") self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setToolTip(u"Dimensions diagonal boundBox of the form.") self.PB_BoundBox_Tracing.setText(u"Tracing") self.PB_BoundBox_Tracing.setToolTip(u"Trace the boundBox edge of the shape.") self.PB_00_BoundBox_Volume.setText(u"Volume") self.PB_00_BoundBox_Volume.setToolTip(u"Create BoundBox Volume of the shape.") self.CB_01_BoundBox_Text.setText(u"Text Dim.") self.CB_01_BoundBox_Text.setToolTip(u"Create Dimension on BoundBox") #### self.GBox_010_Center_Mass.setTitle(u"Centre of :") self.LA_13x.setText(u"BoundBox X") self.LA_13y.setText(u"BoundBox Y") self.LA_13z.setText(u"BoundBox Z") self.LE_13x.setText(str(Around(boundBoxCenterX * uniteM)) + " " + uniteMs) self.LE_13x.setToolTip(u"X coordinate of the center of the shape.") self.LE_13y.setText(str(Around(boundBoxCenterY * uniteM)) + " " + uniteMs) self.LE_13y.setToolTip(u"Y coordinate of the center of the shape.") self.LE_13z.setText(str(Around(boundBoxCenterZ * uniteM)) + " " + uniteMs) self.LE_13z.setToolTip(u"Z coordinate of the center of the shape.") #self.PB_Axis_02.setText(u"Axis") self.PB_Axis_02.setToolTip(pointPlanAxesTexte) self.LA_14x.setText(massOrGravity + u" X") self.LA_14y.setText(massOrGravity + u" Y") self.LA_14z.setText(massOrGravity + u" Z") self.LE_14x.setText(str(Around(CenterOfMassX * uniteM)) + " " + uniteMs) self.LE_14x.setToolTip(u"X coordinate of the center of " + massOrGravity) self.LE_14y.setText(str(Around(CenterOfMassY * uniteM)) + " " + uniteMs) self.LE_14y.setToolTip(u"Y coordinate of the center of " + massOrGravity) self.LE_14z.setText(str(Around(CenterOfMassZ * uniteM)) + " " + uniteMs) self.LE_14z.setToolTip(u"Z coordinate of the center of " + massOrGravity) #self.PB_Axis_03.setText(u"Axis") self.PB_Axis_03.setToolTip(pointPlanAxesTexte) #### self.GBox_011_Inertia.setTitle(u"Inertia") self.GBox_011_Inertia.setStyleSheet(u"QToolTip { color: #ffffff; font: bold 14px; background-color: #ff0000; border: 2px solid white; }") self.GBox_011_Inertia.setToolTip(u"<html> <body>" u"############################################################################################################" + "<br/>" u" INFORMATION" + "<br/>" u" VERIFY THIS SECTION BY PERSON KNOWING THE INERTIA" + "<br/>" u" and thanks post your knowledges in the forum tread if it is not correct" + "<br/>" u" http://forum.freecadweb.org/viewtopic.php?f=10&t=3185 " + "<br/>" u" ###########" u"<p style=color:Yellow >" u" * Use at your own risk. The author assumes no liability for data loss. *" u"</p>" u" ###########" + "<br/>" u"The exposant value 1 (Raw) correspond mode base of FreeCAD" + "<br/>" u"Code used :" u"<p style=color:DarkBlue >" u"####" + "<br/>" u"Matrix = Gui.Selection.getSelection()[0].Shape.MatrixOfInertia # (complete data .A[0] to .A[11])" + "<br/>" u"MatrixX1 = Gui.Selection.getSelection()[0].Shape.MatrixOfInertia.A[0] # (first field, first data)" + "<br/>" u"#volume = Gui.Selection.getSelection()[0].Shape.Volume" + "<br/>" u"uniteV = 1.0 # mm3 base FreeCAD ## (kilo = 0.000000000000000001)" + "<br/>" u"uniteS = 1.0 # mm2 base FreeCAD ## (kilo = 0.000000000001)" + "<br/>" u"uniteM = 1.0 # mm base FreeCAD ## (kilo = 0.000001)" + "<br/>" u"uniteP = 1.0 # gram base FreeCAD## (kilo = 0.001)" + "<br/>" u"setMomentOfInertia_16 = 2 # exposant Moment of inertia value " + "<br/>" u"setMomentOfInertiaMassique_17 = 2 # exposant Moment of inertia massique value" + "<br/>" u"seTDensiteValue = 7.8700 # kg by dm3 (iron)" + "<br/>" u"MatrixX1_16 = (MatrixX1*uniteS)**setMomentOfInertia_16" + "<br/>" u"MatrixX1_17 = (MatrixX1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0))" + "<br/>" u"####" u"</p>" u" ###########" + "<br/>" u"The moment of inertia, otherwise known as the angular mass or" + "<br/>" u"rotational inertia, of a rigid body is a tensor that determines" + "<br/>" u"the torque needed for a desired angular acceleration about a rotational axis." + "<br/>" u"It depends on the body's mass distribution and the axis chosen," + "<br/>" u"with larger moments requiring more torque to change the body's rotation." + "<br/>" u"see https://en.wikipedia.org/wiki/Moment_of_inertia " + "<br/>" u"############################################################################################################" u"</html> </body>") self.LA_16.setText(u"Moment of inertia") self.LE_16_Raw.setText("Raw : " + MatrixOfInertiaRaw) self.LE_16_Raw.setCursorPosition(0) self.LA_16x.setText(u"X") self.LA_16y.setText(u"Y") self.LA_16z.setText(u"Z") #self.SB_16_M.setText(uniteMs + "^5") self.SB_16_M.setPrefix(uniteMs + "^") self.SB_16_M.setValue(setMomentOfInertia_16) self.LE_16_1x.setText(str(Around(MatrixX1))) self.LE_16_1y.setText(str(Around(MatrixY1))) self.LE_16_1z.setText(str(Around(MatrixZ1))) self.LE_16_01.setText(str(Around(Matrix_1))) self.PB_Axis_04_16_1.setToolTip(pointPlanAxesTexte) self.LE_16_2x.setText(str(Around(MatrixX2))) self.LE_16_2y.setText(str(Around(MatrixY2))) self.LE_16_2z.setText(str(Around(MatrixZ2))) self.LE_16_02.setText(str(Around(Matrix_2))) self.LE_16_3x.setText(str(Around(MatrixX3))) self.LE_16_3y.setText(str(Around(MatrixY3))) self.LE_16_3z.setText(str(Around(MatrixZ3))) self.LE_16_03.setText(str(Around(Matrix_3))) self.PB_Axis_05_16_2.setToolTip(pointPlanAxesTexte) self.PB_Axis_06_16_3.setToolTip(pointPlanAxesTexte) self.LE_16_4x.setText(str(Around(Matrix12))) self.LE_16_4y.setText(str(Around(Matrix13))) self.LE_16_4z.setText(str(Around(Matrix14))) self.LE_16_04.setText(str(Around(Matrix15))) self.PB_Axis_07_16_4.setToolTip(pointPlanAxesTexte) ## self.LA_17.setText(u"Moment of inertia massique") self.LA_17x.setText(u"X") self.LA_17y.setText(u"Y") self.LA_17z.setText(u"Z") self.LA_determinant.setText(u"Determinant") self.LA_determinantDecimal.setText(u"Determinant Dec.") #self.LE_17_M.setText(unitePs+uniteSs) self.SB_17_M.setPrefix(unitePs + uniteSs + "^") self.SB_17_M.setValue(setMomentOfInertiaMassique_17) self.LE_17_1x.setText(str(Around(MatrixX1*seTDensiteValue))) self.LE_17_1y.setText(str(Around(MatrixY1*seTDensiteValue*uniteP))) self.LE_17_1z.setText(str(Around(MatrixZ1*seTDensiteValue))) self.PB_Axis_08_17_1.setToolTip(pointPlanAxesTexte) self.LE_17_2x.setText(str(Around(MatrixX2*seTDensiteValue))) self.LE_17_2y.setText(str(Around(MatrixY2*seTDensiteValue))) self.LE_17_2z.setText(str(Around(MatrixZ2*seTDensiteValue))) self.PB_Axis_09_17_2.setToolTip(pointPlanAxesTexte) self.LE_17_3x.setText(str(Around(MatrixX3*seTDensiteValue))) self.LE_17_3y.setText(str(Around(MatrixY3*seTDensiteValue))) self.LE_17_3z.setText(str(Around(MatrixZ3*seTDensiteValue))) self.PB_Axis_10_17_3.setToolTip(pointPlanAxesTexte) self.PB_Axis_11_17_4.setToolTip(pointPlanAxesTexte) self.LE_18_determinant.setText(str(DeterminantM)) self.LE_18_determinant.setToolTip(u"Determinant of Matrix." + "\n" u"In linear algebra, the determinant is a useful value that can be computed" + "\n" u"from the elements of a square matrix." + "\n" u"The determinant of a matrix A is denoted det(A), det A, or " + chr(124) + "A"+ chr(124)+ "." + "\n" u"It can be viewed as the scaling factor of the transformation described by the matrix." + "\n" u"see https://en.wikipedia.org/wiki/Determinant") self.LE_18_determinantDecim.setText(str(decimal.Decimal(DeterminantM))) self.LE_18_determinantDecim.setToolTip(u"Determinant Decimal.") if switch_Set_Placeholder_Text == True: self.LE_1.setPlaceholderText(u"Document name") self.LE_2.setPlaceholderText(u"Label") self.LE_2a.setPlaceholderText(u"Internal name") self.LE_3.setPlaceholderText(u"Sub objet") self.LE_3a.setPlaceholderText(u"Type") self.LE_4.setPlaceholderText(u"TypeID") self.LE_4x.setPlaceholderText(u"X Mouse") self.LE_4y.setPlaceholderText(u"Y Mouse") self.LE_4z.setPlaceholderText(u"Z Mouse") self.LE_N_Edges.setPlaceholderText(u"Number of Edge(s)") self.LE_N_Facets.setPlaceholderText(u"Number of Face(s)") self.LE_N_Points.setPlaceholderText(u"Number of Points") self.LE_CRed.setPlaceholderText(u"Red") self.LE_CGreen.setPlaceholderText(u"Green") self.LE_CBlue.setPlaceholderText(u"Blue") self.LE_Transparent.setPlaceholderText(u"Transparency") self.LE_ConversionUnsigned.setPlaceholderText(u"Codage of colors") self.LE_5.setPlaceholderText(u"Length") self.LE_5b.setPlaceholderText(u"Radius") self.LE_6.setPlaceholderText(u"Perimeter") self.LE_8xy.setPlaceholderText(u"Degrees") self.LE_8yz.setPlaceholderText(u"Degrees") self.LE_8zx.setPlaceholderText(u"Degrees") self.LE_8xya.setPlaceholderText(u"XY Angle") self.LE_8yza.setPlaceholderText(u"YZ Angle") self.LE_8zxa.setPlaceholderText(u"ZX Angle") self.LE_9_Direction.setPlaceholderText(u"Direction") self.LE_10_ValueAt.setPlaceholderText(u"Vector") self.LE_10b_NormalAt.setPlaceholderText(u"NormalAt") self.LE_9a.setPlaceholderText(u"Total Area") self.LE_10a.setPlaceholderText(u"Face Area") self.LE_11a.setPlaceholderText(u"Volume") self.LE_12a.setPlaceholderText(u"Mass") self.LE_Cost.setPlaceholderText(u"Price") self.LE_Materiel.setPlaceholderText(u"Material") self.LE_007_BB_01_XLength.setPlaceholderText(u"X Length") self.LE_007_BB_02_YLength.setPlaceholderText(u"Y Length") self.LE_007_BB_03_ZLength.setPlaceholderText(u"Z Length") self.LE_007_BB_04_Diagonal.setPlaceholderText(u"Diagonal Length") self.LE_13x.setPlaceholderText(u"X Coordinate") self.LE_13y.setPlaceholderText(u"Y Coordinate") self.LE_13z.setPlaceholderText(u"Z Coordinate") self.LE_14x.setPlaceholderText(u"X Coordinate") self.LE_14y.setPlaceholderText(u"Y Coordinate") self.LE_14z.setPlaceholderText(u"Z Coordinate") self.LE_18_determinant.setPlaceholderText(u"Determinant") self.LE_18_determinantDecim.setPlaceholderText(u"Decimal Determinant") #### self.GBox_013_SpreadSheet_Creation.setTitle(u"SpreadSheet") self.GBox_013_SpreadSheet_Creation.setToolTip(u"Option for save or read the data in spreadSheet" + "\n" u"with different separator" + "\n" u"Tabulation, Comma, Semicolon, Space" + "\n" u"Tabulation are the separator for the FreeCAD spreadSheet module" + "\n" u"The number of this four separator are calculate for help if unknown" + "\n\n" u"The COMMA are the old (01.16 and before) separator of the FCInfo macro" + "\n" u"Now for compatibility with the FreeCAD spreadSheet and since 01.17 version" + "\n" u"the TABULATION is the separator by default" + "\n\n" u"If you want to convert your old FCInfo spreadsheet :" + "\n" u"Open it in FCInfo and save it with the Tabulation option checked") self.PB_01_Read_SpreadSheet.setText(u"Read") self.PB_01_Read_SpreadSheet.setToolTip(u"Read the file from disk.") self.PB_02_Save_SreadSheet.setText(u"Save") self.PB_02_Save_SreadSheet.setToolTip(u"Save the file to disk.") self.RB_01_Tabulation.setText(u"Tabulation") self.RB_02_Virgule.setText(u"Comma") self.RB_03_Point_Virgule.setText(u"Semicolon") self.RB_04_Espace.setText(u"Space") self.ComboB_SpreadSheet.setToolTip(u"List of spreadSeet available") self.PB_SpreadSheet_Refresh.setText(u"Refresh") self.PB_SpreadSheet_Refresh.setToolTip(u"Refresh and Search Spreadsheet") self.LE_SpreadSheet.setToolTip(u"Current worksheet (first displayed)" + "\n" + u"If there is no worksheet in the document," + "\n" + u"a spreadsheet named FCSpreadSheet is created" + "\n" + u"or the displayed spreadsheet is updated" + "\n" + u"or type the name of your spreadsheet") self.PB_03_Create_SpreadSheet.setText(u"SpreadSheet") self.PB_03_Create_SpreadSheet.setToolTip(u"Creates a spreadsheet with all the information in the current document.") #### self.GBox_014_Main_Tools.setTitle(u"Main menu") self.CB_01_Info.setText(u"Info") self.CB_01_Info.setToolTip(u"If checked Display Infos in Rapport View") self.CB_01_Info.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Info))) # icone dans une variable self.CB_02_Point.setText(u"Point") self.CB_02_Point.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Point))) # icone dans une variable self.CB_02_Point.setToolTip(u"<img src= />" + "\n" + u"If checked Create point") self.CB_03_Axis.setText(u"Axis") self.CB_03_Axis.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Axis))) # icone dans une variable self.CB_03_Axis.setToolTip(u"<img src= />" + "\n" + u"If checked Create 3 axis in XYZ direction") self.CB_04_Plane.setText(u"Plane") self.CB_04_Plane.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Plane))) # icone dans une variable self.CB_04_Plane.setToolTip(u"<img src= />" + "\n" + u"If checked Create 3 Plane in XYZ direction") #### self.RB_00_ClipBoard.setText(u"Clip-B0") #Board self.RB_00_ClipBoard.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_ClipBoard_None))) # icone dans une variable self.RB_00_ClipBoard.setToolTip(u"<img src= />" + "\n" + u"None clipBoard") self.RB_01_ClipBoard.setText(u"Clip-B1") self.RB_01_ClipBoard.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_ClipBoard_FC))) # icone dans une variable self.RB_01_ClipBoard.setToolTip(u"<img src= />" + "\n" u"If checked the coordinate are copy in the clipBoard" + "\n" + u"Form : FreeCAD.Vector(X.0, Y.0, Z.0)" + "\n" + u"FreeCAD model") self.RB_02_ClipBoard.setText(u"Clip-B2") self.RB_02_ClipBoard.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_ClipBoard_Comma))) # icone dans une variable self.RB_02_ClipBoard.setToolTip(u"<img src= />" + "\n" + u"If checked the coordinate are copy in the clipBoard" + "\n" + u"Form : X, Y, Z" + "\n" + u"with Comma separator") self.RB_03_ClipBoard.setText(u"Clip-B3") self.RB_03_ClipBoard.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_ClipBoard_Raw))) # icone dans une variable self.RB_03_ClipBoard.setToolTip(u"<img src= />" + "\n" + u"If checked the coordinate are copy in the clipBoard" + "\n" + u"Form : X Y Z" + "\n" + u"As is with Space separator") ## self.CB_05_Position.setText(u"Left/Right") self.CB_05_Position.setToolTip(u"Change the window macro position Right of Left") ## self.SPBox_arrondi.setSuffix(u" (Decimals)") self.SPBox_arrondi.setToolTip(u"Select the number of decimal places behind the comma." + "\n" u"If the value is -1, the rounding is set to 1000" + "\n" u"(infinity)") self.SP_012_01_Text.setSuffix(u" (Text Height)") ## self.PB_05_Help_Forum.setText(u"Forum") self.PB_05_Help_Forum.setToolTip(u"Open your explorer in the FCInfo Forum page ") self.PB_06_Help_Wiki.setText(u"Wiki") self.PB_06_Help_Wiki.setToolTip(u"Open your explorer in the FCInfo Wiki page") ## self.PB_01_Refrech.setText(u"Ref") self.PB_01_Refrech.setToolTip(u"Refrech the rapport view.") self.PB_04_Quit.setText(u"Exit") self.PB_04_Quit.setToolTip(u"Exit FCInfo." + "\n" u"The material is saved also on quit the macro" + "\n" u"All parameters are saved with this action") self.SPBox_arrondi.setToolTip(u"seTDecimalValue the value displayed in the window." + "\n" u"If the value is -1 the arrond is called to 1000" + "\n" u"(infini)") ## def displayMatrixMomentOfInertia(self): global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixOfInertiaRaw global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 global MatrixX3_16 global MatrixY3_16 global MatrixZ3_16 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global DeterminantM self.LE_16_Raw.setText("Raw : " + MatrixOfInertiaRaw) self.LE_16_Raw.setCursorPosition(0) self.SB_16_M.setValue(setMomentOfInertia_16) self.SB_16_M.setPrefix(uniteMs + "^") ## self.LE_16_1x.setText(str(Around(MatrixX1_16))) self.LE_16_1x.setCursorPosition(0) self.LE_16_1y.setText(str(Around(MatrixY1_16))) self.LE_16_1y.setCursorPosition(0) self.LE_16_1z.setText(str(Around(MatrixZ1_16))) self.LE_16_1z.setCursorPosition(0) self.LE_16_01.setText(str(Around(Matrix_1))) self.LE_16_01.setCursorPosition(0) ## self.LE_16_2x.setText(str(Around(MatrixX2_16))) self.LE_16_2x.setCursorPosition(0) self.LE_16_2y.setText(str(Around(MatrixY2_16))) self.LE_16_2y.setCursorPosition(0) self.LE_16_2z.setText(str(Around(MatrixZ2_16))) self.LE_16_2z.setCursorPosition(0) self.LE_16_02.setText(str(Around(Matrix_2))) self.LE_16_02.setCursorPosition(0) ## self.LE_16_3x.setText(str(Around(MatrixX3_16))) self.LE_16_3x.setCursorPosition(0) self.LE_16_3y.setText(str(Around(MatrixY3_16))) self.LE_16_3y.setCursorPosition(0) self.LE_16_3z.setText(str(Around(MatrixZ3_16))) self.LE_16_3z.setCursorPosition(0) self.LE_16_03.setText(str(Around(Matrix_3))) self.LE_16_03.setCursorPosition(0) ## self.LE_16_4x.setText(str(Around(Matrix12))) self.LE_16_4x.setCursorPosition(0) self.LE_16_4y.setText(str(Around(Matrix13))) self.LE_16_4y.setCursorPosition(0) self.LE_16_4z.setText(str(Around(Matrix14))) self.LE_16_4z.setCursorPosition(0) self.LE_16_04.setText(str(Around(Matrix15))) self.LE_16_04.setCursorPosition(0) ## #### self.SB_17_M.setValue(setMomentOfInertiaMassique_17) self.SB_17_M.setPrefix(unitePs + uniteSs + "^") self.LE_17_1x.setText(str(Around(MatrixX1_17))) self.LE_17_1x.setCursorPosition(0) self.LE_17_1y.setText(str(Around(MatrixY1_17))) self.LE_17_1y.setCursorPosition(0) self.LE_17_1z.setText(str(Around(MatrixZ1_17))) self.LE_17_1z.setCursorPosition(0) self.LE_17_2x.setText(str(Around(MatrixX2_17))) self.LE_17_2x.setCursorPosition(0) self.LE_17_2y.setText(str(Around(MatrixY2_17))) self.LE_17_2y.setCursorPosition(0) self.LE_17_2z.setText(str(Around(MatrixZ2_17))) self.LE_17_2z.setCursorPosition(0) self.LE_17_3x.setText(str(Around(MatrixX3_17))) self.LE_17_3x.setCursorPosition(0) self.LE_17_3y.setText(str(Around(MatrixY3_17))) self.LE_17_3y.setCursorPosition(0) self.LE_17_3z.setText(str(Around(MatrixZ3_17))) self.LE_17_3z.setCursorPosition(0) self.LE_18_determinant.setText(str(DeterminantM)) self.LE_18_determinantDecim.setText(str(decimal.Decimal(DeterminantM))) def on_SP_012_01_Text_valueChanged(self, value): global seTTextHeigthValue global FreeCAD_ParamGetSet seTTextHeigthValue = value FreeCAD_ParamGetSet.SetInt(u"seTTextHeigthValue", seTTextHeigthValue) # 11 self.fontGlobal_08.setPixelSize(seTTextHeigthValue) # pour compatibilite Windows Linux pour tous les textes self.scrollArea.setFont(self.fontGlobal_08) ######GBox_001_Document self.GBox_001_Document.setFont(self.fontGlobal_08) self.LA_1.setFont(self.fontGlobal_08) self.LE_1.setFont(self.fontGlobal_08) self.LA_2.setFont(self.fontGlobal_08) self.LE_2.setFont(self.fontGlobal_08) self.LE_2a.setFont(self.fontGlobal_08) self.LA_3.setFont(self.fontGlobal_08) self.LA_4.setFont(self.fontGlobal_08) self.LE_3.setFont(self.fontGlobal_08) self.LE_3a.setFont(self.fontGlobal_08) ######GBox_002_Coordinate_Mouse self.GBox_002_Coordinate_Mouse.setFont(self.fontGlobal_08) self.LA_4x.setFont(self.fontGlobal_08) self.LA_4y.setFont(self.fontGlobal_08) self.LA_4z.setFont(self.fontGlobal_08) self.LE_4x.setFont(self.fontGlobal_08) self.LE_4y.setFont(self.fontGlobal_08) self.LE_4z.setFont(self.fontGlobal_08) self.PB_Axis_01.setFont(self.fontGlobal_08) ######GBox_003_Color self.GBox_003_Color.setFont(self.fontGlobal_08) self.LA_1_Red.setFont(self.fontGlobal_08) self.LA_2_Green.setFont(self.fontGlobal_08) self.LA_3_Blue.setFont(self.fontGlobal_08) self.LA_4_Transparent.setFont(self.fontGlobal_08) self.LE_CRed.setFont(self.fontGlobal_08) self.LE_CGreen.setFont(self.fontGlobal_08) self.LE_CBlue.setFont(self.fontGlobal_08) self.LE_Transparent.setFont(self.fontGlobal_08) self.LE_ConversionUnsigned.setFont(self.fontGlobal_08) self.PB_ChangeColor.setFont(self.fontGlobal_08) self.CBox_Color_FaceObject.setFont(self.fontGlobal_08) self.PB_CreateFace.setFont(self.fontGlobal_08) self.SBox_Transparence.setFont(self.fontGlobal_08) ######GBox_004_Object_Mesh self.GBox_004_Object_Mesh.setFont(self.fontGlobal_08) self.LA_N_Edges.setFont(self.fontGlobal_08) self.LE_N_Edges.setFont(self.fontGlobal_08) self.LA_N_Facets.setFont(self.fontGlobal_08) self.LE_N_Facets.setFont(self.fontGlobal_08) self.LA_N_Points.setFont(self.fontGlobal_08) self.LE_N_Points.setFont(self.fontGlobal_08) ######GBox_005_Value_Unit self.GBox_005_Value_Unit.setFont(self.fontGlobal_08) #self.ComboB_Grandeur.setFont(self.fontGlobal_08) self.LA_5.setFont(self.fontGlobal_08) self.LA_5b.setFont(self.fontGlobal_08) self.LE_5.setFont(self.fontGlobal_08) self.LE_5b.setFont(self.fontGlobal_08) self.SB_Arc_ToByArcs.setFont(self.fontGlobal_08) self.PB_BSplineCreateNodes.setFont(self.fontGlobal_08) self.LA_6.setFont(self.fontGlobal_08) self.LE_6.setFont(self.fontGlobal_08) ######GBox_012_SpreadSheet self.GBox_012_SpreadSheet.setFont(self.fontGlobal_08) self.tableWidget.setFont(self.fontGlobal_08) ######GBox_006_Inclination self.GBox_006_Inclination.setFont(self.fontGlobal_08) self.LA_8a.setFont(self.fontGlobal_08) self.PB_Ra.setFont(self.fontGlobal_08) self.LA_8a_2.setFont(self.fontGlobal_08) self.LE_8xy.setFont(self.fontGlobal_08) self.LA_8xy.setFont(self.fontGlobal_08) self.LE_8xya.setFont(self.fontGlobal_08) self.LA_8yz.setFont(self.fontGlobal_08) self.LE_8yz.setFont(self.fontGlobal_08) self.LE_8yza.setFont(self.fontGlobal_08) self.LA_8zx.setFont(self.fontGlobal_08) self.LE_8zx.setFont(self.fontGlobal_08) self.LE_8zxa.setFont(self.fontGlobal_08) self.PB_Line_Direction.setFont(self.fontGlobal_08) self.PB_Line_ValueAT.setFont(self.fontGlobal_08) self.PB_Line_NormalAT.setFont(self.fontGlobal_08) self.LE_9_Direction.setFont(self.fontGlobal_08) self.LE_10_ValueAt.setFont(self.fontGlobal_08) self.LE_10b_NormalAt.setFont(self.fontGlobal_08) ######GBox_007_Surface_and_Volume self.GBox_007_Surface_and_Volume.setFont(self.fontGlobal_08) self.LA_9.setFont(self.fontGlobal_08) self.LE_9a.setFont(self.fontGlobal_08) self.LA_10.setFont(self.fontGlobal_08) self.LE_10a.setFont(self.fontGlobal_08) self.LA_11.setFont(self.fontGlobal_08) self.LE_11a.setFont(self.fontGlobal_08) self.LA_Unit.setFont(self.fontGlobal_08) self.comboBox_Unit.setFont(self.fontGlobal_08) self.LA_Weight.setFont(self.fontGlobal_08) self.LE_12a.setFont(self.fontGlobal_08) self.LA_Density.setFont(self.fontGlobal_08) self.DS_Density.setFont(self.fontGlobal_08) self.LA_Cost.setFont(self.fontGlobal_08) self.LA_Price.setFont(self.fontGlobal_08) self.LE_Cost.setFont(self.fontGlobal_08) self.DS_Price.setFont(self.fontGlobal_08) self.PB_Del_Material.setFont(self.fontGlobal_08) self.CBox_Materiel.setFont(self.fontGlobal_08) self.LE_Materiel.setFont(self.fontGlobal_08) ######GBox_009_BoundBox self.GBox_009_BoundBox.setFont(self.fontGlobal_08) self.LA_007_01_Xlength.setFont(self.fontGlobal_08) self.LA_007_02_Ylength.setFont(self.fontGlobal_08) self.LA_007_03_Zlength.setFont(self.fontGlobal_08) self.LA_007_04_Diagonallength.setFont(self.fontGlobal_08) self.LE_007_BB_01_XLength.setFont(self.fontGlobal_08) self.LE_007_BB_02_YLength.setFont(self.fontGlobal_08) self.LE_007_BB_03_ZLength.setFont(self.fontGlobal_08) self.LE_007_BB_04_Diagonal.setFont(self.fontGlobal_08) self.PB_BoundBox_Tracing.setFont(self.fontGlobal_08) self.PB_00_BoundBox_Volume.setFont(self.fontGlobal_08) self.CB_01_BoundBox_Text.setFont(self.fontGlobal_08) self.DS_BoundBoxTextHeigth.setFont(self.fontGlobal_08) ######GBox_010_Center_Mass self.GBox_010_Center_Mass.setFont(self.fontGlobal_08) self.PB_BoundBox_Tracing.setFont(self.fontGlobal_08) self.LA_13x.setFont(self.fontGlobal_08) self.LA_13y.setFont(self.fontGlobal_08) self.LA_13z.setFont(self.fontGlobal_08) self.LE_13x.setFont(self.fontGlobal_08) self.LE_13y.setFont(self.fontGlobal_08) self.LE_13z.setFont(self.fontGlobal_08) self.PB_Axis_02.setFont(self.fontGlobal_08) self.LA_14x.setFont(self.fontGlobal_08) self.LA_14y.setFont(self.fontGlobal_08) self.LA_14z.setFont(self.fontGlobal_08) self.LE_14x.setFont(self.fontGlobal_08) self.LE_14y.setFont(self.fontGlobal_08) self.LE_14z.setFont(self.fontGlobal_08) self.PB_Axis_03.setFont(self.fontGlobal_08) ######GBox_011_Inertia self.GBox_011_Inertia.setFont(self.fontGlobal_08) self.LE_16_Raw.setFont(self.fontGlobal_08) self.LA_16.setFont(self.fontGlobal_08) self.SB_16_M.setFont(self.fontGlobal_08) self.LA_16x.setFont(self.fontGlobal_08) self.LA_16y.setFont(self.fontGlobal_08) self.LA_16z.setFont(self.fontGlobal_08) self.LE_16_1x.setFont(self.fontGlobal_08) self.LE_16_1y.setFont(self.fontGlobal_08) self.LE_16_1z.setFont(self.fontGlobal_08) self.LE_16_01.setFont(self.fontGlobal_08) self.PB_Axis_04_16_1.setFont(self.fontGlobal_08) self.LE_16_2x.setFont(self.fontGlobal_08) self.LE_16_2y.setFont(self.fontGlobal_08) self.LE_16_2z.setFont(self.fontGlobal_08) self.LE_16_02.setFont(self.fontGlobal_08) self.PB_Axis_05_16_2.setFont(self.fontGlobal_08) self.LE_16_3x.setFont(self.fontGlobal_08) self.LE_16_3y.setFont(self.fontGlobal_08) self.LE_16_3z.setFont(self.fontGlobal_08) self.LE_16_03.setFont(self.fontGlobal_08) self.PB_Axis_06_16_3.setFont(self.fontGlobal_08) self.LE_16_4x.setFont(self.fontGlobal_08) self.LE_16_4y.setFont(self.fontGlobal_08) self.LE_16_4z.setFont(self.fontGlobal_08) self.LE_16_04.setFont(self.fontGlobal_08) self.PB_Axis_07_16_4.setFont(self.fontGlobal_08) self.LA_17.setFont(self.fontGlobal_08) self.SB_17_M.setFont(self.fontGlobal_08) self.LA_17x.setFont(self.fontGlobal_08) self.LA_17y.setFont(self.fontGlobal_08) self.LA_17z.setFont(self.fontGlobal_08) self.LE_17_1x.setFont(self.fontGlobal_08) self.LE_17_1y.setFont(self.fontGlobal_08) self.LE_17_1z.setFont(self.fontGlobal_08) self.PB_Axis_08_17_1.setFont(self.fontGlobal_08) self.LE_17_2x.setFont(self.fontGlobal_08) self.LE_17_2y.setFont(self.fontGlobal_08) self.LE_17_2z.setFont(self.fontGlobal_08) self.PB_Axis_09_17_2.setFont(self.fontGlobal_08) self.LE_17_3x.setFont(self.fontGlobal_08) self.LE_17_3y.setFont(self.fontGlobal_08) self.LE_17_3z.setFont(self.fontGlobal_08) self.PB_Axis_10_17_3.setFont(self.fontGlobal_08) self.PB_Axis_11_17_4.setFont(self.fontGlobal_08) self.LA_determinant.setFont(self.fontGlobal_08) self.LA_determinantDecimal.setFont(self.fontGlobal_08) self.LE_18_determinant.setFont(self.fontGlobal_08) self.LE_18_determinantDecim.setFont(self.fontGlobal_08) ######GBox_013_SpreadSheet_Creation self.GBox_013_SpreadSheet_Creation.setFont(self.fontGlobal_08) self.PB_01_Read_SpreadSheet.setFont(self.fontGlobal_08) self.PB_02_Save_SreadSheet.setFont(self.fontGlobal_08) self.PB_03_Create_SpreadSheet.setFont(self.fontGlobal_08) self.RB_01_Tabulation.setFont(self.fontGlobal_08) self.RB_02_Virgule.setFont(self.fontGlobal_08) self.RB_03_Point_Virgule.setFont(self.fontGlobal_08) self.RB_04_Espace.setFont(self.fontGlobal_08) ######GBox_014_Main_Tools self.GBox_014_Main_Tools.setFont(self.fontGlobal_08) self.RB_01_ClipBoard.setFont(self.fontGlobal_08) self.CB_02_Point.setFont(self.fontGlobal_08) self.CB_03_Axis.setFont(self.fontGlobal_08) self.CB_04_Plane.setFont(self.fontGlobal_08) self.CB_01_Info.setFont(self.fontGlobal_08) self.CB_05_Position.setFont(self.fontGlobal_08) self.SPBox_arrondi.setFont(self.fontGlobal_08) self.SPBox_arrondi.setFont(self.fontGlobal_08) self.SP_012_01_Text.setFont(self.fontGlobal_08) self.PB_05_Help_Forum.setFont(self.fontGlobal_08) self.PB_06_Help_Wiki.setFont(self.fontGlobal_08) self.PB_01_Refrech.setFont(self.fontGlobal_08) self.PB_04_Quit.setFont(self.fontGlobal_08) def on_SPBox_arrondi_valueChanged(self, value): global seTDecimalValue global FreeCAD_ParamGetSet seTDecimalValue = value FreeCAD_ParamGetSet.SetInt(u"seTDecimalValue", seTDecimalValue) # *4 self.on_PB_01_Refrech_clicked() def on_PB_Line_Direction(self): global object_Label global directionObj global direcValueAt global direcNormalAt global switchInertia global RotationToEuler global switchCreateLineDiVatNatOnClick global position0 global position1 global position2 if (directionObj != "[]"): switchInertia = 1 try: FreeCAD.ActiveDocument.openTransaction(u"FCInfo Direction") # memorise les actions (avec annuler restore) if switchCreateLineDiVatNatOnClick == 0: points=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(directionObj)] else: points=[FreeCAD.Vector(position0,position1,position2),FreeCAD.Vector(directionObj[0]+position0,directionObj[1]+position1,directionObj[2]+position2)] line0 = Draft.makeWire(points,closed=False,face=False,support=None) App.ActiveDocument.ActiveObject.recompute() line0.Label = u"Direction_(Yellow)_" + object_Label line0.ViewObject.LineColor = (1.0,1.0,0.0) line0.Length = 100.0 if RotationToEuler != "": line0.Placement.Rotation = FreeCAD.Rotation(RotationToEuler[0] ,RotationToEuler[1], RotationToEuler[2]) RotationToEuler = "" App.ActiveDocument.recompute() except Exception: None switchInertia = 0 def on_PB_Line_ValueAT(self): global object_Label global direcValueAt global switchInertia global RotationToEuler global switchCreateLineDiVatNatOnClick global position0 global position1 global position2 if (direcValueAt != "[]"): switchInertia = 1 try: FreeCAD.ActiveDocument.openTransaction(u"FCInfo ValueAt") # memorise les actions (avec annuler restore) if switchCreateLineDiVatNatOnClick == 0: points=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(direcValueAt)] else: points=[FreeCAD.Vector(position0,position1,position2),FreeCAD.Vector(direcValueAt[0]+position0,direcValueAt[1]+position1,direcValueAt[2]+position2)] line0 = Draft.makeWire(points,closed=False,face=False,support=None) App.ActiveDocument.ActiveObject.recompute() line0.Label = u"ValueAt_(Magenta)_" + object_Label line0.ViewObject.LineColor = (1.0,0.0,1.0) line0.Length = 100.0 if RotationToEuler != "": line0.Placement.Rotation = FreeCAD.Rotation(RotationToEuler[0] ,RotationToEuler[1], RotationToEuler[2]) RotationToEuler = "" App.activeDocument().recompute() except Exception: None switchInertia = 0 def on_PB_Line_NormalAT(self): global object_Label global direcNormalAt global switchInertia global RotationToEuler global switchCreateLineDiVatNatOnClick global position0 global position1 global position2 if (direcNormalAt != "[]"): switchInertia = 1 try: FreeCAD.ActiveDocument.openTransaction(u"FCInfo NormalAt") # memorise les actions (avec annuler restore) if switchCreateLineDiVatNatOnClick == 0: points=[FreeCAD.Vector(0.0,0.0,0.0),FreeCAD.Vector(direcNormalAt)] else: points=[FreeCAD.Vector(position0,position1,position2),FreeCAD.Vector(direcNormalAt[0]+position0,direcNormalAt[1]+position1,direcNormalAt[2]+position2)] line0 = Draft.makeWire(points,closed=False,face=False,support=None) App.ActiveDocument.ActiveObject.recompute() line0.Label = u"NormalAt_(Cyan)_" + object_Label line0.ViewObject.LineColor = (0.0,1.0,1.0) line0.Length = 100.0 if RotationToEuler != "": line0.Placement.Rotation = FreeCAD.Rotation(RotationToEuler[0] ,RotationToEuler[1], RotationToEuler[2]) RotationToEuler = "" App.ActiveDocument.recompute() except Exception: None switchInertia = 0 def paletteBase(self): qpBase = "QLineEdit {background-color: QPalette.Base}" qpIcon = QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_05)) # icone dans une variable self.LE_4x.setStyleSheet(qpBase) self.LE_4y.setStyleSheet(qpBase) self.LE_4z.setStyleSheet(qpBase) self.PB_Axis_01.setIcon(qpIcon) # icon dans une variable self.LE_13x.setStyleSheet(qpBase) self.LE_13y.setStyleSheet(qpBase) self.LE_13z.setStyleSheet(qpBase) self.PB_Axis_02.setIcon(qpIcon) # icon dans une variable self.LE_14x.setStyleSheet(qpBase) self.LE_14y.setStyleSheet(qpBase) self.LE_14z.setStyleSheet(qpBase) self.PB_Axis_03.setIcon(qpIcon) # icon dans une variable self.LE_16_1x.setStyleSheet(qpBase) self.LE_16_1y.setStyleSheet(qpBase) self.LE_16_1z.setStyleSheet(qpBase) self.PB_Axis_04_16_1.setIcon(qpIcon) # icone dans une variable self.LE_16_2x.setStyleSheet(qpBase) self.LE_16_2y.setStyleSheet(qpBase) self.LE_16_2z.setStyleSheet(qpBase) self.PB_Axis_05_16_2.setIcon(qpIcon) # icone dans une variable self.LE_16_3x.setStyleSheet(qpBase) self.LE_16_3y.setStyleSheet(qpBase) self.LE_16_3z.setStyleSheet(qpBase) self.PB_Axis_06_16_3.setIcon(qpIcon) # icone dans une variable self.PB_Axis_07_16_4.setIcon(qpIcon) # icone dans une variable self.LE_17_1x.setStyleSheet(qpBase) self.LE_17_1y.setStyleSheet(qpBase) self.LE_17_1z.setStyleSheet(qpBase) self.PB_Axis_08_17_1.setIcon(qpIcon) # icone dans une variable self.LE_17_2x.setStyleSheet(qpBase) self.LE_17_2y.setStyleSheet(qpBase) self.LE_17_2z.setStyleSheet(qpBase) self.PB_Axis_09_17_2.setIcon(qpIcon) # icone dans une variable self.LE_17_3x.setStyleSheet(qpBase) self.LE_17_3y.setStyleSheet(qpBase) self.LE_17_3z.setStyleSheet(qpBase) self.PB_Axis_10_17_3.setIcon(qpIcon) # icone dans une variable self.PB_Axis_11_17_4.setIcon(qpIcon) # icone dans une variable self.PB_05_Help_Forum.setStyleSheet(qpBase) self.PB_06_Help_Wiki.setStyleSheet(qpBase) def on_GBox_012_SpreadSheet(self): if self.GBox_012_SpreadSheet.isChecked(): self.GBox_012_SpreadSheet.setStyleSheet(u"QGroupBox {color : QPalette.Base;}") # origin system self.on_PB_01_Refrech_clicked() else: self.GBox_012_SpreadSheet.setStyleSheet(u"QGroupBox {color : #ff0000;}") self.GBox_012_SpreadSheet.setTitle(u"Details of the form") self.GBox_012_SpreadSheet.setToolTip(u"The module is Disabled by default for rapidity") self.tableWidget.clear() def on_PB_Axis_Mouse(self): global position0 global position1 global position2 self.paletteBase() self.LE_4x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_4y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_4z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_01.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(position0, position1, position2, "Mouse")))) def on_PB_ChangeColor(self): global seTPositionFlyRightLeft global transparenceFace if len(FreeCADGui.Selection.getSelection()) != 0: if seTPositionFlyRightLeft == 1: self.window.hide() # 1=MainWindow separate couleur = QColorDialog.getColor() if couleur.isValid(): FreeCAD.ActiveDocument.openTransaction(u"FCInfo Color") # memorise les actions (avec annuler restore) r = int(str(couleur.name()[1:3]),16) v = int(str(couleur.name()[3:5]),16) b = int(str(couleur.name()[5:7]),16) t = transparenceFace # transparence de 0 a 100 a = FreeCADGui.Selection.getSelectionEx() # selection sous objet aa = FreeCADGui.Selection.getSelection() # selection objet try: if str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:5] == "Face": if self.CBox_Color_FaceObject.isChecked(): # checked = face if not = object try: cols = colors = [] cols = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.DiffuseColor if len(cols) == 1: for i in aa[0].Shape.Faces: colors += [(cols[0])] else: colors = cols for i in range(len(aa)): fce = int(a[0].SubElementNames[i][4:])-1 colors[fce] = (float(r)/255.0, float(v)/255.0, float(b)/255.0, float(t)/100.0) aa[i].ViewObject.DiffuseColor = colors except Exception: None else: try: aa = FreeCADGui.Selection.getSelection() # selection objet FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.ShapeColor = (float(r)/255.0, float(v)/255.0, float(b)/255.0) FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.Transparency = transparenceFace except Exception: None elif str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:5] == "Edge": FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.LineColor = (float(r)/255.0, float(v)/255.0, float(b)/255.0) elif str(Gui.Selection.getSelectionEx()[0].SubObjects[0])[1:7] == "Vertex": FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.PointColor = (float(r)/255.0, float(v)/255.0, float(b)/255.0) except Exception: aa = FreeCADGui.Selection.getSelection() # selection objet FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.ShapeColor = (float(r)/255.0, float(v)/255.0, float(b)/255.0) try: FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.LineColor = (float(r)/255.0, float(v)/255.0, float(b)/255.0) except Exception: None try: FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.PointColor = (float(r)/255.0, float(v)/255.0, float(b)/255.0) except Exception: None FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.Transparency = transparenceFace #### transparenceFace = FreeCAD.ActiveDocument.getObject(aa[0].Name).ViewObject.Transparency # unsignedEncodeColor decimal pour FC unsignedEncodeColor = '"' + str(unsignedEncode((r), (v), (b), 0.0)) + '"' diffuseColorHexa = '"' + "#" + decimalTohexa(int(r/255.0)) + decimalTohexa(int(v/255.0)) + decimalTohexa(int(b/255.0)) + '"' diffuseColorHexaPy = '"' + "0x" + decimalTohexa(int(r/255.0)) + decimalTohexa(int(v/255.0)) + decimalTohexa(int(b/255.0)) + '"' diffuseColorRVB = '"' + str(int(r/255.0)) + "," + str(int(v/255.0)) + "," + str(int(b/255.0)) + '"' # self.on_PB_01_Refrech_clicked() #### if seTPositionFlyRightLeft == 1: self.window.show() # 1=MainWindow separate def SIGNAL_CBox_Color_FaceObject(self): if self.CBox_Color_FaceObject.isChecked(): # checked = face if not = object self.PB_ChangeColor.setText(u"Color.S.Obj") self.PB_CreateFace.setText(u"Dupl.S.Obj") self.CBox_Color_FaceObject.setText(u"Object") else: self.PB_ChangeColor.setText(u"Color.Objet") self.PB_CreateFace.setText(u"Dupl.Objet") self.CBox_Color_FaceObject.setText(u"Sub.Objet") def on_PB_CreateFace(self): global sel global indexFaceMesh global coordPointsMesh global detected global cols global colorShapeFace global colorShapeLine global colorShapePoint global setMeshTopologyValue if self.CBox_Color_FaceObject.isChecked(): # repro face / subOject FreeCAD.ActiveDocument.openTransaction(u"FCInfo Copy Element") # memorise les actions (avec annuler restore) if detected[0:4] == "Mesh": labelObject = sel[0].Label points = [FreeCAD.Vector(coordPointsMesh[0][0], coordPointsMesh[0][1], coordPointsMesh[0][2]), FreeCAD.Vector(coordPointsMesh[1][0], coordPointsMesh[1][1], coordPointsMesh[1][2]), FreeCAD.Vector(coordPointsMesh[2][0], coordPointsMesh[2][1], coordPointsMesh[2][2])] dummy = cols # save cols before changing [] lineTriangle = Draft.makeWire(points, closed=True, face=True, support=None) cols = dummy # restitue the cols deleted actifObjet = App.ActiveDocument.ActiveObject FreeCAD.ActiveDocument.getObject(lineTriangle.Name).Label = "Face_" + str(indexFaceMesh) + "_" + labelObject Gui.Selection.clearSelection(sel[0].Name) elif detected == "<PointKernel object>": Gui.runCommand(u'Std_Copy',0) Gui.runCommand(u'Std_Paste',0) actifObjet = App.ActiveDocument.ActiveObject else: try: try: placementOrigine = sel[0].getGlobalPlacement() except Exception: placementOrigine = sel[0].Placement() Part.show(FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0].copy()) # create repro shape subObject actifObjet = App.ActiveDocument.ActiveObject actifObjet.Placement = placementOrigine except Exception: None else: # repro object FreeCAD.ActiveDocument.openTransaction(u"FCInfo Copy Object") # memorise les actions (avec annuler restore) if detected[0:4] == u"Mesh": ### Begin command Part_ShapeFromMesh _Shape = App.ActiveDocument.addObject('Part::Feature', str(sel[0].Name) + "_Shape") __shape__ = Part.Shape() __shape__.makeShapeFromMesh(App.ActiveDocument.getObject(sel[0].Name).Mesh.Topology, setMeshTopologyValue, False) # 0.10000 App.ActiveDocument.ActiveObject.Shape = __shape__ App.ActiveDocument.ActiveObject.purgeTouched() ### End command Part_ShapeFromMesh ### Begin command Part_MakeSolid __s__=App.ActiveDocument.getObject(_Shape.Name).Shape.Faces __s__=Part.Solid(Part.Shell(__s__)) __o__=App.ActiveDocument.addObject("Part::Feature",str(sel[0].Name + "_solid")) __o__.Label=sel[0].Name + u"_(Solid)" __o__.Shape=__s__ App.ActiveDocument.removeObject(_Shape.Name) ### End command Part_MakeSolid actifObjet = App.ActiveDocument.ActiveObject App.ActiveDocument.getObject(sel[0].Name).Visibility = False elif detected == "<PointKernel object>": Gui.runCommand('Std_Copy',0) Gui.runCommand('Std_Paste',0) actifObjet = App.ActiveDocument.ActiveObject actifObjet.Label = App.ActiveDocument.getObject(sel[0].Name).Label + "_Points" App.ActiveDocument.getObject(sel[0].Name).Visibility = False else: try: placementOrigine = sel[0].getGlobalPlacement() except Exception: placementOrigine = sel[0].Placement() try: Part.show(sel[0].Shape) except Exception: None actifObjet = App.ActiveDocument.ActiveObject actifObjet.Placement = placementOrigine try: actifObjet.ViewObject.ShapeColor = colorShapeFace except Exception: None try: actifObjet.ViewObject.LineColor = colorShapeLine except Exception: None try: actifObjet.ViewObject.PointColor = colorShapePoint except Exception: None try: transPar = math.ceil(round(cols[indexFaceMesh][3]*100, 12)) # face except Exception: try: transPar = math.ceil(round(cols[indexFaceMesh]*100, 12)) # edge except Exception: try: transPar = math.ceil(round(cols[0]*100, 12)) # if indexFaceMesh-1 = -1 except Exception: transPar = 0 try: if self.CBox_Color_FaceObject.isChecked(): actifObjet.ViewObject.Transparency = transPar if (self.SBox_Transparence.value()) != transPar: actifObjet.ViewObject.Transparency = self.SBox_Transparence.value() else: try: actifObjet.ViewObject.DiffuseColor = cols except Exception: None if (self.CBox_Color_FaceObject.isChecked()) or (len(cols) == 1): actifObjet.ViewObject.Transparency = transPar if (self.SBox_Transparence.value()) != transPar: actifObjet.ViewObject.Transparency = self.SBox_Transparence.value() except Exception: None App.activeDocument().recompute(None,True,True) def on_SBox_Transparence_valueChanged(self, value): global transparenceFace transparenceFace = value def on_SB_16_M_valueChanged(self, value): global FreeCAD_ParamGetSet global setMomentOfInertia_16 setMomentOfInertia_16 = value FreeCAD_ParamGetSet.SetInt(u"setMomentOfInertia_16", setMomentOfInertia_16) self.on_PB_01_Refrech_clicked() def on_SB_17_M_valueChanged(self, value): global FreeCAD_ParamGetSet global setMomentOfInertiaMassique_17 setMomentOfInertiaMassique_17 = value FreeCAD_ParamGetSet.SetInt(u"setMomentOfInertiaMassique_17", setMomentOfInertiaMassique_17) self.on_PB_01_Refrech_clicked() def on_PB_Axis_Center_Shape(self): global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ self.paletteBase() self.LE_13x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_13y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_13z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_02.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(boundBoxCenterX, boundBoxCenterY, boundBoxCenterZ, "BBCenter")))) # icone dans une variable def on_PB_Axis_Center_Mass(self): global CenterOfMassX global CenterOfMassY global CenterOfMassZ self.paletteBase() self.LE_14x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_14y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_14z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_03.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(CenterOfMassX, CenterOfMassY, CenterOfMassZ, "CenterOfMass")))) # icone dans une variable def on_PB_Axis_04_16_1(self): global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 self.paletteBase() self.LE_16_1x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_16_1y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_16_1z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_04_16_1.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX1_16, MatrixY1_16, MatrixZ1_16, "Matrix1")))) # icone dans une variable def on_PB_Axis_05_16_2(self): global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 self.paletteBase() self.LE_16_2x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_16_2y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_16_2z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_05_16_2.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX2_16, MatrixY2_16, MatrixZ2_16, "Matrix2")))) # icone dans une variable def on_PB_Axis_06_16_3(self): global MatrixX3_16 global MatrixY3_16 global MatrixZ3_16 self.paletteBase() self.LE_16_3x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_16_3y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_16_3z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_06_16_3.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX3_16, MatrixY3_16, MatrixZ3_16, "Matrix3")))) # icone dans une variable def on_PB_Axis_07_16_4(self): global MatrixX1_16 global MatrixY2_16 global MatrixZ3_16 self.paletteBase() self.LE_16_1x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_16_2y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_16_3z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_07_16_4.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX1_16, MatrixY2_16, MatrixZ3_16, "Matrix123")))) # icone dans une variable def on_PB_Axis_08_17_1(self): global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 self.paletteBase() self.LE_17_1x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_17_1y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_17_1z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_08_17_1.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX1_17, MatrixY1_17, MatrixZ1_17, "MatrixW1")))) # icone dans une variable def on_PB_Axis_09_17_2(self): global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 self.paletteBase() self.LE_17_2x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_17_2y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_17_2z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_09_17_2.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX2_17, MatrixY2_17, MatrixZ2_17, "MatrixW2")))) # icone dans une variable def on_PB_Axis_10_17_3(self): global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 self.paletteBase() self.LE_17_3x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_17_3y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_17_3z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_10_17_3.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX3_17, MatrixY3_17, MatrixZ3_17, "MatrixW3")))) # icone dans une variable def on_PB_Axis_11_17_4(self): global MatrixX1_17 global MatrixY2_17 global MatrixZ3_17 self.paletteBase() self.LE_17_1x.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") #red self.LE_17_2y.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: green}") self.LE_17_3z.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") self.PB_Axis_11_17_4.setIcon(QtGui.QIcon(QtGui.QPixmap(axisPlane(MatrixX1_17, MatrixY2_17, MatrixZ3_17, "MatrixW123")))) # icone dans une variable def on_PB_BoundBox_Tracing(self): bounBoxTracing() def On_PB_00_BoundBox_Volume(self): global switchBoundBoxCreateVolume switchBoundBoxCreateVolume = 1 bounBoxTracing() def On_CB_01_BoundBox_Text(self): global switchBoundBoxCreateText global FreeCAD_ParamGetSet if self.CB_01_BoundBox_Text.isChecked(): switchBoundBoxCreateText = 1 self.DS_BoundBoxTextHeigth.setEnabled(True) FreeCAD_ParamGetSet.SetBool(u"switchBoundBoxCreateText", True) # True or False else: switchBoundBoxCreateText = 0 self.DS_BoundBoxTextHeigth.setEnabled(False) FreeCAD_ParamGetSet.SetBool(u"switchBoundBoxCreateText", False) # True or False def on_DS_BoundBoxTextHeigth_valueChanged(self, value): global seTBoundBoxTextHeigth global FreeCAD_ParamGetSet seTBoundBoxTextHeigth = value FreeCAD_ParamGetSet.SetFloat(u"seTBoundBoxTextHeigth", seTBoundBoxTextHeigth) # 3.0 def SIGNAL_comboPoids_Changed(self,text): global volume_ global seTDensiteValue global poids global uniteM global uniteS global uniteSs global uniteV global uniteP global unitePs global massOrGravity global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global seTMaterialPrice global seTMaterialCost global seTMaterialSuffixCost global seTIndexUnitWeight global seTUnitSymbolMicro if text == u"tonne": #t #0.00001 = 1000000 uniteP = 0.000001 unitePs= u"t" elif text == u"quintal": #q #0.00001 = 100000 uniteP = 0.00001 unitePs= u"q" elif text == u"kilo gram": #kg # 0.001 = 1000 uniteP = 0.001 unitePs= u"kg" elif text == u"hecto gram": #hg # 0.01 = 100 uniteP = 0.01 unitePs= u"hg" elif text == u"decagram": #dag # 0.1 = 10 uniteP = 0.1 unitePs= u"dag" elif text == u"gram": #g # = 1 Base uniteP = 1.00 unitePs= u"g" elif text == u"decigram": #dg # = 0.1 uniteP = 10.0 unitePs= u"dg" elif text == u"centigram": #cg # = 0.01 uniteP = 100.0 unitePs= u"cg" elif text == u"milligram": #mg # = 0.001 uniteP = 1000.0 unitePs= u"mg" elif text == u"microgram": #Ug # = 0.000001 # micro hex="\xB5", html=<span>µ</span> uniteP = 1000000.0 unitePs= seTUnitSymbolMicro+"g" elif text == u"nanogram": #ng # = 0.000000001 uniteP = 1000000000.0 unitePs= u"ng" elif text == u"picogram": #pg # = 0.000000000001 uniteP = 1000000000000.0 unitePs= u"pg" elif text == u"femtogram": #fg # = 0.000000000000001 uniteP = 1000000000000000.0 unitePs= u"fg" elif text == u"grain": #gr # = 0.06479891 uniteP = 0.06479891 unitePs= u"gr" elif text == u"drachm": #dr # = 1.7718451953125 uniteP = 0.56438339189006794681850148894339 unitePs= u"dr" elif text == u"once": #oz # = 28.3495231250 uniteP = 0.035273961949580412915675808215204 unitePs= u"oz" elif text == u"once troy": #oz t # = once troy = 31.1034768 uniteP = 0.032150746568627980522100346029483 unitePs= u"oz t" elif text == u"livre troy": #lb t # = 373.2417216 livre de troy (pound) uniteP = 0.0026792288807189983768416955024569 unitePs= u"lb t" elif text == u"livre av": #lb # = 453.59237 livre avoirdupois (pound) uniteP = 0.0022046226218487758072297380134503 unitePs= u"lb" elif text == u"stone": #st # = 6350.29318 1 stone = 14 livres uniteP = 0.00015747304441776970051640985810359 unitePs= u"st" elif text == u"quarter": #qtr # = 12700.58636 uniteP = 0.000078736522208884850258204929051795 unitePs= u"qtr" elif text == u"hundredweight":#cwt # = 50802.34544 uniteP = 0.000019684130552221212564551232262949 unitePs= u"cwt" elif text == u"tonneau fr": # # tonneau fr = 0.00000102145045965 uniteP = 0.00000102145045965 unitePs= u"tonneau fr" elif text == u"carat": #ct # = 0.2 uniteP = 5.0 unitePs= u"ct" seTIndexUnitWeight = self.comboBox_Unit.currentIndex() self.LA_14x.setText(massOrGravity + u" X") self.LA_14y.setText(massOrGravity + u" Y") self.LA_14z.setText(massOrGravity + u" Z") try: poids = ((volume_ * seTDensiteValue) * uniteP) / 1000.0 self.LE_12a.setText(str(Around(poids))+ " " +unitePs) seTMaterialCost = ((volume_ * seTDensiteValue * seTMaterialPrice) / 1000000.0) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial except Exception: self.LE_12a.setText(u"") self.LE_Cost.setText(u"-" + seTMaterialSuffixCost) #CostMaterial self.SB_17_M.setPrefix(unitePs + uniteSs + "^") self.SB_17_M.setValue(setMomentOfInertiaMassique_17) try: ## MatrixX1_17 = MatrixX1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) ## original without parenthesis and modified 17/03/2024 MatrixX1_17 = (MatrixX1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY1_17 = (MatrixY1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ1_17 = (MatrixZ1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX2_17 = (MatrixX2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY2_17 = (MatrixY2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ2_17 = (MatrixZ2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX3_17 = (MatrixX3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY3_17 = (MatrixY3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ3_17 = (MatrixZ3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) except Exception: MatrixX1_17 = MatrixY1_17 = MatrixZ1_17 = 0.0 MatrixX2_17 = MatrixY2_17 = MatrixZ2_17 = 0.0 MatrixX3_17 = MatrixY3_17 = MatrixZ3_17 = 0.0 self.displayMatrixMomentOfInertia() def SIGNAL_comboBox_Changed(self,text): global position0 global position1 global position2 global longueurObjet global rayonObjet global perimetre global numberEdges global surface global surfaceFace global volume_ global seTDensiteValue global uniteM global uniteMs global uniteS global uniteSs global uniteV global uniteVs global uniteP global unitePs global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ global CenterOfMassX global CenterOfMassY global CenterOfMassZ global massOrGravity global boundBoxLX global boundBoxLY global boundBoxLZ global boundBoxDiag global boundBox_S global MatrixX1 global MatrixY1 global MatrixZ1 global Matrix_1 global MatrixX2 global MatrixY2 global MatrixZ2 global Matrix_2 global MatrixX3 global MatrixY3 global MatrixZ3 global Matrix_3 global Matrix12 global Matrix13 global Matrix14 global Matrix15 global Vertx global Edges global EdgesLong global Faces global FacesSurf global FacesCoor global RowCount global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixOfInertiaRaw global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 global MatrixX3_16 global MatrixY3_16 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global seTIndexUnitLength global seTUnitSymbolMicro global seTUnitSymbolCube global seTUnitSymbolCarre global BsplineDetect global BsplineNombreDeNoeuds global BsplineRayonApproximatif global BsplineNumberElement global BsplineCutLength global setBSplineToByArcValue global BSplinetoByArcValeurS if text == u"km": # = 1000000 uniteM = 0.000001 uniteMs= u"km" uniteS = 0.000000000001 uniteSs= u"km"+seTUnitSymbolCarre uniteV = 0.000000000000000001 uniteVs= u"km"+seTUnitSymbolCube elif text == u"hm": # = 100000 uniteM = 0.00001 uniteMs= u"hm" uniteS = 0.0000000001 uniteSs= u"hm"+seTUnitSymbolCarre uniteV = 0.000000000000001 uniteVs= u"hm"+seTUnitSymbolCube elif text == u"dam": # = 10000 uniteM = 0.0001 uniteMs= u"dam" uniteS = 0.00000001 uniteSs= u"dam"+seTUnitSymbolCarre uniteV = 0.000000000001 uniteVs= u"dam"+seTUnitSymbolCube elif text == u"m": # = 1000 uniteM = 0.001 uniteMs= u"m" uniteS = 0.000001 uniteSs= u"m"+seTUnitSymbolCarre uniteV = 0.000000001 uniteVs= u"m"+seTUnitSymbolCube elif text == u"dm": # = 100 uniteM = 0.01 uniteMs= u"dm" uniteS = 0.0001 uniteSs= u"dm"+seTUnitSymbolCarre uniteV = 0.000001 uniteVs= u"dm"+seTUnitSymbolCube elif text == u"cm": # = 10 uniteM = 0.1 uniteMs= u"cm" uniteS = 0.01 uniteSs= u"cm"+seTUnitSymbolCarre uniteV = 0.001 uniteVs= u"cm"+seTUnitSymbolCube elif text == u"mm": # = 1 ############################### uniteM = 1.0 uniteMs= u"mm" uniteS = 1.0 uniteSs= u"mm"+seTUnitSymbolCarre uniteV = 1.0 uniteVs= u"mm"+seTUnitSymbolCube elif text == seTUnitSymbolMicro+"m": # = 1000 #http://fr.wiktionary.org/wiki/%CE%BCm#conv uniteM = 1000.0 uniteMs= seTUnitSymbolMicro+"m" uniteS = 1000.0**2 uniteSs= seTUnitSymbolMicro+"m"+seTUnitSymbolCarre uniteV = 1000.0**3 uniteVs= seTUnitSymbolMicro+"m"+seTUnitSymbolCube elif text == u"nm": # = 1000000 uniteM = 1000000.0 uniteMs= u"nm" uniteS = 1000000.0**2 uniteSs= u"nm"+seTUnitSymbolCarre uniteV = 1000000.0**3 uniteVs= u"nm"+seTUnitSymbolCube elif text == u"pm": # = 1000000000 uniteM = 1000000000.0 uniteMs= u"pm" uniteS = 1000000000.0**2 uniteSs= u"pm"+seTUnitSymbolCarre uniteV = 1000000000.0**3 uniteVs= u"pm"+seTUnitSymbolCube elif text == u"fm": # = 1000000000000 uniteM = 1000000000000.0 uniteMs= u"fm" uniteS = 1000000000000.0**2 uniteSs= u"fm"+seTUnitSymbolCarre uniteV = 1000000000000.0**3 uniteVs= u"fm"+seTUnitSymbolCube elif text == u"inch": # inch = 25.400 uniteM = 1.0/25.400 uniteMs= u"in" uniteS = uniteM**2 uniteSs= u"in"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"in"+seTUnitSymbolCube elif text == u"link": # link = 201.168 uniteM = 1.0/201.168 uniteMs= u"lk" uniteS = uniteM**2 uniteSs= u"lk"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"lk"+seTUnitSymbolCube elif text == u"foot": # foot = 304.800 uniteM = 1.0/304.800 uniteMs= u"ft" uniteS = uniteM**2 uniteSs= u"ft"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"ft"+seTUnitSymbolCube elif text == u"yard": # yard = 914.400 uniteM = 1.0/914.400 uniteMs= u"yd" uniteS = uniteM**2 uniteSs= u"yd"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"yd"+seTUnitSymbolCube elif text == u"perch": #rd # rod perche = 5029.200 uniteM = 1.0/5029.200 uniteMs= u"rd" uniteS = uniteM**2 uniteSs= u"rd"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"rd"+seTUnitSymbolCube elif text == u"chain": # chain = 20116.800 uniteM = 1.0/20116.800 uniteMs= u"ch" uniteS = uniteM**2 uniteSs= u"ch"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"ch"+seTUnitSymbolCube elif text == u"furlong": # furlong= 201168 uniteM = 1.0/201168 uniteMs= u"fur" uniteS = uniteM**2 uniteSs= u"fur"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"fur"+seTUnitSymbolCube elif text == u"mile": # mile = 1609344 uniteM = 1.0/1609344 uniteMs= u"mi" uniteS = uniteM**2 uniteSs= u"mi"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"mi"+seTUnitSymbolCube elif text == u"league": # league = 4828032 uniteM = 1.0/4828032 uniteMs= u"lea" uniteS = uniteM**2 uniteSs= u"lea"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"lea"+seTUnitSymbolCube elif text == u"nautique": # nautique = 1852000 uniteM = 1.0/1852000 uniteMs= u"nmi" uniteS = uniteM**2 uniteSs= u"nmi"+seTUnitSymbolCarre uniteV = uniteM**3 uniteVs= u"nmi"+seTUnitSymbolCube seTIndexUnitLength = self.comboBox.currentIndex() self.LA_14x.setText(massOrGravity + u" X") self.LA_14y.setText(massOrGravity + u" Y") self.LA_14z.setText(massOrGravity + u" Z") try: self.LE_4x.setText(str(Around(position0 * uniteM)) + " " + uniteMs) self.LE_4y.setText(str(Around(position1 * uniteM)) + " " + uniteMs) self.LE_4z.setText(str(Around(position2 * uniteM)) + " " + uniteMs) except Exception: position0 = position1 = position2 = 0.0 self.LE_4x.setText(str(position0) + " " + uniteMs) self.LE_4y.setText(str(position1) + " " + uniteMs) self.LE_4z.setText(str(position2) + " " + uniteMs) try: self.LE_13x.setText(str(Around(boundBoxCenterX * uniteM)) + " " + uniteMs) self.LE_13y.setText(str(Around(boundBoxCenterY * uniteM)) + " " + uniteMs) self.LE_13z.setText(str(Around(boundBoxCenterZ * uniteM)) + " " + uniteMs) except Exception: boundBoxCenterX = boundBoxCenterY = boundBoxCenterZ = 0.0 self.LE_13x.setText(str(boundBoxCenterX) + " " + uniteMs) self.LE_13y.setText(str(boundBoxCenterY) + " " + uniteMs) self.LE_13z.setText(str(boundBoxCenterZ) + " " + uniteMs) try: self.LE_14x.setText(str(Around(CenterOfMassX * uniteM)) + " " + uniteMs) self.LE_14y.setText(str(Around(CenterOfMassY * uniteM)) + " " + uniteMs) self.LE_14z.setText(str(Around(CenterOfMassZ * uniteM)) + " " + uniteMs) except Exception: CenterOfMassX = CenterOfMassY = CenterOfMassZ = 0.0 self.LE_14x.setText(str(CenterOfMassX) + " " + uniteMs) self.LE_14y.setText(str(CenterOfMassY) + " " + uniteMs) self.LE_14z.setText(str(CenterOfMassZ) + " " + uniteMs) try: self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) except Exception: boundBoxLX = boundBoxLY = boundBoxLZ = 0.0 self.LE_007_BB_01_XLength.setText(str(boundBoxLX) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(boundBoxLY) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(boundBoxLZ) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(boundBoxDiag) + " " + uniteMs) try: self.LE_5.setText(str(Around(float(longueurObjet) * float(uniteM)))+ " " +uniteMs) except Exception: self.LE_5.setText(u"") if (rayonObjet != 0.0) or (str(BsplineDetect) == "<BSplineCurve object>"): self.LE_5b.setVisible(True) self.LA_5b.setVisible(True) if (str(BsplineDetect) == "<BSplineCurve object>"): self.SB_Arc_ToByArcs.setVisible(True) self.on_SB_Arc_ToByArcs_valueChanged(1) self.SB_Arc_ToByArcs.setToolTip(u"Bspline detected " + "\n" u"Number of element = " + str(BsplineNumberElement) + "\n" + u"Calcul with distance between points " + str(Around((BsplineCutLength) * uniteM)) + " " + uniteMs + "\n\n" + u"toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n" u"This value can be modified in the preferences variable : setBSplineToByArcValue" + "\n") self.PB_BSplineCreateNodes.setText(u"Points (" + str(len(BsplinePointsCoor)) + ")") # Node self.PB_BSplineCreateNodes.setToolTip(u"Create on point on Poles (" + str(len(BsplinePointsCoor)) + ") of the BSpline" + "\n\n" u"Command for Shape : Gui.Selection.getSelection()[0].Points" + "\n" u"Command for SubObj : Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve.getPoles()" + "\n\n" u"Hidden Options : " + "\n\n" u"The variables " + "\n\n" u"switchBSplineCreateCircleConstructorAxis" + "\n" u"switchBSplineCreateCircleConstructor" + "\n\n" u"accessible in : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__ + "\n" u"allow to create the circles and the point axes construction of the BSpline" + "\n" u"their number (precision) depends on the value toBiArcs(BSplinetoByArcValeurS)" + "\n" u"actual toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n") self.PB_BSplineCreateNodes.setVisible(True) self.LA_5b.setText(u"Radius Appr.") try: BsplineRayonApproximatif = str(Around(BsplineArcsRadius[0] * float(uniteM))) + " " + uniteMs # calcul except Exception: BsplineRayonApproximatif = u"" self.LE_5b.setText(BsplineRayonApproximatif) self.LE_5b.setToolTip(u"BSpline Radius on point : " + self.SB_Arc_ToByArcs.text()) self.LA_6.setText(u"BSpline nodes") self.LE_6.setText(str(BsplineNombreDeNoeuds)) self.LE_6.setToolTip(u"Number of nodes of the BSpline.") else: self.SB_Arc_ToByArcs.setVisible(False) self.PB_BSplineCreateNodes.setVisible(False) self.LA_5b.setText(u"Radius") #self.LE_5b.setText(str(Around(rayonObjet * float(uniteM))) + " " + uniteMs) self.LE_5b.setText(str(Around(rayonObjet * float(uniteM))) + " " + uniteMs + (" (dia. " + str(Around(rayonObjet * float(uniteM) * 2.0)) + " " + uniteMs + ")")) self.LE_5b.setToolTip(u"Radius detected.") if numberEdges == 1: self.LA_6.setText(u"Circonference (" + str(numberEdges) + ")") else: self.LA_6.setText(u"Perimetre of shape (" + str(numberEdges) + ")") self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) else: self.LA_6.setText(u"Perimetre of shape (" + str(numberEdges) + ")") self.SB_Arc_ToByArcs.setVisible(False) self.PB_BSplineCreateNodes.setVisible(False) self.LE_5b.setVisible(False) self.LA_5b.setVisible(False) rayonObjet = 0.0 try: self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) except Exception: perimetre = 0.0 self.LE_6.setText(str(Around(perimetre))) self.LE_6.setToolTip(u"Perimeter total of the form." + "\n" u"Display the total result of the edges") try: self.LE_9a.setText(str(Around(float(surface) * float(uniteS))) + " " + uniteSs) except Exception: self.LE_9a.setText(u"") try: self.LE_10a.setText(str(Around(float(surfaceFace) * float(uniteS))) + " " + uniteSs) except Exception: self.LE_10a.setText(u"") try: self.LE_11a.setText(str(Around(float(volume_) * float(uniteV))) + " " + uniteVs) except Exception: self.LE_11a.setText(u"") self.SB_16_M.setPrefix(uniteMs + "^") self.SB_16_M.setValue(setMomentOfInertia_16) self.LE_16_Raw.setText("Raw : " + MatrixOfInertiaRaw) self.LE_16_Raw.setCursorPosition(0) try: ## MatrixX1_16 = MatrixX1*uniteM**setMomentOfInertia_16 ## original without parenthesis and modified 17/03/2024 MatrixX1_16 = (MatrixX1*uniteM)**setMomentOfInertia_16 MatrixY1_16 = (MatrixY1*uniteM)**setMomentOfInertia_16 MatrixZ1_16 = (MatrixZ1*uniteM)**setMomentOfInertia_16 MatrixX2_16 = (MatrixX2*uniteM)**setMomentOfInertia_16 MatrixY2_16 = (MatrixY2*uniteM)**setMomentOfInertia_16 MatrixZ2_16 = (MatrixZ2*uniteM)**setMomentOfInertia_16 MatrixX3_16 = (MatrixX3*uniteM)**setMomentOfInertia_16 MatrixY3_16 = (MatrixY3*uniteM)**setMomentOfInertia_16 MatrixZ3_16 = (MatrixZ3*uniteM)**setMomentOfInertia_16 except Exception: MatrixX1_16 = MatrixY1_16 = MatrixZ1_16 = 0.0 MatrixX2_16 = MatrixY2_16 = MatrixZ2_16 = 0.0 MatrixX3_16 = MatrixY3_16 = MatrixZ3_16 = 0.0 #self.SB_16_M.setText(u"") try: ## MatrixX1_17 = MatrixX1*uniteM**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) ## original without parenthesis and modified 17/03/2024 MatrixX1_17 = (MatrixX1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY1_17 = (MatrixY1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ1_17 = (MatrixZ1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX2_17 = (MatrixX2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY2_17 = (MatrixY2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ2_17 = (MatrixZ2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX3_17 = (MatrixX3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY3_17 = (MatrixY3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ3_17 = (MatrixZ3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) except Exception: MatrixX1_17 = MatrixY1_17 = MatrixZ1_17 = 0.0 MatrixX2_17 = MatrixY2_17 = MatrixZ2_17 = 0.0 MatrixX3_17 = MatrixY3_17 = MatrixZ3_17 = 0.0 self.displayMatrixMomentOfInertia() try: self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) boundBox_S = (u"[X: " + str(Around(boundBoxLX * uniteM)) + " " + uniteMs + u"] x [Y: " + str(Around(boundBoxLY * uniteM)) + " " + uniteMs + u"] x [Z: " + str(Around(boundBoxLZ * uniteM)) + " " + uniteMs + u"] Diagonal: " + str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) except Exception: self.LE_007_BB_01_XLength.setText(u"") self.LE_007_BB_02_YLength.setText(u"") self.LE_007_BB_03_ZLength.setText(u"") self.LE_007_BB_04_Diagonal.setText(u"") boundBox_S = "" if self.GBox_012_SpreadSheet.isChecked(): co = 0 li = 0 for li in range(RowCount): # Zero for co in range(10): newitem = QTableWidgetItem(u"") self.tableWidget.setItem( li,co, newitem) co = 0 li = 0 aa = 0 for j in enumerate(Edges): # Edges newitem = QTableWidgetItem(str(j[1])) self.tableWidget.setItem( li,0, newitem) newitem = QTableWidgetItem(str(float(EdgesLong[li]) * float(uniteM)) + " " + uniteMs) self.tableWidget.setItem( li,1, newitem) co+=1 try: for a in range(aa,aa+6): # Vertexes co += 1 #newitem = QTableWidgetItem(str(Vertx[a])) chaine = str(Vertx[a]).split(u":") newitem = QTableWidgetItem(chaine[0]+":" + str(float(chaine[1]) * float(uniteM)) + " " + uniteMs) self.tableWidget.setItem( li,co, newitem) except Exception: None aa += 6 co = 0 li+= 1 li += 1 co = 0 cco = 0 co2 = 0 for j in enumerate(Faces): newitem = QTableWidgetItem(str(j[1])) self.tableWidget.setItem( li,0, newitem) newitem = QTableWidgetItem(str(float(FacesSurf[co]) * float(uniteS)) + " " + uniteSs) self.tableWidget.setItem( li,1, newitem) li+= 1 for jj in range(cco,len(FacesCoor)):# Faces coordinates cco+=1 if FacesCoor[jj] == "T": break else: #newitem = QTableWidgetItem(FacesCoor[jj]) chaine = str(FacesCoor[jj]).split(":") newitem = QTableWidgetItem(chaine[0]+":" + str(float(chaine[1]) * float(uniteM)) + " " + uniteMs) self.tableWidget.setItem( li,co2, newitem) co2 += 1 if co2 == 3: li += 1 co2 = 0 co += 1 li += 1 def on_SB_Arc_ToByArcs_valueChanged(self, val): global uniteM global uniteMs global BsplineArcsRadius global BsplineRayonApproximatif global BsplineNumberElement if (val >=1) and (val <= BsplineNumberElement): self.SB_Arc_ToByArcs.setSuffix(u" / " + str(BsplineNumberElement)) self.SB_Arc_ToByArcs.setPrefix(u"arc ") try: BsplineRayonApproximatif = str(Around(BsplineArcsRadius[val - 1] * float(uniteM))) + " " + uniteMs except Exception: BsplineRayonApproximatif = str(Around(0 * float(uniteM))) + " " + uniteMs self.LE_5b.setText(BsplineRayonApproximatif) else: self.SB_Arc_ToByArcs.setValue(0) def on_PB_BSplineCreateNodes(self): global subElemName global BsplinePointsCoor global switchInertia global switchBSplineCreateCircleConstructorAxis global switchBSplineCreateCircleConstructor FreeCAD.ActiveDocument.openTransaction(u"FCInfo Points BS") # memorise les actions (avec annuler restore) switchInertia = 1 # for create points without refresh self.PB_BSplineCreateNodes.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Work))) # icone dans une variable try: # create point on node conteneurBSpline = App.activeDocument().addObject(u"App::DocumentObjectGroup", "BSpline_Points(" + str(len(BsplinePointsCoor)) + ")") for i in BsplinePointsCoor: point = Draft.makePoint( i[0], i[1], i[2]) conteneurBSpline.addObject(point) point.ViewObject.PointColor = (1.0,0.0,0.0) point.Label = u"FCPoint_BSPline_" + subElemName FreeCADGui.updateGui() # updateGui App.ActiveDocument.recompute() except Exception: None FreeCAD.ActiveDocument.openTransaction(u"FCInfo Axis BS") # memorise les actions (avec annuler restore) if (switchBSplineCreateCircleConstructorAxis == 1) and (len(BsplineArcsLocation) != 0): try: # create point axis toByArcs() conteneurBSplineP = App.activeDocument().addObject(u"App::DocumentObjectGroup", "BSpline_Center(" + str(len(BsplineArcsLocation)) + ")") for i in BsplineArcsLocation: point = Draft.makePoint(i.Location.x, i.Location.y, i.Location.z) point.ViewObject.PointColor = (0.0,1.0,0.0) point.Label = u"FCPoint_BSPline_toByArcs_" + subElemName conteneurBSplineP.addObject(point) App.ActiveDocument.recompute() except Exception: None FreeCAD.ActiveDocument.openTransaction(u"FCInfo Circles BS") # memorise les actions (avec annuler restore) if (switchBSplineCreateCircleConstructor == 1) and (len(BsplineArcsLocation) != 0): try: # create circle toByArcs() conteneurBSplineC = App.activeDocument().addObject(u"App::DocumentObjectGroup", "BSpline_Circles(" + str(len(BsplineArcsLocation)) + ")") pl=FreeCAD.Placement() for i in BsplineArcsLocation: ## pl.Base = FreeCAD.Vector(i.Location.x, i.Location.y, i.Location.z) pl.Rotation.Q = i.Circle.Rotation.Q circle = Draft.makeCircle(radius = i.Radius, placement = pl, face = False, support = None) circle.ViewObject.LineColor = (0.0,0.0,1.0) circle.Label = u"FCCircle_BSPline_toByArcs" + subElemName conteneurBSplineC.addObject(circle) App.ActiveDocument.recompute() except Exception: None self.PB_BSplineCreateNodes.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Point))) # icone dans une variable switchInertia = 0 def SIGNAL_CBox_Materiel_Changed(self,text): global seTDensiteValue global seTMaterialCurrentIndex global seTMaterialPrice global materialAssociated global FreeCAD_ParamGetSet self.PB_Del_Material.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_DeleteLineMaterial))) # icone dans une variable self.LE_Materiel.setStyleSheet(u"QLineEdit {background-color: QPalette.Base}") # origin system if text != "": self.LE_Materiel.setText(materialAssociated[self.CBox_Materiel.currentIndex()]) # affiche la chaine pour completion ou info self.PB_Del_Material.setText(u"Delete (" + str(self.CBox_Materiel.currentIndex() + 1) + "/" + str(len(materialAssociated)) + ")") chaineMat = text.rstrip().split(",") seTDensiteValue = float(chaineMat[1]) FreeCAD_ParamGetSet.SetFloat(u"seTDensiteValue", seTDensiteValue) #*1.0 try: seTMaterialPrice = float(chaineMat[2]) except Exception: seTMaterialPrice = 0.0 #self.DS_Density.setProperty(u"value", seTDensiteValue) self.DS_Density.setValue(seTDensiteValue) self.DS_Price.setValue(seTMaterialPrice) seTMaterialCurrentIndex = self.CBox_Materiel.currentIndex() if self.CBox_Materiel.currentIndex() == -1: self.PB_Del_Material.setText(u"Delete (0\0)") self.PB_Del_Material.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Beer))) # icone dans une variable FreeCAD_ParamGetSet.SetInt(u"seTMaterialCurrentIndex", seTMaterialCurrentIndex) #*0 def on_PB_Del_Material_clicked(self): # efface le materiel en cours global materialAssociated index = self.CBox_Materiel.currentIndex() if self.CBox_Materiel.currentIndex() != -1: try: materialAssociated.remove(materialAssociated[index]) self.CBox_Materiel.clear() for ligneMat in materialAssociated: self.CBox_Materiel.addItem(_fromUtf8(ligneMat)) self.CBox_Materiel.setCurrentIndex(0) self.LE_Materiel.setText(materialAssociated[0]) self.PB_Save_Material.setText(u"Save (*)") except Exception: self.LE_Materiel.clear() None def on_PB_Save_Material_clicked(self): # sauve le materiel en cours global materialAssociated global seTMaterialSavePathName global seTMaterialFileName global FreeCAD_ParamGetSet #### save the material begin #### materialAssociated.sort() App_Console_PrintMessage(u"Number material : " + str(len(materialAssociated)) + "\n") try: seTMaterialSavePathName = path #+ seTMaterialFileName # u"FCInfo_material.txt" f = open(seTMaterialSavePathName + seTMaterialFileName, 'w') # write for i in materialAssociated: f.write(i + "\n") f.close() self.PB_Save_Material.setText(u"Save") App_Console_PrintMessage(u"Create file : " + seTMaterialFileName + "\n") FreeCAD_ParamGetSet.SetString(u"seTMaterialFileName", seTMaterialFileName) #*"FCInfo_material.txt" FreeCAD_ParamGetSet.SetString(u"seTMaterialSavePathName", seTMaterialSavePathName) #*"C:/.../Macro/ #FCInfo_material.txt" except Exception: App_Console_PrintError(u"Not file " + seTMaterialFileName + " saved" + "\n") #### save the material end #### def on_LE_Materiel_Pressed(self): # LEdit Materiel , tableau des materiaux : [ materiel, poids, prix, info ] global materialAssociated newMateriel = self.LE_Materiel.text() # extract the string in the LE_Materiel self.LE_Materiel.setStyleSheet(u"QLineEdit {background-color: QPalette.Base}") # origin system if (len(newMateriel.split(",")) >= 2): try: if (newMateriel.split(",")[1].isdecimal()) or ((float(newMateriel.split(",")[1])!= 0.0)): # test si alphaNumerique ##nomMat = newMateriel.split(",")[0].capitalize() # Metal copper (cu),8.96,10.0 ##nomMat = newMateriel.split(",")[0].title() # Metal Copper (Cu),8.96,10.0 ##nomMat = newMateriel.split(",")[0].upper() # METAL COPPER (CU),8.96,10.0 nomMat = newMateriel.split(",")[0][0].upper() + newMateriel.split(",")[0][1:] # Metal Copper (Cu),8.96,10.0 try: poidsMat = str(float(newMateriel.split(",")[1])) # teste si float except Exception: poidsMat = "0.0" try: coutMat = str(float(newMateriel.split(",")[2])) # teste si float (facultatif) except Exception: coutMat = "0.0" try: infoMat = newMateriel.split(",")[3] # info (facultatif) except Exception: infoMat = " !" newMateriel = nomMat + "," + poidsMat + "," + coutMat + "," + infoMat self.LE_Materiel.setStyleSheet(u"QLineEdit {color : QPalette.Base}") # origin system index = self.CBox_Materiel.currentIndex() if index == -1: index = 0 try: if nomMat.upper() == materialAssociated[index].split(",")[0].upper(): # remplace (efface)si c'est le meme nom materialAssociated.remove(materialAssociated[index]) except Exception: None #materialAssociated.append(newMateriel.capitalize()) # ajout la nouvelle entree materialAssociated.append(newMateriel) # ajout la nouvelle entree materialAssociated.sort() self.CBox_Materiel.clear() comptIndex = 0 for ligneMat in materialAssociated: self.CBox_Materiel.addItem(_fromUtf8(ligneMat)) #if ligneMat.rstrip().split(",")[0] == newMateriel.capitalize().split(",")[0]: if ligneMat.rstrip().split(",")[0] == newMateriel.split(",")[0][0].upper() + newMateriel.split(",")[0][1:]: index = comptIndex comptIndex += 1 self.CBox_Materiel.setCurrentIndex(index) self.LE_Materiel.clear() self.PB_Save_Material.setText(u"Save (*)") else: self.LE_Materiel.setStyleSheet(u"QLineEdit {background-color: #efef29}") except Exception: self.LE_Materiel.setStyleSheet(u"QLineEdit {background-color: #ef2929}") else: self.LE_Materiel.setStyleSheet(u"QLineEdit {background-color: #ef2929}") def on_DS_Density_valueChanged(self,densiteSB): # SpinBox # DS_Density_1 poids global volume_ global uniteM global uniteP global unitePs global uniteV # uniteV not in Global ?, add it 05/12/21 global seTDensiteValue global poids global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixX1 global MatrixY1 global MatrixZ1 global MatrixX2 global MatrixY2 global MatrixZ2 global MatrixX3 global MatrixY3 global MatrixZ3 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global seTMaterialPrice global seTMaterialCost global seTMaterialSuffixCost global FreeCAD_ParamGetSet seTDensiteValue = densiteSB FreeCAD_ParamGetSet.SetFloat(u"seTDensiteValue", seTDensiteValue) poids = ((volume_ * seTDensiteValue) * uniteP) / 1000.0 # base FreeCAD = mm self.LE_12a.setText(str(Around(poids)) + " " + unitePs) seTMaterialCost = ((volume_ * seTDensiteValue * seTMaterialPrice) / 1000000.0) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial self.SB_17_M.setPrefix(unitePs + uniteSs + "^") self.SB_17_M.setValue(setMomentOfInertiaMassique_17) try: ## MatrixX1_17 = MatrixX1*uniteM**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) ## original without parenthesis and modified 17/03/2024 MatrixX1_17 = (MatrixX1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY1_17 = (MatrixY1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ1_17 = (MatrixZ1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX2_17 = (MatrixX2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY2_17 = (MatrixY2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ2_17 = (MatrixZ2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX3_17 = (MatrixX3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY3_17 = (MatrixY3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ3_17 = (MatrixZ3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) except Exception: MatrixX1_17 = MatrixY1_17 = MatrixZ1_17 = 0.0 MatrixX2_17 = MatrixY2_17 = MatrixZ2_17 = 0.0 MatrixX3_17 = MatrixY3_17 = MatrixZ3_17 = 0.0 self.displayMatrixMomentOfInertia() def on_DS_Price_valueChanged(self, price): # DSpinBox global volume_ global seTDensiteValue global seTMaterialPrice global seTMaterialCost global seTMaterialSuffixCost seTMaterialPrice = price seTMaterialCost = ((volume_ * seTDensiteValue * seTMaterialPrice) / 1000000.0) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial FreeCAD_ParamGetSet.SetFloat(u"seTMaterialPrice", seTMaterialPrice) # *x FreeCAD_ParamGetSet.SetFloat(u"seTMaterialCost", seTMaterialCost) # *x def on_PB_01_Refrech_clicked(self): # refresh global sel global document_ global object_Label global object_Name global typeObject global object_Type global subElemName global position0 global position1 global position2 global diffuseColorRF global diffuseColorVF global diffuseColorBF global diffuseColorTF global unsignedEncodeColor global longueurObjet global rayonObjet global perimetre global typeLongueur global numberEdges global nombreArretesMesh global nombreFacesMesh global nombrePointsMesh global Plan_xy global Plan_xy_V global Plan_yz global Plan_yz_V global Plan_zx global Plan_zx_V global surface global surfaceFace global volume_ global seTDensiteValue global poids global uniteM global uniteMs global uniteS global uniteSs global uniteV global uniteVs global uniteP global unitePs global uniteAs global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ global CenterOfMassX global CenterOfMassY global CenterOfMassZ global massOrGravity global boundBoxLX global boundBoxLY global boundBoxLZ global boundBox_S global MatrixX1 global MatrixY1 global MatrixZ1 global Matrix_1 global MatrixX2 global MatrixY2 global MatrixZ2 global Matrix_2 global MatrixX3 global MatrixY3 global MatrixZ3 global Matrix_3 global Matrix12 global Matrix13 global Matrix14 global Matrix15 global Vertx global Edges global EdgesLong global Faces global FacesSurf global FacesCoor global compt_E global compt_F global compt_VF global RowCount global RowCountTest global ESCAPE global directionObj global direcValueAt global direcNormalAt global typeNormalAt global switchCreateLineDiVatNatOnClick global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixOfInertiaRaw global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 global MatrixX3_16 global MatrixY3_16 global MatrixZ3_16 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global DeterminantM global seTMaterialPrice global seTMaterialCost global seTMaterialSuffixCost global seTIndexUnitLength global BsplineDetect global BsplineNombreDeNoeuds global BsplinePointsCoor global BsplineRayonApproximatif global BsplineNumberElement global BsplineCutLength global setBSplineToByArcValue global BSplinetoByArcValeurS global BsplineArcsRadius global FreeCAD_ParamGetSet sel = FreeCADGui.Selection.getSelection() if len(sel)==0: App_Console_PrintMessage(u"Select an object" + "\n") errorDialog(u"Select an object") else: if self.GBox_012_SpreadSheet.isChecked(): affect(1) else: affect(0) self.GBox_012_SpreadSheet.setTitle(u"Details of the form") self.LE_1.setText(document_) self.LE_2.setText(object_Label) self.LE_2a.setText(object_Name) self.LE_3.setText(str(subElemName)) self.LE_3a.setText(str(typeObject)) self.LE_4.setText(str(object_Type)) self.LA_14x.setText(massOrGravity + u" X") self.LA_14y.setText(massOrGravity + u" Y") self.LA_14z.setText(massOrGravity + u" Z") self.LE_4x.setText(str(Around(position0 * uniteM)) + " " + uniteMs) self.LE_4y.setText(str(Around(position1 * uniteM)) + " " + uniteMs) self.LE_4z.setText(str(Around(position2 * uniteM)) + " " + uniteMs) self.LE_N_Edges.setText(str(nombreArretesMesh)) self.LE_N_Facets.setText(str(nombreFacesMesh)) self.LE_N_Points.setText(str(nombrePointsMesh)) self.LE_CRed.setText(str(Around(diffuseColorRF))) self.LE_CRed.setToolTip(u"Red color at clicked point (format FreeCAD)") self.LE_CRed.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb("+str(int(diffuseColorRF*255.0))+", 0, 0)}") # white and red self.LE_CGreen.setText(str(Around(diffuseColorVF))) self.LE_CGreen.setToolTip(u"Green color at the clicked point (format FreeCAD)") self.LE_CGreen.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb(0, "+str(int(diffuseColorVF*255.0))+", 0)}") # white and green self.LE_CBlue.setText(str(Around(diffuseColorBF))) self.LE_CBlue.setToolTip(u"Blue color at the clicked point (format FreeCAD)") self.LE_CBlue.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb(0, 0, "+str(int(diffuseColorBF*255.0))+")}") # white and blue self.LE_Transparent.setText(str(Around(diffuseColorTF))) self.LE_Transparent.setToolTip(u"Transparency at the clicked point") self.LE_ConversionUnsigned.setText(str(unsignedEncodeColor)) self.LE_ConversionUnsigned.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: rgb("+str(int(diffuseColorRF*255.0))+","+str(int(diffuseColorVF*255.0))+","+str(int(diffuseColorBF*255.0))+")}") # white switchCreateLineDiVatNatOnClick = FreeCAD_ParamGetSet.GetBool(u"switchCreateLineDiVatNatOnClick") if switchCreateLineDiVatNatOnClick == 0: self.PB_Line_Direction.setText(u"Direction") self.PB_Line_ValueAT.setText(u"ValueAt(0)") self.PB_Line_NormalAT.setText(typeNormalAt) else: self.PB_Line_Direction.setText(u"*Direction") self.PB_Line_ValueAT.setText(u"*ValueAt(0)") self.PB_Line_NormalAT.setText(typeNormalAt) self.LE_9_Direction.setText(str(directionObj)) self.LE_10_ValueAt.setText(str(direcValueAt)) self.LE_10b_NormalAt.setText(str(direcNormalAt)) self.PB_Line_NormalAT.setText(typeNormalAt) self.SBox_Transparence.setValue(transparenceFace) try: self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) boundBox_S = "[X: "+str(Around(boundBoxLX * uniteM)) + " " + uniteMs+"] x [Y: "+str(Around(boundBoxLY * uniteM)) + " " + uniteMs+"] x [Z: "+str(Around(boundBoxLZ * uniteM)) + " " + uniteMs+"] Diagonal: " + str(Around(boundBoxDiag * uniteM)) + " " + uniteMs except Exception: self.LE_007_BB_01_XLength.setText(u"") self.LE_007_BB_02_YLength.setText(u"") self.LE_007_BB_03_ZLength.setText(u"") self.LE_007_BB_04_Diagonal.setText(u"") boundBox_S = u"" self.LA_5.setText(typeLongueur) try: self.LE_5.setText(str(Around(float(longueurObjet) * float(uniteM)))+ " " +uniteMs) except Exception: self.LE_5.setText(u"") # Circle Bspline if (rayonObjet != 0.0) or (str(BsplineDetect) == "<BSplineCurve object>"): self.LE_5b.setVisible(True) self.LA_5b.setVisible(True) if str(BsplineDetect) == "<BSplineCurve object>": # BsplineArcsRadius = [] self.on_SB_Arc_ToByArcs_valueChanged(1) self.SB_Arc_ToByArcs.setVisible(True) self.SB_Arc_ToByArcs.setToolTip(u"Bspline detected " + "\n" u"Number of element = " + str(BsplineNumberElement) + "\n" + u"Calcul with difference between points " + str(Around(BsplineCutLength * uniteM)) + " " + uniteMs + "\n\n" + u"toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n" u"This value can be changed in the variable preferences : setBSplineToByArcValue" + "\n") self.PB_BSplineCreateNodes.setText(u"Points(" + str(len(BsplinePointsCoor)) + ")") # Node self.PB_BSplineCreateNodes.setToolTip(u"Create on point on Poles (" + str(len(BsplinePointsCoor)) + ") of the BSpline" + "\n\n" u"Command for Shape : Gui.Selection.getSelection()[0].Points" + "\n" u"Command for SubObj : Gui.Selection.getSelectionEx()[0].SubObjects[0].Curve.getPoles()" + "\n\n" u"Hidden Options : " + "\n\n" u"The variables " + "\n\n" u"switchBSplineCreateCircleConstructorAxis" + "\n" u"switchBSplineCreateCircleConstructor" + "\n\n" u"accessible in : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __Title__ + "\n" u"allow to create the circles and the point axes construction of the BSpline" + "\n" u"their number (precision) depends on the value toBiArcs(BSplinetoByArcValeurS)" + "\n" u"actual toBiArcs(" + BSplinetoByArcValeurS + ")" + "\n") self.PB_BSplineCreateNodes.setVisible(True) self.LA_5b.setText(u"Radius Appr.") self.LE_5b.setText(BsplineRayonApproximatif) self.LE_5b.setToolTip(u"BSpline Radius on point : ")# + self.SB_Arc_ToByArcs.text() self.LA_6.setText(u"BSpline Nodes") self.LE_6.setText(str(BsplineNombreDeNoeuds)) self.LE_6.setToolTip(u"Number of nodes of the BSpline.") else: self.SB_Arc_ToByArcs.setVisible(False) self.PB_BSplineCreateNodes.setVisible(False) self.LA_5b.setText(u"Radius") #self.LE_5b.setText(str(Around(rayonObjet * float(uniteM))) + " " + uniteMs) self.LE_5b.setText(str(Around(rayonObjet * float(uniteM))) + " " + uniteMs + (u" (dia. " + str(Around(rayonObjet * float(uniteM) * 2.0)) + " " + uniteMs + ")")) self.LE_5b.setToolTip(u"Radius detected.") if numberEdges == 1: self.LA_6.setText(u"Circumference (" + str(numberEdges) + ")") else: self.LA_6.setText(u"Perimeter of shape (" + str(numberEdges) + ")") self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) else: self.LA_6.setText(u"Perimeter of shape (" + str(numberEdges) + ")") self.SB_Arc_ToByArcs.setVisible(False) self.PB_BSplineCreateNodes.setVisible(False) self.LE_5b.setVisible(False) self.LA_5b.setVisible(False) rayonObjet = 0.0 try: self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) except Exception: perimetre = 0.0 self.LE_6.setText(str(Around(perimetre))) self.LE_6.setToolTip(u"Perimeter total of the form." + "\n" u"Display the total edges of theform") if self.GBox_012_SpreadSheet.isChecked(): self.tableWidget.clear() # Zero co = 0 li = 1 aa = 0 #### detail of Cercle BSpline begin if (str(BsplineDetect) == "<BSplineCurve object>"): newitem = QTableWidgetItem(u"Number of nodes") self.tableWidget.setItem( li,0, newitem) newitem = QTableWidgetItem(str(len(BsplinePointsCoor))) self.tableWidget.setItem( li,1, newitem) li += 1 for i in enumerate(BsplinePointsCoor): # Edges newitem = QTableWidgetItem(u"Node" + str(i[0]+1)) self.tableWidget.setItem( li,0, newitem) for a in range(3): # Vertexes co += 1 chaine = str(Around(BsplinePointsCoor[i[0]][a])) newitem = QTableWidgetItem(chaine) self.tableWidget.setItem( li,co, newitem) aa += 6 co = 0 li += 1 #### detail of Cercle BSpline end if RowCountTest > RowCount: self.GBox_012_SpreadSheet.setTitle(u"Details ("+ str(compt_E) +") ("+ str(compt_F)+") ("+ str(compt_VF)+") (!+ "+str(RowCount)+") "+str(RowCountTest)) else: self.GBox_012_SpreadSheet.setTitle(u"Vertexes and details ("+ str(compt_E) +") ("+ str(compt_F)+") ("+ str(compt_VF)+")")#str(RowCount) co = 0 li = 0 aa = 0 for j in enumerate(Edges): # Edges newitem = QTableWidgetItem(str(j[1])) self.tableWidget.setItem( li,0, newitem) newitem = QTableWidgetItem(str(float(EdgesLong[li]) * float(uniteM))+" "+uniteMs) self.tableWidget.setItem( li,1, newitem) co+=1 try: for a in range(aa,aa+6): # Vertexes co += 1 #newitem = QTableWidgetItem(str(Vertx[a])) chaine = str(Vertx[a]).split(":") newitem = QTableWidgetItem(chaine[0]+":" + str(float(chaine[1]) * float(uniteM))+" "+uniteMs) self.tableWidget.setItem( li,co, newitem) except Exception: None aa += 6 co = 0 li += 1 li += 1 co = 0 cco = 0 co2 = 0 for j in enumerate(Faces): # Faces newitem = QTableWidgetItem(str(j[1])) self.tableWidget.setItem( li,0, newitem) newitem = QTableWidgetItem(str(float(FacesSurf[co]) * float(uniteS))+" "+uniteSs) self.tableWidget.setItem( li,1, newitem) li += 1 for jj in range(cco,len(FacesCoor)):# Faces coordinates cco+=1 if FacesCoor[jj] == "T": break else: # newitem = QTableWidgetItem(FacesCoor[jj]) chaine = str(FacesCoor[jj]).split(":") newitem = QTableWidgetItem(chaine[0]+":" + str(float(chaine[1]) * float(uniteM)) + " " + uniteMs) self.tableWidget.setItem( li,co2, newitem) co2 += 1 if co2 == 3: li += 1 co2 = 0 co += 1 li += 1 self.LE_8xy.setText(str(Around(Plan_xy))+uniteAs) self.LE_8xya.setText(str(Plan_xy_V)) self.LE_8yz.setText(str(Around(Plan_yz))+uniteAs) self.LE_8yza.setText(str(Plan_yz_V)) self.LE_8zx.setText(str(Around(Plan_zx))+uniteAs) self.LE_8zxa.setText(str(Plan_zx_V)) self.LE_9a.setText(str(Around(surface * uniteS)) + " " + uniteSs) self.LE_10a.setText(str(Around(surfaceFace * uniteS)) + " " + uniteSs) self.LE_11a.setText(str(Around(volume_ * uniteV)) + " " + uniteVs) self.LE_12a.setText(str(Around(poids)) + " " + unitePs) seTMaterialCost = ((volume_ * seTDensiteValue * seTMaterialPrice) / 1000000.0) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial self.LE_13x.setText(str(Around(boundBoxCenterX * uniteM)) + " " + uniteMs) self.LE_13y.setText(str(Around(boundBoxCenterY * uniteM)) + " " + uniteMs) self.LE_13z.setText(str(Around(boundBoxCenterZ * uniteM)) + " " + uniteMs) self.LE_14x.setText(str(Around(CenterOfMassX * uniteM)) + " " + uniteMs) self.LE_14y.setText(str(Around(CenterOfMassY * uniteM)) + " " + uniteMs) self.LE_14z.setText(str(Around(CenterOfMassZ * uniteM)) + " " + uniteMs) self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) self.SB_16_M.setPrefix(uniteMs + "^") self.SB_16_M.setValue(setMomentOfInertia_16) self.LE_16_Raw.setText("Raw : " + MatrixOfInertiaRaw) self.LE_16_Raw.setCursorPosition(0) try: ## MatrixX1_16 = MatrixX1*uniteM**setMomentOfInertia_16 ## original without parenthesis and modified 17/03/2024 MatrixX1_16 = (MatrixX1*uniteS)**setMomentOfInertia_16 MatrixY1_16 = (MatrixY1*uniteS)**setMomentOfInertia_16 MatrixZ1_16 = (MatrixZ1*uniteS)**setMomentOfInertia_16 MatrixX2_16 = (MatrixX2*uniteS)**setMomentOfInertia_16 MatrixY2_16 = (MatrixY2*uniteS)**setMomentOfInertia_16 MatrixZ2_16 = (MatrixZ2*uniteS)**setMomentOfInertia_16 MatrixX3_16 = (MatrixX3*uniteS)**setMomentOfInertia_16 MatrixY3_16 = (MatrixY3*uniteS)**setMomentOfInertia_16 MatrixZ3_16 = (MatrixZ3*uniteS)**setMomentOfInertia_16 except Exception: MatrixX1_16 = MatrixY1_16 = MatrixZ1_16 = 0.0 MatrixX2_16 = MatrixY2_16 = MatrixZ2_16 = 0.0 MatrixX3_16 = MatrixY3_16 = MatrixZ3_16 = 0.0 #self.SB_16_M.setText(u"") try: ## MatrixX1_17 = MatrixX1*uniteM**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) ## original without parenthesis and modified 17/03/2024 MatrixX1_17 = (MatrixX1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY1_17 = (MatrixY1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ1_17 = (MatrixZ1*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX2_17 = (MatrixX2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY2_17 = (MatrixY2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ2_17 = (MatrixZ2*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixX3_17 = (MatrixX3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixY3_17 = (MatrixY3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) MatrixZ3_17 = (MatrixZ3*uniteM)**setMomentOfInertiaMassique_17*seTDensiteValue*uniteP*(1.0/(uniteV*1000.0)) except Exception: MatrixX1_17 = MatrixY1_17 = MatrixZ1_17 = 0.0 MatrixX2_17 = MatrixY2_17 = MatrixZ2_17 = 0.0 MatrixX3_17 = MatrixY3_17 = MatrixZ3_17 = 0.0 self.displayMatrixMomentOfInertia() self.RB_01_Tabulation.setText(u"Tabulation") self.RB_02_Virgule.setText(u"Comma") self.RB_03_Point_Virgule.setText(u"Semicolon") self.RB_04_Espace.setText(u"Space") # self.RB_01_Tabulation.setChecked(True) # ESCAPE = "\t" self.paletteBase() def on_RB_Separation(self): # option ESCAPE for spreadSheet global ESCAPE if self.RB_01_Tabulation.isChecked(): #tabulation #compatible FC ESCAPE = "\t" elif self.RB_02_Virgule.isChecked(): #virgule #compatible FCInfo ESCAPE = "," elif self.RB_03_Point_Virgule.isChecked(): #point virgule #option ESCAPE = ";" elif self.RB_04_Espace.isChecked(): #espace #option ESCAPE = " " def on_PB_01_Read_SpreadSheet_clicked(self): # lecture global ESCAPE global setPathLatestDirectory global FreeCAD_ParamGetSet OpenName = "" #### mint if platform.node() == "mint": # Mint OpenName, Filter = QFileDialog.getOpenFileName(None, u"Read a txt file", setPathLatestDirectory, "(FCInfo *.FCInfo);;(Cvs *.csv);;(Ascii *.asc);;(TXT *.txt);;(*.*);;(*)")#PySide Mint #### mint else: OpenName, Filter = QFileDialog.getOpenFileName(None, u"Read a txt file", setPathLatestDirectory, "*.FCInfo *.csv *.asc *.txt;;FCInfo (*.FCInfo);;Cvs (*.csv);;Ascii (*.asc);;TXT (*.txt);;(*.*);;(*)")#PySide try: if OpenName != "": ####new2 pathFile = os.path.dirname(OpenName) + "/" #1# = C:/Provisoire400/ setPathLatestDirectory = pathFile FreeCAD_ParamGetSet.SetString(u"setPathLatestDirectory", setPathLatestDirectory) #*"C:/ ???" #racineDrive = os.path.splitdrive(OpenName)[0] #2# = C: #formatFichier = os.path.splitext(OpenName)[1] #4# = .png #OpenName = os.path.splitext(OpenName)[0] #5# = /home/kubuntu/.FreeCAD/Macro/Texture_007_H #= C:/Provisoire400/image3D #nomFichier = os.path.basename(OpenName) #3# = image3D #SaveNameformatFichier = OpenName + formatFichier #6# = C:/Provisoire400/image3D.png #pathFileSaveNameformatFichier = pathFile + nomFichier + formatFichier #7# = C:/Provisoire400/image3D.png ####new2 ####detection separator################### file = open(OpenName, "r") # open file for counter separator separateur1 = separateur2 = separateur3 = separateur4 = 0 for separator in file: separateur1 += separator.count(u"\t") separateur2 += separator.count(u",") separateur3 += separator.count(u";") separateur4 += separator.count(u" ") self.RB_01_Tabulation.setText(u"Tabulation "+str(separateur1)) self.RB_02_Virgule.setText(u"Comma "+str(separateur2)) self.RB_03_Point_Virgule.setText(u"Semicolon "+str(separateur3)) self.RB_04_Espace.setText(u"Space "+"(" + str(separateur4) + ")") file.close() ####detection separator################### ####counter line and colonne################### file = open(OpenName, "r") # open file for counter line and colonne reader = csv.reader(file, delimiter = ESCAPE) #, quotechar=';' Count0 = 0 ligne = 0 colonne = 0 try: # for row in reader: ligne += 1 # for field in row: Count0 += 1 # if Count0 > colonne: colonne = Count0 Count0 = 0 finally: file.close() self.table = QTableWidget( ligne , colonne) # prepare le tableau self.table.setWindowTitle(u"FCInfo Patience reading the file") # self.table.resize(700, 500) self.table.resize(500, 700) self.table.setWindowModality(QtCore.Qt.NonModal) self.table.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) # PySide self.table.setWindowIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_04))) # icone dans une variable self.table.show() ####counter line and colonne################### ####csv.reader################### file = open(OpenName, "r") # open file for read reader = csv.reader(file, delimiter = ESCAPE) #, quotechar=';' lignes = ligne colonne = 0 ligne = 0 try: for row in reader: for field in row: newitem = QTableWidgetItem(str(field)) self.table.setItem(ligne, colonne, newitem) colonne += 1 ligne += 1 colonne = 0 self.table.setWindowTitle(u"FCInfo Patience reading the file "+str(ligne)+"/"+str(lignes)) finally: file.close() self.table.setWindowTitle(u"FCInfo Tableau " + OpenName) ####csv.reader################### except Exception: App_Console_PrintMessage(u"Error in reading the file " + OpenName + "\n") errorDialog(u"Error in reading the file " + OpenName) def on_PB_02_Save_SreadSheet_clicked(self): # registration global document_ global object_Label global object_Name global typeObject global object_Type global subElemName global position0 global position1 global position2 global longueurObjet global rayonObjet global detected global perimetre global massOrGravity global diffuseColorRF global diffuseColorVF global diffuseColorBF global diffuseColorTF global Plan_xy_V global Plan_yz_V global Plan_zx_V global surface global surfaceFace global volume_ global seTDensiteValue global poids global uniteM global uniteMs global uniteS global uniteSs global uniteV global uniteVs global unitePs global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ global CenterOfMassX global CenterOfMassY global CenterOfMassZ global boundBoxLX global boundBoxLY global boundBoxLZ global Vertx global Edges global EdgesLong global Faces global FacesSurf global FacesCoor global compt_E global compt_F global compt_VF global RowCountTest global path global SaveName global ESCAPE global directionObj global direcValueAt global direcNormalAt global Matrix_1 global Matrix_2 global Matrix_3 global Matrix12 global Matrix13 global Matrix14 global Matrix15 global DeterminantM global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixOfInertiaRaw global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 global MatrixX3_16 global MatrixY3_16 global MatrixZ3_16 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global typeLongueur global nombreArretesMesh global nombreFacesMesh global nombrePointsMesh global colorShapeFaceDiffuseColor global BsplineDetect global BsplineNombreDeNoeuds global BsplinePointsCoor global seTMaterialCost global seTMaterialPrice global seTMaterialSuffixCost global materialAssociated global seTMaterialCurrentIndex global setPathLatestDirectory global FreeCAD_ParamGetSet SaveName = "" #### mint if platform.node() == "mint": # Mint SaveName, Filter = QFileDialog.getSaveFileName(None, "Save a txt file", setPathLatestDirectory, " (FCInfo *.FCInfo);; (Cvs *.csv);; (Ascii *.asc);; (TXT *.txt);;(*.*);;(*)")#PySide Mint Filter = Filter[Filter.find("."):Filter.find(")")] if Filter[-2:] == ".*": Filter = Filter[:-2] if SaveName.count(".") == 1: # supposed extension free None else: SaveName = SaveName + Filter #### Windows elif platform.system() == "Windows": SaveName, Filter = QFileDialog.getSaveFileName(None, "Save a txt file", setPathLatestDirectory, "*.FCInfo *.csv *.asc *.txt;;FCInfo (*.FCInfo);;Cvs (*.csv);;Ascii (*.asc);;TXT (*.txt);;(*.*);;(*)")#PySide #### other Kubuntu else: SaveName, Filter = QFileDialog.getSaveFileName(None, "Save a txt file", setPathLatestDirectory, " (FCInfo *.FCInfo);; (Cvs *.csv);; (Ascii *.asc);; (TXT *.txt);;(*.*);;(*)")#PySide ubuntu Filter = Filter[Filter.find("."):Filter.find(")")] if (Filter == "*.*") or (Filter == ".*") or (Filter == "*") or (Filter == ".") or (Filter == ""): Filter = ".FCInfo" if SaveName.count(".") == 1: # supposed extension free None else: SaveName = SaveName + Filter #### if SaveName == "": App_Console_PrintMessage(u"Process aborted" + "\n") errorDialog(u"Process aborted") else: App_Console_PrintMessage(u"Registration of " + SaveName + "\n") ####new2 pathFile = os.path.dirname(SaveName) + "/" #1# = C:/Provisoire400/ setPathLatestDirectory = pathFile FreeCAD_ParamGetSet.SetString(u"setPathLatestDirectory", setPathLatestDirectory) #*"C:/ ???" #racineDrive = os.path.splitdrive(SaveName)[0] #2# = C: #formatFichier = os.path.splitext(SaveName)[1] #4# = .png #SaveName = os.path.splitext(SaveName)[0] #5# = /home/kubuntu/.FreeCAD/Macro/Texture_007_H #= C:/Provisoire400/image3D #nomFichier = os.path.basename(SaveName) #3# = image3D #SaveNameformatFichier = SaveName + formatFichier #6# = C:/Provisoire400/image3D.png #pathFileSaveNameformatFichier = pathFile + nomFichier + formatFichier #7# = C:/Provisoire400/image3D.png ####new2 try: f = open(SaveName, 'w') # write f.write(iso8859(u"Info of the element\n")) f.write(iso8859(u"___________________\n")) f.write(iso8859(dateUs() + " "+ heure() + "\n\n")) f.write(iso8859(u"Name of the document" + ESCAPE + document_ + "\n")) f.write(iso8859(u"Label Name" + ESCAPE + object_Label + "\n")) f.write(iso8859(u"Internal Name" + ESCAPE + object_Name + "\n")) f.write(iso8859(u"Name of the element" + ESCAPE + str(subElemName) + "\n")) f.write(iso8859(u"Object type (Shape)" + ESCAPE + typeObject + "\n")) f.write(iso8859(u"Object type" + ESCAPE + object_Type + "\n\n")) f.write(iso8859(u"Mouse coordinates" + ESCAPE + "X" + ESCAPE + str(Around(position0 * uniteM)) + ESCAPE + uniteMs + ESCAPE + "Y" + ESCAPE + str(Around(position1 * uniteM)) + ESCAPE + uniteMs + ESCAPE + "Z" + ESCAPE + str(Around(position2 * uniteM)) + ESCAPE + uniteMs + "\n\n")) #### couleurs f.write(iso8859(u"Color of the selection" + "\n")) f.write(iso8859(u"Red" + ESCAPE + str(int(diffuseColorRF*255.0)) + ESCAPE + u"Green" + ESCAPE + str(int(diffuseColorVF*255.0)) + ESCAPE + u"Blue" + ESCAPE + str(int(diffuseColorBF*255.0)) + ESCAPE + u"Transparency" + ESCAPE + str(int(diffuseColorTF*255.0)) + "\n\n")) if len(colorShapeFace) != 0: f.write(iso8859(u"Color Objet (float) " + ESCAPE + u"Red" + ESCAPE + str(colorShapeFace[0]) + ESCAPE + u"Green" + ESCAPE + str(colorShapeFace[1]) + ESCAPE + u"Blue" + ESCAPE + str(colorShapeFace[2]) + ESCAPE + u"Transparency" + ESCAPE + str(colorShapeFace[3]) + "\n")) f.write(iso8859(u"Color Objet (int ) " + ESCAPE + u"Red" + ESCAPE + str(int(colorShapeFace[0]*255.0)) + ESCAPE + u"Green" + ESCAPE + str(int(colorShapeFace[1]*255.0)) + ESCAPE + u"Blue" + ESCAPE + str(int(colorShapeFace[2]*255.0)) + ESCAPE + u"Transparency" + ESCAPE + str(int(colorShapeFace[3]*255.0)) + "\n\n")) if len(colorShapeLine) != 0: f.write(iso8859(u"Color Line(s) (float) " + ESCAPE + u"Red" + ESCAPE + str(colorShapeLine[0]) + ESCAPE + u"Green" + ESCAPE + str(colorShapeLine[1]) + ESCAPE + u"Blue" + ESCAPE + str(colorShapeLine[2]) + ESCAPE + u"Transparency" + ESCAPE + str(colorShapeLine[3]) + "\n")) f.write(iso8859(u"Color Line(s) (int ) " + ESCAPE + u"Red" + ESCAPE + str(int(colorShapeLine[0]*255.0)) + ESCAPE + u"Green" + ESCAPE + str(int(colorShapeLine[1]*255.0)) + ESCAPE + u"Blue" + ESCAPE + str(int(colorShapeLine[2]*255.0)) + ESCAPE + u"Transparency" + ESCAPE + str(int(colorShapeLine[3]*255.0)) + "\n\n")) if len(colorShapePoint) != 0: try: f.write(iso8859(u"Color Point(s) (float) " + ESCAPE + u"Red" + ESCAPE + str(colorShapePoint[0]) + ESCAPE + u"Green" + ESCAPE + str(colorShapePoint[1]) + ESCAPE + u"Blue" + ESCAPE + str(colorShapePoint[2]) + ESCAPE + u"Transparency" + ESCAPE + str(colorShapePoint[3]) + "\n")) f.write(iso8859(u"Color Point(s) (int ) " + ESCAPE + u"Red" + ESCAPE + str(int(colorShapePoint[0]*255.0)) + ESCAPE + u"Green" + ESCAPE + str(int(colorShapePoint[1]*255.0)) + ESCAPE + u"Blue" + ESCAPE + str(int(colorShapePoint[2]*255.0)) + ESCAPE + u"Transparency" + ESCAPE + str(int(colorShapePoint[3]*255.0)) + "\n\n")) except Exception: None f.write(iso8859(typeLongueur + ESCAPE + str(Around(longueurObjet * uniteM)) + ESCAPE + uniteMs + "\n")) if detected[0:4] == "Mesh": f.write(iso8859(u"Components Mesh" + "\n")) f.write(iso8859(u"_______________\n")) f.write(iso8859(u"Number Edges" + ESCAPE + str(nombreArretesMesh) + "\n")) f.write(iso8859(u"Number Faces" + ESCAPE + str(nombreFacesMesh) + "\n")) f.write(iso8859(u"Number Points" + ESCAPE + str(nombrePointsMesh) + "\n\n")) if detected == "<PointKernel object>": f.write(iso8859(u"Components Points" + "\n")) f.write(iso8859(u"_________________\n")) f.write(iso8859(u"Number Points" + ESCAPE + str(nombrePointsMesh) + "\n\n")) #### detail of Cercle if rayonObjet != 0.0: f.write(iso8859(u"Radius" + ESCAPE + str(Around(rayonObjet * uniteM)) + ESCAPE + uniteMs + "\n\n")) f.write(iso8859(u"Perimeter of the shape" + ESCAPE + str(Around(perimetre * uniteM)) + ESCAPE + uniteMs + "\n\n")) if self.GBox_012_SpreadSheet.isChecked(): #### detail of Cercle BSpline begin if (str(BsplineDetect) == "<BSplineCurve object>"): f.write(iso8859(u"Number of nodes" + ESCAPE + str(BsplineNombreDeNoeuds) + "\n")) for i in enumerate(BsplinePointsCoor): # nombre de points noeuds f.write(iso8859(u"Nodes" + str(i[0]) + ESCAPE + u"X" + str(i[0] + 1) + ESCAPE + str(Around(i[1][0])) + ESCAPE + u"Y" + str(i[0] + 1) + ESCAPE + str(Around(i[1][1])) + ESCAPE + u"Z" + str(i[0] + 1) + ESCAPE + str(Around(i[1][2])) + ESCAPE + "\n")) f.write(iso8859("\n")) #### detail of Cercle BSpline end f.write(iso8859(u"Vertexes and details" + ESCAPE + u" Number Edges" + ESCAPE + str(compt_E) + ESCAPE + u" Number Faces" + ESCAPE + str(compt_F) + ESCAPE + u" Number Vertexes faces" + ESCAPE + str(compt_VF) + ESCAPE + u" Detail Total" + ESCAPE + str(RowCountTest) + "\n\n")) co = 0 aa = 0 for j in enumerate(Edges): f.write(str(j[1]) + ESCAPE +iso8859(str(Around(float(EdgesLong[co]) * float(uniteM))) + ESCAPE + uniteMs + ESCAPE))#"\n" co+=1 for a in range(aa,aa+6): try: chaine = str(Vertx[a]).split(":") f.write(chaine[0] + ESCAPE + iso8859(str(Around(float(chaine[1]) * float(uniteM)))) + ESCAPE + uniteMs + ESCAPE) except Exception: None aa += 6 f.write("\n") f.write("\n") co = 0 cco = 0 co2 = 0 for j in enumerate(Faces): f.write(str(j[1]) + ESCAPE + iso8859(str(Around(float(FacesSurf[co]) * float(uniteS))) + ESCAPE + uniteSs + "\n")) co += 1 if len(colorShapeFaceDiffuseColor) != 0: f.write(iso8859(u"Color float Face" + str(j[0]+1) + ESCAPE + u"Red" + ESCAPE + str(colorShapeFaceDiffuseColor[j[0]][0]) + ESCAPE + u"Green " + ESCAPE + str(colorShapeFaceDiffuseColor[j[0]][1]) + ESCAPE + u"Blue " + ESCAPE + str(colorShapeFaceDiffuseColor[j[0]][2]) + ESCAPE + u"Transparency" + ESCAPE + str(colorShapeFaceDiffuseColor[j[0]][3]) + ESCAPE + "\n")) f.write(iso8859(u"Couleur integer Face" + str(j[0]+1) + ESCAPE + u"Red" + ESCAPE + str(int(colorShapeFaceDiffuseColor[j[0]][0]*255.0)) + ESCAPE + u"Green " + ESCAPE + str(int(colorShapeFaceDiffuseColor[j[0]][1]*255.0)) + ESCAPE + u"Blue " + ESCAPE + str(int(colorShapeFaceDiffuseColor[j[0]][2]*255.0)) + ESCAPE + u"Transparency" + ESCAPE + str(int(colorShapeFaceDiffuseColor[j[0]][3]*255.0)) + ESCAPE + "\n")) for jj in range(cco,len(FacesCoor)):# Faces coordinates cco+=1 if FacesCoor[jj] == "T": f.write("\n") break else: chaine = str(FacesCoor[jj]).split(":") f.write(iso8859(chaine[0] + ESCAPE + str(Around(float(chaine[1]) * float(uniteM))) + ESCAPE + uniteMs + ESCAPE)) co2 += 1 if co2 == 3: f.write("\n") co2 = 0 f.write(u"\n") f.write(iso8859(u"Plane" + ESCAPE + u" XY:" + ESCAPE + self.LE_8xy.text() + ESCAPE + u" coordinates:" + ESCAPE + str(Plan_xy_V) + "\n")) f.write(iso8859(u"Plane" + ESCAPE + u" YZ:" + ESCAPE + self.LE_8yz.text() + ESCAPE + u" coordinates:" + ESCAPE + str(Plan_yz_V) + "\n")) f.write(iso8859(u"Plane" + ESCAPE + u" ZX:" + ESCAPE + self.LE_8zx.text() + ESCAPE + u" coordinates:" + ESCAPE + str(Plan_zx_V) + "\n\n")) f.write(iso8859(u"The form area" + ESCAPE + str(Around(surface * uniteS)) + ESCAPE + uniteSs + "\n")) f.write(iso8859(u"Area of the face" + ESCAPE + str(Around(surfaceFace * uniteS)) + ESCAPE + uniteSs + "\n\n")) f.write(iso8859(u"Volume of the form" + ESCAPE + str(Around(volume_ * uniteV)) + ESCAPE + uniteVs + "\n")) f.write(iso8859(u"Mass" + ESCAPE + str(Around(poids)) + ESCAPE + unitePs + ESCAPE + u" Density:" + ESCAPE + str(Around(seTDensiteValue)) + "\n\n")) f.write(iso8859(u"Center of the shape" + ESCAPE + u" X:" + ESCAPE + str(Around(boundBoxCenterX * uniteM)) + ESCAPE + uniteMs + ESCAPE + u" Y:" + ESCAPE + str(Around(boundBoxCenterY * uniteM)) + ESCAPE + uniteMs + ESCAPE + u" Z:" + ESCAPE + str(Around(boundBoxCenterZ * uniteM)) + ESCAPE + uniteMs + "\n")) f.write(iso8859(u"Center of " + massOrGravity + ESCAPE + u" X:" + ESCAPE + str(Around(CenterOfMassX * uniteM)) + ESCAPE + uniteMs + ESCAPE + u" Y:" + ESCAPE + str(Around(CenterOfMassY * uniteM)) + ESCAPE + uniteMs + ESCAPE + u" Z:" + ESCAPE + str(Around(CenterOfMassZ * uniteM)) + ESCAPE + uniteMs + "\n")) f.write(iso8859(u"BoundBox" + ESCAPE + u" X:" + ESCAPE + str(Around(boundBoxLX * uniteM)) + ESCAPE + uniteMs + ESCAPE + u" Y:" + ESCAPE + str(Around(boundBoxLY * uniteM)) + ESCAPE + uniteMs + ESCAPE + u" Z:" + ESCAPE + str(Around(boundBoxLZ * uniteM)) + ESCAPE + uniteMs + "\n")) f.write(iso8859(u"BoundBox Diagonal" + ESCAPE + str(Around(boundBoxDiag * uniteM)) + ESCAPE + uniteMs + "\n\n")) if directionObj != "[]": f.write(iso8859(u"Direction" + ESCAPE + u" X:" + ESCAPE + str(Around(directionObj[0])) + ESCAPE + u" Y:" + ESCAPE + str(Around(directionObj[1])) + ESCAPE + u" Z:" + ESCAPE + str(Around(directionObj[2])) + "\n")) if direcValueAt != "[]": f.write(iso8859(u"ValueAt" + ESCAPE + u" X:" + ESCAPE + str(Around(direcValueAt[0])) + ESCAPE + u" Y:" + ESCAPE + str(Around(direcValueAt[1])) + ESCAPE + u" Z:" + ESCAPE + str(Around(direcValueAt[2])) + "\n")) if direcNormalAt != "[]": f.write(iso8859(u"NormalAt" + ESCAPE + u" X:" + ESCAPE + str(Around(direcNormalAt[0])) + ESCAPE + u" Y:" + ESCAPE + str(Around(direcNormalAt[1])) + ESCAPE + u" Z:" + ESCAPE + str(Around(direcNormalAt[2])) + "\n")) f.write(iso8859(u"\n")) if detected[0:4] == "Mesh": None else: f.write(iso8859(u"Matrix of inertia Raw" + ESCAPE + str(MatrixOfInertiaRaw)) + "\n") f.write(iso8859(u"Matrix of inertia" + ESCAPE + uniteMs + "^" + str(setMomentOfInertia_16)) + "\n") f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(MatrixX1_16)) + ESCAPE + u" Y:" + ESCAPE + str(Around(MatrixY1_16)) + ESCAPE + u" Z:" + ESCAPE + str(Around(MatrixZ1_16)) + ESCAPE + u" :" + ESCAPE + str(Around(Matrix_1)) + "\n")) f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(MatrixX2_16)) + ESCAPE + u" Y:" + ESCAPE + str(Around(MatrixY2_16)) + ESCAPE + u" Z:" + ESCAPE + str(Around(MatrixZ2_16)) + ESCAPE + u" :" + ESCAPE + str(Around(Matrix_2)) + "\n")) f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(MatrixX3_16)) + ESCAPE + u" Y:" + ESCAPE + str(Around(MatrixY3_16)) + ESCAPE + u" Z:" + ESCAPE + str(Around(MatrixZ3_16)) + ESCAPE + u" :" + ESCAPE + str(Around(Matrix_3)) + "\n")) f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(Matrix12)) + ESCAPE + u" Y:" + ESCAPE + str(Around(Matrix13)) + ESCAPE + u" Z:" + ESCAPE + str(Around(Matrix14)) + ESCAPE + u" :" + ESCAPE + str(Around(Matrix15)) + "\n\n")) f.write(iso8859(u"Matrix inertia with mass" + ESCAPE + unitePs + uniteSs + "^" + str(setMomentOfInertiaMassique_17)) + "\n") f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(MatrixX1_17)) + ESCAPE + u" Y:" + ESCAPE + str(Around(MatrixY1_17)) + ESCAPE + u" Z:" + ESCAPE + str(Around(MatrixZ1_17)) + "\n")) f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(MatrixX2_17)) + ESCAPE + u" Y:" + ESCAPE + str(Around(MatrixY2_17)) + ESCAPE + u" Z:" + ESCAPE + str(Around(MatrixZ2_17)) + "\n")) f.write(iso8859(ESCAPE + u" X:" + ESCAPE + str(Around(MatrixX3_17)) + ESCAPE + u" Y:" + ESCAPE + str(Around(MatrixY3_17)) + ESCAPE + u" Z:" + ESCAPE + str(Around(MatrixZ3_17)) + "\n\n")) f.write(iso8859(u"Matrix Determinant" + ESCAPE + str(DeterminantM) + "\n")) f.write(iso8859(u"Determinant decimal" + ESCAPE + str(decimal.Decimal(DeterminantM)) + "\n\n")) materiel = materialAssociated[seTMaterialCurrentIndex].rstrip().split(",") nomMateriel = materiel[0] densitexMateriel= str(Around(float(materiel[1]))) prixMateriel = str(Around(float(materiel[2]))) infoMateriel = materiel[3] f.write(iso8859(u"Material" + ESCAPE + "\n")) f.write(iso8859(u"Name" + ESCAPE + u"Density" + ESCAPE + u"Volume" + ESCAPE + u"Unit" + ESCAPE + u"Price (kg/dm3)"+ ESCAPE + u"Cost total" + ESCAPE + u"Devise" + ESCAPE + u"Info" + "\n")) f.write(iso8859(nomMateriel + ESCAPE + densitexMateriel + ESCAPE + str(Around(volume_ * uniteV)) + ESCAPE + uniteVs + ESCAPE + prixMateriel + ESCAPE + str(Around(seTMaterialCost)) + ESCAPE + seTMaterialSuffixCost + ESCAPE + infoMateriel + "\n\n")) f.write(iso8859(u"End " + ESCAPE + document_ + "\n")) f.close() except Exception: App_Console_PrintMessage(u"Error writing file " + SaveName + "\n") errorDialog(u"Error writing file " + SaveName) def on_PB_Ra_clicked(self): # clicked() pressed(), released() Bouton radian/degrees global uniteAs global Plan_xy global Plan_yz global Plan_zx Plan_xy2 = 0.0 Plan_yz2 = 0.0 Plan_zx2 = 0.0 choice = self.PB_Ra.text() if choice == "Degrees": # ne pas traduire uniteAs = "" self.PB_Ra.setText(u"DegMinSec") # ne pas traduire self.PB_Ra.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_DegreesMinSec))) # icone dans une variable self.LE_8xy.setText(str(degMinSec(Plan_xy))) #angle degesMinutesSecondes self.LE_8yz.setText(str(degMinSec(Plan_yz))) self.LE_8zx.setText(str(degMinSec(Plan_zx))) elif choice == "DegMinSec":# ne pas traduire uniteAs = " rad" self.PB_Ra.setText(u"Radian") # ne pas traduire self.PB_Ra.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Radian))) # icone dans une variable Plan_xy2 = radians(Plan_xy) self.LE_8xy.setText(str(Around(Plan_xy2))+uniteAs) # angleRadian Plan_yz2 = radians(Plan_yz) self.LE_8yz.setText(str(Around(Plan_yz2))+uniteAs) Plan_zx2 = radians(Plan_zx) self.LE_8zx.setText(str(Around(Plan_zx2))+uniteAs) elif choice == "Radian": # ne pas traduire uniteAs = " gon" self.PB_Ra.setText(u"Grade") # ne pas traduire self.PB_Ra.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Grade))) # icone dans une variable Plan_xy2 = angleGrade(Plan_xy) self.LE_8xy.setText(str(Around(Plan_xy2))+uniteAs) #angleGrade Plan_yz2 = angleGrade(Plan_yz) self.LE_8yz.setText(str(Around(Plan_yz2))+uniteAs) Plan_zx2 = angleGrade(Plan_zx) self.LE_8zx.setText(str(Around(Plan_zx2))+uniteAs) elif choice == "Grade": # ne pas traduire uniteAs = u"%" self.PB_Ra.setText(u"Percent") # ne pas traduire self.PB_Ra.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Pourcent))) # icone dans une variable Plan_xy2 = anglePourcent(Plan_xy) self.LE_8xy.setText(str(Around(Plan_xy2))+uniteAs) #anglePourcent Plan_yz2 = anglePourcent(Plan_yz) self.LE_8yz.setText(str(Around(Plan_yz2))+uniteAs) Plan_zx2 = anglePourcent(Plan_zx) self.LE_8zx.setText(str(Around(Plan_zx2))+uniteAs) elif choice == "Percent": # ne pas traduire uniteAs = " deg" try: self.PB_Ra.setText(u"Degrees") # ne pas traduire self.PB_Ra.setIcon(QtGui.QIcon(QtGui.QPixmap(Macro_FCInfo_Degrees))) # icone dans une variable self.LE_8xy.setText(str(Around(Plan_xy))+uniteAs) # angleDegree self.LE_8yz.setText(str(Around(Plan_yz))+uniteAs) self.LE_8zx.setText(str(Around(Plan_zx))+uniteAs) except Exception: None def on_CB_01_Info(self): global switchDisplayInfoObject global FreeCAD_ParamGetSet if self.CB_01_Info.isChecked(): switchDisplayInfoObject = 1 else: switchDisplayInfoObject = 0 FreeCAD_ParamGetSet.SetBool(u"switchDisplayInfoObject", switchDisplayInfoObject) # True or False def on_CB_02_Point(self): global switchCreatePoint global FreeCAD_ParamGetSet if switchCreatePoint == 0: switchCreatePoint = 1 else: switchCreatePoint = 0 FreeCAD_ParamGetSet.SetBool(u"switchCreatePoint", switchCreatePoint) # True or False def on_CB_03_Axis(self): global switchCreateAxis global FreeCAD_ParamGetSet if switchCreateAxis == 0: switchCreateAxis = 1 else: switchCreateAxis = 0 FreeCAD_ParamGetSet.SetBool(u"switchCreateAxis", switchCreateAxis) #*True or False def on_CB_04_Plane(self): global switchCreatePlane global FreeCAD_ParamGetSet if switchCreatePlane == 0: switchCreatePlane = 1 else: switchCreatePlane = 0 FreeCAD_ParamGetSet.SetBool(u"switchCreatePlane", switchCreatePlane) #*True or False def on_RB_00_ClipBoard(self): global seTMemoClipBoard global FreeCAD_ParamGetSet #self.RB_00_ClipBoard.setChecked(True) seTMemoClipBoard = 0 FreeCAD_ParamGetSet.SetInt(u"seTMemoClipBoard", seTMemoClipBoard) # 0, 1, 2 def on_RB_01_ClipBoard(self): global seTMemoClipBoard global FreeCAD_ParamGetSet #self.RB_01_ClipBoard.setChecked(True) seTMemoClipBoard = 1 FreeCAD_ParamGetSet.SetInt(u"seTMemoClipBoard", seTMemoClipBoard) # 0, 1, 2 def on_RB_02_ClipBoard(self): global seTMemoClipBoard global FreeCAD_ParamGetSet #self.RB_02_ClipBoard.setChecked(True) seTMemoClipBoard = 2 FreeCAD_ParamGetSet.SetInt(u"seTMemoClipBoard", seTMemoClipBoard) # 0, 1, 2 def on_RB_03_ClipBoard(self): global seTMemoClipBoard global FreeCAD_ParamGetSet #self.RB_03_ClipBoard.setChecked(True) seTMemoClipBoard = 3 FreeCAD_ParamGetSet.SetInt(u"seTMemoClipBoard", seTMemoClipBoard) # 0, 1, 2 def on_CB_05_Position(self): global FCmw global seTPositionFlyRightLeft global seTWidgetPosition global FreeCAD_ParamGetSet if seTPositionFlyRightLeft != 1: if self.CB_05_Position.isChecked(): FCmw.addDockWidget(QtCore.Qt.LeftDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window Left FreeCAD_ParamGetSet.SetInt(u"seTPositionFlyRightLeft", 3) #*1, 2, other FreeCAD_ParamGetSet.SetBool(u"seTWidgetPosition", True) # True or False seTPositionFlyRightLeft = 3 seTWidgetPosition = True else: FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget)# add the widget to the main window Right FreeCAD_ParamGetSet.SetInt(u"seTPositionFlyRightLeft", 2) #*1, 2, other FreeCAD_ParamGetSet.SetBool(u"seTWidgetPosition", False) # True or False seTPositionFlyRightLeft = 2 seTWidgetPosition = False def on_ZeroInfo(self): # reset to 0 global typeObject global diffuseColorRF, diffuseColorVF, diffuseColorBF, diffuseColorTF, unsignedEncodeColor global longueurObjet, rayonObjet, perimetre, typeLongueur, numberEdges global Plan_xy, Plan_xy_V, Plan_yz, Plan_yz_V, Plan_zx, Plan_zx_V global surface,surfaceFace,volume_,seTDensiteValue,poids,uniteM, uniteMs, uniteS, uniteSs, uniteV, uniteVs, uniteP, unitePs, uniteAs global boundBoxCenterX, boundBoxCenterY, boundBoxCenterZ, CenterOfMassX, CenterOfMassY, CenterOfMassZ global boundBoxLX, boundBoxLY, boundBoxLZ, boundBox_S, massOrGravity global MatrixX1, MatrixY1, MatrixZ1, Matrix_1 global MatrixX2, MatrixY2, MatrixZ2, Matrix_2 global MatrixX3, MatrixY3, MatrixZ3, Matrix_3 global Matrix12, Matrix13, Matrix14, Matrix15 global Vertx, Edges, EdgesLong, Faces, FacesSurf, FacesCoor, compt_E, compt_F, compt_VF, RowCountTest, ESCAPE, directionObj, direcValueAt, direcNormalAt global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixOfInertiaRaw global MatrixX1_16, MatrixY1_16, MatrixZ1_16, MatrixX2_16, MatrixY2_16, MatrixZ2_16, MatrixX3_16, MatrixY3_16, MatrixZ3_16 global MatrixX1_17, MatrixY1_17, MatrixZ1_17, MatrixX2_17, MatrixY2_17, MatrixZ2_17, MatrixX3_17, MatrixY3_17, MatrixZ3_17 global DeterminantM global seTMaterialPrice, seTMaterialCost, seTMaterialSuffixCost global seTIndexUnitLength global BsplineNombreDeNoeuds, BsplineRayonApproximatif, BsplineNumberElement, BsplineCutLength, setBSplineToByArcValue, BSplinetoByArcValeurS global transparenceFace global typeNormalAt global nombreArretesMesh global nombreFacesMesh global nombrePointsMesh #### transparenceFace = 0 longueurObjet = rayonObjet = perimetre = 0.0 numberEdges = 0 nombreArretesMesh = nombreFacesMesh = nombrePointsMesh = 0 diffuseColorRF = diffuseColorVF = diffuseColorBF = diffuseColorTF = unsignedEncodeColor = 0.0 surface = surfaceFace = volume_ = poids = 0.0 Plan_xy = Plan_yz = Plan_zx = 0.0 Plan_xy_V = Plan_yz_V = Plan_zx_V = "" MatrixX1 = MatrixY1 = MatrixZ1 = Matrix_1 = 0.0 MatrixX2 = MatrixY2 = MatrixZ2 = Matrix_2 = 0.0 MatrixX3 = MatrixY3 = MatrixZ3 = Matrix_3 = 0.0 Matrix12 = Matrix13 = Matrix14 = Matrix15 = 0.0 directionObj = direcValueAt = direcNormalAt = "[]" setMomentOfInertia_16 = 1 setMomentOfInertiaMassique_17 = 1 MatrixOfInertiaRaw = "Raw : " MatrixX1_16 = MatrixY1_16 = MatrixZ1_16 = MatrixX2_16 = MatrixY2_16 = MatrixZ2_16 = MatrixX3_16 = MatrixY3_16 = MatrixZ3_16 = 0.0 MatrixX1_17 = MatrixY1_17 = MatrixZ1_17 = MatrixX2_17 = MatrixY2_17 = MatrixZ2_17 = MatrixX3_17 = MatrixY3_17 = MatrixZ3_17 = 0.0 DeterminantM = 0.0 #### self.LE_N_Edges.setText(str(nombreArretesMesh)) self.LE_N_Facets.setText(str(nombreFacesMesh)) self.LE_N_Points.setText(str(nombrePointsMesh)) self.LE_CRed.setText(str(Around(diffuseColorRF))) self.LE_CGreen.setText(str(Around(diffuseColorVF))) self.LE_CBlue.setText(str(Around(diffuseColorBF))) self.LE_Transparent.setText(str(Around(diffuseColorTF))) self.LE_ConversionUnsigned.setText(str(unsignedEncodeColor)) self.LE_9_Direction.setText(str(directionObj)) self.LE_10_ValueAt.setText(str(direcValueAt)) self.LE_10b_NormalAt.setText(str(direcNormalAt)) self.PB_Line_NormalAT.setText(typeNormalAt) self.SBox_Transparence.setValue(transparenceFace) self.LA_14x.setText(massOrGravity + u" X") self.LA_14y.setText(massOrGravity + u" Y") self.LA_14z.setText(massOrGravity + u" Z") self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) boundBox_S = "[X: "+str(Around(boundBoxLX * uniteM)) + " " + uniteMs+"] x [Y: "+str(Around(boundBoxLY * uniteM)) + " " + uniteMs+"] x [Z: "+str(Around(boundBoxLZ * uniteM)) + " " + uniteMs+"] Diagonal: " + str(Around(boundBoxDiag * uniteM)) + " " + uniteMs self.LE_6.setText(str(Around(float(perimetre) * float(uniteM))) + " " +uniteMs) self.LE_8xy.setText(str(Around(Plan_xy))+uniteAs) self.LE_8xya.setText(str(Plan_xy_V)) self.LE_8yz.setText(str(Around(Plan_yz))+uniteAs) self.LE_8yza.setText(str(Plan_yz_V)) self.LE_8zx.setText(str(Around(Plan_zx))+uniteAs) self.LE_8zxa.setText(str(Plan_zx_V)) self.LE_9a.setText(str(Around(surface * uniteS)) + " " + uniteSs) self.LE_10a.setText(str(Around(surfaceFace * uniteS)) + " " + uniteSs) self.LE_11a.setText(str(Around(volume_ * uniteV)) + " " + uniteVs) self.LE_12a.setText(str(Around(poids)) + " " + unitePs) self.LE_Cost.setText(str(Around(seTMaterialCost)) + seTMaterialSuffixCost) #CostMaterial self.LE_13x.setText(str(Around(boundBoxCenterX * uniteM)) + " " + uniteMs) self.LE_13y.setText(str(Around(boundBoxCenterY * uniteM)) + " " + uniteMs) self.LE_13z.setText(str(Around(boundBoxCenterZ * uniteM)) + " " + uniteMs) self.LE_14x.setText(str(Around(CenterOfMassX * uniteM)) + " " + uniteMs) self.LE_14y.setText(str(Around(CenterOfMassY * uniteM)) + " " + uniteMs) self.LE_14z.setText(str(Around(CenterOfMassZ * uniteM)) + " " + uniteMs) self.LE_007_BB_01_XLength.setText(str(Around(boundBoxLX * uniteM)) + " " + uniteMs) self.LE_007_BB_02_YLength.setText(str(Around(boundBoxLY * uniteM)) + " " + uniteMs) self.LE_007_BB_03_ZLength.setText(str(Around(boundBoxLZ * uniteM)) + " " + uniteMs) self.LE_007_BB_04_Diagonal.setText(str(Around(boundBoxDiag * uniteM)) + " " + uniteMs) self.displayMatrixMomentOfInertia() self.paletteBase() def on_PB_05_Help_Forum_clicked(self):# Help Forum self.PB_05_Help_Forum.setStyleSheet(u"QPushButton {background-color: QPalette.Base}") #red try: webbrowser.open(__Forum2__) except Exception: self.PB_05_Help_Forum.setStyleSheet(u"QPushButton {border-width: 2px; border-style: solid; border-color: red}") #red self.PB_05_Help_Forum.setText(u"Not access") def on_PB_06_Help_Wiki(self): # Help Wiki self.PB_06_Help_Wiki.setStyleSheet(u"QPushButton {background-color: QPalette.Base}") #red try: webbrowser.open(__Wiki__) except Exception: self.PB_06_Help_Wiki.setStyleSheet(u"QPushButton {border-width: 2px; border-style: solid; border-color: red}") #red self.PB_06_Help_Wiki.setText(u"Not access") #### Spreadsheet debut ################################################################################################ def decodeColonne(self, colonne = "A"): # converti la chaine A ... ZZ en numero de colonne ex: A = 1; AA = 27 colonne = re.split('[0-9]+', colonne, flags=re.IGNORECASE)[0] # supp the alphanumeric number ex: A2 = A; A12 = A (1A return 0) try: if len(colonne) > 1: return ((ord(colonne[0].upper()) - 64) * 26 ) + (ord(colonne[1].upper()) - 64) # max 2 car (AAAA return 27) else: return (ord(colonne.upper()) - 64 ) except Exception: return 0 def decodeOccupation(self, dataTableau = ""): # decode the max occupation Colonnes, Lines and give the cell occupation # #lineMax, colonneMax, cellsOccupation = decodeOccupation(FreeCAD.ActiveDocument.getObject(str(Sheet.Name))) # # try: tyty = dataTableau.cells.Content tyty = tyty.split(">") #### cellsOccupation = [] cellsSorted = [] # search the "A1" definition for i in tyty[1:-2]: i = i[i.find('"')+1:] # split les cases dans la chaine XML i = i[:i.find('"')] if (i[0] >= "A") and (i[0]<="Z"): # doit etre une lettre A a Z ( >= 0.18) cellsOccupation.append(i) cellsSorted = copy.deepcopy(cellsOccupation) cellsSorted.sort() #### linesMax = 0 for i in cellsSorted: # recherche le max (ligne et colonne) colonnesMax = re.split('[0-9]+', i, flags=re.IGNORECASE) # colonne max (AA) dummy = int(re.split('[A-Z]+', i, flags=re.IGNORECASE)[1]) # line if dummy > linesMax: linesMax = dummy # lines max del cellsSorted[:] #### return linesMax, self.decodeColonne(colonnesMax[0]), cellsOccupation # return linesMax , colonnesMax, cellsOccupation # except Exception: # App_Console_PrintError("Error data, Enter object <Sheet object> ex:") # App_Console_PrintError("lineMax, colonneMax, cellsOccupation = decodeOccupation(FreeCAD.ActiveDocument.getObject(str(Sheet.Name)))") # return 0, 0, [] def caseTableau(self, ligne = 1, colonne = 1): # calcule et code la case du tableur ex caseTableau(1, 2) return B1 if ligne < 1: ligne = 1 if ligne > 16384: ligne = 16384 if colonne < 1: colonne = 1 if colonne > 702: colonne = 702 if (colonne > 26): if abs(colonne % 26) == 0: return chr(64 + (abs(int(colonne / 26)) -1)) + chr(90) + str(ligne) else: return chr(64 + (abs(int(colonne / 26)))) + chr(64 + (abs(colonne % 26))) + str(ligne) else: return chr(colonne + 64) + str(ligne) def on_PB_SpreadSheet_clicked(self): global newSpreadSheetName #; newSpreadSheetName = "FCSpreadSheet" self.ComboB_SpreadSheet.clear() for i in FreeCAD.ActiveDocument.Objects: # reload for search all SpreadSheet obj = FreeCAD.ActiveDocument.getObject(i.Name).TypeId.split("::")[0] if obj == "Spreadsheet": self.ComboB_SpreadSheet.addItem(_fromUtf8(str(i.Name))) App.activeDocument().recompute(None,True,True)# def On_ComboB_SpreadSheet(self, text): global newSpreadSheetName newSpreadSheetName = text self.LE_SpreadSheet.setText(newSpreadSheetName) def on_LE_SpreadSheet_Pressed(self, text): global newSpreadSheetName newSpreadSheetName = text App.activeDocument().recompute(None,True,True)# def on_PB_03_Create_SpreadSheet_clicked(self): # create spreadSheet project global document_ global object_Label global object_Name global typeObject global object_Type global subElemName global position0 global position1 global position2 global longueurObjet global rayonObjet global detected global perimetre global diffuseColorRF global diffuseColorVF global diffuseColorBF global diffuseColorTF global Plan_xy_V global Plan_yz_V global Plan_zx_V global surface global surfaceFace global volume_ global seTDensiteValue global poids global uniteM global uniteMs global uniteS global uniteSs global uniteV global uniteVs global unitePs global boundBoxCenterX global boundBoxCenterY global boundBoxCenterZ global CenterOfMassX global CenterOfMassY global CenterOfMassZ global boundBoxLX global boundBoxLY global boundBoxLZ global Vertx global Edges global EdgesLong global Faces global FacesSurf global FacesCoor global compt_E global compt_F global compt_VF global RowCountTest global path global SaveName global directionObj global direcValueAt global direcNormalAt global Matrix_1 global Matrix_2 global Matrix_3 global Matrix12 global Matrix13 global Matrix14 global Matrix15 global DeterminantM global setMomentOfInertia_16 global setMomentOfInertiaMassique_17 global MatrixOfInertiaRaw global MatrixX1_16 global MatrixY1_16 global MatrixZ1_16 global MatrixX2_16 global MatrixY2_16 global MatrixZ2_16 global MatrixX3_16 global MatrixY3_16 global MatrixZ3_16 global MatrixX1_17 global MatrixY1_17 global MatrixZ1_17 global MatrixX2_17 global MatrixY2_17 global MatrixZ2_17 global MatrixX3_17 global MatrixY3_17 global MatrixZ3_17 global typeLongueur global nombreArretesMesh global nombreFacesMesh global nombrePointsMesh global colorShapeFaceDiffuseColor global BsplineDetect global BsplineNombreDeNoeuds global BsplinePointsCoor global seTMaterialCost global seTMaterialPrice global seTMaterialSuffixCost global materialAssociated global seTMaterialCurrentIndex global setPathLatestDirectory global newSpreadSheetName global TextColorText_R ; TextColorText_R = 0.627451 # color red 1 = 255 global TextColorText_G ; TextColorText_G = 0.627451 # color green 1 = 255 global TextColorText_B ; TextColorText_B = 0.643137 # color blue 1 = 255 global TextColorText_L ; TextColorText_L = 1.000000 # color blue 1 = 255 ligne = 1 colonne = 1 tableau = "" try: tableau = FreeCAD.ActiveDocument.getObjectsByLabel(newSpreadSheetName)[0] # for append in existant SpreadSheet ligne = self.decodeOccupation(tableau)[0] + 1 except Exception: tableau = App.activeDocument().addObject('Spreadsheet::Sheet',newSpreadSheetName)# for create SpreadSheet self.on_PB_SpreadSheet_clicked() # try: tableau.set(self.caseTableau(ligne,colonne), (u"Information of element")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+1), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+2), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"________________________")) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (dateEu() + " "+ heure())) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Document name")); tableau.set(self.caseTableau(ligne,colonne+1), document_) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Label of the object")); tableau.set(self.caseTableau(ligne,colonne+1), object_Label) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Internal name of the object")); tableau.set(self.caseTableau(ligne,colonne+1), object_Name) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Element name")); tableau.set(self.caseTableau(ligne,colonne+1), str(subElemName)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Object Type (Shape)")); tableau.set(self.caseTableau(ligne,colonne+1), typeObject) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Object Type")); tableau.set(self.caseTableau(ligne,colonne+1), object_Type) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Mouse coordinates")); tableau.set(self.caseTableau(ligne,colonne+1), u"X"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(position0 * uniteM))); tableau.set(self.caseTableau(ligne,colonne+3), uniteMs); tableau.set(self.caseTableau(ligne,colonne+4),u"Y"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(position1 * uniteM))); tableau.set(self.caseTableau(ligne,colonne+6), uniteMs); tableau.set(self.caseTableau(ligne,colonne+7), u"Z"); tableau.set(self.caseTableau(ligne,colonne+8), str(Around(position2 * uniteM))); tableau.set(self.caseTableau(ligne,colonne+9), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 #### couleurs tableau.set(self.caseTableau(ligne,colonne), (u"Color on selection")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Red")); tableau.set(self.caseTableau(ligne,colonne+1), str(int(diffuseColorRF*255.0))); tableau.set(self.caseTableau(ligne,colonne+2),u"Green"); tableau.set(self.caseTableau(ligne,colonne+3), str(int(diffuseColorVF*255.0))); tableau.set(self.caseTableau(ligne,colonne+4),u"Blue"); tableau.set(self.caseTableau(ligne,colonne+5), str(int(diffuseColorBF*255.0))); tableau.set(self.caseTableau(ligne,colonne+6), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+7), str(int(diffuseColorTF*255.0))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if len(colorShapeFace) != 0: tableau.set(self.caseTableau(ligne,colonne), (u"Object Color (float) ")); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(colorShapeFace[0])); tableau.set(self.caseTableau(ligne,colonne+3), u"Green" ); tableau.set(self.caseTableau(ligne,colonne+4), str(colorShapeFace[1])); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue"); tableau.set(self.caseTableau(ligne,colonne+6), str(colorShapeFace[2])); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(colorShapeFace[3])) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Object Color (int ) ")); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(int(colorShapeFace[0]*255.0))); tableau.set(self.caseTableau(ligne,colonne+3), u"Green" ); tableau.set(self.caseTableau(ligne,colonne+4), str(int(colorShapeFace[1]*255.0))); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue"); tableau.set(self.caseTableau(ligne,colonne+6), str(int(colorShapeFace[2]*255.0))); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(int(colorShapeFace[3]*255.0))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if len(colorShapeLine) != 0: tableau.set(self.caseTableau(ligne,colonne), (u"Object Color (float) ")); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(colorShapeLine[0])); tableau.set(self.caseTableau(ligne,colonne+3), u"Green" ); tableau.set(self.caseTableau(ligne,colonne+4), str(colorShapeLine[1])); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue"); tableau.set(self.caseTableau(ligne,colonne+6), str(colorShapeLine[2])); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(colorShapeLine[3])) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Color Line(s) (int ) ")); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(int(colorShapeLine[0]*255.0))); tableau.set(self.caseTableau(ligne,colonne+3), u"Green" ); tableau.set(self.caseTableau(ligne,colonne+4), str(int(colorShapeLine[1]*255.0))); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue"); tableau.set(self.caseTableau(ligne,colonne+6), str(int(colorShapeLine[2]*255.0))); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(int(colorShapeLine[3]*255.0))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if len(colorShapePoint) != 0: try: tableau.set(self.caseTableau(ligne,colonne), (u"Color Point(s) (float) ")); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(colorShapePoint[0])); tableau.set(self.caseTableau(ligne,colonne+3), u"Green" ); tableau.set(self.caseTableau(ligne,colonne+4), str(colorShapePoint[1])); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue"); tableau.set(self.caseTableau(ligne,colonne+6), str(colorShapePoint[2])); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(colorShapePoint[3])) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Color Point(s) (int ) ")); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(int(colorShapePoint[0]*255.0))); tableau.set(self.caseTableau(ligne,colonne+3), u"Green" ); tableau.set(self.caseTableau(ligne,colonne+4), str(int(colorShapePoint[1]*255.0))); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue"); tableau.set(self.caseTableau(ligne,colonne+6), str(int(colorShapePoint[2]*255.0))); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(int(colorShapePoint[3]*255.0))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 except Exception: None tableau.set(self.caseTableau(ligne,colonne), (typeLongueur)); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(longueurObjet * uniteM))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if detected[0:4] == "Mesh": tableau.set(self.caseTableau(ligne,colonne), (u"Components Mesh")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"_______________")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Number of Edges")); tableau.set(self.caseTableau(ligne,colonne+1), str(nombreArretesMesh)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Number of Sides")); tableau.set(self.caseTableau(ligne,colonne+1), str(nombreFacesMesh)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Number of points")); tableau.set(self.caseTableau(ligne,colonne+1), str(nombrePointsMesh)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if detected == "<PointKernel object>": tableau.set(self.caseTableau(ligne,colonne), (u"Components Points")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"_________________")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Number of points")); tableau.set(self.caseTableau(ligne,colonne+1), str(nombrePointsMesh)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 #### detail of Cercle if rayonObjet != 0.0: tableau.set(self.caseTableau(ligne,colonne), (u"Object radius")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(rayonObjet * uniteM))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Shape Perimeter")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(perimetre * uniteM))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if self.GBox_012_SpreadSheet.isChecked(): #### detail of Cercle BSpline begin if (str(BsplineDetect) == "<BSplineCurve object>"): tableau.set(self.caseTableau(ligne,colonne), (u"Number of nodes")); tableau.set(self.caseTableau(ligne,colonne+1), str(BsplineNombreDeNoeuds)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 for i in enumerate(BsplinePointsCoor): # nombre de points noeuds tableau.set(self.caseTableau(ligne,colonne), (u"Nodes" + str(i[0]))); tableau.set(self.caseTableau(ligne,colonne+1), u"X" + str(i[0] + 1)); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(i[1][0]))); tableau.set(self.caseTableau(ligne,colonne+3), u"Y" + str(i[0] + 1)); tableau.set(self.caseTableau(ligne,colonne+4), str(Around(i[1][1]))); tableau.set(self.caseTableau(ligne,colonne+5), u"Z" + str(i[0] + 1)); tableau.set(self.caseTableau(ligne,colonne+6), str(Around(i[1][2]))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 ligne += 1 #### detail of Cercle BSpline end tableau.set(self.caseTableau(ligne,colonne), (u"Vertexes and details")); tableau.set(self.caseTableau(ligne,colonne+1), u" Number of Edges"); tableau.set(self.caseTableau(ligne,colonne+2), str(compt_E)); tableau.set(self.caseTableau(ligne,colonne+3), u" Number of Faces"); tableau.set(self.caseTableau(ligne,colonne+4), str(compt_F)); tableau.set(self.caseTableau(ligne,colonne+5), u" Number Vertexes faces"); tableau.set(self.caseTableau(ligne,colonne+6), str(compt_VF)); tableau.set(self.caseTableau(ligne,colonne+7), u" Détail Total"); tableau.set(self.caseTableau(ligne,colonne+8), str(RowCountTest)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 co = 0 aa = 0 for j in enumerate(Edges): tableau.set(self.caseTableau(ligne,colonne), (str(j[1]))); tableau.set(self.caseTableau(ligne,colonne+1), (str(Around(float(EdgesLong[co]) * float(uniteM))))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 co+=1 for a in range(aa,aa+6): try: chaine = str(Vertx[a]).split(":") tableau.set(self.caseTableau(ligne,colonne), (chaine[0])); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(float(chaine[1]) * float(uniteM)))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 except Exception: None aa += 6 ligne += 1 ligne += 1 co = 0 cco = 0 co2 = 0 for j in enumerate(Faces): tableau.set(self.caseTableau(ligne,colonne), str(j[1])); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(float(FacesSurf[co]) * float(uniteS)))); tableau.set(self.caseTableau(ligne,colonne+2), uniteSs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 co += 1 if len(colorShapeFaceDiffuseColor) != 0: tableau.set(self.caseTableau(ligne,colonne), (u"Float color Face" + str(j[0]+1))); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(colorShapeFaceDiffuseColor[j[0]][0])); tableau.set(self.caseTableau(ligne,colonne+3), u"Green "); tableau.set(self.caseTableau(ligne,colonne+4), str(colorShapeFaceDiffuseColor[j[0]][1])); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue "); tableau.set(self.caseTableau(ligne,colonne+6), str(colorShapeFaceDiffuseColor[j[0]][2])); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(colorShapeFaceDiffuseColor[j[0]][3])) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Integer color Face" + str(j[0]+1))); tableau.set(self.caseTableau(ligne,colonne+1), u"Red"); tableau.set(self.caseTableau(ligne,colonne+2), str(int(colorShapeFaceDiffuseColor[j[0]][0]*255.0))); tableau.set(self.caseTableau(ligne,colonne+3), u"Green "); tableau.set(self.caseTableau(ligne,colonne+4), str(int(colorShapeFaceDiffuseColor[j[0]][1]*255.0))); tableau.set(self.caseTableau(ligne,colonne+5), u"Blue "); tableau.set(self.caseTableau(ligne,colonne+6), str(int(colorShapeFaceDiffuseColor[j[0]][2]*255.0))); tableau.set(self.caseTableau(ligne,colonne+7), u"Transparency"); tableau.set(self.caseTableau(ligne,colonne+8), str(int(colorShapeFaceDiffuseColor[j[0]][3]*255.0))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 for jj in range(cco,len(FacesCoor)):# Faces coordinates cco+=1 if FacesCoor[jj] == "T": ligne += 1 break else: chaine = str(FacesCoor[jj]).split(":") tableau.set(self.caseTableau(ligne,colonne), (chaine[0])); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(float(chaine[1]) * float(uniteM)))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 co2 += 1 if co2 == 3: ligne += 1 co2 = 0 ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Plane")); tableau.set(self.caseTableau(ligne,colonne+1), u" XY:"); tableau.set(self.caseTableau(ligne,colonne+2), self.LE_8xy.text()); tableau.set(self.caseTableau(ligne,colonne+3), u" coordinates:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Plan_xy_V)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Plane")); tableau.set(self.caseTableau(ligne,colonne+1), u" YZ:"); tableau.set(self.caseTableau(ligne,colonne+2), self.LE_8yz.text()); tableau.set(self.caseTableau(ligne,colonne+3), u" coordinates:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Plan_yz_V)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Plane")); tableau.set(self.caseTableau(ligne,colonne+1), u" ZX:"); tableau.set(self.caseTableau(ligne,colonne+2), self.LE_8zx.text()); tableau.set(self.caseTableau(ligne,colonne+3), u" coordinates:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Plan_zx_V)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Shape area")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(surface * uniteS))); tableau.set(self.caseTableau(ligne,colonne+2), uniteSs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Face area")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(surfaceFace * uniteS))); tableau.set(self.caseTableau(ligne,colonne+2), uniteSs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Volume of the form")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(volume_ * uniteV))); tableau.set(self.caseTableau(ligne,colonne+2), uniteVs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Mass")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(poids))); tableau.set(self.caseTableau(ligne,colonne+2), unitePs); tableau.set(self.caseTableau(ligne,colonne+3), u" Density:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Around(seTDensiteValue))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Shape center")); tableau.set(self.caseTableau(ligne,colonne+1), u" X:"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(boundBoxCenterX * uniteM))); tableau.set(self.caseTableau(ligne,colonne+3), uniteMs); tableau.set(self.caseTableau(ligne,colonne+4), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(boundBoxCenterY * uniteM))); tableau.set(self.caseTableau(ligne,colonne+6), uniteMs); tableau.set(self.caseTableau(ligne,colonne+7), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+8), str(Around(boundBoxCenterZ * uniteM))); tableau.set(self.caseTableau(ligne,colonne+9), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Center of mass")); tableau.set(self.caseTableau(ligne,colonne+1), u" X:"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(CenterOfMassX * uniteM))); tableau.set(self.caseTableau(ligne,colonne+3), uniteMs); tableau.set(self.caseTableau(ligne,colonne+4), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(CenterOfMassY * uniteM))); tableau.set(self.caseTableau(ligne,colonne+6), uniteMs); tableau.set(self.caseTableau(ligne,colonne+7), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+8), str(Around(CenterOfMassZ * uniteM))); tableau.set(self.caseTableau(ligne,colonne+9), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Overall dimensions")); tableau.set(self.caseTableau(ligne,colonne+1), u" X:"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(boundBoxLX * uniteM))); tableau.set(self.caseTableau(ligne,colonne+3), uniteMs); tableau.set(self.caseTableau(ligne,colonne+4), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(boundBoxLY * uniteM))); tableau.set(self.caseTableau(ligne,colonne+6), uniteMs); tableau.set(self.caseTableau(ligne,colonne+7), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+8), str(Around(boundBoxLZ * uniteM))); tableau.set(self.caseTableau(ligne,colonne+9), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Diagonal dimensions")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(boundBoxDiag * uniteM))); tableau.set(self.caseTableau(ligne,colonne+2), uniteMs) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if directionObj != "[]": tableau.set(self.caseTableau(ligne,colonne), (u"Direction")); tableau.set(self.caseTableau(ligne,colonne+1), u" X:"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(directionObj[0]))); tableau.set(self.caseTableau(ligne,colonne+3), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Around(directionObj[1]))); tableau.set(self.caseTableau(ligne,colonne+5), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+6), str(Around(directionObj[2]))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if direcValueAt != "[]": tableau.set(self.caseTableau(ligne,colonne), (u"ValueAt")); tableau.set(self.caseTableau(ligne,colonne+1), u" X:"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(direcValueAt[0]))); tableau.set(self.caseTableau(ligne,colonne+3), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Around(direcValueAt[1]))); tableau.set(self.caseTableau(ligne,colonne+5), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+6), str(Around(direcValueAt[2]))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 if direcNormalAt != "[]": tableau.set(self.caseTableau(ligne,colonne), (u"NormalAt")); tableau.set(self.caseTableau(ligne,colonne+1), u" X:"); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(direcNormalAt[0]))); tableau.set(self.caseTableau(ligne,colonne+3), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+4), str(Around(direcNormalAt[1]))); tableau.set(self.caseTableau(ligne,colonne+5), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+6), str(Around(direcNormalAt[2]))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 ligne += 1 if detected[0:4] == "Mesh": None else: tableau.set(self.caseTableau(ligne,colonne), (u"Matrix of inertia")); tableau.set(self.caseTableau(ligne,colonne+1), uniteMs + "^" + str(setMomentOfInertia_16)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" Raw:")); tableau.set(self.caseTableau(ligne,colonne+1), str(MatrixOfInertiaRaw)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(MatrixX1_16))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(MatrixY1_16))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(MatrixZ1_16))); tableau.set(self.caseTableau(ligne,colonne+6), u" :"); tableau.set(self.caseTableau(ligne,colonne+7), str(Around(Matrix_1))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(MatrixX2_16))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(MatrixY2_16))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(MatrixZ2_16))); tableau.set(self.caseTableau(ligne,colonne+6), u" :"); tableau.set(self.caseTableau(ligne,colonne+7), str(Around(Matrix_2))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(MatrixX3_16))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(MatrixY3_16))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(MatrixZ3_16))); tableau.set(self.caseTableau(ligne,colonne+6), u" :"); tableau.set(self.caseTableau(ligne,colonne+7), str(Around(Matrix_3))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(Matrix12))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(Matrix13))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(Matrix14))); tableau.set(self.caseTableau(ligne,colonne+6), u" :"); tableau.set(self.caseTableau(ligne,colonne+7), str(Around(Matrix15))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Matrix inertia massique")); tableau.set(self.caseTableau(ligne,colonne+1), unitePs + uniteSs + "^" + str(setMomentOfInertiaMassique_17)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(MatrixX1_17))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(MatrixY1_17))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(MatrixZ1_17))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(MatrixX2_17))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(MatrixY2_17))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(MatrixZ2_17))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u" X:")); tableau.set(self.caseTableau(ligne,colonne+1), str(Around(MatrixX3_17))); tableau.set(self.caseTableau(ligne,colonne+2), u" Y:"); tableau.set(self.caseTableau(ligne,colonne+3), str(Around(MatrixY3_17))); tableau.set(self.caseTableau(ligne,colonne+4), u" Z:"); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(MatrixZ3_17))) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Matrix Determinant")); tableau.set(self.caseTableau(ligne,colonne+1), str(DeterminantM)) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Decimal Determinant")); tableau.set(self.caseTableau(ligne,colonne+1), str(decimal.Decimal(DeterminantM))) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 materiel = materialAssociated[seTMaterialCurrentIndex].rstrip().split(",") nomMateriel = materiel[0] densitexMateriel= str(Around(float(materiel[1]))) prixMateriel = str(Around(float(materiel[2]))) infoMateriel = materiel[3] tableau.set(self.caseTableau(ligne,colonne), (u"Material")) tableau.setBackground(self.caseTableau(ligne,colonne), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"Name")); tableau.set(self.caseTableau(ligne,colonne+1), u"Density"); tableau.set(self.caseTableau(ligne,colonne+2), u"Volume"); tableau.set(self.caseTableau(ligne,colonne+3), u"Unit"); tableau.set(self.caseTableau(ligne,colonne+4), u"Price (kg/dm3)"); tableau.set(self.caseTableau(ligne,colonne+5), u"Total cost"); tableau.set(self.caseTableau(ligne,colonne+6), u"Devise"); tableau.set(self.caseTableau(ligne,colonne+7), u"Info") tableau.setBackground(self.caseTableau(ligne,colonne) , (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+1), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+2), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+3), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+4), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+5), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+6), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+7), (TextColorText_R, TextColorText_G, TextColorText_B, TextColorText_L)) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (nomMateriel)); tableau.set(self.caseTableau(ligne,colonne+1), densitexMateriel); tableau.set(self.caseTableau(ligne,colonne+2), str(Around(volume_ * uniteV))); tableau.set(self.caseTableau(ligne,colonne+3), uniteVs); tableau.set(self.caseTableau(ligne,colonne+4), prixMateriel); tableau.set(self.caseTableau(ligne,colonne+5), str(Around(seTMaterialCost))); tableau.set(self.caseTableau(ligne,colonne+6), seTMaterialSuffixCost); tableau.set(self.caseTableau(ligne,colonne+7), infoMateriel) ligne += 1 tableau.set(self.caseTableau(ligne,colonne), (u"End ")); tableau.set(self.caseTableau(ligne,colonne+1), document_); tableau.set(self.caseTableau(ligne,colonne+2), object_Label) tableau.setBackground(self.caseTableau(ligne,colonne), (0.9372549019607843, 0.1607843137254902, 0.1607843137254902, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+1), (0.9372549019607843, 0.1607843137254902, 0.1607843137254902, TextColorText_L)) tableau.setBackground(self.caseTableau(ligne,colonne+2), (0.9372549019607843, 0.1607843137254902, 0.1607843137254902, TextColorText_L)) ligne += 1 tableau.recompute() # except Exception: # App_Console_PrintMessage(u"Erreur d'enregistrement du fichier " + SaveName) # errorDialog(u"Erreur d'enregistrement du fichier " + SaveName) #### Spreadsheet Fin ################################################################################################ def on_PB_04_Quit(self): # Exit button global path global infoFaceMesh global switchNotInfoOnBeginning global switchVersionSearch global switchWarning global switchCreatePoint global switchCreateAxis global switchCreatePlane global switchDisplayInfoObject global switchClearDisplayReportView global seTWidgetPosition global switchBoundBoxCreateText global seTBoundBoxTextHeigth global seTBoundBoxTextArround global seTMemoClipBoard global seTTextHeigthValue global seTDecimalValue global seTMaterialCurrentIndex global seTMaterialFileName global seTMaterialSavePathName global seTDensiteValue global seTDensiteDecimalNumber global seTDensiteSingleStep global seTDensiteSuffixChain global seTPositionFlyRightLeft global materialAssociated global seTMaterialPrice global seTMaterialSuffixDevise global seTMaterialSuffixCost global seTMaterialCost global seTIndexUnitWeight global seTIndexUnitLength global seTUnitSymbolMicro global seTUnitSymbolCube global seTUnitSymbolCarre global setPathLatestDirectory global setMeshTopologyValue global setBSplineToByArcValue global switchBSplineCreateCircleConstructorAxis global switchBSplineCreateCircleConstructor global switchCreateLineDiVatNatOnClick global FreeCAD_ParamGetSet #### Write Configuration begin #### FreeCAD_ParamGetSet.SetBool(u"switchNotInfoOnBeginning", switchNotInfoOnBeginning) # True or False FreeCAD_ParamGetSet.SetBool(u"switchVersionSearch", switchVersionSearch) # True or False FreeCAD_ParamGetSet.SetBool(u"switchWarning", switchWarning) # True or False FreeCAD_ParamGetSet.SetBool(u"switchCreatePoint", switchCreatePoint) # True or False FreeCAD_ParamGetSet.SetBool(u"switchCreateAxis", switchCreateAxis) # True or False FreeCAD_ParamGetSet.SetBool(u"switchCreatePlane", switchCreatePlane) # True or False FreeCAD_ParamGetSet.SetBool(u"switchDisplayInfoObject", switchDisplayInfoObject) # True or False FreeCAD_ParamGetSet.SetBool(u"switchClearDisplayReportView", switchClearDisplayReportView)#*True or False FreeCAD_ParamGetSet.SetBool(u"seTWidgetPosition", seTWidgetPosition) # True or False FreeCAD_ParamGetSet.SetBool(u"switchBoundBoxCreateText", switchBoundBoxCreateText) # True or False FreeCAD_ParamGetSet.SetFloat(u"seTBoundBoxTextHeigth", seTBoundBoxTextHeigth) # 3.0 FreeCAD_ParamGetSet.SetInt(u"seTBoundBoxTextArround", seTBoundBoxTextArround) # 3 FreeCAD_ParamGetSet.SetInt(u"seTMemoClipBoard", seTMemoClipBoard) # 0, 1, 2 FreeCAD_ParamGetSet.SetInt(u"seTTextHeigthValue", seTTextHeigthValue) # 11 FreeCAD_ParamGetSet.SetInt(u"seTDecimalValue", seTDecimalValue) # 4 FreeCAD_ParamGetSet.SetInt(u"seTMaterialCurrentIndex", seTMaterialCurrentIndex) # 0 FreeCAD_ParamGetSet.SetString(u"seTMaterialFileName", seTMaterialFileName) # "FCInfo_material.txt" FreeCAD_ParamGetSet.SetString(u"seTMaterialSavePathName", seTMaterialSavePathName) # "C:/.../Macro/FCInfo_material.txt" FreeCAD_ParamGetSet.SetFloat(u"seTMaterialPrice", seTMaterialPrice) # x FreeCAD_ParamGetSet.SetString(u"seTMaterialSuffixDevise", seTMaterialSuffixDevise) # " Eu (By Kg)# Suffix device FreeCAD_ParamGetSet.SetString(u"seTMaterialSuffixCost", seTMaterialSuffixCost) # " Eu # Suffix cost FreeCAD_ParamGetSet.SetFloat(u"seTMaterialCost", seTMaterialCost) # x FreeCAD_ParamGetSet.SetFloat(u"seTDensiteValue", seTDensiteValue) # 1.0 FreeCAD_ParamGetSet.SetInt(u"seTDensiteDecimalNumber", seTDensiteDecimalNumber) # 4 FreeCAD_ParamGetSet.SetFloat(u"seTDensiteSingleStep", seTDensiteSingleStep) # 1.0 FreeCAD_ParamGetSet.SetString(u"seTDensiteSuffixChain", seTDensiteSuffixChain) # " kg (by dm3)" FreeCAD_ParamGetSet.SetInt(u"seTPositionFlyRightLeft", seTPositionFlyRightLeft) # 1, 2, other #FreeCAD_ParamGetSet.SetInt(u"seTIndexUnitWeight", seTIndexUnitWeight) # x #FreeCAD_ParamGetSet.SetInt(u"seTIndexUnitLength", seTIndexUnitLength) # x FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolMicro", seTUnitSymbolMicro) # "U" FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolCube", seTUnitSymbolCube) # "3" FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolCarre", seTUnitSymbolCarre) # "2" FreeCAD_ParamGetSet.SetFloat(u"setBSplineToByArcValue", setBSplineToByArcValue) # 0.00001 FreeCAD_ParamGetSet.SetFloat(u"setMeshTopologyValue", setMeshTopologyValue) # 0.1 FreeCAD_ParamGetSet.SetBool(u"switchBSplineCreateCircleConstructorAxis", switchBSplineCreateCircleConstructorAxis)# True or False FreeCAD_ParamGetSet.SetBool(u"switchBSplineCreateCircleConstructor", switchBSplineCreateCircleConstructor) # True or False FreeCAD_ParamGetSet.SetBool(u"switchCreateLineDiVatNatOnClick", switchCreateLineDiVatNatOnClick) # True or False #### Write Configuration end #### #### save the material begin #### self.on_PB_Save_Material_clicked() # save material #### save the material end #### App_Console_PrintMessage(u"End FCInfo\r\n") try: Gui.ActiveDocument.ActiveView.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), infoFaceMesh) except Exception: None FreeCADGui.Selection.removeObserver(s) # Uninstalls resident function (desactivated for read after LeftDock RightDock) try: self.window.setAttribute(QtCore.Qt.WA_DeleteOnClose, True) # destroy self.window.deleteLater() # destroy self.window.destroy() # destroy except Exception: self.window.hide() None ######################################################################################################################### class SelObserver: def addSelection(self,document, object, element, position): # Selection global ui global sel global document_ global object_Label global subElemName global position0 global position1 global position2 global switchInertia global infoFaceMesh global switch_setVisible_GBox_001_Document # global switch_setVisible_GBox_002_Coordinate_Mouse # global switch_setVisible_GBox_003_Color global switch_setVisible_GBox_004_Object_Mesh global switch_setVisible_GBox_005_Value_Unit global switch_setVisible_GBox_006_Inclination global switch_setVisible_GBox_007_Surface_and_Volume global switch_setVisible_GBox_008_Cost_And_Price global switch_setVisible_GBox_009_BoundBox global switch_setVisible_GBox_010_Center_Mass global switch_setVisible_GBox_011_Inertia global switch_setVisible_GBox_012_SpreadSheet global switch_setVisible_GBox_013_SpreadSheet_Creation global switch_setVisible_GBox_014_Main_Tools # if switchInertia == 0: # for create plane without refresh sel = FreeCADGui.Selection.getSelection() document_ = document object_Label = object subElemName = element position0 = (position[0]) position1 = (position[1]) position2 = (position[2]) if len(sel)==0: App_Console_PrintMessage(u"Select an object" + "\n") errorDialog(u"Select an object") else: # ui.on_PB_01_Refrech_clicked() ####Special_Sketcher try: sketch = Gui.Selection.getSelection()[0] except Exception: None #print(sketch.TypeId) App.ActiveDocument.recompute() if (Gui.ActiveDocument.getInEdit() and (sketch.TypeId == "Sketcher::SketchObject")): # sketcher open ui.LE_5.setStyleSheet(u"QLineEdit {color : QPalette.Base}") # origin system nameSketch = sketch.Name ui.GBox_004_Object_Mesh.setVisible(False) ui.GBox_003_Color.setEnabled(False) ui.GBox_012_SpreadSheet.setEnabled(False) ui.GBox_007_Surface_and_Volume.setEnabled(False) ui.GBox_008_Cost_And_Price.setEnabled(False) ui.GBox_009_BoundBox.setEnabled(False) ui.GBox_010_Center_Mass.setEnabled(False) ui.GBox_011_Inertia.setEnabled(False) ui.GBox_013_SpreadSheet_Creation.setEnabled(False) if "Constraint" in subElemName: ui.LE_5.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: red}") # constraint else: try: indexSubObject = int(subElemName[4:]) - 1 # index if App.ActiveDocument.getObject(nameSketch).getConstruction(indexSubObject): ui.LE_5.setStyleSheet(u"QLineEdit {border-width: 2px; border-style: solid; border-color: blue}") # construction except Exception: None elif sketch.TypeId == "Mesh::Feature": # Mesh #infoFaceMesh = Gui.ActiveDocument.ActiveView.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), getNormal) # ui.on_ZeroInfo() if switch_setVisible_GBox_004_Object_Mesh == True: ui.GBox_004_Object_Mesh.setVisible(True) ui.LA_N_Edges.setEnabled(True) ui.LA_N_Facets.setEnabled(True) ui.LE_N_Edges.setEnabled(True) ui.LE_N_Facets.setEnabled(True) if switch_setVisible_GBox_005_Value_Unit == True: ui.GBox_005_Value_Unit.setVisible(True) if switch_setVisible_GBox_006_Inclination == True: ui.GBox_006_Inclination.setVisible(True) if switch_setVisible_GBox_007_Surface_and_Volume == True: ui.GBox_007_Surface_and_Volume.setVisible(True) if switch_setVisible_GBox_008_Cost_And_Price == True: ui.GBox_008_Cost_And_Price.setVisible(True) if switch_setVisible_GBox_009_BoundBox == True: ui.GBox_009_BoundBox.setVisible(True) if switch_setVisible_GBox_010_Center_Mass == True: ui.GBox_010_Center_Mass.setVisible(True) ui.LE_14x.setEnabled(True) ui.LE_14y.setEnabled(True) ui.LE_14z.setEnabled(True) if switch_setVisible_GBox_011_Inertia == True: ui.GBox_011_Inertia.setVisible(False) if switch_setVisible_GBox_012_SpreadSheet == True: ui.GBox_012_SpreadSheet.setVisible(False) #ui.GBox_013_SpreadSheet_Creation.setEnabled(False) ui.on_ZeroInfo() elif sketch.TypeId == "Points::FeatureCustom": # Points if switch_setVisible_GBox_004_Object_Mesh == True: ui.GBox_004_Object_Mesh.setVisible(True) ui.LA_N_Edges.setEnabled(False) ui.LA_N_Facets.setEnabled(False) ui.LE_N_Edges.setEnabled(False) ui.LE_N_Facets.setEnabled(False) ui.GBox_005_Value_Unit.setVisible(False) ui.GBox_006_Inclination.setVisible(False) ui.GBox_007_Surface_and_Volume.setVisible(False) ui.GBox_008_Cost_And_Price.setVisible(False) ui.GBox_011_Inertia.setVisible(False) ui.GBox_012_SpreadSheet.setVisible(False) ui.GBox_013_SpreadSheet_Creation.setVisible(False) ui.LE_14x.setEnabled(False) ui.LE_14y.setEnabled(False) ui.LE_14z.setEnabled(False) ui.on_ZeroInfo() else: if switch_setVisible_GBox_003_Color == True: ui.GBox_003_Color.setVisible(True) ui.GBox_003_Color.setEnabled(True) ui.GBox_004_Object_Mesh.setVisible(False) if switch_setVisible_GBox_005_Value_Unit == True: ui.GBox_005_Value_Unit.setVisible(True) ui.GBox_005_Value_Unit.setEnabled(True) ui.LE_5.setStyleSheet(u"QLineEdit {color : QPalette.Base}") # origin system if switch_setVisible_GBox_006_Inclination == True: ui.GBox_006_Inclination.setVisible(True) ui.GBox_006_Inclination.setEnabled(True) if switch_setVisible_GBox_007_Surface_and_Volume == True: ui.GBox_007_Surface_and_Volume.setVisible(True) ui.GBox_007_Surface_and_Volume.setEnabled(True) if switch_setVisible_GBox_008_Cost_And_Price == True: ui.GBox_008_Cost_And_Price.setVisible(True) ui.GBox_008_Cost_And_Price.setEnabled(True) if switch_setVisible_GBox_009_BoundBox == True: ui.GBox_009_BoundBox.setVisible(True) ui.GBox_009_BoundBox.setEnabled(True) if switch_setVisible_GBox_010_Center_Mass == True: ui.GBox_010_Center_Mass.setVisible(True) ui.GBox_010_Center_Mass.setEnabled(True) ui.LE_14x.setEnabled(True) ui.LE_14x.setEnabled(True) ui.LE_14y.setEnabled(True) ui.LE_14y.setEnabled(True) ui.LE_14z.setEnabled(True) ui.LE_14z.setEnabled(True) if switch_setVisible_GBox_011_Inertia == True: ui.GBox_011_Inertia.setVisible(True) ui.GBox_011_Inertia.setEnabled(True) if switch_setVisible_GBox_012_SpreadSheet == True: try: ui.GBox_012_SpreadSheet.setVisible(True) ui.GBox_012_SpreadSheet.setEnabled(True) except Exception: None if switch_setVisible_GBox_013_SpreadSheet_Creation == True: ui.GBox_013_SpreadSheet_Creation.setVisible(True) ui.GBox_013_SpreadSheet_Creation.setEnabled(True) ####SpecialSketcher ui.on_PB_01_Refrech_clicked() else: ui.GBox_012_SpreadSheet ui.GBox_012_SpreadSheet.setTitle(u"Details of the form") ####SpecialSketcher ########################################################################################################################## if switchNotInfoOnBeginning == 0: # 0 =display the info App_Console_PrintMessage(u"____________________________________" + "\n") App_Console_PrintMessage(u"#### FCInfo Configuration begin ####" + "\n") App_Console_PrintMessage(u"####" + "\n") App_Console_PrintMessage(u"\t" + "**** Location ****" + "\n") App_Console_PrintMessage(u"User parameter:BaseApp/Preferences/Macros/FCMmacros/FCInfo/" + "\n") App_Console_PrintMessage(u"####" + "\n\n") App_Console_PrintMessage(u"switchNotInfoOnBeginning # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Display or not this text information on run macro" + "\n") App_Console_PrintMessage(u"\t\t" + "[False] = display this information" + "\n") App_Console_PrintMessage(u"\t\t" + " True = this Information is Not displayed On Beginning" + "\n\n") App_Console_PrintMessage(u"switchVersionSearch # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Search if one new version exist on run macro" + "\n\n") App_Console_PrintMessage(u"switchWarning # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Display or not display the window warning in case not good selection" + "\n\n") App_Console_PrintMessage(u"switchCreatePoint # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Check the Create point checkBox" + "\n\n") App_Console_PrintMessage(u"switchCreateAxis # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Check the Create axis checkBox" + "\n\n") App_Console_PrintMessage(u"switchCreatePlane # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Check the Create plane checkBox" + "\n\n") App_Console_PrintMessage(u"switchDisplayInfoObject # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Check the info checkBox" + "\n\n") App_Console_PrintMessage(u"switchClearDisplayReportView# SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "if switchClearDisplayReportView is TRUE the ReportView is cleared" + "\n\n") App_Console_PrintMessage(u"seTWidgetPosition # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Check the Widget Position Left/Right checkBox" + "\n") App_Console_PrintMessage(u"\t" + "if seTWidgetPosition [False] : if seTPositionFlyRightLeft = 2 = docked to Right" + "\n") App_Console_PrintMessage(u"\t" + "if seTWidgetPosition True : if seTPositionFlyRightLeft = 3 = docked to Left" + "\n") App_Console_PrintMessage(u"\t" + "if it is 1 the window macro is not docked" + "\n\n") App_Console_PrintMessage(u"switchBoundBoxCreateText # SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Create the text dimension of the BoundBox" + "\n\n") App_Console_PrintMessage(u"seTBoundBoxTextHeigth # seTBoundBoxTextHeigth = 3.0" + "\n") App_Console_PrintMessage(u"\t" + "Give the Heigth of the text dimension (independent of the seTTextHeigthValue)" + "\n\n") App_Console_PrintMessage(u"seTBoundBoxTextArround # seTBoundBoxTextArround = 3" + "\n") App_Console_PrintMessage(u"\t" + "Give the arround of the text dimensions (independent of the seTDecimalValue)" + "\n\n") App_Console_PrintMessage(u"seTMemoClipBoard # SetInt [0], 1, 2, 3" + "\n") App_Console_PrintMessage(u"\t" + "Give one value [0], 1, 2, 3 clipBoard" + "\n") App_Console_PrintMessage(u"\t\t" + "[0] = desactivate the clipBoard" + "\n") App_Console_PrintMessage(u"\t\t" + " 1 = the data string is memorised to : FreeCAD.Vector( X, Y, Z )" + "\n") App_Console_PrintMessage(u"\t\t" + " 2 = the data string is memorised to : X, Y, Z" + "\n") App_Console_PrintMessage(u"\t\t" + " 3 = the data string is memorised to : X Y Z" + "\n\n") App_Console_PrintMessage(u"seTTextHeigthValue # SetInt 11" + "\n") App_Console_PrintMessage(u"\t" + "Give one text heigth value of the macro" + "\n\n") App_Console_PrintMessage(u"seTDecimalValue # SetInt 4" + "\n") App_Console_PrintMessage(u"\t" + "Give the number of decimal displayed" + "\n") App_Console_PrintMessage(u"\t" + "If the number is -1 the total decimal value is displayed)" + "\n\n") App_Console_PrintMessage(u"seTMaterialCurrentIndex # SetInt 0" + "\n") App_Console_PrintMessage(u"\t" + "Set the index of the ComboBox" + "\n\n") App_Console_PrintMessage(u"seTMaterialFileName # SetString FCInfo_material.txt" + "\n") App_Console_PrintMessage(u"\t" + "Name of the material file" + "\n\n") App_Console_PrintMessage(u"seTMaterialSavePathName # SetString C:/.../Macro/FCInfo_material.txt" + "\n") App_Console_PrintMessage(u"\t" + "Path name of the material file" + "\n\n") App_Console_PrintMessage(u"seTMaterialPrice # SetFloat" + "\n") App_Console_PrintMessage(u"\t" + "Material price by Kg " + "\n\n") App_Console_PrintMessage(u"seTMaterialSuffixDevise # SetString" + "\n") App_Console_PrintMessage(u"\t" + "Devise money" + "\n\n") App_Console_PrintMessage(u"seTMaterialSuffixCost # seTMaterialSuffixCost" + "\n") App_Console_PrintMessage(u"\t" + "Suffix Devise cost" + "\n\n") App_Console_PrintMessage(u"seTMaterialCost # SetFloat" + "\n") App_Console_PrintMessage(u"\t" + "Material cost" + "\n\n") App_Console_PrintMessage(u"seTDensiteValue # SetFloat 1.0" + "\n") App_Console_PrintMessage(u"\t" + "Give the densite value" + "\n\n") App_Console_PrintMessage(u"seTDensiteDecimalNumber # SetInt 4" + "\n") App_Console_PrintMessage(u"\t" + "Give the number of decimal for the densite value" + "\n\n") App_Console_PrintMessage(u"seTDensiteSingleStep # SetFloat 1.0" + "\n") App_Console_PrintMessage(u"\t" + "Give the step for one click, by default 1.0 (possible 0.01 or ...)" + "\n\n") App_Console_PrintMessage(u"seTDensiteSuffixChain # SetString kg (by dm3)" + "\n") App_Console_PrintMessage(u"\t" + "Choice your suffix string" + "\n\n") App_Console_PrintMessage(u"seTPositionFlyRightLeft # SetInt 2" + "\n") App_Console_PrintMessage(u"\t" + "Choice your position, Fly, [Right], Left" + "\n") App_Console_PrintMessage(u"\t\t" + " 1 = the macro window is fly (not docked)" + "\n") App_Console_PrintMessage(u"\t\t" + "[2] = the macro window is positionned to Right" + "\n") App_Console_PrintMessage(u"\t\t" + " 3 or other = the macro window is positionned to Left" + "\n") App_Console_PrintMessage(u"seTIndexUnitWeight # SetInt" + "\n") App_Console_PrintMessage(u"\t" + "Set unit Mass index" + "\n\n") App_Console_PrintMessage(u"seTUnitSymbolMicro # U" + "\n") App_Console_PrintMessage(u"\t" + "Set Symbol Micro" + "\n\n") App_Console_PrintMessage(u"seTUnitSymbolCube # 3" + "\n") App_Console_PrintMessage(u"\t" + "Set Symbol Cube" + "\n\n") App_Console_PrintMessage(u"seTUnitSymbolCarre # 2" + "\n") App_Console_PrintMessage(u"\t" + "Set Symbol Square" + "\n\n") App_Console_PrintMessage(u"seTIndexUnitLength # SetInt" + "\n") App_Console_PrintMessage(u"\t" + "Set unit Length index" + "\n\n") App_Console_PrintMessage(u"setBSplineToByArcValue # SetFloat 0.00001" + "\n") App_Console_PrintMessage(u"\t" + "Set unit for cut the BSpline for seack the radius on point given" + "\n\n") App_Console_PrintMessage(u"setMeshTopologyValue # SetFloat 0.1" + "\n") App_Console_PrintMessage(u"\t" + "Set unit for create the Mesh to Shape" + "\n\n") App_Console_PrintMessage(u"switchBSplineCreateCircleConstructorAxis #SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Display the axis of the circles (arcs) for create the BSpline" + "\n\n") App_Console_PrintMessage(u"switchBSplineCreateCircleConstructor #SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Display the circles cretors for create the BSpline" + "\n\n") App_Console_PrintMessage(u"switchCreateLineDiVatNatOnClick #SetBool True or [False]" + "\n") App_Console_PrintMessage(u"\t" + "Create the Line info on point (0,0,0) or on point mouse clicked (x,y,z) if it is True" + "\n") App_Console_PrintMessage(u"\t" + "If it is True one '*' is displayed in front of text. EX: '*Direction'" + "\n\n") #### App_Console_PrintMessage(u"#### section GroupBox begin" + "\n") App_Console_PrintMessage(u"This switch hidde or display the GroupBox concerned " + "\n\n") App_Console_PrintMessage(u"All operation of research info and calcul not change only the cosmetic hidden/display is visual" + "\n\n") App_Console_PrintMessage(u"switch_setVisible_GBox_001_Document # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_002_Coordinate_Mouse # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_003_Color # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_004_Object_Mesh # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_005_Value_Unit # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_006_Inclination # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_007_Surface_and_Volume # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_008_Cost_And_Price # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_009_BoundBox # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_010_Center_Mass # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_011_Inertia # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_012_SpreadSheet # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_013_SpreadSheet_Creation # [True] or False " + "\n") App_Console_PrintMessage(u"switch_setVisible_GBox_014_Main_Tools # [True] or False " + "\n") App_Console_PrintMessage(u"#### section GroupBox end" + "\n\n") #### App_Console_PrintError(u"####FCinfo Warning####################################################" + "\n") App_Console_PrintError(u"## Matrix of inertia ##" + "\n") App_Console_PrintError(u"## Verify this section by person knowing the inertia position ##" + "\n") App_Console_PrintError(u"## ONLY IF THE OBJECT IS PRESENT IN ONE BODY ##" + "\n") App_Console_PrintError(u"## and post your knowledges in the forum tread if it is not correct ##" + "\n") App_Console_PrintError(u"## http://forum.freecadweb.org/viewtopic.php?f=10&t=3185 ##" + "\n") App_Console_PrintError(u"######################################################################" + "\n\n") App_Console_PrintError(u"###########################################################################" + "\n") App_Console_PrintError(u"** **" + "\n") App_Console_PrintError(u"* Use at your own risk. The author assumes no liability for data loss. *" + "\n") App_Console_PrintError(u"* It is advised to backup your data frequently. *" + "\n") App_Console_PrintError(u"* If you do not trust the software do not use it. *" + "\n") App_Console_PrintError(u"** **" + "\n") App_Console_PrintError(u"###########################################################################" + "\n\n") App_Console_PrintMessage(u"#### FCInfo Configuration end ####" + "\n") App_Console_PrintMessage(u"__________________________________" + "\n\n") #### doc = FreeCAD.activeDocument() if doc == None: doc = FreeCAD.newDocument(u"FCInfo") Gui.Selection.clearSelection() #sel = FreeCADGui.Selection.getSelection() try: infoFaceMesh = Gui.ActiveDocument.ActiveView.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), getNormal) except Exception: None s=SelObserver() FreeCADGui.Selection.addObserver(s) # install the function resident mode mw = FreeCADGui.getMainWindow() dw=mw.findChildren(QDockWidget) for i in dw: if str(i.objectName()) == __Title__: if i.isVisible(): i.setVisible(False) else: if seTPositionFlyRightLeft == 1: # MainWindow None else: myNewFreeCADWidget = QDockWidget() # create (restore) a new dockwidget myNewFreeCADWidget.setObjectName(__Title__) ui = Ui_MainWindow() ui.setupUi(myNewFreeCADWidget) FCmw = FreeCADGui.getMainWindow() i.setVisible(True) break if i.objectName() != __Title__: # macro internal Name # #####MainWindow################################################################################ if seTPositionFlyRightLeft == 1: # MainWindow MainWindow = QMainWindow() # create a new window volant MainWindow.setObjectName(__Title__) # macro internal Name ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() #####DockWidget################################################################################ # else: myNewFreeCADWidget = QDockWidget() # create a new dockwidget myNewFreeCADWidget.setObjectName(__Title__) ui = Ui_MainWindow() ui.setupUi(myNewFreeCADWidget) FCmw = FreeCADGui.getMainWindow() if seTPositionFlyRightLeft == 2: # RightDock FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window Right else: # LeftDock FCmw.addDockWidget(QtCore.Qt.LeftDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window Left ui.on_PB_SpreadSheet_clicked() # cherche les SpreadSheet