Macro CloneConvert/it: Difference between revisions
(Updating to match new version of source page) |
(Updating to match new version of source page) |
||
Line 103: | Line 103: | ||
# ver 0.5 26/07/2015 correction rotation plusieurs objets Copy |
# ver 0.5 26/07/2015 correction rotation plusieurs objets Copy |
||
# ver 0.6 26/01/2016 correction placement avec plusieurs objets Copy |
# ver 0.6 26/01/2016 correction placement avec plusieurs objets Copy |
||
# ver 0.7 30/01/2016 reecriture du code avec Placement et ajout Increment et de boutons |
|||
__title__ = "CloneConvert" |
__title__ = "CloneConvert" |
||
__author__ = "mario52" |
__author__ = "mario52" |
||
__url__ = "http://www.freecadweb.org/index-fr.html" |
__url__ = "http://www.freecadweb.org/index-fr.html" |
||
__version__ = "00. |
__version__ = "00.07" |
||
__date__ = " |
__date__ = "30/01/2016" |
||
__Comment__ = "This macro creates Copy or |
__Comment__ = "This macro creates Clone or Copy or Compound of object(s)" |
||
__Web__ = "http://www.freecadweb.org/" |
__Web__ = "http://www.freecadweb.org/" |
||
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_CloneConvert" |
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_CloneConvert" |
||
Line 124: | Line 125: | ||
import PyQt4 # PyQt4 |
import PyQt4 # PyQt4 |
||
from PyQt4 import QtCore, QtGui # PyQt4 |
from PyQt4 import QtCore, QtGui # PyQt4 |
||
# print "PyQt4" |
|||
except Exception: |
except Exception: |
||
import PySide # PySide |
import PySide # PySide |
||
from PySide import QtCore, QtGui # PySide |
from PySide import QtCore, QtGui # PySide |
||
# print "PySide" |
|||
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui |
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui |
||
from math import sqrt, pi, sin, cos, asin |
from math import sqrt, pi, sin, cos, asin |
||
Line 140: | Line 144: | ||
def _fromUtf8(s): |
def _fromUtf8(s): |
||
return s |
return s |
||
try: |
try: |
||
Line 166: | Line 169: | ||
global placement_Y ; placement_Y = 0.0 |
global placement_Y ; placement_Y = 0.0 |
||
global placement_Z ; placement_Z = 0.0 |
global placement_Z ; placement_Z = 0.0 |
||
global oripl_X ; oripl_X = 0.0 |
|||
global oripl_Y ; oripl_Y = 0.0 |
|||
global oripl_Z ; oripl_Z = 0.0 |
|||
global Yaw_Z ; Yaw_Z = 0.0 |
global Yaw_Z ; Yaw_Z = 0.0 |
||
global Pitch_Y ; Pitch_Y = 0.0 |
global Pitch_Y ; Pitch_Y = 0.0 |
||
global Roll_X ; Roll_X = 0.0 |
global Roll_X ; Roll_X = 0.0 |
||
global switchP ; switchP = 0 |
|||
global switchA ; switchA = 0 |
|||
global switchS ; switchS = 0 |
|||
global sel ; sel = "" |
global sel ; sel = "" |
||
Line 186: | Line 190: | ||
self.window = MainWindow |
self.window = MainWindow |
||
MainWindow.setObjectName(_fromUtf8("MainWindow")) |
MainWindow.setObjectName(_fromUtf8("MainWindow")) |
||
MainWindow.resize(230, |
MainWindow.resize(230, 549) |
||
MainWindow.setMinimumSize(QtCore.QSize(230, 549)) |
|||
MainWindow.setMaximumSize(QtCore.QSize(230, 549)) |
|||
self.centralWidget = QtGui.QWidget(MainWindow) |
self.centralWidget = QtGui.QWidget(MainWindow) |
||
self.centralWidget.setObjectName(_fromUtf8("centralWidget")) |
self.centralWidget.setObjectName(_fromUtf8("centralWidget")) |
||
Line 215: | Line 221: | ||
self.label_3.setGeometry(QtCore.QRect(10, 80, 91, 16)) |
self.label_3.setGeometry(QtCore.QRect(10, 80, 91, 16)) |
||
self.label_3.setObjectName(_fromUtf8("label_3")) |
self.label_3.setObjectName(_fromUtf8("label_3")) |
||
self.label_4 = QtGui.QLabel(self.groupBox) |
|||
self.label_4.setGeometry(QtCore.QRect(10, 110, 91, 16)) |
|||
self.label_4.setObjectName(_fromUtf8("label_4")) |
|||
self.doubleSpinBox_2 = QtGui.QDoubleSpinBox(self.groupBox) |
self.doubleSpinBox_2 = QtGui.QDoubleSpinBox(self.groupBox) |
||
Line 235: | Line 245: | ||
self.doubleSpinBox_3.setObjectName(_fromUtf8("doubleSpinBox_3")) |
self.doubleSpinBox_3.setObjectName(_fromUtf8("doubleSpinBox_3")) |
||
self.doubleSpinBox_3.valueChanged.connect(self.on_doubleSpinBox_3_valueChanged) #connection doubleSpinBox_3 |
self.doubleSpinBox_3.valueChanged.connect(self.on_doubleSpinBox_3_valueChanged) #connection doubleSpinBox_3 |
||
self.label_4 = QtGui.QLabel(self.groupBox) |
|||
self.label_4.setGeometry(QtCore.QRect(10, 110, 91, 16)) |
|||
self.label_4.setObjectName(_fromUtf8("label_4")) |
|||
self.radioButton = QtGui.QRadioButton(self.groupBox) |
self.radioButton = QtGui.QRadioButton(self.groupBox) |
||
self.radioButton.setGeometry(QtCore.QRect(10, 20, |
self.radioButton.setGeometry(QtCore.QRect(10, 20, 51, 20)) |
||
self.radioButton.setChecked(True) |
self.radioButton.setChecked(True) |
||
self.radioButton.setObjectName(_fromUtf8("radioButton")) |
self.radioButton.setObjectName(_fromUtf8("radioButton")) |
||
Line 248: | Line 254: | ||
self.radioButton_2 = QtGui.QRadioButton(self.groupBox) |
self.radioButton_2 = QtGui.QRadioButton(self.groupBox) |
||
self.radioButton_2.setGeometry(QtCore.QRect( |
self.radioButton_2.setGeometry(QtCore.QRect(58, 20, 51, 20)) |
||
self.radioButton_2.setObjectName(_fromUtf8("radioButton_2")) |
self.radioButton_2.setObjectName(_fromUtf8("radioButton_2")) |
||
self.radioButton_2.setToolTip(_translate("MainWindow", "Create a copy of the object(s)", None)) |
self.radioButton_2.setToolTip(_translate("MainWindow", "Create a copy of the object(s)", None)) |
||
self.radioButton_2.clicked.connect(self.on_radioButton_2_clicked) #connection radioButton_2 mode copy |
self.radioButton_2.clicked.connect(self.on_radioButton_2_clicked) #connection radioButton_2 mode copy |
||
self.radioButton_3 = QtGui.QRadioButton(self.groupBox) |
|||
self.radioButton_3.setGeometry(QtCore.QRect(105, 20, 51, 20)) |
|||
self.radioButton_3.setObjectName(_fromUtf8("radioButton_3")) |
|||
self.radioButton_3.setToolTip(_translate("MainWindow", "Create a compount of the object(s)", None)) |
|||
self.radioButton_3.clicked.connect(self.on_radioButton_3_clicked) #connection radioButton_3 mode compount |
|||
self.checkBox = QtGui.QCheckBox(self.groupBox) |
|||
self.checkBox.setGeometry(QtCore.QRect(155, 20, 61, 20)) |
|||
self.checkBox.setChecked(True) |
|||
self.checkBox.setToolTip(_translate("MainWindow", "Apply incremental changes to object Placement (Defaut)\n"+ |
|||
"If this is not checked the Placement begin in coordinates 0,0,0 of FreeCAD\n"+ |
|||
"In case a compound Placement information is [0,0,0] the Placement begin in the position of object\n"+ |
|||
"If the real location is away from the base coordinates 0,0,0 use the ValueAt() button\n" |
|||
"for the real Placement of the subObject selected Face, Wire, Line ....", None)) |
|||
self.checkBox.setObjectName(_fromUtf8("checkBox")) |
|||
self.pushButton_5 = QtGui.QPushButton(self.groupBox) |
|||
self.pushButton_5.setGeometry(QtCore.QRect(75, 50, 21, 22)) |
|||
self.pushButton_5.setObjectName(_fromUtf8("pushButton_5")) |
|||
self.pushButton_5.clicked.connect(self.on_pushButton_5_clicked) # connect on def "on_pushButton_5_clicked" |
|||
self.groupBox_2 = QtGui.QGroupBox(self.centralWidget) |
self.groupBox_2 = QtGui.QGroupBox(self.centralWidget) |
||
self.groupBox_2.setGeometry(QtCore.QRect(10, 300, 211, 51)) |
self.groupBox_2.setGeometry(QtCore.QRect(10, 300, 211, 51)) |
||
Line 295: | Line 322: | ||
self.doubleSpinBox_4.setProperty("value", 1.0) |
self.doubleSpinBox_4.setProperty("value", 1.0) |
||
self.doubleSpinBox_4.setObjectName(_fromUtf8("doubleSpinBox_4")) |
self.doubleSpinBox_4.setObjectName(_fromUtf8("doubleSpinBox_4")) |
||
self.doubleSpinBox_4.setToolTip(_translate("MainWindow", "Scale free X multiplied by ...", None)) |
self.doubleSpinBox_4.setToolTip(_translate("MainWindow", "Scale free X multiplied by ...\nIf the value is negative the object result is reverted in X axis", None)) |
||
self.doubleSpinBox_4.valueChanged.connect(self.on_doubleSpinBox_4_valueChanged) #connection doubleSpinBox_4 |
self.doubleSpinBox_4.valueChanged.connect(self.on_doubleSpinBox_4_valueChanged) #connection doubleSpinBox_4 |
||
Line 306: | Line 333: | ||
self.doubleSpinBox_5.setProperty("value", 1.0) |
self.doubleSpinBox_5.setProperty("value", 1.0) |
||
self.doubleSpinBox_5.setObjectName(_fromUtf8("doubleSpinBox_5")) |
self.doubleSpinBox_5.setObjectName(_fromUtf8("doubleSpinBox_5")) |
||
self.doubleSpinBox_5.setToolTip(_translate("MainWindow", "Scale free Y multiplied by ..." |
self.doubleSpinBox_5.setToolTip(_translate("MainWindow", "Scale free Y multiplied by ...\n"+ |
||
"If the value is negative the object result is reverted in Y axis", None)) |
|||
self.doubleSpinBox_5.valueChanged.connect(self.on_doubleSpinBox_5_valueChanged) #connection doubleSpinBox_5 |
self.doubleSpinBox_5.valueChanged.connect(self.on_doubleSpinBox_5_valueChanged) #connection doubleSpinBox_5 |
||
Line 317: | Line 345: | ||
self.doubleSpinBox_6.setProperty("value", 1.0) |
self.doubleSpinBox_6.setProperty("value", 1.0) |
||
self.doubleSpinBox_6.setObjectName(_fromUtf8("doubleSpinBox_6")) |
self.doubleSpinBox_6.setObjectName(_fromUtf8("doubleSpinBox_6")) |
||
self.doubleSpinBox_6.setToolTip(_translate("MainWindow", "Scale free Z multiplied by ..." |
self.doubleSpinBox_6.setToolTip(_translate("MainWindow", "Scale free Z multiplied by ...\n"+ |
||
"If the value is negative the object result is reverted in Z axis", None)) |
|||
self.doubleSpinBox_6.valueChanged.connect(self.on_doubleSpinBox_6_valueChanged) #connection doubleSpinBox_6 |
self.doubleSpinBox_6.valueChanged.connect(self.on_doubleSpinBox_6_valueChanged) #connection doubleSpinBox_6 |
||
Line 332: | Line 361: | ||
self.label_7.setObjectName(_fromUtf8("label_7")) |
self.label_7.setObjectName(_fromUtf8("label_7")) |
||
self. |
self.pushButton_6 = QtGui.QPushButton(self.centralWidget) |
||
self. |
self.pushButton_6.setGeometry(QtCore.QRect(10, 479, 65, 25)) |
||
self. |
self.pushButton_6.setObjectName(_fromUtf8("pushButton_6")) |
||
self.pushButton_6.clicked.connect(self.on_pushButton_6_clicked) # connect on def "on_pushButton_6_clicked" |
|||
self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) |
|||
self.pushButton_3.clicked.connect(self.on_pushButton03_clicked) #connection pushButton03 "..." align YZ to X |
|||
self.pushButton = QtGui.QPushButton(self.centralWidget) |
|||
self.pushButton.setGeometry(QtCore.QRect(82, 510, 65, 28)) |
|||
self.pushButton.setObjectName(_fromUtf8("pushButton")) |
|||
self.pushButton_1 = QtGui.QPushButton(self.centralWidget) |
|||
self.pushButton_1.setGeometry(QtCore.QRect(10, 510, 65, 28)) |
|||
self.pushButton_1.setObjectName(_fromUtf8("pushButton_1")) |
|||
self.pushButton_1.setStyleSheet("background-color: Base") |
|||
self.pushButton_1.clicked.connect(self.on_pushButton01_clicked) #connection pushButton01 "OK" |
|||
self.pushButton_2 = QtGui.QPushButton(self.centralWidget) |
self.pushButton_2 = QtGui.QPushButton(self.centralWidget) |
||
self.pushButton_2.setGeometry(QtCore.QRect( |
self.pushButton_2.setGeometry(QtCore.QRect(155, 510, 65, 28)) |
||
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) |
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2")) |
||
self.pushButton_2.clicked.connect(self.on_pushButton02_clicked) #connection pushButton02 "Quitter" |
self.pushButton_2.clicked.connect(self.on_pushButton02_clicked) #connection pushButton02 "Quitter" |
||
self. |
self.pushButton_3 = QtGui.QPushButton(self.groupBox_3) |
||
self. |
self.pushButton_3.setGeometry(QtCore.QRect(75, 20, 21, 21)) |
||
self. |
self.pushButton_3.setToolTip(_fromUtf8("Align the Scale YZ to X")) |
||
self. |
self.pushButton_3.setObjectName(_fromUtf8("pushButton_3")) |
||
self. |
self.pushButton_3.clicked.connect(self.on_pushButton03_clicked) #connection pushButton03 "..." align YZ to X |
||
self.pushButton = QtGui.QPushButton(self.centralWidget) |
|||
self.pushButton.setGeometry(QtCore.QRect(90, 480, 51, 28)) |
|||
self.pushButton.setObjectName(_fromUtf8("pushButton")) |
|||
self.groupBox_4 = QtGui.QGroupBox(self.centralWidget) |
self.groupBox_4 = QtGui.QGroupBox(self.centralWidget) |
||
self.groupBox_4.setGeometry(QtCore.QRect(10, 180, 211, 111)) |
self.groupBox_4.setGeometry(QtCore.QRect(10, 180, 211, 111)) |
||
Line 394: | Line 429: | ||
self.label_10.setGeometry(QtCore.QRect(10, 80, 81, 16)) |
self.label_10.setGeometry(QtCore.QRect(10, 80, 81, 16)) |
||
self.label_10.setObjectName(_fromUtf8("label_10")) |
self.label_10.setObjectName(_fromUtf8("label_10")) |
||
self.pushButton_4 = QtGui.QPushButton(self.groupBox_4) |
|||
self.pushButton_4.setGeometry(QtCore.QRect(75, 20, 21, 22)) |
|||
self.pushButton_4.setObjectName(_fromUtf8("pushButton_4")) |
|||
self.pushButton_4.clicked.connect(self.on_pushButton_4_clicked) # connect on def "on_pushButton_4_clicked" |
|||
self.pushButton.clicked.connect(self.on_pushButton00_clicked) #connection pushButton00 "Reset" |
self.pushButton.clicked.connect(self.on_pushButton00_clicked) #connection pushButton00 "Reset" |
||
self.lineEdit = QtGui.QLineEdit(self.centralWidget) |
|||
self.lineEdit.setGeometry(QtCore.QRect(83, 481, 136, 20)) |
|||
self.lineEdit.setObjectName(_fromUtf8("lineEdit")) |
|||
self.lineEdit.setText(QtGui.QApplication.translate("Form", " ", None, QtGui.QApplication.UnicodeUTF8)) |
|||
MainWindow.setCentralWidget(self.centralWidget) |
|||
self.retranslateUi(MainWindow) |
self.retranslateUi(MainWindow) |
||
QtCore.QMetaObject.connectSlotsByName(MainWindow) |
QtCore.QMetaObject.connectSlotsByName(MainWindow) |
||
def retranslateUi(self, MainWindow): |
def retranslateUi(self, MainWindow): |
||
Line 415: | Line 457: | ||
self.radioButton.setText(_translate("MainWindow", "Clone", None)) |
self.radioButton.setText(_translate("MainWindow", "Clone", None)) |
||
self.radioButton_2.setText(_translate("MainWindow", "Copy", None)) |
self.radioButton_2.setText(_translate("MainWindow", "Copy", None)) |
||
self.radioButton_3.setText(_translate("MainWindow", "Comp.", None)) |
|||
self.checkBox.setText(_translate("MainWindow", "Increm.", None)) |
|||
self.pushButton_4.setToolTip(_translate("MainWindow", "Align the YX degrees values to Z value \n The second click reset the rotations values to 0.0", None)) |
|||
self.pushButton_4.setText(_translate("MainWindow", "...", None)) |
|||
self.pushButton_5.setToolTip(_translate("MainWindow", "Align the YZ coordinates values to X value \n The second click reset the coordinates values to 0.0", None)) |
|||
self.pushButton_5.setText(_translate("MainWindow", "...", None)) |
|||
self.pushButton_3.setToolTip(_translate("MainWindow", "Align the YZ scale values to X scale value \n The second click reset the scales values to 1.0", None)) |
|||
self.pushButton_3.setText(_translate("MainWindow", "...", None)) |
|||
self.doubleSpinBox.setToolTip(_translate("MainWindow", "Place the new object to the X coordinate ", None)) |
self.doubleSpinBox.setToolTip(_translate("MainWindow", "Place the new object to the X coordinate ", None)) |
||
self.doubleSpinBox.setSuffix(_translate("MainWindow", " mm", None)) |
self.doubleSpinBox.setSuffix(_translate("MainWindow", " mm", None)) |
||
self.label_2.setText(_translate("MainWindow", "Coordinate X", None)) |
|||
self.label_3.setText(_translate("MainWindow", "Coordinate Y", None)) |
|||
self.doubleSpinBox_2.setToolTip(_translate("MainWindow", "Place the new object to the Y coordinate", None)) |
self.doubleSpinBox_2.setToolTip(_translate("MainWindow", "Place the new object to the Y coordinate", None)) |
||
self.doubleSpinBox_2.setSuffix(_translate("MainWindow", " mm", None)) |
self.doubleSpinBox_2.setSuffix(_translate("MainWindow", " mm", None)) |
||
self.doubleSpinBox_3.setToolTip(_translate("MainWindow", "Place the new object to the Z coordinate", None)) |
self.doubleSpinBox_3.setToolTip(_translate("MainWindow", "Place the new object to the Z coordinate", None)) |
||
self.doubleSpinBox_3.setSuffix(_translate("MainWindow", " mm", None)) |
self.doubleSpinBox_3.setSuffix(_translate("MainWindow", " mm", None)) |
||
self.label_4.setText(_translate("MainWindow", "Coordinate Z", None)) |
|||
self.label_2.setText(_translate("MainWindow", "Coordinate X", None)) |
|||
self.label_3.setText(_translate("MainWindow", "Coordinate Y", None)) |
|||
self.label_4.setText(_translate("MainWindow", "Coordinate Z", None)) |
|||
self.groupBox_2.setTitle(_translate("MainWindow", "Scale predefined", None)) |
self.groupBox_2.setTitle(_translate("MainWindow", "Scale predefined", None)) |
||
Line 449: | Line 501: | ||
self.comboBox.setItemText(17, _translate("MainWindow", "league", None)) #lea# league lieue = 4828032 |
self.comboBox.setItemText(17, _translate("MainWindow", "league", None)) #lea# league lieue = 4828032 |
||
self.comboBox.setItemText(18, _translate("MainWindow", "nautique", None)) #nmi# mile nautique = 1852000 |
self.comboBox.setItemText(18, _translate("MainWindow", "nautique", None)) #nmi# mile nautique = 1852000 |
||
self.groupBox_3.setTitle(_translate("MainWindow", "Scale free", None)) |
self.groupBox_3.setTitle(_translate("MainWindow", "Scale free", None)) |
||
self.label_5.setText(_translate("MainWindow", "Scale X", None)) |
self.label_5.setText(_translate("MainWindow", "Scale X", None)) |
||
self.label_6.setText(_translate("MainWindow", "Scale Y", None)) |
self.label_6.setText(_translate("MainWindow", "Scale Y", None)) |
||
self.label_7.setText(_translate("MainWindow", "Scale Z", None)) |
self.label_7.setText(_translate("MainWindow", "Scale Z", None)) |
||
self.pushButton_3.setToolTip(_translate("MainWindow", "Align the YZ scale values to X scale value ", None)) |
|||
self. |
self.pushButton.setToolTip(_translate("MainWindow", "Reset the values", None)) |
||
self.pushButton.setText(_translate("MainWindow", "Reset", None)) |
|||
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert Copy or Compount", None)) |
|||
self.pushButton_1.setText(_translate("MainWindow", "Ok", None)) |
|||
self.pushButton_2.setToolTip(_translate("MainWindow", "Quit the macro", None)) |
self.pushButton_2.setToolTip(_translate("MainWindow", "Quit the macro", None)) |
||
self.pushButton_2.setText(_translate("MainWindow", "Quit", None)) |
self.pushButton_2.setText(_translate("MainWindow", "Quit", None)) |
||
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert or copy", None)) |
|||
self. |
self.pushButton_6.setToolTip(_translate("MainWindow", "Give the valueAt() the subObject selected Face, Wire, Line ...\n"+ |
||
"This option is useful in case a compound Placement information [0,0,0]\n"+ |
|||
self.pushButton.setToolTip(_translate("MainWindow", "Reset", None)) |
|||
"and its real location is away from the base coordinates 0,0,0\n"+ |
|||
self.pushButton.setText(_translate("MainWindow", "Reset", None)) |
|||
"(gives no provide information about the tilt of the object)", None)) |
|||
self.pushButton_6.setText(_translate("MainWindow", "ValueAt()", None)) |
|||
self.groupBox_4.setTitle(_translate("MainWindow", "Rotation", None)) |
self.groupBox_4.setTitle(_translate("MainWindow", "Rotation", None)) |
||
self.doubleSpinBox_7.setSuffix(_translate("MainWindow", " Deg", None)) |
|||
self.doubleSpinBox_8.setSuffix(_translate("MainWindow", " Deg", None)) |
|||
self.doubleSpinBox_9.setSuffix(_translate("MainWindow", " Deg", None)) |
|||
self.label_8.setText(_translate("MainWindow", "Yaw ( Z )", None)) |
self.label_8.setText(_translate("MainWindow", "Yaw ( Z )", None)) |
||
self.label_9.setText(_translate("MainWindow", "Pitch ( Y )", None)) |
self.label_9.setText(_translate("MainWindow", "Pitch ( Y )", None)) |
||
self.label_10.setText(_translate("MainWindow", "Roll ( X )", None)) |
self.label_10.setText(_translate("MainWindow", "Roll ( X )", None)) |
||
self.doubleSpinBox_7.setSuffix(_translate("MainWindow", " Deg", None)) |
|||
self.doubleSpinBox_8.setSuffix(_translate("MainWindow", " Deg", None)) |
|||
self.doubleSpinBox_9.setSuffix(_translate("MainWindow", " Deg", None)) |
|||
def SIGNAL_comboBox_Changed(self,text): |
def SIGNAL_comboBox_Changed(self,text): |
||
Line 549: | Line 608: | ||
global cloneCopy |
global cloneCopy |
||
cloneCopy = 1 |
cloneCopy = 1 |
||
def on_radioButton_2_clicked(self): # if checked then mode copy |
def on_radioButton_2_clicked(self): # if checked then mode copy |
||
global cloneCopy |
global cloneCopy |
||
cloneCopy = 0 |
cloneCopy = 0 |
||
def on_radioButton_3_clicked(self): # if checked then mode compount |
|||
global cloneCopy |
|||
cloneCopy = 2 |
|||
def on_doubleSpinBox_valueChanged(self,value): # doubleSpinbox X |
def on_doubleSpinBox_valueChanged(self,value): # doubleSpinbox X |
||
Line 596: | Line 659: | ||
Roll_X = value |
Roll_X = value |
||
def |
def on_pushButton_5_clicked(self): # Bouton ... (align) placement |
||
global placement_X |
|||
global placement_Y |
|||
global placement_Z |
|||
global switchP |
|||
if switchP == 0: |
|||
placement_Y = placement_Z = placement_X |
|||
switchP = 1 |
|||
else: |
|||
placement_Y = placement_Z = placement_X = 0.0 |
|||
switchP = 0 |
|||
self.doubleSpinBox.setProperty("value", placement_X) |
|||
self.doubleSpinBox_2.setProperty("value", placement_Y) |
|||
self.doubleSpinBox_3.setProperty("value", placement_Z) |
|||
def on_pushButton_6_clicked(self): # valueAt() placement detected |
|||
try: |
|||
sel = FreeCADGui.Selection.getSelection() |
|||
App.Console.PrintMessage(str(sel[0].Placement) +"\r\n") |
|||
selectionObjects = FreeCADGui.Selection.getSelectionEx() # Select an object or sub object getSelectionEx |
|||
edge = selectionObjects[0].SubObjects[0] |
|||
try: |
|||
self.lineEdit.setText(str(edge.valueAt(0,0))) # face |
|||
self.pushButton_6.setText(_translate("MainWindow", "ValueAt(0,0)", None)) |
|||
App.Console.PrintMessage(str(edge.valueAt(0,0)) +"\r\n") |
|||
except Exception: |
|||
self.lineEdit.setText(str(edge.valueAt(0))) # fil |
|||
self.pushButton_6.setText(_translate("MainWindow", "ValueAt(0)", None)) |
|||
App.Console.PrintMessage(str(edge.valueAt(0)) +"\r\n") |
|||
except Exception: |
|||
self.pushButton_6.setText(_translate("MainWindow", "ValueAt()", None)) |
|||
App.Console.PrintError("Select one subObject, Face, Wire, Line ..."+"\r\n") |
|||
App.Console.PrintMessage("____________________________________"+"\r\n") |
|||
def on_pushButton_4_clicked(self): # Bouton ... (align) rotation |
|||
global Yaw_Z |
|||
global Pitch_Y |
|||
global Roll_X |
|||
global switchA |
|||
if switchA == 0: |
|||
Pitch_Y = Roll_X = Yaw_Z |
|||
switchA = 1 |
|||
else: |
|||
Pitch_Y = Roll_X = Yaw_Z = 0.0 |
|||
switchA = 0 |
|||
self.doubleSpinBox_7.setProperty("value", Yaw_Z) |
|||
self.doubleSpinBox_8.setProperty("value", Pitch_Y) |
|||
self.doubleSpinBox_9.setProperty("value", Roll_X) |
|||
def on_pushButton03_clicked(self): # Bouton ... (align) uniteM |
|||
global uniteM_X |
global uniteM_X |
||
global uniteM_Y |
global uniteM_Y |
||
global uniteM_Z |
global uniteM_Z |
||
global switchS |
|||
global uniteM |
global uniteM |
||
global uniteMs |
global uniteMs |
||
uniteM_Y = uniteM_Z = uniteM_X |
|||
if switchS == 0: |
|||
self.doubleSpinBox_5.setProperty("value", uniteM_X) |
|||
uniteM_Y = uniteM_Z = uniteM_X |
|||
switchS = 1 |
|||
else: |
|||
uniteM_Y = uniteM_Z = uniteM_X = 1.0 |
|||
switchS = 0 |
|||
self.doubleSpinBox_4.setProperty("value", uniteM_X) |
|||
self.doubleSpinBox_5.setProperty("value", uniteM_Y) |
|||
self.doubleSpinBox_6.setProperty("value", uniteM_Z) |
|||
def on_pushButton00_clicked(self): # Bouton Reset |
def on_pushButton00_clicked(self): # Bouton Reset |
||
Line 616: | Line 741: | ||
global placement_Y |
global placement_Y |
||
global placement_Z |
global placement_Z |
||
global oripl_X |
|||
global oripl_Y |
|||
global oripl_Z |
|||
global cloneCopy |
global cloneCopy |
||
global Yaw_Z |
global Yaw_Z |
||
Line 625: | Line 747: | ||
sel = "" |
sel = "" |
||
oripl_X = oripl_Y = oripl_Z = 0.0 |
|||
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert or copy", None)) |
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert or copy", None)) |
||
Line 634: | Line 755: | ||
self.comboBox.setCurrentIndex(6) |
self.comboBox.setCurrentIndex(6) |
||
self.doubleSpinBox.setProperty("value", 0.0) |
self.doubleSpinBox.setProperty("value", 0.0) # coordinates |
||
self.doubleSpinBox_2.setProperty("value", 0.0) |
self.doubleSpinBox_2.setProperty("value", 0.0) |
||
self.doubleSpinBox_3.setProperty("value", 0.0) |
self.doubleSpinBox_3.setProperty("value", 0.0) |
||
self.checkBox.setChecked(True) |
|||
placement_X = placement_Y = placement_Z = 0.0 |
placement_X = placement_Y = placement_Z = 0.0 |
||
self.doubleSpinBox_4.setProperty("value", 1.0) |
self.doubleSpinBox_4.setProperty("value", 1.0) # scale |
||
self.doubleSpinBox_5.setProperty("value", 1.0) |
self.doubleSpinBox_5.setProperty("value", 1.0) |
||
self.doubleSpinBox_6.setProperty("value", 1.0) |
self.doubleSpinBox_6.setProperty("value", 1.0) |
||
self.doubleSpinBox_7.setProperty("value", 0.0) |
self.doubleSpinBox_7.setProperty("value", 0.0) # angles |
||
self.doubleSpinBox_8.setProperty("value", 0.0) |
self.doubleSpinBox_8.setProperty("value", 0.0) |
||
self.doubleSpinBox_9.setProperty("value", 0.0) |
self.doubleSpinBox_9.setProperty("value", 0.0) |
||
Line 651: | Line 773: | ||
uniteMs= "mm" |
uniteMs= "mm" |
||
uniteM = 1 |
uniteM = 1 |
||
self.lineEdit.setText("") |
|||
def on_pushButton01_clicked(self): # Bouton OK |
def on_pushButton01_clicked(self): # Bouton OK |
||
Line 669: | Line 792: | ||
global placement_Y |
global placement_Y |
||
global placement_Z |
global placement_Z |
||
global oripl_X |
|||
global oripl_Y |
|||
global oripl_Z |
|||
global sel |
global sel |
||
global Yaw_Z |
global Yaw_Z |
||
Line 677: | Line 797: | ||
global Roll_X |
global Roll_X |
||
#### Chrono begin ######################################################################### chrono begin |
|||
import time #### chrono begin |
|||
depart = time.clock() #### chrono begin |
|||
#### Chrono begin ######################################################################### chrono begin |
|||
sel = FreeCADGui.Selection.getSelection() |
sel = FreeCADGui.Selection.getSelection() |
||
Line 719: | Line 844: | ||
App.Console.PrintMessage("- - - - - - - - - -"+"\r\n") |
App.Console.PrintMessage("- - - - - - - - - -"+"\r\n") |
||
try: |
|||
obj = "" |
|||
if cloneCopy == 1: # clone ok |
|||
import Draft |
|||
mess = "Clone" |
|||
obj=Draft.clone(sel) |
|||
obj |
obj.Scale = (uniteM_X, uniteM_Y, uniteM_Z) |
||
if self.checkBox.isChecked(): # if checkbox is checked then .... increment |
|||
mess = "Clone" |
|||
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)).multiply(App.activeDocument().getObject(obj.Name).Placement) # increment |
|||
if len(sel) > 1: # many object |
|||
else: |
|||
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)) |
|||
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)) |
|||
else: # one objects |
|||
obj.Placement=App.Placement(App.Vector(oripl_X + placement_X,oripl_Y + placement_Y,oripl_Z + placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)) |
|||
if cloneCopy == 0: # copy ok |
|||
import Draft |
|||
mess = "Copy " |
mess = "Copy " |
||
if len(sel) > 1: |
|||
for i in range(len(sel)): |
for i in range(len(sel)): |
||
obj = Draft.scale(sel[i],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0),copy=True,legacy=True) |
obj = Draft.scale(sel[i],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0),copy=True,legacy=True) |
||
if self.checkBox.isChecked(): # if checkbox is checked then .... increment |
|||
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)).multiply(App.activeDocument().getObject(obj.Name).Placement) # increment |
|||
oripl_Y = sel[i].Placement.Base[1] |
|||
else: |
|||
obj.Placement=App.Placement(App.Vector( |
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)) |
||
obj.Label = "Copy of " + obj.Label |
|||
obj = Draft.scale(sel,delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0),copy=True,legacy=True) |
|||
if cloneCopy == 2: # compound ok |
|||
obj.Placement=App.Placement(App.Vector(oripl_X + placement_X,oripl_Y + placement_Y,oripl_Z + placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)) |
|||
import Draft |
|||
mess = "Compount " |
|||
liste = [] |
|||
######################################################################################################################## |
|||
# objori = Draft.makeBlock(Gui.Selection.getSelection()) # create Block other method compound |
|||
# obj = Draft.scale([objori],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0)) |
|||
# App.activeDocument().removeObject(objori.Name) |
|||
######################################################################################################################## |
|||
####################################################################################################################### |
|||
FreeCAD.ActiveDocument.recompute() |
|||
objori = App.activeDocument().addObject("Part::Compound","Compound") # create method compound |
|||
for i in range(len(sel)): |
|||
objori.Links += App.activeDocument().getObject(sel[i].Name), |
|||
try: |
|||
liste.append(sel[i].Name) |
|||
obj = Draft.scale([objori],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0)) |
|||
boundBoxLX = boundBox_.XLength |
|||
####################################################################################################################### |
|||
boundBoxLY = boundBox_.YLength |
|||
boundBoxLZ = boundBox_.ZLength |
|||
# try: # optional delette the original objects |
|||
except: |
|||
# App.activeDocument().removeObject(objori.Name) |
|||
# for i in liste: |
|||
# App.activeDocument().removeObject(i) |
|||
# except: |
|||
# None |
|||
# volume |
|||
if self.checkBox.isChecked(): # if checkbox is checked then .... increment |
|||
volume_ = 0.0 |
|||
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)).multiply(App.activeDocument().getObject(obj.Name).Placement) # increment |
|||
try: |
|||
else: |
|||
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)) |
|||
except: |
|||
obj.Label = "Compount of " + obj.Label |
|||
try: |
|||
objori.Label = "Ori " + obj.Label # renamme the original object |
|||
except Exception: |
|||
None |
|||
try: |
|||
FreeCAD.ActiveDocument.recompute() |
|||
# print "[ ",placement_X," ",placement_Y," ",placement_Z," ] [ ",Yaw_Z," ",Pitch_Y," ",Roll_X," ]" |
|||
for i in range(len(obj)): |
|||
# boundinbox (dimensions hors tout) |
|||
try: |
|||
boundBox_ = obj.Shape.BoundBox |
|||
App.Console.PrintMessage("Convert mm in ' "+uniteMs+" ' (1 "+uniteMs+" = "+str(uniteM)+" mm)"+"\r\n") |
|||
boundBoxLX = boundBox_.XLength |
|||
boundBoxLY = boundBox_.YLength |
|||
boundBoxLZ = boundBox_.ZLength |
|||
except: |
|||
App.Console.PrintMessage(mess + " volume : "+str(volume_)+" mm3 ("+str(len(sel))+" element(s))"+"\r\n")# |
|||
boundBox_ = 0.0 |
|||
App.Console.PrintMessage(mess + " surface : "+str(surface)+" mm2 ("+str(len(sel))+" element(s))"+"\r\n")# |
|||
boundBoxLX = 0.0 |
|||
App.Console.PrintMessage("___________________"+"\r\n") |
|||
boundBoxLY = 0.0 |
|||
self.pushButton_1.setStyleSheet("background-color: green") |
|||
boundBoxLZ = 0.0 |
|||
# volume |
|||
volume_ = 0.0 |
|||
try: |
|||
volume_ = obj.Shape.Volume |
|||
except: |
|||
for i in range(len(obj)): |
|||
volume_ += obj[i].Shape.Volume |
|||
# surface |
|||
surface = 0.0 |
|||
try: |
|||
surface = obj.Shape.Area |
|||
except: |
|||
for i in range(len(obj)): |
|||
surface += obj[i].Shape.Area |
|||
App.Console.PrintMessage(obj.Label+"\r\n") |
|||
App.Console.PrintMessage("Convert mm in ' "+uniteMs+" ' (1 "+uniteMs+" = "+str(uniteM)+" mm)"+"\r\n") |
|||
App.Console.PrintMessage(mess + " boundBox_X : "+str(boundBoxLX)+" mm"+"\r\n") |
|||
App.Console.PrintMessage(mess + " boundBox_Y : "+str(boundBoxLY)+" mm"+"\r\n") |
|||
App.Console.PrintMessage(mess + " boundBox_Z : "+str(boundBoxLZ)+" mm"+"\r\n") |
|||
App.Console.PrintMessage(mess + " volume : "+str(volume_)+" mm3 ("+str(len(sel))+" element(s))"+"\r\n")# |
|||
App.Console.PrintMessage(mess + " surface : "+str(surface)+" mm2 ("+str(len(sel))+" element(s))"+"\r\n")# |
|||
#### Chrono end ########################################################################### chrono end |
|||
arrivee = time.clock() #### chrono end |
|||
App.Console.PrintMessage("Time : "+str("%.2f" % ((arrivee - depart)/60))+" min"+"\r\n")#### chrono end |
|||
#### Chrono end ########################################################################### chrono end |
|||
App.Console.PrintMessage("___________________"+"\r\n") |
|||
self.pushButton_1.setStyleSheet("background-color: green") |
|||
except Exception: |
|||
FreeCAD.Console.PrintError("Error interne"+"\r\n") |
|||
else: |
else: |
||
self.pushButton_1.setStyleSheet("background-color: red")#red |
self.pushButton_1.setStyleSheet("background-color: red")#red |
||
Line 790: | Line 955: | ||
FreeCAD.Console.PrintError("Select an object"+"\r\n") #App.Console.PrintMessage |
FreeCAD.Console.PrintError("Select an object"+"\r\n") #App.Console.PrintMessage |
||
sel = "" |
sel = "" |
||
def on_pushButton02_clicked(self): # Bouton Quitter |
def on_pushButton02_clicked(self): # Bouton Quitter |
||
App.Console.PrintMessage("End CloneConvert\r\n") |
App.Console.PrintMessage("End CloneConvert\r\n") |
||
Line 806: | Line 971: | ||
==Revision== |
==Revision== |
||
30/01/2016 ver 0.7 rewriting code with Placement and Increment and adding buttons Compound, Increment, ValueAt(), |
|||
26/01/2016 ver 0.6 correction placement with many objets Copy |
26/01/2016 ver 0.6 correction placement with many objets Copy |
||
Revision as of 09:49, 31 January 2016
File:Macro CloneConvert Macro CloneConvert |
Descrizione |
---|
Crea un clone riposizionato e scalato di un oggetto selezionato. Autore: mario52 |
Autore |
mario52 |
Download |
None |
Link |
Raccolta di macro Come installare le macro Personalizzare la toolbar |
Versione macro |
1.0 |
Data ultima modifica |
None |
Versioni di FreeCAD |
None |
Scorciatoia |
Nessuna |
Vedere anche |
Nessuno |
Descrizione
Crea un clone o una copia dell'oggetto, lo colloca nella posizione indicata e con le dimensioni desiderate (cm, mm, m, um ...) a piacere. L'originale, cioè l'oggetto selezionato, è riconosciuto in mm (secondo il sistema base di FreeCAD)
Utilizzo
Avviare la macro, definire le impostazioni XYZ se è necessario, scegliere "Clone" oppure "Copia", scegliere una unità di conversione, selezionare l'oggetto e poi fare clic su il pulsante Template:KEY/it per avviare l'operazione.
Se non viene inserito alcun valore verrà creata una copia o un clone senza modifiche. Se non è selezionato alcun oggetto il pulsante Ok sarà colorato in rosso.
Il valore di BoundingBox, Volume e Surface sono indicate nella vista Report, nel caso di oggetti Copy multiple, il display visualia BoundingBox 0.0.
L'unità di base e il mm. L'originale viene quindi considerato come un oggetto in cui l'unità di misura è il mm.
Esempio di conversione di uno cubo avente il lato di 1 mm in un cubo avente lato 25,4 mm:
Selezionare nel comboBox l'unità inch, 1 inch = 25.4 mm , notare che il valore nei campi "Scale free" si adeguano automaticamente a 25.4 che corrisponde appunto a 1 pollice (per impostare scalature differenti secondo gli assi, i valori in "Scale-free" possono essere modificati individualmente). Cliccare sul pulsante OK. Il cubo clone creato in questo modo ha le dimensioni di 25,4 mm
Operazione inversa :
Per convertire un oggetto, ad esempio un cubo di 25,4 mm (1 inch) in un cubo di 1mm x 1mm x 1mm, utilizzare la formula 1 / 25,4 = 0,0393700 e inserire il valore 0,0393700 (con la virgola) nel campo Scale X, Y e Z.
Per un cubo di 5mm, fare 5 / 25,4 = 0,1968503e inserire il valore 0,1968503 (con la virgola) nel campo Scale X, Y e Z.
150% = 1,50 nel campo "Scale free"
104% = 1,04 nel campo "Scale free"
Operazione inversa:
Per convertire un oggetto, ad esempio un cubo di 25,4 mm (1 inch) in un cubo di 1mm x 1mm x 1mm, utilizzare la formula 1 / 25,4 = 0,0393700 e inserire il valore 0,0393700 (con la virgola) nel campo Scale X, Y e Z.
Per un cubo di 5mm, fare 5 / 25,4 = 0,1968503e inserire il valore 0,1968503 (con la virgola) nel campo Scale X, Y e Z.
50% = 0,50 nel campo "Scale free"
4% = 0,04 nel campo "Scale free"
Le unita predefinite sono:
km, hm, dam, m, dm, cm, mm, µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique.
- Mode
- Clone : Crea un clone
- Copy : Crea una copia
- Rotation
- Yaw (Z ) : Rotate the copy to the axis Z (Yaw)
- Pitch ( Y ) : Rotate the copy to the axis Y (Pitch)
- Roll ( X ) : Rotate the copy to the axis X (Roll)
- Coordinate X : Coordinata X della copia
- Coordinate Y : Coordinata Y della copia
- Coordinate Z : Coordinata Z della copia
- Scale predefined
- Scale predefined : scala predefinita in km, hm, dam, m, dm, cm, mm, µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique
oppure impostare l'unità desiderata nel campo Scale free. - Scale free
- Scale X : scala a scelta , se il valore è negativo ( -10) , l'oggetto viene ingrandito x 10 e viene invertita la direzione sull'asse X, per ridurre la forma inserire un valore decimale (0,5)
- ... : Questo pulsante adatta i valori per Y e Z al valore di X per scalare su tutti gli assi con lo stesso valore (o impostare manualmente gli stessi valori)
- Scale Y : scala a scelta , se il valore è negativo ( -10) , l'oggetto viene ingrandito x 10 e viene invertita la direzione sull'asse Y, per ridurre la forma inserire un valore decimale (0,5)
- Scale Z : scala a scelta , se il valore è negativo ( -10) , l'oggetto viene ingrandito x 10 e viene invertita la direzione sull'asse Z, per ridurre la forma inserire un valore decimale (0,5)
- Ok : il pulsante OK convalida e lancia il comando, se non è selezionato alcun oggetto il pulsante Ok ha il colore rosso
- Reset : il pulsante Reset azzera tutti i valori
- Quit : esce dalla macro
Script
L'icona di Macro_CloneConvert:
Macro_CloneConvert.FCMacro
# -*- coding: utf-8 -*-
# CloneConvert.FCMacro
# Cree un clone ou une copie de l'objet ou des objets selectionne(s) et le met e l'echelle de la grandeur choisie
# utilisation : lancer CloneConvert selectionnez un objet choisissez la grandeur et cliquez sur OK
#
# Creates a clone of one copy the selected object and updates the selected size range
# use: start CloneConvert select an object choose the size and click OK
#
#OS: Windows Vista #OS: Windows 8.1
#Word size: 32-bit #Word size of OS: 64-bit
#Version: 0.14.3700 (Git) #Word size of FreeCAD: 32-bit
#Branch: releases/FreeCAD-0-14 #Version: 0.16.5231 (Git)
#Hash: 32f5aae0a64333ec8d5d160dbc46e690510c8fe1 #Build type: Release
#Python version: 2.6.2 #Branch: master
#Qt version: 4.5.2 #Hash: 945638c405766faca0e5f4c1611c00151c88a2ff
#Coin version: 3.1.0 #Python version: 2.7.8
#SoQt version: 1.4.1 #Qt version: 4.8.6
#OCC version: 6.5.1 #Coin version: 4.0.0a
# #OCC version: 6.8.0.oce-0.17
#
# ver 0.3 31/07/2014 PyQt4 + PySide
# ver 0.4 25/07/2015 ajout rotation
# ver 0.5 26/07/2015 correction rotation plusieurs objets Copy
# ver 0.6 26/01/2016 correction placement avec plusieurs objets Copy
# ver 0.7 30/01/2016 reecriture du code avec Placement et ajout Increment et de boutons
__title__ = "CloneConvert"
__author__ = "mario52"
__url__ = "http://www.freecadweb.org/index-fr.html"
__version__ = "00.07"
__date__ = "30/01/2016"
__Comment__ = "This macro creates Clone or Copy or Compound of object(s)"
__Web__ = "http://www.freecadweb.org/"
__Wiki__ = "http://www.freecadweb.org/wiki/index.php?title=Macro_CloneConvert"
__Icon__ = "/usr/lib/freecad/Mod/plugins/icons/Macro_CloneConvert.png"
__IconW__ = "C:/Users/User Name/AppData/Roaming/FreeCAD/Macro_CloneConvert.png"
__Help__ = "start the macro and follow the instructions"
__Status__ = "stable"
__Requires__ = "Alls Freecad"
__Communication__ = "http://www.freecadweb.org/wiki/index.php?title=User:Mario52"
try:
import PyQt4 # PyQt4
from PyQt4 import QtCore, QtGui # PyQt4
# print "PyQt4"
except Exception:
import PySide # PySide
from PySide import QtCore, QtGui # PySide
# print "PySide"
import Draft, Part, FreeCAD, math, PartGui, FreeCADGui
from math import sqrt, pi, sin, cos, asin
from FreeCAD import Base
from decimal import *
from Draft import *
from FreeCAD import Vector, Rotation, Placement, Console
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
global surface ; surface = 0.0
global volume_ ; volume_ = 0.0
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 = ""
global uniteM_X ; uniteM_X = 1.0
global uniteM_Y ; uniteM_Y = 1.0
global uniteM_Z ; uniteM_Z = 1.0
global uniteM ; uniteM = 1.0
global uniteMs ; uniteMs = "mm" # default mm
global placement_X ; placement_X = 0.0
global placement_Y ; placement_Y = 0.0
global placement_Z ; placement_Z = 0.0
global Yaw_Z ; Yaw_Z = 0.0
global Pitch_Y ; Pitch_Y = 0.0
global Roll_X ; Roll_X = 0.0
global switchP ; switchP = 0
global switchA ; switchA = 0
global switchS ; switchS = 0
global sel ; sel = ""
global cloneCopy ; cloneCopy = 1
global a ; a = ""
class Ui_MainWindow(object):
def __init__(self, MainWindow):
# path = FreeCAD.ConfigGet("AppHomePath")
global uniteMs
self.window = MainWindow
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(230, 549)
MainWindow.setMinimumSize(QtCore.QSize(230, 549))
MainWindow.setMaximumSize(QtCore.QSize(230, 549))
self.centralWidget = QtGui.QWidget(MainWindow)
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
self.label = QtGui.QLabel(self.centralWidget)
self.label.setGeometry(QtCore.QRect(10, 10, 191, 16))
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setObjectName(_fromUtf8("label"))
self.groupBox = QtGui.QGroupBox(self.centralWidget)
self.groupBox.setGeometry(QtCore.QRect(10, 30, 211, 141))
self.groupBox.setObjectName(_fromUtf8("groupBox"))
self.doubleSpinBox = QtGui.QDoubleSpinBox(self.groupBox)
self.doubleSpinBox.setGeometry(QtCore.QRect(100, 50, 101, 22))
self.doubleSpinBox.setDecimals(7)
self.doubleSpinBox.setMinimum(-10000000.0)
self.doubleSpinBox.setMaximum(10000000.0)
self.doubleSpinBox.setSingleStep(1.0)
self.doubleSpinBox.setProperty("value", 0.0)
self.doubleSpinBox.setObjectName(_fromUtf8("doubleSpinBox"))
self.doubleSpinBox.valueChanged.connect(self.on_doubleSpinBox_valueChanged) #connection doubleSpinBox
self.label_2 = QtGui.QLabel(self.groupBox)
self.label_2.setGeometry(QtCore.QRect(10, 50, 91, 16))
self.label_2.setObjectName(_fromUtf8("label_2"))
self.label_3 = QtGui.QLabel(self.groupBox)
self.label_3.setGeometry(QtCore.QRect(10, 80, 91, 16))
self.label_3.setObjectName(_fromUtf8("label_3"))
self.label_4 = QtGui.QLabel(self.groupBox)
self.label_4.setGeometry(QtCore.QRect(10, 110, 91, 16))
self.label_4.setObjectName(_fromUtf8("label_4"))
self.doubleSpinBox_2 = QtGui.QDoubleSpinBox(self.groupBox)
self.doubleSpinBox_2.setGeometry(QtCore.QRect(100, 80, 101, 22))
self.doubleSpinBox_2.setDecimals(7)
self.doubleSpinBox_2.setMinimum(-10000000.0)
self.doubleSpinBox_2.setMaximum(10000000.0)
self.doubleSpinBox_2.setSingleStep(1.0)
self.doubleSpinBox_2.setProperty("value", 0.0)
self.doubleSpinBox_2.setObjectName(_fromUtf8("doubleSpinBox_2"))
self.doubleSpinBox_2.valueChanged.connect(self.on_doubleSpinBox_2_valueChanged) #connection doubleSpinBox_2
self.doubleSpinBox_3 = QtGui.QDoubleSpinBox(self.groupBox)
self.doubleSpinBox_3.setGeometry(QtCore.QRect(100, 110, 101, 22))
self.doubleSpinBox_3.setDecimals(7)
self.doubleSpinBox_3.setMinimum(-10000000.0)
self.doubleSpinBox_3.setMaximum(10000000.0)
self.doubleSpinBox_3.setSingleStep(1.0)
self.doubleSpinBox_3.setProperty("value", 0.0)
self.doubleSpinBox_3.setObjectName(_fromUtf8("doubleSpinBox_3"))
self.doubleSpinBox_3.valueChanged.connect(self.on_doubleSpinBox_3_valueChanged) #connection doubleSpinBox_3
self.radioButton = QtGui.QRadioButton(self.groupBox)
self.radioButton.setGeometry(QtCore.QRect(10, 20, 51, 20))
self.radioButton.setChecked(True)
self.radioButton.setObjectName(_fromUtf8("radioButton"))
self.radioButton.setToolTip(_translate("MainWindow", "Create a clone of the object(s)", None))
self.radioButton.clicked.connect(self.on_radioButton_clicked) #connection radioButton mode clone
self.radioButton_2 = QtGui.QRadioButton(self.groupBox)
self.radioButton_2.setGeometry(QtCore.QRect(58, 20, 51, 20))
self.radioButton_2.setObjectName(_fromUtf8("radioButton_2"))
self.radioButton_2.setToolTip(_translate("MainWindow", "Create a copy of the object(s)", None))
self.radioButton_2.clicked.connect(self.on_radioButton_2_clicked) #connection radioButton_2 mode copy
self.radioButton_3 = QtGui.QRadioButton(self.groupBox)
self.radioButton_3.setGeometry(QtCore.QRect(105, 20, 51, 20))
self.radioButton_3.setObjectName(_fromUtf8("radioButton_3"))
self.radioButton_3.setToolTip(_translate("MainWindow", "Create a compount of the object(s)", None))
self.radioButton_3.clicked.connect(self.on_radioButton_3_clicked) #connection radioButton_3 mode compount
self.checkBox = QtGui.QCheckBox(self.groupBox)
self.checkBox.setGeometry(QtCore.QRect(155, 20, 61, 20))
self.checkBox.setChecked(True)
self.checkBox.setToolTip(_translate("MainWindow", "Apply incremental changes to object Placement (Defaut)\n"+
"If this is not checked the Placement begin in coordinates 0,0,0 of FreeCAD\n"+
"In case a compound Placement information is [0,0,0] the Placement begin in the position of object\n"+
"If the real location is away from the base coordinates 0,0,0 use the ValueAt() button\n"
"for the real Placement of the subObject selected Face, Wire, Line ....", None))
self.checkBox.setObjectName(_fromUtf8("checkBox"))
self.pushButton_5 = QtGui.QPushButton(self.groupBox)
self.pushButton_5.setGeometry(QtCore.QRect(75, 50, 21, 22))
self.pushButton_5.setObjectName(_fromUtf8("pushButton_5"))
self.pushButton_5.clicked.connect(self.on_pushButton_5_clicked) # connect on def "on_pushButton_5_clicked"
self.groupBox_2 = QtGui.QGroupBox(self.centralWidget)
self.groupBox_2.setGeometry(QtCore.QRect(10, 300, 211, 51))
self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
self.comboBox = QtGui.QComboBox(self.groupBox_2)
self.comboBox.setGeometry(QtCore.QRect(10, 20, 191, 22))
self.comboBox.setMinimumContentsLength(0)
self.comboBox.setObjectName(_fromUtf8("comboBox"))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.addItem(_fromUtf8(""))
self.comboBox.setToolTip(_translate("MainWindow",u"Select unit. . .", None))
QtCore.QObject.connect(self.comboBox, QtCore.SIGNAL("currentIndexChanged(QString)"), self.SIGNAL_comboBox_Changed)
self.groupBox_3 = QtGui.QGroupBox(self.centralWidget)
self.groupBox_3.setGeometry(QtCore.QRect(10, 360, 211, 111))
self.groupBox_3.setObjectName(_fromUtf8("groupBox_3"))
self.doubleSpinBox_4 = QtGui.QDoubleSpinBox(self.groupBox_3)
self.doubleSpinBox_4.setGeometry(QtCore.QRect(100, 20, 101, 22))
self.doubleSpinBox_4.setDecimals(7)
self.doubleSpinBox_4.setMinimum(-1000000)
self.doubleSpinBox_4.setMaximum(1000000.0)
self.doubleSpinBox_4.setSingleStep(1.0)
self.doubleSpinBox_4.setProperty("value", 1.0)
self.doubleSpinBox_4.setObjectName(_fromUtf8("doubleSpinBox_4"))
self.doubleSpinBox_4.setToolTip(_translate("MainWindow", "Scale free X multiplied by ...\nIf the value is negative the object result is reverted in X axis", None))
self.doubleSpinBox_4.valueChanged.connect(self.on_doubleSpinBox_4_valueChanged) #connection doubleSpinBox_4
self.doubleSpinBox_5 = QtGui.QDoubleSpinBox(self.groupBox_3)
self.doubleSpinBox_5.setGeometry(QtCore.QRect(100, 50, 101, 22))
self.doubleSpinBox_5.setDecimals(7)
self.doubleSpinBox_5.setMinimum(-1000000)
self.doubleSpinBox_5.setMaximum(1000000.0)
self.doubleSpinBox_5.setSingleStep(1.0)
self.doubleSpinBox_5.setProperty("value", 1.0)
self.doubleSpinBox_5.setObjectName(_fromUtf8("doubleSpinBox_5"))
self.doubleSpinBox_5.setToolTip(_translate("MainWindow", "Scale free Y multiplied by ...\n"+
"If the value is negative the object result is reverted in Y axis", None))
self.doubleSpinBox_5.valueChanged.connect(self.on_doubleSpinBox_5_valueChanged) #connection doubleSpinBox_5
self.doubleSpinBox_6 = QtGui.QDoubleSpinBox(self.groupBox_3)
self.doubleSpinBox_6.setGeometry(QtCore.QRect(100, 80, 101, 22))
self.doubleSpinBox_6.setDecimals(7)
self.doubleSpinBox_6.setMinimum(-1000000)
self.doubleSpinBox_6.setMaximum(1000000.0)
self.doubleSpinBox_6.setSingleStep(1.0)
self.doubleSpinBox_6.setProperty("value", 1.0)
self.doubleSpinBox_6.setObjectName(_fromUtf8("doubleSpinBox_6"))
self.doubleSpinBox_6.setToolTip(_translate("MainWindow", "Scale free Z multiplied by ...\n"+
"If the value is negative the object result is reverted in Z axis", None))
self.doubleSpinBox_6.valueChanged.connect(self.on_doubleSpinBox_6_valueChanged) #connection doubleSpinBox_6
self.label_5 = QtGui.QLabel(self.groupBox_3)
self.label_5.setGeometry(QtCore.QRect(10, 20, 53, 16))
self.label_5.setObjectName(_fromUtf8("label_5"))
self.label_6 = QtGui.QLabel(self.groupBox_3)
self.label_6.setGeometry(QtCore.QRect(10, 50, 53, 16))
self.label_6.setObjectName(_fromUtf8("label_6"))
self.label_7 = QtGui.QLabel(self.groupBox_3)
self.label_7.setGeometry(QtCore.QRect(10, 80, 53, 16))
self.label_7.setObjectName(_fromUtf8("label_7"))
self.pushButton_6 = QtGui.QPushButton(self.centralWidget)
self.pushButton_6.setGeometry(QtCore.QRect(10, 479, 65, 25))
self.pushButton_6.setObjectName(_fromUtf8("pushButton_6"))
self.pushButton_6.clicked.connect(self.on_pushButton_6_clicked) # connect on def "on_pushButton_6_clicked"
self.pushButton = QtGui.QPushButton(self.centralWidget)
self.pushButton.setGeometry(QtCore.QRect(82, 510, 65, 28))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.pushButton_1 = QtGui.QPushButton(self.centralWidget)
self.pushButton_1.setGeometry(QtCore.QRect(10, 510, 65, 28))
self.pushButton_1.setObjectName(_fromUtf8("pushButton_1"))
self.pushButton_1.setStyleSheet("background-color: Base")
self.pushButton_1.clicked.connect(self.on_pushButton01_clicked) #connection pushButton01 "OK"
self.pushButton_2 = QtGui.QPushButton(self.centralWidget)
self.pushButton_2.setGeometry(QtCore.QRect(155, 510, 65, 28))
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.pushButton_2.clicked.connect(self.on_pushButton02_clicked) #connection pushButton02 "Quitter"
self.pushButton_3 = QtGui.QPushButton(self.groupBox_3)
self.pushButton_3.setGeometry(QtCore.QRect(75, 20, 21, 21))
self.pushButton_3.setToolTip(_fromUtf8("Align the Scale YZ to X"))
self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
self.pushButton_3.clicked.connect(self.on_pushButton03_clicked) #connection pushButton03 "..." align YZ to X
self.groupBox_4 = QtGui.QGroupBox(self.centralWidget)
self.groupBox_4.setGeometry(QtCore.QRect(10, 180, 211, 111))
self.groupBox_4.setObjectName(_fromUtf8("groupBox_4"))
self.doubleSpinBox_7 = QtGui.QDoubleSpinBox(self.groupBox_4)
self.doubleSpinBox_7.setGeometry(QtCore.QRect(100, 20, 101, 22))
self.doubleSpinBox_7.setDecimals(7)
self.doubleSpinBox_7.setMinimum(-360.0)
self.doubleSpinBox_7.setMaximum(360.0)
self.doubleSpinBox_7.setObjectName(_fromUtf8("doubleSpinBox_7"))
self.doubleSpinBox_7.setToolTip(_translate("MainWindow", "Rotation of Yaw ( Axis Z )", None))
self.doubleSpinBox_7.valueChanged.connect(self.on_doubleSpinBox_7_valueChanged) #connection doubleSpinBox_7
self.doubleSpinBox_8 = QtGui.QDoubleSpinBox(self.groupBox_4)
self.doubleSpinBox_8.setGeometry(QtCore.QRect(100, 50, 101, 22))
self.doubleSpinBox_8.setDecimals(7)
self.doubleSpinBox_8.setMinimum(-360.0)
self.doubleSpinBox_8.setMaximum(360.0)
self.doubleSpinBox_8.setObjectName(_fromUtf8("doubleSpinBox_8"))
self.doubleSpinBox_8.setToolTip(_translate("MainWindow", "Rotation of Pitch ( Axis Y )", None))
self.doubleSpinBox_8.valueChanged.connect(self.on_doubleSpinBox_8_valueChanged) #connection doubleSpinBox_8
self.doubleSpinBox_9 = QtGui.QDoubleSpinBox(self.groupBox_4)
self.doubleSpinBox_9.setGeometry(QtCore.QRect(100, 80, 101, 22))
self.doubleSpinBox_9.setDecimals(7)
self.doubleSpinBox_9.setMinimum(-360.0)
self.doubleSpinBox_9.setMaximum(360.0)
self.doubleSpinBox_9.setObjectName(_fromUtf8("doubleSpinBox_9"))
self.doubleSpinBox_9.setToolTip(_translate("MainWindow", "Rotation of Roll ( Axis X )", None))
self.doubleSpinBox_9.valueChanged.connect(self.on_doubleSpinBox_9_valueChanged) #connection doubleSpinBox_9
self.label_8 = QtGui.QLabel(self.groupBox_4)
self.label_8.setGeometry(QtCore.QRect(10, 20, 81, 16))
self.label_8.setObjectName(_fromUtf8("label_8"))
self.label_9 = QtGui.QLabel(self.groupBox_4)
self.label_9.setGeometry(QtCore.QRect(10, 50, 81, 16))
self.label_9.setObjectName(_fromUtf8("label_9"))
self.label_10 = QtGui.QLabel(self.groupBox_4)
self.label_10.setGeometry(QtCore.QRect(10, 80, 81, 16))
self.label_10.setObjectName(_fromUtf8("label_10"))
self.pushButton_4 = QtGui.QPushButton(self.groupBox_4)
self.pushButton_4.setGeometry(QtCore.QRect(75, 20, 21, 22))
self.pushButton_4.setObjectName(_fromUtf8("pushButton_4"))
self.pushButton_4.clicked.connect(self.on_pushButton_4_clicked) # connect on def "on_pushButton_4_clicked"
self.pushButton.clicked.connect(self.on_pushButton00_clicked) #connection pushButton00 "Reset"
self.lineEdit = QtGui.QLineEdit(self.centralWidget)
self.lineEdit.setGeometry(QtCore.QRect(83, 481, 136, 20))
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
self.lineEdit.setText(QtGui.QApplication.translate("Form", " ", None, QtGui.QApplication.UnicodeUTF8))
MainWindow.setCentralWidget(self.centralWidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "CloneConvert", None))
try:
MainWindow.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint) # cette fonction met la fenetre en avant
except Exception:
MainWindow.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint) # cette fonction met la fenetre en avant
self.label.setText(_translate("MainWindow", "Object converter", None))
self.groupBox.setTitle(_translate("MainWindow", "Mode", None))
self.radioButton.setText(_translate("MainWindow", "Clone", None))
self.radioButton_2.setText(_translate("MainWindow", "Copy", None))
self.radioButton_3.setText(_translate("MainWindow", "Comp.", None))
self.checkBox.setText(_translate("MainWindow", "Increm.", None))
self.pushButton_4.setToolTip(_translate("MainWindow", "Align the YX degrees values to Z value \n The second click reset the rotations values to 0.0", None))
self.pushButton_4.setText(_translate("MainWindow", "...", None))
self.pushButton_5.setToolTip(_translate("MainWindow", "Align the YZ coordinates values to X value \n The second click reset the coordinates values to 0.0", None))
self.pushButton_5.setText(_translate("MainWindow", "...", None))
self.pushButton_3.setToolTip(_translate("MainWindow", "Align the YZ scale values to X scale value \n The second click reset the scales values to 1.0", None))
self.pushButton_3.setText(_translate("MainWindow", "...", None))
self.doubleSpinBox.setToolTip(_translate("MainWindow", "Place the new object to the X coordinate ", None))
self.doubleSpinBox.setSuffix(_translate("MainWindow", " mm", None))
self.doubleSpinBox_2.setToolTip(_translate("MainWindow", "Place the new object to the Y coordinate", None))
self.doubleSpinBox_2.setSuffix(_translate("MainWindow", " mm", None))
self.doubleSpinBox_3.setToolTip(_translate("MainWindow", "Place the new object to the Z coordinate", None))
self.doubleSpinBox_3.setSuffix(_translate("MainWindow", " mm", None))
self.label_2.setText(_translate("MainWindow", "Coordinate X", None))
self.label_3.setText(_translate("MainWindow", "Coordinate Y", None))
self.label_4.setText(_translate("MainWindow", "Coordinate Z", None))
self.groupBox_2.setTitle(_translate("MainWindow", "Scale predefined", None))
self.comboBox.setToolTip(_translate("MainWindow", "Convert your object to . . .", None))
self.comboBox.setCurrentIndex(6)
self.comboBox.setItemText(0, _translate("MainWindow", "km", None)) #km # = 1000000
self.comboBox.setItemText(1, _translate("MainWindow", "hm", None)) #hm # = 100000
self.comboBox.setItemText(2, _translate("MainWindow", "dam", None)) #dam# = 10000
self.comboBox.setItemText(3, _translate("MainWindow", "m", None)) #m # = 1000
self.comboBox.setItemText(4, _translate("MainWindow", "dm", None)) #dm # = 100
self.comboBox.setItemText(5, _translate("MainWindow", "cm", None)) #cm # = 10
self.comboBox.setItemText(6, _translate("MainWindow", "mm", None)) #mm # = 1 #####
self.comboBox.setItemText(7, _translate("MainWindow", "µm", None)) #µm # micro = 0.001
self.comboBox.setItemText(8, _translate("MainWindow", "nm", None)) #nm # nano = 0.000001
self.comboBox.setItemText(9, _translate("MainWindow", "inch", None)) #in # inch pouce = 25.400
self.comboBox.setItemText(10, _translate("MainWindow", "link", None)) #lk # link chainon = 201.168
self.comboBox.setItemText(11, _translate("MainWindow", "foot", None)) #ft # foot pied = 304.800
self.comboBox.setItemText(12, _translate("MainWindow", "yard", None)) #yd # yard verge = 914.400
self.comboBox.setItemText(13, _translate("MainWindow", "perch", None)) #rd # rod ou perch perche = 5029.200
self.comboBox.setItemText(14, _translate("MainWindow", "chain", None)) #ch # chain chaine = 20116.800
self.comboBox.setItemText(15, _translate("MainWindow", "furlong", None)) #fur# furlong = 201168
self.comboBox.setItemText(16, _translate("MainWindow", "mile", None)) #mi # mile = 1609344
self.comboBox.setItemText(17, _translate("MainWindow", "league", None)) #lea# league lieue = 4828032
self.comboBox.setItemText(18, _translate("MainWindow", "nautique", None)) #nmi# mile nautique = 1852000
self.groupBox_3.setTitle(_translate("MainWindow", "Scale free", None))
self.label_5.setText(_translate("MainWindow", "Scale X", None))
self.label_6.setText(_translate("MainWindow", "Scale Y", None))
self.label_7.setText(_translate("MainWindow", "Scale Z", None))
self.pushButton.setToolTip(_translate("MainWindow", "Reset the values", None))
self.pushButton.setText(_translate("MainWindow", "Reset", None))
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert Copy or Compount", None))
self.pushButton_1.setText(_translate("MainWindow", "Ok", None))
self.pushButton_2.setToolTip(_translate("MainWindow", "Quit the macro", None))
self.pushButton_2.setText(_translate("MainWindow", "Quit", None))
self.pushButton_6.setToolTip(_translate("MainWindow", "Give the valueAt() the subObject selected Face, Wire, Line ...\n"+
"This option is useful in case a compound Placement information [0,0,0]\n"+
"and its real location is away from the base coordinates 0,0,0\n"+
"(gives no provide information about the tilt of the object)", None))
self.pushButton_6.setText(_translate("MainWindow", "ValueAt()", None))
self.groupBox_4.setTitle(_translate("MainWindow", "Rotation", None))
self.label_8.setText(_translate("MainWindow", "Yaw ( Z )", None))
self.label_9.setText(_translate("MainWindow", "Pitch ( Y )", None))
self.label_10.setText(_translate("MainWindow", "Roll ( X )", None))
self.doubleSpinBox_7.setSuffix(_translate("MainWindow", " Deg", None))
self.doubleSpinBox_8.setSuffix(_translate("MainWindow", " Deg", None))
self.doubleSpinBox_9.setSuffix(_translate("MainWindow", " Deg", None))
def SIGNAL_comboBox_Changed(self,text):
global uniteM_X
global uniteM_Y
global uniteM_Z
global uniteM
global uniteMs
try:
text = unicode(text, 'ISO-8859-1').encode('UTF-8') # PyQt4
except Exception:
text = text.encode('utf-8') # PySide
if text == "km": # = 1000000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1000000.0
uniteMs= "km"
elif text == "hm": # = 100000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 100000.0
uniteMs= "hm"
elif text == "dam": # = 10000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 10000.0
uniteMs= "dam"
elif text == "m": # = 1000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1000.0
uniteMs= "m"
elif text == "dm": # = 100
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 100.0
uniteMs= "dm"
elif text == "cm": # = 10
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 10.0
uniteMs= "cm"
elif text == "mm": # = 1 ###############################
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1.0
uniteMs= "mm"
elif text == "µm": # = 1000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1.0/1000.0
uniteMs= u"µm"
elif text == "nm": # = 1000000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1.0/1000000.0
uniteMs= u"nm"
elif text == "inch": # inch = 25.400
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 25.400
uniteMs= "in"
elif text == "link": # link = 201.168
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 201.168
uniteMs= "lk"
elif text == "foot": # foot = 304.800
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 304.800
uniteMs= "ft"
elif text == "yard": # yard = 914.400
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 914.400
uniteMs= "yd"
elif text == "perch": #rd # rod perche = 5029.200
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 5029.200
uniteMs= "rd"
elif text == "chain": # chain = 20116.800
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 20116.800
uniteMs= "ch"
elif text == "furlong": # furlong= 201168
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 201168
uniteMs= "fur"
elif text == "mile": # mile = 1609344
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1609344
uniteMs= "mi"
elif text == "league": # league = 4828032
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 4828032
uniteMs= "lea"
elif text == "nautique": # nautique = 1852000
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1852000
uniteMs= "nmi"
else: # mm = 1
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1.0
uniteMs= "mm"
self.doubleSpinBox_4.setProperty("value", uniteM_X)
self.doubleSpinBox_5.setProperty("value", uniteM_Y)
self.doubleSpinBox_6.setProperty("value", uniteM_Z)
def on_radioButton_clicked(self): # if checked then mode clone
global cloneCopy
cloneCopy = 1
def on_radioButton_2_clicked(self): # if checked then mode copy
global cloneCopy
cloneCopy = 0
def on_radioButton_3_clicked(self): # if checked then mode compount
global cloneCopy
cloneCopy = 2
def on_doubleSpinBox_valueChanged(self,value): # doubleSpinbox X
global placement_X
placement_X = value
def on_doubleSpinBox_2_valueChanged(self,value): # doubleSpinbox Y
global placement_Y
placement_Y = value
def on_doubleSpinBox_3_valueChanged(self,value): # doubleSpinbox Z
global placement_Z
placement_Z = value
def on_doubleSpinBox_4_valueChanged(self,value): # doubleSpinbox free X
global uniteM_X
uniteM_X = value
if uniteM_X == 0:
uniteM_X = 1
def on_doubleSpinBox_5_valueChanged(self,value): # doubleSpinbox free Y
global uniteM_Y
uniteM_Y = value
if uniteM_Y == 0:
uniteM_Y = 1
def on_doubleSpinBox_6_valueChanged(self,value): # doubleSpinbox free Z
global uniteM_Z
uniteM_Z = value
if uniteM_Z == 0:
uniteM_Z = 1
def on_doubleSpinBox_7_valueChanged(self,value): # doubleSpinBox_7 Yaw ( Z )
global Yaw_Z
Yaw_Z = value
def on_doubleSpinBox_8_valueChanged(self,value): # doubleSpinBox_8 Pitch ( Y )
global Pitch_Y
Pitch_Y = value
def on_doubleSpinBox_9_valueChanged(self,value): # doubleSpinBox_9 Roll ( X )
global Roll_X
Roll_X = value
def on_pushButton_5_clicked(self): # Bouton ... (align) placement
global placement_X
global placement_Y
global placement_Z
global switchP
if switchP == 0:
placement_Y = placement_Z = placement_X
switchP = 1
else:
placement_Y = placement_Z = placement_X = 0.0
switchP = 0
self.doubleSpinBox.setProperty("value", placement_X)
self.doubleSpinBox_2.setProperty("value", placement_Y)
self.doubleSpinBox_3.setProperty("value", placement_Z)
def on_pushButton_6_clicked(self): # valueAt() placement detected
try:
sel = FreeCADGui.Selection.getSelection()
App.Console.PrintMessage(str(sel[0].Placement) +"\r\n")
selectionObjects = FreeCADGui.Selection.getSelectionEx() # Select an object or sub object getSelectionEx
edge = selectionObjects[0].SubObjects[0]
try:
self.lineEdit.setText(str(edge.valueAt(0,0))) # face
self.pushButton_6.setText(_translate("MainWindow", "ValueAt(0,0)", None))
App.Console.PrintMessage(str(edge.valueAt(0,0)) +"\r\n")
except Exception:
self.lineEdit.setText(str(edge.valueAt(0))) # fil
self.pushButton_6.setText(_translate("MainWindow", "ValueAt(0)", None))
App.Console.PrintMessage(str(edge.valueAt(0)) +"\r\n")
except Exception:
self.pushButton_6.setText(_translate("MainWindow", "ValueAt()", None))
App.Console.PrintError("Select one subObject, Face, Wire, Line ..."+"\r\n")
App.Console.PrintMessage("____________________________________"+"\r\n")
def on_pushButton_4_clicked(self): # Bouton ... (align) rotation
global Yaw_Z
global Pitch_Y
global Roll_X
global switchA
if switchA == 0:
Pitch_Y = Roll_X = Yaw_Z
switchA = 1
else:
Pitch_Y = Roll_X = Yaw_Z = 0.0
switchA = 0
self.doubleSpinBox_7.setProperty("value", Yaw_Z)
self.doubleSpinBox_8.setProperty("value", Pitch_Y)
self.doubleSpinBox_9.setProperty("value", Roll_X)
def on_pushButton03_clicked(self): # Bouton ... (align) uniteM
global uniteM_X
global uniteM_Y
global uniteM_Z
global switchS
global uniteM
global uniteMs
if switchS == 0:
uniteM_Y = uniteM_Z = uniteM_X
switchS = 1
else:
uniteM_Y = uniteM_Z = uniteM_X = 1.0
switchS = 0
self.doubleSpinBox_4.setProperty("value", uniteM_X)
self.doubleSpinBox_5.setProperty("value", uniteM_Y)
self.doubleSpinBox_6.setProperty("value", uniteM_Z)
def on_pushButton00_clicked(self): # Bouton Reset
global sel
global uniteM_X
global uniteM_Y
global uniteM_Z
global uniteM
global uniteMs
global placement_X
global placement_Y
global placement_Z
global cloneCopy
global Yaw_Z
global Pitch_Y
global Roll_X
sel = ""
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert or copy", None))
self.pushButton_1.setStyleSheet("background-color: Base")
self.radioButton.setChecked(True)
cloneCopy = 1
self.comboBox.setCurrentIndex(6)
self.doubleSpinBox.setProperty("value", 0.0) # coordinates
self.doubleSpinBox_2.setProperty("value", 0.0)
self.doubleSpinBox_3.setProperty("value", 0.0)
self.checkBox.setChecked(True)
placement_X = placement_Y = placement_Z = 0.0
self.doubleSpinBox_4.setProperty("value", 1.0) # scale
self.doubleSpinBox_5.setProperty("value", 1.0)
self.doubleSpinBox_6.setProperty("value", 1.0)
self.doubleSpinBox_7.setProperty("value", 0.0) # angles
self.doubleSpinBox_8.setProperty("value", 0.0)
self.doubleSpinBox_9.setProperty("value", 0.0)
uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1.0
uniteMs= "mm"
uniteM = 1
self.lineEdit.setText("")
def on_pushButton01_clicked(self): # Bouton OK
global sel
global surface
global volume_
global boundBox
global boundBoxLX
global boundBoxLY
global boundBoxLZ
global boundBox_S
global uniteM_X
global uniteM_Y
global uniteM_Z
global uniteM
global uniteMs
global placement_X
global placement_Y
global placement_Z
global sel
global Yaw_Z
global Pitch_Y
global Roll_X
#### Chrono begin ######################################################################### chrono begin
import time #### chrono begin
depart = time.clock() #### chrono begin
#### Chrono begin ######################################################################### chrono begin
sel = FreeCADGui.Selection.getSelection()
if len(sel) != 0:
self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert or copy", None))
self.pushButton_1.setStyleSheet("background-color: Base")
# boundinbox (dimensions hors tout)
try:
boundBox_ = sel[0].Shape.BoundBox # pour 1 seul objet, (le premier)
boundBoxLX = boundBox_.XLength
boundBoxLY = boundBox_.YLength
boundBoxLZ = boundBox_.ZLength
except:
boundBox_ = 0.0
boundBoxLX = 0.0
boundBoxLY = 0.0
boundBoxLZ = 0.0
boundBox_S = ""
# volume de tous les objets
volume_ = 0.0
try:
for i in range(len(sel)):
volume_ += sel[i].Shape.Volume
except:
volume_ = 0.0
# surface de tous les objets
surface = 0.0
try:
for i in range(len(sel)):
surface += sel[i].Shape.Area
except:
surface = 0.0
boundBox_S = "[X: "+str(boundBoxLX)+" mm] x [Y: "+str(boundBoxLY)+" mm] x [Z:"+str(boundBoxLZ)+" mm]"
App.Console.PrintMessage("Original boundBox : "+boundBox_S+"\r\n")
App.Console.PrintMessage("Original volume_ : "+str(volume_)+" mm3 ("+str(len(sel))+" element(s))"+"\r\n")
App.Console.PrintMessage("Original surface : "+str(surface)+" mm2 ("+str(len(sel))+" element(s))"+"\r\n")
App.Console.PrintMessage("- - - - - - - - - -"+"\r\n")
try:
obj = ""
if cloneCopy == 1: # clone ok
import Draft
mess = "Clone"
obj=Draft.clone(sel)
obj.Scale = (uniteM_X, uniteM_Y, uniteM_Z)
if self.checkBox.isChecked(): # if checkbox is checked then .... increment
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)).multiply(App.activeDocument().getObject(obj.Name).Placement) # increment
else:
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0))
if cloneCopy == 0: # copy ok
import Draft
mess = "Copy "
for i in range(len(sel)):
obj = Draft.scale(sel[i],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0),copy=True,legacy=True)
if self.checkBox.isChecked(): # if checkbox is checked then .... increment
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)).multiply(App.activeDocument().getObject(obj.Name).Placement) # increment
else:
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0))
obj.Label = "Copy of " + obj.Label
if cloneCopy == 2: # compound ok
import Draft
mess = "Compount "
liste = []
########################################################################################################################
# objori = Draft.makeBlock(Gui.Selection.getSelection()) # create Block other method compound
# obj = Draft.scale([objori],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0))
# App.activeDocument().removeObject(objori.Name)
########################################################################################################################
#######################################################################################################################
objori = App.activeDocument().addObject("Part::Compound","Compound") # create method compound
for i in range(len(sel)):
objori.Links += App.activeDocument().getObject(sel[i].Name),
liste.append(sel[i].Name)
obj = Draft.scale([objori],delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0))
#######################################################################################################################
# try: # optional delette the original objects
# App.activeDocument().removeObject(objori.Name)
# for i in liste:
# App.activeDocument().removeObject(i)
# except:
# None
if self.checkBox.isChecked(): # if checkbox is checked then .... increment
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0)).multiply(App.activeDocument().getObject(obj.Name).Placement) # increment
else:
obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(Yaw_Z,Pitch_Y,Roll_X), App.Vector(0,0,0))
obj.Label = "Compount of " + obj.Label
try:
objori.Label = "Ori " + obj.Label # renamme the original object
except Exception:
None
FreeCAD.ActiveDocument.recompute()
# print "[ ",placement_X," ",placement_Y," ",placement_Z," ] [ ",Yaw_Z," ",Pitch_Y," ",Roll_X," ]"
# boundinbox (dimensions hors tout)
try:
boundBox_ = obj.Shape.BoundBox
boundBoxLX = boundBox_.XLength
boundBoxLY = boundBox_.YLength
boundBoxLZ = boundBox_.ZLength
except:
boundBox_ = 0.0
boundBoxLX = 0.0
boundBoxLY = 0.0
boundBoxLZ = 0.0
# volume
volume_ = 0.0
try:
volume_ = obj.Shape.Volume
except:
for i in range(len(obj)):
volume_ += obj[i].Shape.Volume
# surface
surface = 0.0
try:
surface = obj.Shape.Area
except:
for i in range(len(obj)):
surface += obj[i].Shape.Area
App.Console.PrintMessage(obj.Label+"\r\n")
App.Console.PrintMessage("Convert mm in ' "+uniteMs+" ' (1 "+uniteMs+" = "+str(uniteM)+" mm)"+"\r\n")
App.Console.PrintMessage(mess + " boundBox_X : "+str(boundBoxLX)+" mm"+"\r\n")
App.Console.PrintMessage(mess + " boundBox_Y : "+str(boundBoxLY)+" mm"+"\r\n")
App.Console.PrintMessage(mess + " boundBox_Z : "+str(boundBoxLZ)+" mm"+"\r\n")
App.Console.PrintMessage(mess + " volume : "+str(volume_)+" mm3 ("+str(len(sel))+" element(s))"+"\r\n")#
App.Console.PrintMessage(mess + " surface : "+str(surface)+" mm2 ("+str(len(sel))+" element(s))"+"\r\n")#
#### Chrono end ########################################################################### chrono end
arrivee = time.clock() #### chrono end
App.Console.PrintMessage("Time : "+str("%.2f" % ((arrivee - depart)/60))+" min"+"\r\n")#### chrono end
#### Chrono end ########################################################################### chrono end
App.Console.PrintMessage("___________________"+"\r\n")
self.pushButton_1.setStyleSheet("background-color: green")
except Exception:
FreeCAD.Console.PrintError("Error interne"+"\r\n")
else:
self.pushButton_1.setStyleSheet("background-color: red")#red
self.pushButton_1.setToolTip(_translate("MainWindow", "Not object selected for Convert or copy", None))
FreeCAD.Console.PrintError("Select an object"+"\r\n") #App.Console.PrintMessage
sel = ""
def on_pushButton02_clicked(self): # Bouton Quitter
App.Console.PrintMessage("End CloneConvert\r\n")
self.window.hide()
sel = FreeCADGui.Selection.getSelection()
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow(MainWindow)
MainWindow.show()
Revision
30/01/2016 ver 0.7 rewriting code with Placement and Increment and adding buttons Compound, Increment, ValueAt(),
26/01/2016 ver 0.6 correction placement with many objets Copy
26/07/2015 ver 0.5 correction rotate many objects Function Copy
25/07/2015 ver 0.4 = adding rotation
11/08/2014 replace "AttributeError" to "Exception"
02/07/2014 ver. 0.3 = modified to operate PyQt4 and PySide
09/05/2014 ver. 0.2 = adding function "Copy"