Skip to content

Instantly share code, notes, and snippets.

@mario52a
Last active June 1, 2025 19:52
Show Gist options
  • Save mario52a/e382adbe41747788ad15a18eb206a872 to your computer and use it in GitHub Desktop.
Save mario52a/e382adbe41747788ad15a18eb206a872 to your computer and use it in GitHub Desktop.
Gives information about the selected shape and can display a conversion of length, area, volume in different units (metric and imperial) in a ToolBar.
"""
***************************************************************************
* Copyright (c) 2022 2023 2024 2025 <mario52> *
* *
* This file is a supplement to the FreeCAD CAx development system. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License (LGPL) *
* as published by the Free Software Foundation; either version 2 of *
* the License, or (at your option) any later version. *
* for detail see the LICENCE text file. *
** **
* Use at your own risk. The author assumes no liability for data loss. *
* It is advised to backup your data frequently. *
* If you do not trust the software do not use it. *
** **
* This software is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Library General Public License for more details. *
* *
* You should have received a copy of the GNU Library General Public *
* License along with this macro; if not, write to the Free Software *
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 *
* USA *
***************************************************************************
* WARNING! All changes in this file will be lost and *
* may cause malfunction of the program *
***************************************************************************
"""
#
#2022/02/16, 2022/03/14 ajout preselection size toolbar, 29/03/2022 ajout somme tous les edges
#2023/09/06 et radius Surface, 01/06/2025 retour PySide
__title__ = "FCInfo_ToolBar" # on ToolBar # modification ligne 1386 ajout try except 20/12/2023
__author__ = "Mario52"
__url__ = "http://www.freecadweb.org/index-fr.html"
__Wiki__ = "https://wiki.freecadweb.org/Macro_FCInfo_ToolBar"
__version__ = "00.06"
__date__ = "2025/06/01" #YYYY/MM/DD
import FreeCAD, FreeCADGui
App = FreeCAD
Gui = FreeCADGui
#
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 Draft, Part, Sketcher
import pivy
from pivy import coin
global uniteM ; uniteM = 0.0
global uniteMs ; uniteMs = ""
global uniteS ; uniteS = 0.0
global uniteSs ; uniteSs = ""
global uniteV ; uniteV = 0.0
global uniteVs ; uniteVs = ""
global switch_User_ToolbarIconSize
global seT_User_sizeIconX # size X icon
global seT_User_sizeIconY # size Y icon
global seT_User_StyleSheetColorToolBar # 0 = not setStyleSheet
# color in HTML format ex: "#F8E6E0" ( 0 by default)
global FreeCAD_Paramter ; FreeCAD_Paramter = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__)
##
#global toolbar1 ; toolbar1 = QtWidgets.QToolBar() # tool bar
#global lineEdit_ToolBar ; lineEdit_ToolBar = QtWidgets.QLineEdit() # lineEdit
global toolbar1 ; toolbar1 = QToolBar() # tool bar
global lineEdit_ToolBar ; lineEdit_ToolBar = QLineEdit() # lineEdit
global fontGlobal_08 ; fontGlobal_08 = QtGui.QFont()
##
global objectName ; objectName = ""
global SubElementName ; SubElementName = ""
global position
global pos2D ; pos2D = ""
global switch_User_NotInfoOnBeginning
global seT_User_DecimalValue
global seT_User_TextHeigthValue
global seT_User_setFixed_Tool_Bar_Width
global seT_User_setFixed_Tool_Bar_Height
global seT_User_StyleSheetColorToolBar
global switch_User_Work_With_Preselection
global switch_User_Work_With_PreselectionAsterix
global switch_User_Display_objectName
global switch_User_Display_SubElementName
global switch_User_Display_ShapeType
global switch_User_Display_TypeId
global switch_User_Display_RadiusObject
global switch_User_Display_RadiusSurface
global switch_User_Display_BsplineObject
global switch_User_Display_CentreObject
global switch_User_Display_CentreBoundBoxObject
global switch_User_Display_LengthObject
global switch_User_Display_SommeAllEdgesObject #sommeEdges total edges
global switch_User_Display_AreaObject
global switch_User_Display_AreaSubObject
global switch_User_Display_Position
global switch_User_Display_VolumeObject
global switch_User_Display_Position_2D_CAD
global switch_User_Display_Position_2D_BMP
global seT_User_UnitSymbolSquare
global seT_User_UnitSymbolCube
global seT_User_UnitSymbolMicro
global seT_System_IndexUnitLength
global seT_System_IndexUnitText
global comboBox_ToolBar
doc = FreeCAD.ActiveDocument
if doc == None:
doc = FreeCAD.newDocument()
doc = FreeCAD.activeDocument()
FreeCAD.setActiveDocument(doc.Name)
#### Configuration begin ####
#### NOT MODIFY THE CODE HERE ####
#### for modify : go to : FreeCAD >Menu >Tools >Edit parameters... >BaseApp/Preferences/Macros/FCMmacros/FCInfo_ToolBar ####
##
FreeCAD_Paramter.SetString("Version", __version__ + " (" + __date__ + ")")
##
switch_User_ToolbarIconSize = FreeCAD_Paramter.GetBool("switch_User_ToolbarIconSize")
if switch_User_ToolbarIconSize == 0:
FreeCAD_Paramter.SetBool("switch_User_ToolbarIconSize", switch_User_ToolbarIconSize)# switch impost or choice
seT_User_sizeIconX = seT_User_sizeIconY = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/General").GetInt("ToolbarIconSize") # FC preference
else:
seT_User_sizeIconX = FreeCAD_Paramter.GetInt("seT_User_sizeIconX") # seT_User_sizeIconX X
seT_User_sizeIconY = FreeCAD_Paramter.GetInt("seT_User_sizeIconY") # seT_User_sizeIconY Y
FreeCAD_Paramter.SetBool("switch_User_ToolbarIconSize", switch_User_ToolbarIconSize)# switch impost or choice
if seT_User_sizeIconX == 0: seT_User_sizeIconX = 24
if seT_User_sizeIconY == 0: seT_User_sizeIconY = 24
FreeCAD_Paramter.SetInt("seT_User_sizeIconX", seT_User_sizeIconX) # seT_User_sizeIconX X
FreeCAD_Paramter.SetInt("seT_User_sizeIconY", seT_User_sizeIconY) # seT_User_sizeIconY Y
##
seT_User_setFixed_Tool_Bar_Width = FreeCAD_Paramter.GetInt("seT_User_setFixed_Tool_Bar_Width")
FreeCAD_Paramter.SetInt("seT_User_setFixed_Tool_Bar_Width", seT_User_setFixed_Tool_Bar_Width)# seT_User_setFixed_Tool_Bar_Width
##2
seT_User_setFixed_Tool_Bar_Height = FreeCAD_Paramter.GetInt("seT_User_setFixed_Tool_Bar_Height")
FreeCAD_Paramter.SetInt("seT_User_setFixed_Tool_Bar_Height", seT_User_setFixed_Tool_Bar_Height)# seT_User_setFixed_Tool_Bar_Height
##
seT_User_StyleSheetColorToolBar = FreeCAD_Paramter.GetString("seT_User_StyleSheetColorToolBar")
if seT_User_StyleSheetColorToolBar == "":
FreeCAD_Paramter.SetString("seT_User_StyleSheetColorToolBar", "0") #F8E6E0
seT_User_StyleSheetColorToolBar = "0"
##
seT_User_DecimalValue = FreeCAD_Paramter.GetInt("seT_User_DecimalValue") # seT_User_DecimalValue
if seT_User_DecimalValue == 0:
seT_User_DecimalValue = 2
FreeCAD_Paramter.SetInt("seT_User_DecimalValue", seT_User_DecimalValue)# seT_User_DecimalValue
##
seT_User_TextHeigthValue = FreeCAD_Paramter.GetInt("seT_User_TextHeigthValue")# seT_User_TextHeigthValue
if seT_User_TextHeigthValue == 0:
seT_User_TextHeigthValue = 10
FreeCAD_Paramter.SetInt("seT_User_TextHeigthValue", seT_User_TextHeigthValue)# LineEdit seT_User_TextHeigthValue
##
switch_User_Work_With_Preselection = FreeCAD_Paramter.GetBool("switch_User_Work_With_Preselection")# switch yes / no Name
FreeCAD_Paramter.SetBool("switch_User_Work_With_Preselection", switch_User_Work_With_Preselection) # switch yes / no Name
if switch_User_Work_With_Preselection == 1:
switch_User_Work_With_PreselectionAsterix = " *"
else:
switch_User_Work_With_PreselectionAsterix= ""
##
switch_User_Display_objectName = FreeCAD_Paramter.GetBool("switch_User_Display_objectName")# switch yes / no Name
FreeCAD_Paramter.SetBool("switch_User_Display_objectName", switch_User_Display_objectName) # switch yes / no Name
##
switch_User_Display_SubElementName = FreeCAD_Paramter.GetBool("switch_User_Display_SubElementName")# switch yes / no Element
FreeCAD_Paramter.SetBool("switch_User_Display_SubElementName", switch_User_Display_SubElementName) # switch yes / no Element
##
switch_User_Display_ShapeType = FreeCAD_Paramter.GetBool("switch_User_Display_ShapeType")# switch yes / no ShapeType
FreeCAD_Paramter.SetBool("switch_User_Display_ShapeType", switch_User_Display_ShapeType) # switch yes / no ShapeType
##
switch_User_Display_TypeId = FreeCAD_Paramter.GetBool("switch_User_Display_TypeId")# switch yes / no TypeId
FreeCAD_Paramter.SetBool("switch_User_Display_TypeId", switch_User_Display_TypeId) # switch yes / no TypeId
##
switch_User_Display_RadiusObject = FreeCAD_Paramter.GetBool("switch_User_Display_RadiusObject")# switch yes / no Radius
FreeCAD_Paramter.SetBool("switch_User_Display_RadiusObject", switch_User_Display_RadiusObject) # switch yes / no Radius
##
switch_User_Display_RadiusSurface = FreeCAD_Paramter.GetBool("switch_User_Display_RadiusSurface")# switch yes / no Radius
FreeCAD_Paramter.SetBool("switch_User_Display_RadiusSurface", switch_User_Display_RadiusSurface) # switch yes / no Radius
##
switch_User_Display_LengthObject = FreeCAD_Paramter.GetBool("switch_User_Display_LengthObject")# switch yes / no Length
FreeCAD_Paramter.SetBool("switch_User_Display_LengthObject", switch_User_Display_LengthObject) # switch yes / no Length
##
switch_User_Display_SommeAllEdgesObject = FreeCAD_Paramter.GetBool("switch_User_Display_SommeAllEdgesObject")# switch yes / no Length
FreeCAD_Paramter.SetBool("switch_User_Display_SommeAllEdgesObject", switch_User_Display_SommeAllEdgesObject) # switch yes / no Length
##
switch_User_Display_NumberFacesMesh = FreeCAD_Paramter.GetBool("switch_User_Display_NumberFacesMesh")# switch yes / no info
FreeCAD_Paramter.SetBool("switch_User_Display_NumberFacesMesh", switch_User_Display_NumberFacesMesh) # switch yes / no Radius
##
switch_User_Display_NumberPointsMeshPoints = FreeCAD_Paramter.GetBool("switch_User_Display_NumberPointsMeshPoints")# switch yes / no info
FreeCAD_Paramter.SetBool("switch_User_Display_NumberPointsMeshPoints", switch_User_Display_NumberPointsMeshPoints) # switch yes / no Radius
##
switch_User_Display_NumberEdgesMesh = FreeCAD_Paramter.GetBool("switch_User_Display_NumberEdgesMesh")# switch yes / no info
FreeCAD_Paramter.SetBool("switch_User_Display_NumberEdgesMesh", switch_User_Display_NumberEdgesMesh) # switch yes / no Radius
##
switch_User_Display_AreaObject = FreeCAD_Paramter.GetBool("switch_User_Display_AreaObject")# switch yes / no Area
FreeCAD_Paramter.SetBool("switch_User_Display_AreaObject", switch_User_Display_AreaObject) # switch yes / no Area
##
switch_User_Display_AreaSubObject = FreeCAD_Paramter.GetBool("switch_User_Display_AreaSubObject")# switch yes / no Area
FreeCAD_Paramter.SetBool("switch_User_Display_AreaSubObject", switch_User_Display_AreaSubObject) # switch yes / no Area
##
switch_User_Display_VolumeObject = FreeCAD_Paramter.GetBool("switch_User_Display_VolumeObject")# switch yes / no Volume
FreeCAD_Paramter.SetBool("switch_User_Display_VolumeObject", switch_User_Display_VolumeObject) # switch yes / no Volume
##
switch_User_Display_BsplineObject = FreeCAD_Paramter.GetBool("switch_User_Display_BsplineObject")# switch yes / no Bspline
FreeCAD_Paramter.SetBool("switch_User_Display_BsplineObject", switch_User_Display_BsplineObject) # switch yes / no Bspline
##
switch_User_Display_CentreObject = FreeCAD_Paramter.GetBool("switch_User_Display_CentreObject")# switch yes / no Centre
FreeCAD_Paramter.SetBool("switch_User_Display_CentreObject", switch_User_Display_CentreObject) # switch yes / no Centre
##
switch_User_Display_CentreBoundBoxObject = FreeCAD_Paramter.GetBool("switch_User_Display_CentreBoundBoxObject")# switch yes / no Centre BoundBox
FreeCAD_Paramter.SetBool("switch_User_Display_CentreBoundBoxObject", switch_User_Display_CentreBoundBoxObject) # switch yes / no Centre BoundBox
##
switch_User_Display_Position = FreeCAD_Paramter.GetBool("switch_User_Display_Position")# switch yes / no Position
FreeCAD_Paramter.SetBool("switch_User_Display_Position", switch_User_Display_Position) # switch yes / no Position
##
switch_User_Display_Position_2D_CAD = FreeCAD_Paramter.GetBool("switch_User_Display_Position_2D_CAD")# switch yes / no Position 2D CAD
FreeCAD_Paramter.SetBool("switch_User_Display_Position_2D_CAD", switch_User_Display_Position_2D_CAD) # switch yes / no Position 2D CAD
##
switch_User_Display_Position_2D_BMP = FreeCAD_Paramter.GetBool("switch_User_Display_Position_2D_BMP")# switch yes / no Position 2D BMP Reverse Y
FreeCAD_Paramter.SetBool("switch_User_Display_Position_2D_BMP", switch_User_Display_Position_2D_BMP) # switch yes / no Position 2D BMP Reverse Y
##
switch_User_NotInfoOnBeginning = FreeCAD_Paramter.GetBool("switch_User_NotInfoOnBeginning")# switch yes / no Info
FreeCAD_Paramter.SetBool("switch_User_NotInfoOnBeginning", switch_User_NotInfoOnBeginning) # switch yes / no Info
##
seT_User_UnitSymbolSquare = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__).GetString("seT_User_UnitSymbolSquare")
if seT_User_UnitSymbolSquare == "":
seT_User_UnitSymbolSquare = "2"
FreeCAD_Paramter.SetString("seT_User_UnitSymbolSquare", seT_User_UnitSymbolSquare) #
##
seT_User_UnitSymbolCube = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__).GetString("seT_User_UnitSymbolCube")
if seT_User_UnitSymbolCube == "":
seT_User_UnitSymbolCube = "3"
FreeCAD_Paramter.SetString("seT_User_UnitSymbolCube", seT_User_UnitSymbolCube) #
##
seT_User_UnitSymbolMicro = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__).GetString("seT_User_UnitSymbolMicro")
if seT_User_UnitSymbolMicro == "":
seT_User_UnitSymbolMicro = ""
FreeCAD_Paramter.SetString("seT_User_UnitSymbolMicro", seT_User_UnitSymbolMicro) #
##
#### pour demarrage
seT_System_IndexUnitLength = FreeCAD_Paramter.GetInt("seT_System_IndexUnitLength") # seT_System_IndexUnitLength
if seT_System_IndexUnitLength == 0:
seT_System_IndexUnitLength = 0
FreeCAD_Paramter.SetInt("seT_System_IndexUnitLength", seT_System_IndexUnitLength) # seT_System_IndexUnitLength
#### pour demarrage
seT_System_IndexUnitText = FreeCAD_Paramter.GetString("seT_System_IndexUnitText") # seT_System_IndexUnitText
if seT_System_IndexUnitText == "":
seT_System_IndexUnitText = "km"
FreeCAD_Paramter.SetString("seT_System_IndexUnitText", seT_System_IndexUnitText) # seT_System_IndexUnitText
##
uniteM = FreeCAD_Paramter.GetFloat("seT_System_uniteM")
if uniteM == 0:
uniteM = 0.000001
FreeCAD_Paramter.SetFloat("seT_System_uniteM", uniteM)
##
uniteMs = FreeCAD_Paramter.GetString("seT_System_uniteMs")
if uniteMs == "":
uniteMs= "km"
FreeCAD_Paramter.SetString("seT_System_uniteMs", uniteMs)
##
uniteS = FreeCAD_Paramter.GetFloat("seT_System_uniteS")
if uniteS == 0:
uniteS = 0.000000000001
FreeCAD_Paramter.SetFloat("seT_System_uniteS", uniteS)
##
uniteSs = FreeCAD_Paramter.GetString("seT_System_uniteSs")
if uniteSs == "":
uniteSs= "km"+seT_User_UnitSymbolSquare
FreeCAD_Paramter.SetString("seT_System_uniteSs", uniteSs)
##
uniteV = FreeCAD_Paramter.GetFloat("seT_System_uniteV")
if uniteV == 0:
uniteV = 0.000000000000000001
FreeCAD_Paramter.SetFloat("seT_System_uniteV", uniteV)
##
uniteVs = FreeCAD_Paramter.GetString("seT_System_uniteVs")
if uniteVs == "":
uniteVs= "km"+seT_User_UnitSymbolCube
FreeCAD_Paramter.SetString("seT_System_uniteVs", uniteVs)
#### Configuration end ################################################
Refresh_Icon = [
"64 64 9 1",
" c None",
". c #000000",
"+ c #1D4376",
"@ c #5B5E5D",
"# c #3C6BA7",
"$ c #6A93C2",
"% c #9DA2A4",
"& c #C6CACB",
"* c #FFFFFF",
" ",
" +++++++++++++++++++++++++++++++++++++++++++++++++++++ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$##+ ",
" +$*&&&&&&&&&*&&&&&&&&*&&&&&&&&*********************#+ ",
" +$*%%%%%%%%%*%%%%%%%%*%%%%%%%%*********************#+ ",
" +$*&&&&&&&&&*&&&&&&&&*&&&&&&&&*********************#+ ",
" +$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#+ ",
" +$+++++++++++++++++++++++++++++++++++++++++++++++++#+ ",
" +$#+++++++++++++++++++++++++++++++++++++++++++++++##+ ",
" +$################################################$$+ ",
" +$################################################$$+ ",
" +$###+++++++++++++++++++++++######################$$+ ",
" +$###+#*******************$+######################$$+ ",
" +$$##+$*$$$$$$$$$$$$$$$$$*%+######################$$+ ",
" +$$##+$*+++++++++++++++++&%+######################$$+ ",
" +$$##+$*#++++++++++++++++&%+######################$$+ ",
" +$$##+$*******************%+######################$$+ ",
" +$$##+$*******************%+######################$$+ ",
" +$$##+$*******************%+######################$$+ ",
" +$$##+$*******************%+######################$$+ ",
" +$$##+$*******************%+######################$$+ ",
" +$$##+$*******************%+######################$$+ ",
" +$$##+$*******************%+$$$$$$$$$$++##########$$+ ",
" +$$##+$*******************%+**********&+##########$$+ ",
" +$$##+$*******************%++++++++++&&+##########$$+ ",
" +$$$$+$*******************%++++++++++&&+$$$$$$$$$$$$+ ",
" +$$$$+$*******************%+$$$$$$$$$*&+$$$$$$$$$$$$+ ",
" +$$$$+$*******************%+**********&+$$$$$$$$$$$$+ ",
" +$$$$+$&&&&&&&&&&&&&&&&&&&%+**********&+$$$$$$$$$$$$+ ",
" +$$$$+$&&&&&&&&&&&&&&&&&&&%+**********&+$$$$$$$$$$$$+ ",
" +$$$$+$&&&&&&&&&&&&&&&&&&&%+**********&+$$$$$$$$$$$$+ ",
" +$$$$+#&&&&&&&&&&&&&&&&&&&%+**********&+$$$$$$$$$$$$+ ",
" +$$$$+++++++++++++++++++++++****&&%%@@@@@@@@@@@@@@@@+ ",
" +$$$$$$$##########$&&&&&&&*****%@@@@@@%%%%%%@@@@@@@@+ ",
" +$$$$$$$$$$$$$$$$#$***********@@&**********%@@%%%%@@@ ",
" +$$$$$$$$$$$$$$$$#$**********%@***********%@%%%%%%%@@ ",
" +$$$$$$$$$$$$$$$$#$%@@@@@@@@@@&**********%@@@@@@@@@@@@ ",
" +$$$$$$$$$$$$$$$$#$*%@@%&&&&&&**********&@@@@@@@@@@@%@ ",
" +$$$$$$$$$$$$$$$$#$**&@@***********************%@@%%%@@ ",
" +$$$$$$$$$$$$$$$$#$&&&&%@%*******************%@@%%%%%%@ ",
" +$$$$$$$$$$$$$$$$#$&&&&&&@@****************%@@%%%%%%%%@ ",
" +$$$$$$$$$$$$$$$$#$&&&&&&&@@&***&&&&&****%@@%%%%%%%%%%@@ ",
" +$$$$$$$$$$$$$$$$#+$$$$$$$$@@%***&&****%@@$@%%%%%%%%%%%@ ",
" +$$$$$$$$$$$$$$$$############@@&*****%@@$$$@%%%%%%%%%%%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@%**%@@$$$$$@%&%%%%%%%%%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@@@@$$$$$$$@%&%%%%%%%%%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@$$$$$$$$$@%&&%%%%%%&&@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@%&&&%%%%%&%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$@%&&&&&&&&&%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$@@@@@@@@@@@@@@@@$@&&&&&&&&&&%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$$@%************%@%@&&&&&&&&&&%@ ",
" +$$$$$$$$$$$$$$$$$$$$$$$$@%************&@@@&&&&&&&&&&@@ ",
" +++++++++++++++++++++++++@@************&@@%&&&&&&&&&&@ ",
" @@************&@@&&&&&&&&&&%@ ",
" @@%&&&&&&&&&&&&@@&&&&&&&&&&@@ ",
" @@&&&&&&&&&&&&%@&&&&&&&&&%@ ",
" @@&&&&&&&&&&&%@%&&&&&&&&@@ ",
" @@%%%%%%%%%%%@@&*****&@@ ",
" @@@%%%%%%%%%%@@@%%%%@@ ",
" @@@@@@@@@@@@@@@@@@@@@ ",
" @@@@@@@@@@@@@@@@@@@ ",
" ",
" ",
" "]
####
global infoFaceMesh;
global indexFaceMeshSTR ; indexFaceMeshSTR = "X"
global coordPointsMesh ; coordPointsMesh = ""
import warnings
warnings.simplefilter("ignore")
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("Error adjustedGlobalPlacement")
return locPlacement
def getNormal(cb):
#https://wiki.freecadweb.org/Code_snippets#Get_the_normal_vector_of_a_surface_from_a_STL_file
global indexFaceMeshSTR
global objs
try:
indexFaceMeshSTR = "X"
if (hasattr(objs[0], "Mesh")):
pp = cb.getPickedPoint()
indexFaceMeshSTR = str(coin.cast(pp.getDetail(), "SoFaceDetail").getFaceIndex())
except Exception:
None
def Refresh_Preference():### Begin command Std_Refresh_Preference
global seT_User_DecimalValue
global seT_User_TextHeigthValue
global switch_User_NotInfoOnBeginning
global fontGlobal_08
global lineEdit_ToolBar
global switch_User_ToolbarIconSize
global seT_User_sizeIconX
global seT_User_sizeIconY
global toolbar1
global seT_User_setFixed_Tool_Bar_Width
global seT_User_setFixed_Tool_Bar_Height
global seT_User_StyleSheetColorToolBar
global switch_User_Work_With_Preselection
global switch_User_Work_With_PreselectionAsterix
global switch_User_Display_objectName
global switch_User_Display_SubElementName
global switch_User_Display_ShapeType
global switch_User_Display_TypeId
global switch_User_Display_NumberFacesMesh
global switch_User_Display_NumberPointsMeshPoints
global switch_User_Display_NumberEdgesMesh
global switch_User_Display_RadiusObject
global switch_User_Display_RadiusSurface
global switch_User_Display_BsplineObject
global switch_User_Display_CentreObject
global switch_User_Display_CentreBoundBoxObject
global switch_User_Display_LengthObject
global switch_User_Display_SommeAllEdgesObject
global switch_User_Display_AreaObject
global switch_User_Display_AreaSubObject
global switch_User_Display_Position
global switch_User_Display_VolumeObject
global switch_User_Display_Position_2D_CAD
global switch_User_Display_Position_2D_BMP
global seT_User_UnitSymbolSquare
global seT_User_UnitSymbolCube
global seT_User_UnitSymbolMicro
global seT_System_IndexUnitLength
global seT_System_IndexUnitText
global FreeCAD_Paramter
global uniteM
global uniteMs
global uniteS
global uniteSs
global uniteV
global uniteVs
#try:
seT_User_setFixed_Tool_Bar_Width = FreeCAD_Paramter.GetInt("seT_User_setFixed_Tool_Bar_Width")
if seT_User_setFixed_Tool_Bar_Width != 0:
toolbar1.setFixedWidth(seT_User_setFixed_Tool_Bar_Width)
seT_User_setFixed_Tool_Bar_Height = FreeCAD_Paramter.GetInt("seT_User_setFixed_Tool_Bar_Height")
if seT_User_setFixed_Tool_Bar_Height != 0:
toolbar1.setFixedHeight(seT_User_setFixed_Tool_Bar_Height)
#### color StyleSheet
seT_User_StyleSheetColorToolBar = FreeCAD_Paramter.GetString("seT_User_StyleSheetColorToolBar")
if seT_User_StyleSheetColorToolBar == "":
FreeCAD_Paramter.SetString("seT_User_StyleSheetColorToolBar", "0")
seT_User_StyleSheetColorToolBar = "0"
if seT_User_StyleSheetColorToolBar != "0":
toolbar1.setStyleSheet("QToolBar {background-color:" + seT_User_StyleSheetColorToolBar + ";}") #F8E6E0
else:
toolbar1.setStyleSheet("QToolBar {QPalette.Base}")
switch_User_Work_With_Preselection = FreeCAD_Paramter.GetBool("switch_User_Work_With_Preselection") # switch yes / no preselection
if switch_User_Work_With_Preselection == 1:
switch_User_Work_With_PreselectionAsterix= " *"
#toolbar1.setStyleSheet("QToolBar {QPalette.Base}")
#toolbar1.setStyleSheet("QToolBar {color: black; background-color: #F8E6E0}") # html code #F8E6E0
else:
switch_User_Work_With_PreselectionAsterix= ""
#### color
## Icon
switch_User_ToolbarIconSize = FreeCAD_Paramter.GetBool("switch_User_ToolbarIconSize")
if switch_User_ToolbarIconSize == 0:
FreeCAD_Paramter.SetBool("switch_User_ToolbarIconSize", switch_User_ToolbarIconSize)# switch impost or choice
seT_User_sizeIconX = seT_User_sizeIconY = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/General").GetInt("ToolbarIconSize") # FC preference
else:
seT_User_sizeIconX = FreeCAD_Paramter.GetInt("seT_User_sizeIconX") # seT_User_sizeIconX X
seT_User_sizeIconY = FreeCAD_Paramter.GetInt("seT_User_sizeIconY") # seT_User_sizeIconY Y
FreeCAD_Paramter.SetBool("switch_User_ToolbarIconSize", switch_User_ToolbarIconSize)# switch impost or choice
if seT_User_sizeIconX == 0: seT_User_sizeIconX = 24
if seT_User_sizeIconY == 0: seT_User_sizeIconY = 24
FreeCAD_Paramter.SetInt("seT_User_sizeIconX", seT_User_sizeIconX) # seT_User_sizeIconX X
FreeCAD_Paramter.SetInt("seT_User_sizeIconY", seT_User_sizeIconY) # seT_User_sizeIconY Y
toolbar1.setIconSize(QSize(seT_User_sizeIconX, seT_User_sizeIconY)) # affect size
#### variables LineEdit debut
##
seT_User_DecimalValue = FreeCAD_Paramter.GetInt("seT_User_DecimalValue") # seT_User_DecimalValue
seT_User_TextHeigthValue = FreeCAD_Paramter.GetInt("seT_User_TextHeigthValue")# LineEdit seT_User_TextHeigthValue
##
switch_User_NotInfoOnBeginning = FreeCAD_Paramter.GetBool("switch_User_NotInfoOnBeginning") # switch yes / no info
switch_User_Display_objectName = FreeCAD_Paramter.GetBool("switch_User_Display_objectName") # switch yes / no Object Name
switch_User_Display_SubElementName = FreeCAD_Paramter.GetBool("switch_User_Display_SubElementName") # switch yes / no Element
switch_User_Display_ShapeType = FreeCAD_Paramter.GetBool("switch_User_Display_ShapeType") # switch yes / no Shape Type
switch_User_Display_TypeId = FreeCAD_Paramter.GetBool("switch_User_Display_TypeId") # switch yes / no TypeId
switch_User_Display_NumberFacesMesh = FreeCAD_Paramter.GetBool("switch_User_Display_NumberFacesMesh") # switch yes / no Face Mesh
switch_User_Display_NumberPointsMeshPoints= FreeCAD_Paramter.GetBool("switch_User_Display_NumberPointsMeshPoints")# switch yes / no Points Mesh
switch_User_Display_NumberEdgesMesh = FreeCAD_Paramter.GetBool("switch_User_Display_NumberEdgesMesh") # switch yes / no Edge Mesh
switch_User_Display_RadiusObject = FreeCAD_Paramter.GetBool("switch_User_Display_RadiusObject") # switch yes / no Radius
switch_User_Display_RadiusSurface = FreeCAD_Paramter.GetBool("switch_User_Display_RadiusSurface") # switch yes / no Radius
switch_User_Display_BsplineObject = FreeCAD_Paramter.GetBool("switch_User_Display_BsplineObject") # switch yes / no Bspline
switch_User_Display_CentreObject = FreeCAD_Paramter.GetBool("switch_User_Display_CentreObject") # switch yes / no Centre
switch_User_Display_CentreBoundBoxObject = FreeCAD_Paramter.GetBool("switch_User_Display_CentreBoundBoxObject")# switch yes / no Centre BoundBox
switch_User_Display_LengthObject = FreeCAD_Paramter.GetBool("switch_User_Display_LengthObject") # switch yes / no Length
switch_User_Display_SommeAllEdgesObject = FreeCAD_Paramter.GetBool("switch_User_Display_SommeAllEdgesObject") # switch yes / no sommeEdges total edges
switch_User_Display_AreaObject = FreeCAD_Paramter.GetBool("switch_User_Display_AreaObject") # switch yes / no Area Object
switch_User_Display_AreaSubObject = FreeCAD_Paramter.GetBool("switch_User_Display_AreaSubObject") # switch yes / no Area SubObject
switch_User_Display_Position = FreeCAD_Paramter.GetBool("switch_User_Display_Position") # switch yes / no Position
switch_User_Display_VolumeObject = FreeCAD_Paramter.GetBool("switch_User_Display_VolumeObject") # switch yes / no Volume
switch_User_Display_Position_2D_CAD = FreeCAD_Paramter.GetBool("switch_User_Display_Position_2D_CAD") # switch yes / no Position 2D CAD Y left bottom
switch_User_Display_Position_2D_BMP = FreeCAD_Paramter.GetBool("switch_User_Display_Position_2D_BMP") # switch yes / no Position 2D BMP Reverse Y 0,0 left Top
##
seT_User_UnitSymbolSquare = FreeCAD_Paramter.GetString("seT_User_UnitSymbolSquare")
seT_User_UnitSymbolCube = FreeCAD_Paramter.GetString("seT_User_UnitSymbolCube")
seT_User_UnitSymbolMicro = FreeCAD_Paramter.GetString("seT_User_UnitSymbolMicro")
##
seT_System_IndexUnitLength = FreeCAD_Paramter.GetInt("seT_System_IndexUnitLength") #
seT_System_IndexUnitText = FreeCAD_Paramter.GetString("seT_System_IndexUnitText" ) # seT_System_IndexUnitText
##
uniteM = FreeCAD_Paramter.GetFloat("seT_System_uniteM")
uniteMs = FreeCAD_Paramter.GetString("seT_System_uniteMs")
uniteS = FreeCAD_Paramter.GetFloat("seT_System_uniteS")
uniteSs = FreeCAD_Paramter.GetString("seT_System_uniteSs")
uniteV = FreeCAD_Paramter.GetFloat("seT_System_uniteV")
uniteVs = FreeCAD_Paramter.GetString("seT_System_uniteVs")
activeInfo()
# except Exception:
# None
def activeInfo():
global SubElementName
global objectName
global position
global pos2D
global sel
global selEx
global objs
global sObj
global fontGlobal_08
global sketch0selEx
global lineEdit_ToolBar
global seT_User_DecimalValue
global seT_User_TextHeigthValue
global FreeCAD_Paramter
global switch_User_Work_With_PreselectionAsterix
global switch_User_Display_objectName
global switch_User_Display_SubElementName
global switch_User_Display_ShapeType
global switch_User_Display_TypeId
global switch_User_Display_NumberFacesMesh
global switch_User_Display_NumberPointsMeshPoints
global switch_User_Display_NumberEdgesMesh
global switch_User_Display_RadiusObject
global switch_User_Display_RadiusSurface
global switch_User_Display_BsplineObject
global switch_User_Display_CentreObject
global switch_User_Display_CentreBoundBoxObject
global switch_User_Display_LengthObject
global switch_User_Display_SommeAllEdgesObject
global switch_User_Display_AreaObject
global switch_User_Display_AreaSubObject
global switch_User_Display_Position
global switch_User_Display_VolumeObject
global switch_User_Display_Position_2D_CAD
global switch_User_Display_Position_2D_BMP
global seT_User_StyleSheetColorToolBar
global switch_User_Work_With_Preselection
global uniteM
global uniteMs
global uniteS
global uniteSs
global uniteV
global uniteVs
global infoFaceMesh
global indexFaceMeshSTR
doc = FreeCAD.activeDocument()
if doc == None:
FreeCAD.Console.PrintError("Not activeView or ..." + "\n")
doc = FreeCAD.newDocument("FCInfo Tools")
None
else:
try:
rayonObjet = rayonSurface = longueurObjet = sommeEdges = surfaceObj = surfaceFace = volumeObject = 0.0
nombreFacesMesh = nombrePointsMesh = nombreArretesMesh = BsplineNombreDeNoeuds = indexSubObject = 0
## Asterix and Obelix
objectNameAsterix = SubElementNameAsterix = typeObjectShapeTypeSTRAsterix = typeObjectTypeIdSTRAsterix = nombreFacesMeshSTRAsterix = nombrePointsMeshSTRAsterix = ""
nombreArretesMeshSTRAsterix = rayonObjetSTRAsterix = rayonSurfaceSTRAsterix = longueurSTRAsterix = sommeEdgesSTRAsterix = surfaceObjSTRAsterix = surfaceFaceSTRAsterix = ""
volumeObjectSTRAsterix = bsplineSTRAsterix = centreObjetSTRAsterix = centreBBSTRAsterix = positionSTRAsterix = Position2DSTRAsterix = ""
bsplineNoeudsSTR = bsplineRayonObjetAppSTR = bsplinePointsCoorSoSTR = bsplinePointsCoorShapeSTR = ""
rayonObjetSTR = diametreObjetSTR = rayonSurfaceSTR = diametreSurfaceSTR = longueurSTR = surfaceObjSTR = surfaceFaceSTR = volumeObjectSTR = bsplineSTR = centreObjetSTR = centreBBSTR = positionSTR = pos2DSTR = ""
nombreFacesMeshSTR = nombrePointsMeshSTR = nombreArretesMeshSTR = typeObjectShapeTypeSTR = typeObjectTypeIdSTR = sketchObjectTypeSTR = centreObjet = ""
BsplineArcsRadius = []
BsplinePointsCoorS = []
BsplinePointsCoorSo = []
lineEdit = ""
lineEdit_ToolBar.clear()
if switch_User_Display_objectName == 1: # objectName
try:
objectNameAsterix = " *"
lineEdit += " (" + str(objectName) + ") "
except Exception:
objectName = ""
lineEdit += " (" + str(objectName) + ") "
if switch_User_Display_SubElementName == 1: # SubElementName
try:
SubElementNameAsterix = " *"
try:
if hasattr(objs[0], "Mesh"):
SubElementName = ""
SubElementName = "Face" + indexFaceMeshSTR
except Exception: None
lineEdit += " (" + str(SubElementName) + ") "
except Exception:
SubElementName = ""
lineEdit += " (" + str(SubElementName) + ") "
#### sketcher begin ####
##
##https://forum.freecadweb.org/viewtopic.php?f=22&t=53127
##How to select edges inside of Sketcher?
##
sketch = sel[0] #sketch0 = Gui.Selection.getSelectionEx()[0]
App.ActiveDocument.recompute()
sketchObjectTypeSTR = indexSubObjectSTR = ""
if (Gui.ActiveDocument.getInEdit() and (sketch.TypeId == "Sketcher::SketchObject")): # sketcher open
if ("H_Axis" in SubElementName) or ("V_Axis" in SubElementName) or ("Constraint" in SubElementName) or ("Vertex" in SubElementName):
None
else:
try:
longueurSTR = rayonObjetSTR = diametreObjetSTR = rayonSurfaceSTR = diametreSurfaceSTR = CentreObjet = MajorRadiusObjet = MajorRadiusObjet = ""
nameSketch = sketch.Name
try:
indexSubObject = int(SubElementName[4:]) - 1 # index Edge10
sObject = App.ActiveDocument.getObject(nameSketch).Geometry[indexSubObject]
sketchObjectTypeSTR = sketch.TypeId
lineEdit += " (TyO:" + str(sketchObjectTypeSTR) + ") "
indexSubObjectSTR = " (I:" + str(indexSubObject) + ") "
lineEdit += indexSubObjectSTR
except Exception: None
if isinstance(sObject,(Part.LineSegment)):
longueurObjet = sObject.length()
elif isinstance(sObject,(Part.BSplineCurve)):
longueurObjet = sObject.length()
elif isinstance(sObject,(Part.Circle)):
longueurObjet = sObject.length()
rayonObjet = sObject.Radius
CentreObjet = sObject.Center
elif isinstance(sObject,(Part.ArcOfCircle)):
longueurObjet = sObject.length()
rayonObjet = sObject.Radius
CentreObjet = sObject.Center
elif isinstance(sObject,(Part.Ellipse)):
longueurObjet = sObject.length()
CentreObjet = sObject.Center
MajorRadiusObjet = sObject.MajorRadius
MinorRadiusObjet = sObject.MinorRadius
elif isinstance(sObject,(Part.ArcOfEllipse)):
longueurObjet = sObject.length()
CentreObjet = sObject.Center
MajorRadiusObjet = sObject.MajorRadius
MinorRadiusObjet = sObject.MinorRadius
elif isinstance(sObject,(Part.ArcOfParabola)):
longueurObjet = sObject.length()
CentreObjet = sObject.Center
elif isinstance(sObject,(Part.ArcOfHyperbola)):
longueurObjet = sObject.length()
CentreObjet = sObject.Center
MajorRadiusObjet = sObject.MajorRadius
MinorRadiusObjet = sObject.MinorRadius
else:
None
if switch_User_Display_LengthObject == 1: # longueurObjet
try:
if longueurObjet != 0.0:
longueurSTR = " (L:" + str(round(longueurObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") "
lineEdit += longueurSTR
except Exception: None
if switch_User_Display_RadiusObject == 1: # rayon objet
try:
if rayonObjet != 0.0:
rayonObjetSTR = ("(r:" + str(round(rayonObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") ")
diametreObjetSTR = (" [D:" + str(round(rayonObjet * 2.0, seT_User_DecimalValue)) + " " + uniteMs + "] ")
lineEdit += rayonObjetSTR + diametreObjetSTR
except Exception: None
if switch_User_Display_RadiusSurface == 1: # rayon d'une surface
try:
if rayonSurface != 0.0:
rayonSurfaceSTR = ("(rS:" + str(round(rayonSurface * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") ")
diametreSurfaceSTR = (" [DS:" + str(round(rayonSurface * 2.0, seT_User_DecimalValue)) + " " + uniteMs + "] ")
lineEdit += rayonSurfaceSTR + diametreSurfaceSTR
except Exception: None
if switch_User_Display_CentreObject == 1: # centre cercle et autres
try:
if CentreObjet != "":
CentreObjetSTR = (" (Ce:" + "X:" + str(round(float(CentreObjet[0] * uniteM), seT_User_DecimalValue)) + " " + uniteMs + "," +
"Y:" + str(round(float(CentreObjet[1] * uniteM), seT_User_DecimalValue)) + " " + uniteMs + "," +
"Z:" + str(round(float(CentreObjet[2] * uniteM), seT_User_DecimalValue)) + " " + uniteMs + ") ")
lineEdit += CentreObjetSTR
except Exception: None
#try:
# radiusObjectSTR = (" (r:" + "Min:" + str(round(float(MajorRadiusObjet * uniteM), seT_User_DecimalValue)) + " " + uniteMs + ", " +
# "Maj:" + str(round(float(MinorRadiusObjet * uniteM), seT_User_DecimalValue)) + " " + uniteMs + ") ")
# lineEdit += radiusObjectSTR
#except Exception: None
except Exception:
App.Console.PrintError("Error read Sketcher")
#### sketcher end ####
else:
#### Shape Mesh Points Begin ####
try:
if hasattr(objs[0], "Shape"): # object Shape
sObj = objs[0].Shape
elif hasattr(objs[0], "Mesh"): # object mesh # upgrade with wmayer thanks #http://forum.freecadweb.org/viewtopic.php?f=13&t=22331
sObj = objs[0].Mesh
######## appel 2 fois sinon le premier appel donne 0 ? meme comme ca !!
try:
Gui.ActiveDocument.ActiveView.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), infoFaceMesh)
except Exception: None
try:
infoFaceMesh2 = infoFaceMesh = Gui.ActiveDocument.ActiveView.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), getNormal)
infoFaceMesh2 = infoFaceMesh = Gui.ActiveDocument.ActiveView.addEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), getNormal)
Gui.ActiveDocument.ActiveView.removeEventCallbackPivy(coin.SoMouseButtonEvent.getClassTypeId(), infoFaceMesh)
except Exception: None
########
elif hasattr(objs[0], "Points"): # object Points
sObj = objs[0].Points
else:
sObj = "x"
except Exception:
sObj = "x"
if switch_User_Display_ShapeType == 1: # Shape Type
try:
typeObjectShapeTypeSTRAsterix = " *"
typeObjectShapeTypeSTR = sObj.ShapeType
lineEdit += " (TyS:" + str(typeObjectShapeTypeSTR) + ") "
except Exception:
try:
if hasattr(objs[0], "Mesh"):
lineEdit += " (Ty:" + "Mesh" + ") "
if hasattr(objs[0], "Points"):
lineEdit += " (Ty:" + "Point" + ") "
else:
None
except Exception: None
# if switch_User_Display_SommeAllEdgesObject == 1: # sommeEdges total edges
# try:
# sommeEdgesSTRAsterix = " *"
# for j in sObj.Edges:
# sommeEdges += j.Length
# sommeEdgesSTR = str(sommeEdges)
# lineEdit += " (Se:" + sommeEdgesSTR + ") "
# except Exception: None
if switch_User_Display_TypeId == 1: # Shape TypeId
try:
typeObjectTypeIdSTRAsterix = " *"
typeObjectTypeIdSTR = str(sel[0].Shape.TypeId)
lineEdit += " (TyI:" + typeObjectTypeIdSTR + ") "
except Exception: None
if switch_User_Display_NumberFacesMesh == 1: # Nombre Faces Mesh
try:
nombreFacesMeshSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
nombreFacesMesh = sObj.CountFacets
nombreFacesMeshSTR = str(nombreFacesMesh)
lineEdit += " (Nf:" + nombreFacesMeshSTR + ") "
except Exception: None
if switch_User_Display_NumberPointsMeshPoints == 1: # Nombre Points Mesh
try:
nombrePointsMeshSTRAsterix = " *"
if (hasattr(objs[0], "Mesh")) or (hasattr(objs[0], "Points")):
nombrePointsMesh = sObj.CountPoints
nombrePointsMeshSTR = str(nombrePointsMesh)
lineEdit += " (Np:" + nombrePointsMeshSTR + ") "
except Exception: None
if switch_User_Display_NumberEdgesMesh == 1: # Nombre Edges Mesh
try:
nombreArretesMeshSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
try: # no in version 018
nombreArretesMesh = sObj.CountEdges
except Exception:
nombreArretesMesh = 0
nombreArretesMeshSTR = str(nombreArretesMesh)
lineEdit += " (Ne:" + nombreArretesMeshSTR + ") "
except Exception: None
if switch_User_Display_RadiusObject == 1: # radius object
try:
rayonObjetSTRAsterix = " *"
rayonObjet = selEx.Curve.Radius
rayonObjetSTR = ("(r:" + str(round(rayonObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") ")
diametreObjetSTR = (" [D:" + str(round(rayonObjet * 2.0, seT_User_DecimalValue)) + " " + uniteMs + "] ")
lineEdit += rayonObjetSTR + diametreObjetSTR
except Exception: None
if switch_User_Display_RadiusSurface == 1: # radius surface
try:
rayonSurfaceSTRAsterix = " *"
rayonSurface = selEx.Surface.Radius
rayonSurfaceSTR = ("(rS:" + str(round(rayonSurface * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") ")
diametreSurfaceSTR = (" [DS:" + str(round(rayonSurface * 2.0, seT_User_DecimalValue)) + " " + uniteMs + "] ")
lineEdit += rayonSurfaceSTR + diametreSurfaceSTR
except Exception: None
if switch_User_Display_LengthObject == 1: # longueurObjet
try:
longueurSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
try:
length0 = sObj.Facets[int(indexFaceMeshSTR)].getEdge(0).Length # getEdge no in version 018
length1 = sObj.Facets[int(indexFaceMeshSTR)].getEdge(1).Length
length2 = sObj.Facets[int(indexFaceMeshSTR)].getEdge(2).Length
longueurObjet = length0 + length1 + length2 # perimetre triangle
except Exception:
longueurObjet = length0 = length1 = length2 = 0.0
if longueurObjet != 0.0:
longueurSTR = " (P:" + str(round(longueurObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") "
lineEdit += longueurSTR
else:
longueurObjet = selEx.Length
if longueurObjet != 0.0:
if "Face" in str(selEx):
longueurSTR = " (P:" + str(round(longueurObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") "
else:
longueurSTR = " (L:" + str(round(longueurObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + ") "
lineEdit += longueurSTR
except Exception: None
if switch_User_Display_SommeAllEdgesObject == 1: # sommeEdges total edges
try:
sommeEdgesSTRAsterix = " *"
for j in sObj.Edges:
sommeEdges += j.Length
sommeEdgesSTR = str(round(sommeEdges * uniteM, seT_User_DecimalValue)) + " " + uniteMs
lineEdit += " (Se:" + sommeEdgesSTR + ") "
except Exception: None
if switch_User_Display_AreaObject == 1: # surface
try:
surfaceObjSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
surfaceObj = sObj.Area
else:
surfaceObj = sel[0].Shape.Area
if surfaceObj != 0.0:
surfaceObjSTR = str(round(surfaceObj * uniteS, seT_User_DecimalValue)) +" "+ uniteSs
lineEdit += " (Ao:" + surfaceObjSTR + ") "
except Exception: None
if switch_User_Display_AreaSubObject == 1: # surface face
try:
surfaceFaceSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
surfaceFace = sObj.Facets[int(indexFaceMeshSTR)].Area
else:
surfaceFace = selEx.Area
if surfaceFace != 0.0:
surfaceFaceSTR = str(round(surfaceFace * uniteS, seT_User_DecimalValue)) +" "+ uniteSs
lineEdit += " (Af:" + surfaceFaceSTR + ") "
except Exception: None
if switch_User_Display_VolumeObject == 1: # Volume
try:
volumeObjectSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
volumeObject = sObj.Volume
else:
volumeObject = sel[0].Shape.Volume
if volumeObject != 0.0:
volumeObjectSTR = str(round(volumeObject * uniteV, seT_User_DecimalValue)) + " " + uniteVs
lineEdit += " (V:" + volumeObjectSTR + ") "
except Exception: None
if switch_User_Display_BsplineObject == 1: # Bspline
try:
bsplineSTRAsterix = " *"
BsplineDetect = selEx.Curve
BsplineNombreDeNoeuds = BsplineDetect.NbKnots
bsplineNoeudsSTR = " (BSKnots:" + str(BsplineNombreDeNoeuds) + " n) "
#### toBiArcs
setBSplineToByArcValue = 0.00001
BsplineArcsToBiArcs = BsplineDetect.toBiArcs(setBSplineToByArcValue)
BsplineNumberElement = len(BsplineArcsToBiArcs)
for i in BsplineArcsToBiArcs: # radius on point "toBiArcs(0.00001)"
try:
BsplineArcsRadius.append(i.Radius) # .Axis , Vector (-0.72, 0.495, -0.47)
rayonObjet = BsplineArcsRadius[0]
except Exception:
BsplineArcsRadius = []
rayonObjet = 0.0 # rayon approximatif
BsplineNumberToBiArcs = len(BsplineArcsToBiArcs)
#### toBiArcs
BsplineRayonApproximatif = str(round(BsplineArcsRadius[0] * float(uniteM))) + " " + uniteMs
try:
#### distance between 2 points Shape
bsplineL = sel[0]
BsplineLength = float(bsplineL.Shape.Length)
BsplineCutLength = BsplineLength / float(BsplineNumberElement)
#### points noeuds
for i in bsplineL.Points: # nombre de points (noeuds)
BsplinePointsCoorS.append(i)
#### points Shape
bsplinePointsCoorShapeSTR = " (BSS:" + str(len(BsplinePointsCoorS)) + " p) " #BSpline Shape
except Exception: # None
#### distance between 2 points Curve.getPoles() #BSpline SubObject
bsplineL = selEx #.Curve
BsplineLength = float(bsplineL.Length)
BsplineCutLength = BsplineLength / float(BsplineNumberElement)
#### points a.Curve.NbKnots
for i in selEx.Curve.getPoles(): # nombre de poles (noeuds)
BsplinePointsCoorSo.append(i)
bsplinePointsCoorSoSTR = " (BSc:" + str(len(BsplinePointsCoorSo)) + " p) "
#### points a.Curve.NbKnots
bsplineRayonObjetAppSTR = " (BSrA:" + str(round(rayonObjet * float(uniteM),seT_User_DecimalValue)) + " " + uniteMs +") "
lineEdit += bsplineNoeudsSTR + bsplineRayonObjetAppSTR + bsplinePointsCoorSoSTR + bsplinePointsCoorShapeSTR
except Exception: None
if switch_User_Display_CentreObject == 1: # centre cercle
try:
centreObjetSTRAsterix = " *"
if hasattr(objs[0], "Mesh"):
CenterOfMassX = sObj.CenterOfGravity[0]
CenterOfMassY = sObj.CenterOfGravity[1]
CenterOfMassZ = sObj.CenterOfGravity[2]
boundBoxLocation = App.Vector(CenterOfMassX, CenterOfMassY, CenterOfMassZ)
else:
try:
boundBoxLocation = selEx.Curve.Center
except Exception:
#boundBoxLocation = selEx.CenterOfMass
boundBoxLocation = selEx.BoundBox.Center
#### correction
BDvol = adjustedGlobalPlacement(objs[0], boundBoxLocation)
####
boundBoxCenterX = BDvol.Base[0]
boundBoxCenterY = BDvol.Base[1]
boundBoxCenterZ = BDvol.Base[2]
centreObjet = App.Vector(boundBoxCenterX, boundBoxCenterY, boundBoxCenterZ)
if centreObjet != "":
centreObjetSTR = (" (Ce:" + "X:" + str(round(float(boundBoxCenterX * uniteM), seT_User_DecimalValue)) + " " + uniteMs + "," +
"Y:" + str(round(float(boundBoxCenterY * uniteM), seT_User_DecimalValue)) + " " + uniteMs + "," +
"Z:" + str(round(float(boundBoxCenterZ * uniteM), seT_User_DecimalValue)) + " " + uniteMs + ") ")
lineEdit += centreObjetSTR
except Exception: None
if switch_User_Display_CentreBoundBoxObject == 1: # centre BoundBox objet
try:
centreBBSTRAsterix = " *"
boundBox_ = sObj.BoundBox
boundBoxLX = boundBox_.XLength
boundBoxLY = boundBox_.YLength
boundBoxLZ = boundBox_.ZLength
try:
boundBoxDiag = boundBox_.DiagonalLength
except Exception:
boundBoxDiag = 0.0
#### correction
boundBoxLocation = App.Vector(boundBox_.Center[0], boundBox_.Center[1], boundBox_.Center[2])
BDvol = adjustedGlobalPlacement(objs[0], boundBoxLocation)
####
boundBoxCenterX = BDvol.Base[0]
boundBoxCenterY = BDvol.Base[1]
boundBoxCenterZ = BDvol.Base[2]
centreBBSTR = (" (BBCe:" + "X:" + str(round(float(boundBoxCenterX * uniteM), seT_User_DecimalValue)) + " " + uniteMs + "," +
"Y:" + str(round(float(boundBoxCenterY * uniteM), seT_User_DecimalValue)) + " " + uniteMs + "," +
"Z:" + str(round(float(boundBoxCenterZ * uniteM), seT_User_DecimalValue)) + " " + uniteMs + ") ")
lineEdit += centreBBSTR
except Exception: None
#### Shape Mesh Points End ####
if switch_User_Display_Position == 1: # position pour Normal
try:
positionSTRAsterix = " *"
position0STR = position1STR = position2STR = ""
position0STR = str(round(position[0] * uniteM, seT_User_DecimalValue)) + " " + uniteMs
position1STR = str(round(position[1] * uniteM, seT_User_DecimalValue)) + " " + uniteMs
position2STR = str(round(position[2] * uniteM, seT_User_DecimalValue)) + " " + uniteMs
positionSTR = " (Pos: X:" + position0STR + " Y:" + position1STR + " Z:" + position2STR + ") "
lineEdit += positionSTR
except Exception: None
if (switch_User_Display_Position_2D_CAD == 1) or (switch_User_Display_Position_2D_BMP == 1): # position pour 2D
try:
Position2DSTRAsterix = " *"
pos2D0STR = str(pos2D[0])
pos2D1STR = str(pos2D[1]) # CAD Y : Y0 = coin Inferieur Gauche
try:
if switch_User_Display_Position_2D_BMP == True: # BMP Y : Y0 = coin Superieur Gauche
pos2D1STR = str(Gui.activeDocument().activeView().getSize()[1] - pos2D[1] ) # reverse Y : Y0 = coin Superieur Gauche
except Exception:
None
pos2DSTR = " (Pos: X2D:" + pos2D0STR + "px Y2D:" + pos2D1STR + "px) "
lineEdit += pos2DSTR
except Exception: None
seT_User_TextHeigthValue = FreeCAD_Paramter.GetInt("seT_User_TextHeigthValue")
fontGlobal_08.setPixelSize(seT_User_TextHeigthValue)
lineEdit_ToolBar.setFont(fontGlobal_08)
lineEdit_ToolBar.setText(lineEdit)
lineEdit_ToolBar.setToolTip("\n" +
"*****" + "\n" +
"Preselection" + "\t\t" + ":" + switch_User_Work_With_PreselectionAsterix + "\t\t\t" + ":" + "\t" + str(switch_User_Work_With_Preselection) + "\n" +
"*****" + "\n" +
"Element Name" + "\t\t" + ":" + objectNameAsterix + "\t" + "( )" + "\t\t" + ":" + "\t" + str(objectName) + "\n" +
"Sub element Name" + "\t" + ":" + SubElementNameAsterix + "\t" + "( )" + "\t\t" + ":" + "\t" + str(SubElementName) + "\n" +
"Shape Type" + "\t\t" + ":" + typeObjectShapeTypeSTRAsterix + "\t" + "(TyS)" + "\t\t" + ":" + "\t" + typeObjectShapeTypeSTR + "\n" +
"Shape TypeId" + "\t\t" + ":" + typeObjectTypeIdSTRAsterix + "\t" + "(TyI)" + "\t\t" + ":" + "\t" + typeObjectTypeIdSTR + "\n" +
"*****" + "\n" +
"Sketcher TypeObject" + "\t" + ":" + typeObjectTypeIdSTRAsterix + "\t" + "(TyO)" + "\t\t" + ":" + "\t" + sketchObjectTypeSTR + "\n" +
"Sketcher Index" + "\t\t" + ":" + " *" + "\t" + "(I)" + "\t\t" + ":" + "\t" + str(indexSubObject) + "\n" +
"*****" + "\n" +
"Radius" + "\t\t\t" + ":" + rayonObjetSTRAsterix + "\t" + "(r)" + "\t\t" + ":" + "\t" + str(round(rayonObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"Diameter" + "\t\t" + ":" + rayonObjetSTRAsterix + "\t" + "[D]" + "\t\t" + ":" + "\t" + str(round(rayonObjet * 2.0 * uniteM, seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"RadiusSurface" + "\t\t" + ":" + rayonSurfaceSTRAsterix + "\t" + "(rS)" + "\t\t" + ":" + "\t" + str(round(rayonSurface * uniteM, seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"DiameterSurface" + "\t\t" + ":" + rayonSurfaceSTRAsterix + "\t" + "[DS]" + "\t\t" + ":" + "\t" + str(round(rayonSurface * 2.0 * uniteM, seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"Length or Perimeter" + "\t" + ":" + longueurSTRAsterix + "\t" + "(L) or (P)" + "\t\t" + ":" + "\t" + str(round(longueurObjet * uniteM, seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"Somme Edges" + "\t\t" + ":" + sommeEdgesSTRAsterix + "\t" + "(Se)" + "\t\t" + ":" + "\t" + str(round(sommeEdges * uniteM, seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"*****" + "\n" +
"Number Faces Mesh" + "\t" + ":" + nombreFacesMeshSTRAsterix + "\t" + "(Nf)" + "\t\t" + ":" + "\t" + nombreFacesMeshSTR + " faces" + "\n" +
"Num. Points Mesh/Points" + "\t"+ ":" + nombrePointsMeshSTRAsterix + "\t" + "(Np)" + "\t\t" + ":" + "\t" + nombrePointsMeshSTR + " points" + "\n" +
"Number Edges Mesh" + "\t" + ":" + nombreArretesMeshSTRAsterix + "\t" + "(Ne)" + "\t\t" + ":" + "\t" + nombreArretesMeshSTR + " edges" + "\n" +
"*****" + "\n" +
"Area Object" + "\t\t" + ":" + surfaceObjSTRAsterix + "\t" + "(Ao)" + "\t\t" + ":" + "\t" + str(round(surfaceObj * uniteS, seT_User_DecimalValue)) +" "+ uniteSs + "\n" +
"Area Face" + "\t\t" + ":" + surfaceFaceSTRAsterix + "\t" + "(Af)" + "\t\t" + ":" + "\t" + str(round(surfaceFace * uniteS, seT_User_DecimalValue)) +" "+ uniteSs + "\n" +
"Volume" + "\t\t\t" + ":" + volumeObjectSTRAsterix + "\t" + "(V)" + "\t\t" + ":" + "\t" + str(round(volumeObject * uniteV, seT_User_DecimalValue)) + " " + uniteVs + "\n" +
"*****" + "\n" +
"BSPline Node" + "\t\t" + ":" + bsplineSTRAsterix + "\t" + "(BSpline)" + "\t\t" + ":" + "\t" + str(BsplineNombreDeNoeuds) + " " + "nodes" + "\n" +
"BSPline radius" + "\t\t" + ":" + bsplineSTRAsterix + "\t" + "(BSrA)" + "\t\t" + ":" + "\t" + str(round(rayonObjet * float(uniteM),seT_User_DecimalValue)) + " " + uniteMs + "\n" +
"BSPline Points Shape" + "\t"+ ":" + bsplineSTRAsterix + "\t" + "(BSS)" + "\t\t" + ":" + "\t" + str(len(BsplinePointsCoorS)) + " " + "points" + "\n" +
"BSPline Points SubObj" +"\t"+ ":" + bsplineSTRAsterix + "\t" + "(BSc)" + "\t\t" + ":" + "\t" + str(len(BsplinePointsCoorSo)) + " " + "points" + "\n" +
"*****" + "\n" +
"Center Circle or Mesh"+"\t" + ":" + centreObjetSTRAsterix + "\t" + "(Ce)" + "\t\t" + ":" + "\t" + centreObjetSTR + "\n" +
"BoundBox center" + "\t\t" + ":" + centreBBSTRAsterix + "\t" + "(BBCe)" + "\t\t" + ":" + "\t" + centreBBSTR + "\n" +
"Mouse position" + "\t\t" + ":" + positionSTRAsterix + "\t" + "(Pos)" + "\t\t" + ":" + "\t" + positionSTR + "\n" +
"*****" + "\n" +
"Mouse position screen 2D" + "\t"+ ":" + Position2DSTRAsterix + "\t" + "(Pos: X2D)" + "\t" + ":" + "\t" + pos2DSTR + "\n" +
"*****" + "\n" +
__title__ + "\t" + "Version : " + __version__ + "\t" + "Date : " + __date__ + "\n" +
"*****" + "\n")
if lineEdit == " () () " or lineEdit == "":
lineEdit_ToolBar.setText("Go to [Tools Edit paramater : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__ + "]" + "\n" +
" check your choice(s) to display and click the Refresh button, choice your Unit Enjoy.")
lineEdit_ToolBar.setToolTip("Go to [Tools Edit paramater : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__ + "]" + "\n" +
" check your choice(s) to display and click the Refresh button, choice your Unit Enjoy.")
lineEdit_ToolBar.setStyleSheet("QLineEdit {color: black; background-color: red}")
else:
lineEdit_ToolBar.setStyleSheet("QLineEdit {color: QPalette.Base; background-color: QPalette.Base}")
lineEdit_ToolBar.setCursorPosition(0)
except Exception:
lineEdit_ToolBar.setText("Error or Go to [Tools Edit paramater : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__ + "]" + "\n" +
" check your choice(s) to display and click the Refresh button, choice your Unit Enjoy.")
lineEdit_ToolBar.setToolTip("Error or Go to [Tools Edit paramater : User parameter:BaseApp/Preferences/Macros/FCMmacros/" + __title__ + "]" + "\n" +
" check your choice(s) to display and click the Refresh button, choice your Unit Enjoy.")
lineEdit_ToolBar.setStyleSheet("QLineEdit {color: black; background-color: red}")
# lineEdit = "-"
# lineEdit_ToolBar.setText(lineEdit)
def SIGNAL_comboBox_Changed(text):
global uniteM
global uniteMs
global uniteS
global uniteSs
global uniteV
global uniteVs
global seT_User_UnitSymbolSquare
global seT_User_UnitSymbolCube
global seT_User_UnitSymbolMicro
global seT_System_IndexUnitLength
global seT_System_IndexUnitText
global comboBox_ToolBar
global FreeCAD_Paramter
if text == "km": # = 1000000
uniteM = 0.000001
uniteMs= "km"
uniteS = 0.000000000001
uniteSs= "km"+seT_User_UnitSymbolSquare
uniteV = 0.000000000000000001
uniteVs= "km"+seT_User_UnitSymbolCube
elif text == "hm": # = 100000
uniteM = 0.00001
uniteMs= "hm"
uniteS = 0.0000000001
uniteSs= "hm"+seT_User_UnitSymbolSquare
uniteV = 0.000000000000001
uniteVs= "hm"+seT_User_UnitSymbolCube
elif text == "dam": # = 10000
uniteM = 0.0001
uniteMs= "dam"
uniteS = 0.00000001
uniteSs= "dam"+seT_User_UnitSymbolSquare
uniteV = 0.000000000001
uniteVs= "dam"+seT_User_UnitSymbolCube
elif text == "m": # = 1000
uniteM = 0.001
uniteMs= "m"
uniteS = 0.000001
uniteSs= "m"+seT_User_UnitSymbolSquare
uniteV = 0.000000001
uniteVs= "m"+seT_User_UnitSymbolCube
elif text == "dm": # = 100
uniteM = 0.01
uniteMs= "dm"
uniteS = 0.0001
uniteSs= "dm"+seT_User_UnitSymbolSquare
uniteV = 0.000001
uniteVs= "dm"+seT_User_UnitSymbolCube
elif text == "cm": # = 10
uniteM = 0.1
uniteMs= "cm"
uniteS = 0.01
uniteSs= "cm"+seT_User_UnitSymbolSquare
uniteV = 0.001
uniteVs= "cm"+seT_User_UnitSymbolCube
elif text == "mm": # = 1 ###############################
uniteM = 1.0
uniteMs= "mm"
uniteS = 1.0
uniteSs= "mm"+seT_User_UnitSymbolSquare
uniteV = 1.0
uniteVs= "mm"+seT_User_UnitSymbolCube
elif text == seT_User_UnitSymbolMicro+"m": # = 1000 #http://fr.wiktionary.org/wiki/%CE%BCm#conv
uniteM = 1000.0
uniteMs= seT_User_UnitSymbolMicro+"m"
uniteS = 1000.0**2
uniteSs= seT_User_UnitSymbolMicro+"m"+seT_User_UnitSymbolSquare
uniteV = 1000.0**3
uniteVs= seT_User_UnitSymbolMicro+"m"+seT_User_UnitSymbolCube
elif text == "nm": # = 1000000
uniteM = 1000000.0
uniteMs= "nm"
uniteS = 1000000.0**2
uniteSs= "nm"+seT_User_UnitSymbolSquare
uniteV = 1000000.0**3
uniteVs= "nm"+seT_User_UnitSymbolCube
elif text == "pm": # = 1000000000
uniteM = 1000000000.0
uniteMs= "pm"
uniteS = 1000000000.0**2
uniteSs= "pm"+seT_User_UnitSymbolSquare
uniteV = 1000000000.0**3
uniteVs= "pm"+seT_User_UnitSymbolCube
elif text == "fm": # = 1000000000000
uniteM = 1000000000000.0
uniteMs= "fm"
uniteS = 1000000000000.0**2
uniteSs= "fm"+seT_User_UnitSymbolSquare
uniteV = 1000000000000.0**3
uniteVs= "fm"+seT_User_UnitSymbolCube
elif text == "inch": # inch = 25.400
uniteM = 1.0/25.400
uniteMs= "in"
uniteS = uniteM**2
uniteSs= "in"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "in"+seT_User_UnitSymbolCube
elif text == "link": # link = 201.168
uniteM = 1.0/201.168
uniteMs= "lk"
uniteS = uniteM**2
uniteSs= "lk"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "lk"+seT_User_UnitSymbolCube
elif text == "foot": # foot = 304.800
uniteM = 1.0/304.800
uniteMs= "ft"
uniteS = uniteM**2
uniteSs= "ft"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "ft"+seT_User_UnitSymbolCube
elif text == "yard": # yard = 914.400
uniteM = 1.0/914.400
uniteMs= "yd"
uniteS = uniteM**2
uniteSs= "yd"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "yd"+seT_User_UnitSymbolCube
elif text == "perch": #rd # rod perche = 5029.200
uniteM = 1.0/5029.200
uniteMs= "rd"
uniteS = uniteM**2
uniteSs= "rd"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "rd"+seT_User_UnitSymbolCube
elif text == "chain": # chain = 20116.800
uniteM = 1.0/20116.800
uniteMs= "ch"
uniteS = uniteM**2
uniteSs= "ch"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "ch"+seT_User_UnitSymbolCube
elif text == "furlong": # furlong= 201168
uniteM = 1.0/201168
uniteMs= "fur"
uniteS = uniteM**2
uniteSs= "fur"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "fur"+seT_User_UnitSymbolCube
elif text == "mile": # mile = 1609344
uniteM = 1.0/1609344
uniteMs= "mi"
uniteS = uniteM**2
uniteSs= "mi"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "mi"+seT_User_UnitSymbolCube
elif text == "league": # league = 4828032
uniteM = 1.0/4828032
uniteMs= "lea"
uniteS = uniteM**2
uniteSs= "lea"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "lea"+seT_User_UnitSymbolCube
elif text == "nautique": # nautique = 1852000
uniteM = 1.0/1852000
uniteMs= "nmi"
uniteS = uniteM**2
uniteSs= "nmi"+seT_User_UnitSymbolSquare
uniteV = uniteM**3
uniteVs= "nmi"+seT_User_UnitSymbolCube
seT_System_IndexUnitLength = comboBox_ToolBar.currentIndex()
seT_System_IndexUnitText = text
FreeCAD_Paramter.SetFloat("seT_System_uniteM", uniteM)
FreeCAD_Paramter.SetString("seT_System_uniteMs", uniteMs)
FreeCAD_Paramter.SetFloat("seT_System_uniteS", uniteS)
FreeCAD_Paramter.SetString("seT_System_uniteSs", uniteSs)
FreeCAD_Paramter.SetFloat("seT_System_uniteV", uniteV)
FreeCAD_Paramter.SetString("seT_System_uniteVs", uniteVs)
## demarrage
FreeCAD_Paramter.SetInt("seT_System_IndexUnitLength", seT_System_IndexUnitLength) # seT_System_IndexUnitLength
FreeCAD_Paramter.SetString("seT_System_IndexUnitText", seT_System_IndexUnitText) # seT_System_IndexUnitText
activeInfo()
##def displayDView():
## global toolbar1
## global lineEdit
## global lineEdit_ToolBar
## global switch_User_Display_ViewDirection
## global directionViewAsterix
## #global directionView
## global directionViewSTR
##
## directionViewAsterix = ""
## lineEdit_ToolBar.setStyleSheet("QLineEdit {QPalette.Base}")
##
## if switch_User_Display_ViewDirection == 1: # ViewDirection
## directionViewAsterix = " *"
## directionViewSTR = ""
## viewBase = FreeCADGui.ActiveDocument.ActiveView.viewPosition().Base
## vBx = str(round(viewBase.x, seT_User_DecimalValue))
## vBy = str(round(viewBase.y, seT_User_DecimalValue))
## vBz = str(round(viewBase.z, seT_User_DecimalValue))
##
## viewRotation = FreeCADGui.ActiveDocument.ActiveView.viewPosition().Rotation.getYawPitchRoll()
## vRx = str(round(viewRotation[0], seT_User_DecimalValue))
## vRy = str(round(viewRotation[1], seT_User_DecimalValue))
## vRz = str(round(viewRotation[2], seT_User_DecimalValue))
##
## vDBase = "Bx : " + vBx + ", By : " + vBy + ", Bz : " + vBz
## vDRota = "Yaw : " + vRx + ", Pitch : " + vRy + ", Roll : " + vRz
## directionViewSTR = "( " + vDBase + " ) ; ( " + vDRota + " )"
##
## lineEdit = ""
## lineEdit = "(DView: " + directionViewSTR + ")"
## lineEdit_ToolBar.setText(lineEdit)
##def decodePointColor2DView(x2DView = 0, y2DView = 0):
## # fonctionne mais empeche toute selection
## ##https://forum.freecad.org/viewtopic.php?p=696969#p696969
## view = Gui.ActiveDocument.ActiveView
## vp = view.getViewer().getSoRenderManager().getViewportRegion() # FC ver 0.22
## width = vp.getViewportSizePixels()[0]
## height = vp.getViewportSizePixels()[1]
## ####
## #view.saveImage("C:/Temp/test01.png", width, height, "Current")
## Gui.Selection.clearSelection()
## Gui.Selection.clearPreselection()
## viewGrab = Gui.ActiveDocument.ActiveView.getViewer() # FC ver 0.22
## img = viewGrab.grabFramebuffer()
## #### Clipboard
## #data = PySide2.QtCore.QMimeData()
## #data.setImageData(img)
## #cb=QtGui.QClipboard()
## #cb.setMimeData(data, mode=PySide2.QtGui.QClipboard.Clipboard)
## #### Clipboard
## #### point color #######
## point = PySide2.QtGui.QPixmap(img)
## ptn2DView = point.toImage()
#### section Observer begin ######################
class SelObserver: # selection Observer
def addSelection(self, document, objet, element, positionx): # Selection
global SubElementName
global objectName
global sel
global selEx
global objs
global sObj
global sketch0selEx
SubElementName = element
objectName = objet
sel = Gui.Selection.getSelection() # object
objs = [selobj.Object for selobj in FreeCADGui.Selection.getSelectionEx()]
if objs == []:
objs = ["x"]
try:
sketch0selEx = FreeCADGui.Selection.getSelectionEx()[0] # unique objet pour sketch
selEx = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0] # unique objet
except Exception:
selEx = ""
activeInfo()
def setPreselection(self,doc,obj,sub): # preselection
global switch_User_Work_With_Preselection
if switch_User_Work_With_Preselection == 1:
global SubElementName
global objectName
global sel
global selEx
global objs
global lineEdit_ToolBar
global sketch0selEx
objs = sel = []
SubElementName = selEx = objectName = ""
SubElementName = sub
objectName = obj
try:
sel = [FreeCAD.ActiveDocument.getObject(objectName)] + [",x"]
objs = sel
sketch0selEx = App.ActiveDocument.getObject(objectName)
selEx = App.ActiveDocument.getObject(objectName).getSubObject(SubElementName)
if objs == []:
objs = ["x"]
activeInfo()
except Exception:
lineEdit_ToolBar.setStyleSheet("QLineEdit {color: black; background-color: red}")
## def removeSelection(self,doc,obj,sub): # Effacer l'objet selectionne
## print( "removeSelection")
## def setSelection(self,doc): # Selection dans ComboView
## print( "SelObserver quit macro")
## def clearSelection(self,doc): # Si clic sur l'ecran, effacer la selection
## print( "clearSelection") # Si clic sur un autre objet, efface le precedent
sTB=SelObserver()
FreeCADGui.Selection.addObserver(sTB) # install the function resident mode
#FreeCADGui.Selection.removeObserver(sTB) # desinstalle la fonction residente
####
#https://forum.freecadweb.org/viewtopic.php?f=22&t=37030&start=20#p315576
global cTB
global oTB
global vTB; vTB=Gui.activeDocument().activeView()
class DocObserver: # document Observer
def slotActivateDocument(self,doc):
global cTB
global oTB
global vTB
try:
vTB.removeEventCallback("SoEvent",cTB) # close event observation
except Exception: None
try: # ajout de ty ... except
vTB=Gui.activeDocument().activeView()
oTB = ViewObserver(vTB)
cTB = vTB.addEventCallback("SoEvent",oTB.logPosition)
except Exception: None
obs=DocObserver()
App.addDocumentObserver(obs)
FreeCADGui.Selection.removeObserver(obs) # desinstalle la fonction residente ne va pas verifier l'ensemble DocObserver
#FreeCAD.removeDocumentObserver(obs) # desinstalle la fonction residente DocObserver
####
vTB=Gui.activeDocument().activeView()
class ViewObserver(): # vue souris Observer
def __init__(self, view):
self.view = view
def logPosition(self, info):
global cTB
global oTB
global vTB
global position
global pos2D
try:
vTB=Gui.activeDocument().activeView()
objectSurvol = vTB.getObjectInfo(vTB.getCursorPos()) # here for objectSurvol preselected
position = FreeCAD.Vector(float(objectSurvol["x"]),float(objectSurvol["y"]),float(objectSurvol["z"]))# vector on position mouse to objectSurvol
pos2D = info["Position"] # 2D X,Y
activeInfo()
except Exception:
#pos2D = info["Position"] # if mouse in 3D view
#position = self.view.getPoint(pos2D) # vector detect on mouse position 3D view
None
oTB = ViewObserver(vTB)
cTB = vTB.addEventCallback("SoEvent",oTB.logPosition)
#vTB.removeEventCallback("SoEvent",cTB) # close event observation
### section Observer end ######################
#############################################################################
####
#try:
mw = FreeCADGui.getMainWindow()
tb = mw.findChildren(QToolBar)
switchtbar = 0
for i in tb:
if str(i.objectName()) == __title__:
FreeCAD.Console.PrintError(__title__ + " is already open" + "\n")
switchtbar = 1
# if i.isVisible():
# i.setVisible(False) # visible False
# else:
# i.setVisible(True) # visible True
i.setVisible(True) # visible True
break
if switchtbar == 0:
#toolbar1 = QToolBar() # place plus haut
mw.addToolBar(toolbar1)
toolbar1.setObjectName(__title__)
toolbar1.setWindowTitle(__title__)
#toolbar1.setFloatable(True)
if seT_User_setFixed_Tool_Bar_Width != 0:
toolbar1.setFixedWidth(seT_User_setFixed_Tool_Bar_Width)
if seT_User_setFixed_Tool_Bar_Height != 0:
toolbar1.setFixedHeight(seT_User_setFixed_Tool_Bar_Height)
toolbar1.setIconSize(QSize(seT_User_sizeIconX, seT_User_sizeIconY))
#### color StyleSheet
seT_User_StyleSheetColorToolBar = FreeCAD_Paramter.GetString("seT_User_StyleSheetColorToolBar")
if seT_User_StyleSheetColorToolBar == "":
FreeCAD_Paramter.SetString("seT_User_StyleSheetColorToolBar", "0")
seT_User_StyleSheetColorToolBar = "0"
if seT_User_StyleSheetColorToolBar != "0":
toolbar1.setStyleSheet("QToolBar {background-color:" + seT_User_StyleSheetColorToolBar + ";}") #F8E6E0
else:
toolbar1.setStyleSheet("QToolBar {QPalette.Base}")
# switch_User_Work_With_Preselection = FreeCAD_Paramter.GetBool("switch_User_Work_With_Preselection") # switch yes / no preselection
# if switch_User_Work_With_Preselection == 1:
# switch_User_Work_With_PreselectionAsterix= " *"
# toolbar1.setStyleSheet("QToolBar {QPalette.Base}")
# toolbar1.setStyleSheet("QToolBar {color: black; background-color: #F8E6E0}") # html code #F8E6E0
# else:
# switch_User_Work_With_PreselectionAsterix= ""
#### color
toolbar1.addAction(QtGui.QIcon(QtGui.QPixmap(Refresh_Icon)), "Refresh after change in Preference"+"\n"+"and activate the modifications", Refresh_Preference)# icone, ToolTip, vers def:
#fontGlobal_08 = QtGui.QFont() # place plus haut
fontGlobal_08.setFamily("Arial")
#fontGlobal_08.setPointSize(seT_User_TextHeigthValue)
fontGlobal_08.setPixelSize(seT_User_TextHeigthValue)
comboBox_ToolBar = QComboBox()
comboBox_ToolBar.addItem("km")
comboBox_ToolBar.addItem("hm")
comboBox_ToolBar.addItem("dam")
comboBox_ToolBar.addItem("m")
comboBox_ToolBar.addItem("dm")
comboBox_ToolBar.addItem("cm")
comboBox_ToolBar.addItem("mm") # 1
comboBox_ToolBar.addItem("um")
comboBox_ToolBar.addItem("nm")
comboBox_ToolBar.addItem("pm")
comboBox_ToolBar.addItem("fm")
comboBox_ToolBar.addItem("inch")
comboBox_ToolBar.addItem("link")
comboBox_ToolBar.addItem("foot")
comboBox_ToolBar.addItem("yard")
comboBox_ToolBar.addItem("perch")
comboBox_ToolBar.addItem("chain")
comboBox_ToolBar.addItem("furlong")
comboBox_ToolBar.addItem("mile")
comboBox_ToolBar.addItem("league")
comboBox_ToolBar.addItem("nautique")
comboBox_ToolBar.setCurrentIndex(seT_System_IndexUnitLength)
QtCore.QObject.connect(comboBox_ToolBar, QtCore.SIGNAL("currentIndexChanged(QString)"), SIGNAL_comboBox_Changed)
##comboBox_ToolBar.setItemIcon(0, QIcon('C:/Users/Mario/AppData/Roaming/FreeCAD/Macro/Qt.png'))
toolbar1.addWidget(comboBox_ToolBar)
lineEdit_ToolBar.setFont(fontGlobal_08)
toolbar1.addWidget(lineEdit_ToolBar)
####
#except Exception:
# FreeCAD.Console.PrintError("Not activeView or ..." + "\n")
if switch_User_NotInfoOnBeginning == True:
##
FreeCAD.Console.PrintMessage("\n"+"####Configure FCInfo_ToolBar Begin####################################################################" + "\n\n")
FreeCAD.Console.PrintMessage("_____Help for configure FCInfo_ToolBar_____" + "\n\n")
FreeCAD.Console.PrintMessage("Go to : Menu > Tools > Edit parameters ... :BaseApp/Preferences/Macros/FCMmacros/FCInfo_ToolBar" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_StyleSheetColorToolBar_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_StyleSheetColorToolBar) + "\n")
FreeCAD.Console.PrintMessage("seT_User_StyleSheetColorToolBar # False (Default: system) 1 = the size icon user is availlable" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_ToolbarIconSize_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_ToolbarIconSize) + "\n")
FreeCAD.Console.PrintMessage("switch_User_ToolbarIconSize # 0 = not setStyleSheet (Default)" + "\n")
FreeCAD.Console.PrintMessage(" # color in HTML format ex: #F8E6E0" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_sizeIconX_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_sizeIconX) + "\n")
FreeCAD.Console.PrintMessage("seT_User_sizeIconX # size X of the icon (Default: system)" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_sizeIconY_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_sizeIconY) + "\n")
FreeCAD.Console.PrintMessage("seT_User_sizeIconY # size Y of the icon (Default system)" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_DecimalValue_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_DecimalValue) + "\n")
FreeCAD.Console.PrintMessage("seT_User_DecimalValue # number of decimal value (Default 2)" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_setFixed_Tool_Bar_Width_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_setFixed_Tool_Bar_Width) + "\n")
FreeCAD.Console.PrintMessage("seT_User_setFixed_Tool_Bar_Width # Width of the ToolBar" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_setFixed_Tool_Bar_Height_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_setFixed_Tool_Bar_Height) + "\n")
FreeCAD.Console.PrintMessage("seT_User_setFixed_Tool_Bar_Height # heigth of the ToolBar" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_TextHeigthValue_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_TextHeigthValue) + "\n")
FreeCAD.Console.PrintMessage("seT_User_TextHeigthValue # heigth of the text in the LineEdit" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Work_With_Preselection_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Work_With_Preselection) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Work_With_Preselection # True 1 = () Work With the Preselectiond " + "\n")
FreeCAD.Console.PrintMessage(" # with this option the selection ins not availlable !" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_objectName_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_objectName) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_objectName # True 1 = () display the Object name selected " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_SubElementName_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_SubElementName) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_SubElementName # True 1 = () display the subElement name selected " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_ShapeType_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_ShapeType) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_ShapeType # True 1 = (TyS:) display the Shape Type of the object" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_TypeId_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_TypeId) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_TypeId # True 1 = (TyI:) display the Shape TypeId of the object" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_RadiusObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_RadiusObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_RadiusObject # True 1 = (r:) [D:] display the radius and the diameter (if circle detected) " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_RadiusSurface_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_RadiusSurface) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_RadiusSurface # True 1 = (rS:) [DS:] display the radius and the diameter of surface (if surface detected) " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_NumberFacesMesh_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_NumberFacesMesh) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_NumberFacesMesh # True 1 = (Nf:) display the number of faces of the Mesh" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_NumberPointsMeshPoints_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_NumberPointsMeshPoints) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_NumberPointsMeshPoints# True 1 = (Np:) display the number of points of the Mesh or Points" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_NumberEdgesMesh_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_NumberEdgesMesh) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_NumberEdgesMesh # True 1 = (Ne:) display the number of Edges of the Mesh" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_BsplineObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_BsplineObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_BsplineObject # True 1 = (BSpline) display the number of node of the BSpline" + "\n")
FreeCAD.Console.PrintMessage(" = (BSrA) BSPline radius approximative first radius of the BSpline" + "\n")
FreeCAD.Console.PrintMessage(" = (BSS) BSPline Points Shape number points of the Bspline (case Shape)" + "\n")
FreeCAD.Console.PrintMessage(" = (BSc) BSPline Points Sub Object number points of sub object selected (case Edge)" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_CentreObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_CentreObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_CentreObject # True 1 = (Ce:)display the center of circle (if detected), face, edge ..." + "\n")
FreeCAD.Console.PrintMessage(" = or BBoxCenter of face, edge ... Sub selection" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_CentreBoundBoxObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_CentreBoundBoxObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_CentreBoundBoxObject # True 1 = (BBCe:) display the center of BoundBox of the object " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_LengthObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_LengthObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_LengthObject # True 1 = (L:) display the Length of the wire, edge, line selected" + "\n")
FreeCAD.Console.PrintMessage(" # (P:) if one face is selected, the Perimeter of the face is displayed" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_SommeAllEdgesObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_SommeAllEdgesObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_SommeAllEdgesObject # True 1 = (Se:) display the Total Length of the edges" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_AreaObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_AreaObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_AreaObject # True 1 = (A:) display the Area of the object selected " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_AreaSubObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_AreaSubObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_AreaSubObject # True 1 = (Af:) display the Area of the face selected " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_VolumeObject_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_VolumeObject) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_VolumeObject # True 1 = (V:) display the Volume of the object selected" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_Position_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_Position) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_Position # True 1 = (Pos:) display the coordinate of the click mouse " + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_Position_2D_CAD_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_Position_2D_CAD) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_Position_2D_CAD # True 1 = (Pos: X2D:) display the position XY 2D 0,0 = corner Inferior left (CAD)" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____switch_User_Display_Position_2D_BMP_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(switch_User_Display_Position_2D_BMP) + "\n")
FreeCAD.Console.PrintMessage("switch_User_Display_Position_2D_BMP # True 1 = (Pos: X2D:) display the position XY 2D 0,0 = corner Superior left (BitMap BMP)" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_UnitSymbolSquare_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_UnitSymbolSquare) + "\n")
FreeCAD.Console.PrintMessage("seT_User_UnitSymbolSquare # give the Square character '2' by default" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_UnitSymbolCube_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_UnitSymbolCube) + "\n")
FreeCAD.Console.PrintMessage("seT_User_UnitSymbolCube # give the Cube character '3' by default" + "\n\n")
##
FreeCAD.Console.PrintMessage("_____seT_User_UnitSymbolMicro_____ " + " ")
FreeCAD.Console.PrintError("Actual " + str(seT_User_UnitSymbolMicro) + "\n")
FreeCAD.Console.PrintMessage("seT_User_UnitSymbolMicro # give the Micro character 'u' by default" + "\n\n")
##
FreeCAD.Console.PrintMessage("####Configure FCInfo_ToolBar End######################################################################" + "\n\n")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment