Skip to content

Instantly share code, notes, and snippets.

@mario52a
Last active May 10, 2024 21:20
Show Gist options
  • Save mario52a/8d40ab6c018c2bde678f to your computer and use it in GitHub Desktop.
Save mario52a/8d40ab6c018c2bde678f to your computer and use it in GitHub Desktop.
Gives a series of informations about the selected shape and can display a conversion of length, inclination (degrees, radians, grades, pourcent) shape, surface, volume and the weight of the form in the density selected in different units of quantities international and Anglo-Saxon. (English version)
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
"""
***************************************************************************
* Copyright (c) <mario52> 2014 2015 2016 2017 2018 2019 2020 2021 2022 *
* 2023 2024 *
* 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
#
#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.29b"
__Date__ = "2024/05/10"
__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 PySide2
from PySide2 import QtGui , QtCore, QtWidgets
from PySide2.QtWidgets import QComboBox
from PySide2.QtWidgets import QMessageBox
from PySide2.QtWidgets import QTableWidget, QApplication
from PySide2.QtGui import *
from PySide2.QtCore import *
from PySide2.QtWidgets import *
#import PySide2.QtXml
import os
import platform
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 = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Information, 'New Version', msg)
diag.setWindowModality(QtCore.Qt.ApplicationModal)
diag.setWindowFlags(PySide2.QtCore.Qt.WindowStaysOnTopHint) # PySide2 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 = QtWidgets.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtWidgets.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtWidgets.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: &deg
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>&#181;</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>&#179;</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>&#178;</span>
seTUnitSymbolCarre = FreeCAD_ParamGetSet.GetString(u"seTUnitSymbolCarre")
if seTUnitSymbolCarre == "": seTUnitSymbolCarre = "2"
FreeCAD_ParamGetSet.SetString(u"seTUnitSymbolCarre", seTUnitSymbolCarre) #*"2"
##
global switchQFileDialogMint # special LinuxMint
switchQFileDialogMint = FreeCAD_ParamGetSet.GetBool("switchQFileDialogMint")
if switchQFileDialogMint == 0:
FreeCAD_ParamGetSet.SetBool("switchQFileDialogMint", switchQFileDialogMint)
try:
if platform.node() == "mint":
switchQFileDialogMint = 1
FreeCAD_ParamGetSet.SetBool("switchQFileDialogMint", switchQFileDialogMint) #*Special Mint
except Exception:
None
##
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 = "" # QtWidgets.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 = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Critical,"Error Message",msg )
diag.setWindowFlags(PySide2.QtCore.Qt.WindowStaysOnTopHint) # PySide2 #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>&#181;</span>
global uniteS ; uniteS = 1.0 # unit of measurement surface
global uniteSs ; uniteSs = u"mm"+seTUnitSymbolCarre # carre hex="\xb2", html=<span>&#178;</span>
global uniteV ; uniteV = 1.0 # unit of measurement volume
global uniteVs ; uniteVs = u"mm"+seTUnitSymbolCube # cube hex="\xb3", html=<span>&#179;</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 = QtWidgets.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.