Difference between revisions of "Macro CloneConvert/de"

From FreeCAD Documentation
Jump to: navigation, search
m
 
(48 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{Macro/de|Icon=Text-x-python|Name=Macro CloneConvert|Description=Creates a clone of the object and the converted in the chosen position and size (inch, mm, m, µm...).|Author=mario52}}
+
<languages/>
 +
{{Macro/de
 +
|Name=Macro CloneConvert
 +
|Translate=Macro CloneConvert
 +
|Icon=Macro_CloneConvert.png
 +
|Description=Erzeugt einen Klon des Objekts und konvertiert es an der gewählten Position und Größe (Zoll, mm, m, µm ...).
 +
|Author=mario52
 +
|Version=0.13
 +
|Date=2019-09-15
 +
|FCVersion=All
 +
|Download=[https://www.freecadweb.org/wiki/images/0/0a/Macro_CloneConvert.png ToolBar Icon]
 +
}}
  
==Description==
+
==Beschreibung==
Creates a clone or copy of the object and the converted in the chosen position and size (inch, mm, m, µm...) or free. The base object is recognized in mm (FreeCAd base)
+
Erzeugt einen Klon oder eine Kopie des Objekts und konvertiert es an der gewählten Position und Größe (Zoll, mm, m, µm ...) oder frei. Das Basisobjekt wird in mm (FreeCAd-Basis) erkannt.
  
==Uses==
+
{{Codeextralink|https://gist.githubusercontent.com/mario52a/9f2f2f6144e1307a048f1840ef99300c/raw/786ad9caab88a206ba26aad7fd6fb7c00eec2083/Macro_CloneConvert.FCMacro}}
Run the macro, the XYZ settings, choose "Clone" or "Copy" a unit or one value of choice select your object, and click {{KEY|Ok}} button.
 
  
If no value is entered a copy or clone will be created without modification. If no object is selected the {{KEY|Ok}} button will be colored in red.
+
==Verwendet==
 +
Führen Sie das Makro und die XYZ-Einstellungen aus, wählen Sie "Klonen" oder "Kopieren" eine Einheit oder einen Wert Ihrer Wahl. Wählen Sie Ihr Objekt aus und klicken Sie auf die Schaltfläche {{KEY|Ok}}.
  
The value of the '''BoundingBox''', '''Volume''' and '''Surface''' is diplayed in the Report view, in the case of '''Copy''' multiple object, the display will show BoundingBox 0.0.
+
Wenn kein Wert eingegeben wird, wird eine Kopie oder ein Klon ohne Änderung erstellt. Wenn kein Objekt ausgewählt ist, wird die Schaltfläche {{KEY|Ok}} rot angezeigt.
  
 +
Der Wert von '''Bounding Box''', '''Volume''' und '''Surface''' wird in der Berichtansicht angezeigt, im Falle von ''''Copy''' mehreren Objekten das Anzeige zeigt BoundingBox 0.0.
  
The base is the mm example with a '''1 mm''' cube of side :
 
  
Select in the comboBox '''inch''', '''1 inch = 25.4 mm''' , the fields '''"Scale free"''' automatically adjusts to 25.4 (the values ​​in '''"Scale-free"''' can be changed separately). Click {{KEY|Ok}} button, the clone created will have '''25,4 mm x 25,4 mm x 25,4 mm'''  
+
Die Basis ist das mm-Beispiel mit einem Würfel '''1 mm''' der Seite:
  
'''150%''' = '''1,50''' in the '''"Scale free"''' fields
+
Wählen Sie in der ComboBox '''inch''', '''1 inch = 25,4 mm''' die Felder '''Scale free''' automatisch auf 25,4 (die Werte in''' Scale-free '''kann separat geändert werden). Klicken Sie auf die Schaltfläche {{KEY|Ok}}. Der erstellte Klon enthält '''25, 4 mm x 25,4 mm x 25,4 mm '''.
  
 +
'''150%''' = '''1,50''' in the '''"Scale free"''' fields <br />
 
'''104%''' = '''1,04''' in the '''"Scale free"''' fields  
 
'''104%''' = '''1,04''' in the '''"Scale free"''' fields  
  
Inverse operation :
+
Inverse Operation:
  
If you want to reduce an object ex: a cube 25.4 mm (1 inch) in cube 1 mm sides, use the following formula, '''1 / 25.4 = 0.0393700''' and enter the value '''0,0393700''' (with comma) in the Scale field XY and Z.
+
Wenn Sie ein Objekt verkleinern möchten, z. B. einen Würfel von 25,4 mm (1 Zoll) in den Würfeln von 1 mm, verwenden Sie die Formel '''1 / 25.4 = 0.0393700''' und geben Sie den Wert '''0,0393700' ein.''' (mit Komma) im Skalierungsfeld XY und Z.
  
In a cube of 5 mm, made​​ '''5 / 25.4 = 0.1968503''' and enter the value '''0,1968503''' (with comma) in the Scale field XY and Z.
+
In einem Würfel von 5 mm, '''5 / 25.4 = 0.1968503''' eingeben und den Wert '''0,1968503''' (mit Komma) in das Skalierungsfeld XY und Z eingeben.
 
 
'''50%''' = '''0,50''' in the '''"Scale free"''' fields
 
 
 
''' 4%''' = '''0,04''' in the '''"Scale free"''' fields
 
  
 +
'''50%''' = '''0,50''' in dem '''"Scale free"''' Felder<br />
 +
''' 4%''' = '''0,04''' in dem '''"Scale free"''' Felder
 
<br />
 
<br />
Predefined units are :
 
  
 +
Vordefinierte Einheiten sind :
 
km, hm, dam, m, dm, cm, '''mm''', µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique.
 
km, hm, dam, m, dm, cm, '''mm''', µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique.
 
<br /><br />
 
<br /><br />
 +
 
[[File:Macro CloneConvert_01.png|220px|left|CloneConvert]]
 
[[File:Macro CloneConvert_01.png|220px|left|CloneConvert]]
 
* '''Mode'''
 
* '''Mode'''
* '''Clone :''' One clone of the objet(s) is create
+
* '''Clone   :''' Die Klone der Objekte werden erstellt
* '''Copy :''' One copy of the objet(s) is create
+
* '''Copy   :''' Es wird eine Kopie des Objekts erstellt
*
+
* '''Comp    :''' Eine Kombination des Objekts ist create
* '''Coordinate X :''' Move the copy to the Coordinate X selected
+
* '''Increm. : '''Inkrementieren der Koordinatendaten auf die ursprünglichen Koordinaten des Objekts (Platzierung, Drehung ...) <br /> Wenn diese Option nicht aktiviert ist, beginnt die Platzierung in den Koordinaten 0,0,0 von FreeCAD. <br /> In diesem Fall Eine zusammengesetzte Platzierungsinformation ist [0,0,0]. Die Platzierung beginnt an der Position des Objekts. <br /> Wenn der tatsächliche Standort von den Basiskoordinaten abweicht, verwenden Sie 0,0 {{KEY|ValueAt ()}}. Schaltfläche für die tatsächliche Platzierung des ausgewählten Unterobjekts Fläche, Draht, Linie ....
* '''Coordinate Y :''' Move the copy to the Coordinate Y selected
+
* '''Unique:''' Wenn dieses Kontrollkästchen markiert ist und mehrere Objekte ausgewählt sind, ist der erstellte Klon ein eindeutiges Objekt
* '''Coordinate Z :''' Move the copy to the Coordinate Z selected
 
*
 
* '''Scale predefined'''
 
* '''Scale predefined :''' predefined scales in units, km, hm, dam, m, dm, cm, '''mm''', µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique<br />or choose a free value in the Scale free field.
 
*
 
* '''Scale free'''
 
* '''Scale X :''' free scale , if the value is negative '''( -10)''' , the object is scaled '''x 10''' and will be reversed in the X axis, to reduce the shape give a decimal value '''(0,5)'''
 
* '''{{KEY|...}} :''' This button align the YZ values on the value of X to have the same values ​​XYZ (or manually)
 
* '''Scale Y :''' free scale , if the value is negative '''( -10)''' , the object is scaled '''x 10''' and will be reversed in the Y axis, to reduce the shape give a decimal value '''(0,5)'''
 
* '''Scale Z :''' free scale , if the value is negative '''( -10)''' , the object is scaled '''x 10''' and will be reversed in the Z axis, to reduce the shape give a decimal value '''(0,5)'''
 
*
 
* '''{{KEY|Ok}} :''' the OK button validates and launches the command, if no object is selected the {{KEY|Ok}} button will be colored in red
 
* '''{{KEY|Reset}} :''' the Reset button puts all the values to zero
 
* '''{{KEY|Quit}} :''' the Quit button exit the macro
 
{{clear}}
 
  
==Script==
+
* '''Coordinates'''
Macro_CloneConvert.FCMacro
+
* '''{{KEY|...}}:''' Diese Schaltfläche bringt die YZ-Werte auf den Wert von X an, um dieselben Werte wie XYZ (oder manuell) zu erhalten. Mit zwei Klicks setzen Sie die Koordinaten auf 0,0 zurück
<syntaxhighlight>
+
* '''Coordinate X:''' Verschiebt die Kopie auf die ausgewählte Koordinate X (Basis 0,0,0, wenn Increm nicht aktiviert ist)
# -*- coding: utf-8 -*-
+
* '''Coordinate Y:''' Verschiebt die Kopie in die ausgewählte Koordinate Y (Basis 0,0,0, wenn Increm nicht aktiviert ist)
# CloneConvert.py
+
* '''Coordinate Z:''' Verschiebt die Kopie in die ausgewählte Koordinate Z (Basis 0,0,0, wenn Increm nicht aktiviert ist)
# 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
 
#Word size: 32-bit
 
#Version: 0.14.3700 (Git)
 
#Branch: releases/FreeCAD-0-14
 
#Hash: 32f5aae0a64333ec8d5d160dbc46e690510c8fe1
 
#Python version: 2.6.2
 
#Qt version: 4.5.2
 
#Coin version: 3.1.0
 
#SoQt version: 1.4.1
 
#OCC version: 6.5.1
 
#
 
# ver 0.3 31/07/2014 PyQt4 + PySide
 
  
__title__ = "CloneConvert"
+
* '''Rotation'''
__author__ = "mario52"
+
* '''{{KEY|...}}:''' Diese Schaltfläche passt die Pitch- und Roll-Werte an dem Wert von Yaw an, um dieselben Werte zu erhalten. Rotation (oder manuell) <br /> Mit einem zwei Klick setzen Sie das zurück Drehzahlwerte auf 0,0
 +
* '''Yaw (Z):''' Die Kopie auf die Achse Z (Yaw) drehen (0 beginnen, wenn Increm nicht aktiviert ist)
 +
* '''Pitch (Y):''' Die Kopie auf die Achse Y (Pitch) drehen (Start 0, wenn Increm nicht aktiviert ist)
 +
* '''Roll (X):''' Die Kopie auf die Achse X (Roll) drehen (Start 0, wenn Increm nicht aktiviert ist)
  
try:
+
* '''Scale predefined'''
    import PyQt4                    # PyQt4
+
* '''Scale predefined :''' vordefinierte Skalen in Einheiten, km, hm, dam, m, dm, cm, '''mm''', µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique or choose a free value in the Scale free field.
    from PyQt4 import QtCore, QtGui  # PyQt4
 
except Exception:
 
    import PySide                    # PySide
 
    from PySide import QtCore, QtGui # 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:
+
* '''Number copy '''
    _fromUtf8 = QtCore.QString.fromUtf8
+
* '''Number copy :''' Anzahl der Kopien
except AttributeError:
 
    def _fromUtf8(s):
 
        return s
 
  
try:
+
* '''Scale free'''
    _encoding = QtGui.QApplication.UnicodeUTF8
+
* '''{{KEY | ...}}:''' Diese Schaltfläche bringt die Skalenwerte auf den Wert von Skalierung X an, um dieselben Werte XYZ (oder manuell) zu haben. <br /> Mit einem Klick können Sie die Skalen zurücksetzen Werte bis 1,0
    def _translate(context, text, disambig):
+
* '''Scale X:''' freier Maßstab, wenn der Wert negativ '''(-10)''' ist, wird das Objekt '''x 10' '' skaliert und in der X-Achse umgekehrt. Um die Form zu reduzieren, geben Sie einen Dezimalwert ein (0,5).
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
+
* '''Scale Y:''' freier Maßstab, wenn der Wert negativ '''(-10)''' ist, wird das Objekt '''x 10''' skaliert und in der Y-Achse umgekehrt. Um die Form zu reduzieren, geben Sie einen Dezimalwert ein (0,5).
except AttributeError:
+
* '''Scale Z:''' freier Maßstab, wenn der Wert negativ '''(-10)''' ist, wird das Objekt '''x 10''' skaliert und in der Z-Achse umgekehrt. Um die Form zu reduzieren, geben Sie einen Dezimalwert ein (0,5).
    def _translate(context, text, disambig):
 
        return QtGui.QApplication.translate(context, text, disambig)
 
  
global surface    ; surface    = 0.0
+
* '''{{KEY|ValueAt ()}}:''' Geben Sie dem valueAt () das ausgewählte Unterobjekt an Face, Wire, Line ... <br /> Diese Option ist nützlich, wenn zusammengesetzte Platzierungsinformationen [0, 0,0] und seine tatsächliche Position ist von den Basiskoordinaten 0,0,0 entfernt (gibt keine Informationen über die Drehung des Objekts an)
global volume_    ; volume_    = 0.0
+
* '''{{KEY|Ok}}:''' Die OK-Schaltfläche bestätigt und startet den Befehl. Wenn kein Objekt ausgewählt ist, wird die {{KEY|Ok}} -Schaltfläche rot gefärbt
global boundBox_  ; boundBox_  = 0.0
+
* '''{{KEY|Reset}}:''' Der Reset-Button setzt alle Werte auf Null
global boundBoxLX  ; boundBoxLX  = 0.0
+
* '''{{KEY|Quit}}:''' die Schaltfläche Quit beendet das Makro
global boundBoxLY  ; boundBoxLY  = 0.0
+
{{clear}}
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 oripl_X    ; oripl_X    = 0.0
 
global oripl_Y    ; oripl_Y    = 0.0
 
global oripl_Z    ; oripl_Z    = 0.0
 
global sel        ; sel        = ""
 
global cloneCopy  ; cloneCopy  = 1
 
  
class Ui_MainWindow(object):
+
==Skript==
 +
Das Symbol [[Image:Macro_CloneConvert.png]]
  
    def __init__(self, MainWindow):
+
'''Macro_CloneConvert.FCMacro'''
#        path = FreeCAD.ConfigGet("AppHomePath")
 
  
        global uniteMs
+
Laden Sie das Makro in herunter Gist [https://gist.github.com/mario52a/9f2f2f6144e1307a048f1840ef99300c Macro_CloneConvert.FCMacro]
  
        self.window = MainWindow
+
==Revision==
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
 
        MainWindow.resize(230, 379)
 
        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)
+
15/09/2019 ver 0.13 replace the grec sign micro to "um", replace all "_translate("MainWindow", "mm", None)" to "mm" and comment line "text.encode('utf-8')" cause not work with FC 0.19 18.213
        self.groupBox.setGeometry(QtCore.QRect(10, 30, 211, 141))
 
        self.groupBox.setObjectName(_fromUtf8("groupBox"))
 
  
        self.doubleSpinBox = QtGui.QDoubleSpinBox(self.groupBox)
+
01/06/2019 ver 0.12 = adapted for 0.19 et correction "Copy:legacy=True" and ShapeColor .....
        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)
+
30/03/2018 ver 0.11 = odd checkBox, if multi selection the clone are object unique or object separate
        self.label_2.setGeometry(QtCore.QRect(10, 50, 91, 16))
 
        self.label_2.setObjectName(_fromUtf8("label_2"))
 
  
        self.label_3 = QtGui.QLabel(self.groupBox)
+
07/06/2017 ver 0.10 = replace Draft...Copy to Part..Shape cause section Copy : not draw copy scaled of object but copy not scaled ??
        self.label_3.setGeometry(QtCore.QRect(10, 80, 91, 16))
 
        self.label_3.setObjectName(_fromUtf8("label_3"))
 
  
        self.doubleSpinBox_2 = QtGui.QDoubleSpinBox(self.groupBox)
+
14/06/2016 ver 0.= adding the choice of number of copies and labels optimization
        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)
+
31/01/2016 ver 0.8 = modify the buttons reset section for two click for reset (in case modification the value)  
        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.label_4 = QtGui.QLabel(self.groupBox)
+
30/01/2016 ver 0.7 = rewriting code with Placement and Increment and adding buttons Compound, Increment, ValueAt(),
        self.label_4.setGeometry(QtCore.QRect(10, 110, 91, 16))
 
        self.label_4.setObjectName(_fromUtf8("label_4"))
 
  
        self.radioButton = QtGui.QRadioButton(self.groupBox)
+
26/01/2016 ver 0.6 = correction placement with many objets Copy
        self.radioButton.setGeometry(QtCore.QRect(10, 20, 71, 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)
+
26/07/2015 ver 0.5 = correction rotate many objects Function Copy
        self.radioButton_2.setGeometry(QtCore.QRect(100, 20, 71, 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.groupBox_2 = QtGui.QGroupBox(self.centralWidget)
+
25/07/2015 ver 0.4 = adding rotation
        self.groupBox_2.setGeometry(QtCore.QRect(10, 170, 211, 51))
 
        self.groupBox_2.setObjectName(_fromUtf8("groupBox_2"))
 
  
        self.comboBox = QtGui.QComboBox(self.groupBox_2)
+
11/08/2014 replace "AttributeError" to "Exception"
        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, 220, 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 ...", 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 ...", 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 ...", 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_3 = QtGui.QPushButton(self.groupBox_3)
 
        self.pushButton_3.setGeometry(QtCore.QRect(70, 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.pushButton_2 = QtGui.QPushButton(self.centralWidget)
 
        self.pushButton_2.setGeometry(QtCore.QRect(152, 340, 71, 28))
 
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
 
        self.pushButton_2.clicked.connect(self.on_pushButton02_clicked) #connection pushButton02 "Quitter"
 
 
        self.pushButton_1 = QtGui.QPushButton(self.centralWidget)
 
        self.pushButton_1.setGeometry(QtCore.QRect(10, 340, 71, 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 = QtGui.QPushButton(self.centralWidget)
 
        self.pushButton.setGeometry(QtCore.QRect(90, 340, 51, 28))
 
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
 
        self.pushButton.clicked.connect(self.on_pushButton00_clicked)  #connection pushButton00 "Reset"
 
 
        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 AttributeError:
 
            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.doubleSpinBox.setToolTip(_translate("MainWindow", "Place the new object to the X coordinate ", 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_3.setToolTip(_translate("MainWindow", "Place the new object to the Z coordinate", 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_3.setToolTip(_translate("MainWindow", "Align the YZ scale values ??to X scale value ", None))
 
        self.pushButton_3.setText(_translate("MainWindow", "...", None))
 
        self.pushButton_2.setToolTip(_translate("MainWindow", "Quit the macro", None))
 
        self.pushButton_2.setText(_translate("MainWindow", "Quit", None))
 
        self.pushButton_1.setToolTip(_translate("MainWindow", "Ok for Convert or copy", None))
 
        self.pushButton_1.setText(_translate("MainWindow", "Ok", None))
 
        self.pushButton.setToolTip(_translate("MainWindow", "Reset", None))
 
        self.pushButton.setText(_translate("MainWindow", "Reset", 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_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_pushButton03_clicked(self):                  # Bouton ... (align)
 
        global uniteM_X
 
        global uniteM_Y
 
        global uniteM_Z
 
        global uniteM
 
        global uniteMs
 
        uniteM_Y = uniteM_Z = uniteM_X
 
        self.doubleSpinBox_5.setProperty("value", uniteM_X)
 
        self.doubleSpinBox_6.setProperty("value", uniteM_X)
 
 
    def on_pushButton00_clicked(self):                  # Bouton Reset
 
        global uniteM_X
 
        global uniteM_Y
 
        global uniteM_Z
 
        global uniteM
 
        global uniteMs
 
        global placement_X
 
        global placement_Y
 
        global placement_Z
 
        global oripl_X
 
        global oripl_Y
 
        global oripl_Z
 
        global cloneCopy
 
 
        oripl_X = oripl_Y = oripl_Z = 0.0
 
 
        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)
 
        self.doubleSpinBox_2.setProperty("value", 0.0)
 
        self.doubleSpinBox_3.setProperty("value", 0.0)
 
 
        placement_X = placement_Y = placement_Z = 0.0
 
 
        self.doubleSpinBox_4.setProperty("value", 1.0)
 
        self.doubleSpinBox_5.setProperty("value", 1.0)
 
        self.doubleSpinBox_6.setProperty("value", 1.0)
 
 
        uniteM = uniteM_X = uniteM_Y = uniteM_Z = 1.0
 
        uniteMs= "mm"
 
        uniteM = 1
 
 
    def on_pushButton01_clicked(self):                  # Bouton OK
 
        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 oripl_X
 
        global oripl_Y
 
        global oripl_Z
 
        global sel
 
 
        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")
 
 
            oripl_X = sel[0].Placement.Base[0]
 
            oripl_Y = sel[0].Placement.Base[1]
 
            oripl_Z = sel[0].Placement.Base[2]
 
 
            obj = ""
 
            if cloneCopy == 1:      # clone ok
 
                obj=Draft.clone(sel)
 
                mess = "Clone"
 
                ###
 
                if len(sel) > 1:    # one object
 
                    obj.Placement=App.Placement(App.Vector(placement_X,placement_Y,placement_Z), App.Rotation(App.Vector(0,0,1),0), App.Vector(0,0,0))
 
                else:                # many objects
 
                    obj.Placement=App.Placement(App.Vector(oripl_X + placement_X,oripl_Y + placement_Y,oripl_Z + placement_Z), App.Rotation(sel[0].Placement.Rotation), App.Vector(0,0,0))
 
                obj.Scale = (uniteM_X, uniteM_Y, uniteM_Z)
 
                ###
 
            else:                    # copy ok
 
                mess = "Copy "
 
                obj = Draft.scale(sel,delta=App.Vector(uniteM_X, uniteM_Y, uniteM_Z),center=App.Vector(0,0,0),copy=True,legacy=True)
 
                mydistance = FreeCAD.Vector(oripl_X + placement_X,oripl_Y + placement_Y,oripl_Z + placement_Z)
 
                move(obj,mydistance)
 
 
            FreeCAD.ActiveDocument.recompute()
 
            ####
 
 
            # 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("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")#
 
            App.Console.PrintMessage("___________________"+"\r\n")
 
            self.pushButton_1.setStyleSheet("background-color: green")
 
 
        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()
 
 
 
</syntaxhighlight>
 
 
==Revision==
 
 
02/07/2014 ver. 0.3 = modified to operate PyQt4 and PySide
 
02/07/2014 ver. 0.3 = modified to operate PyQt4 and PySide
  
 
09/05/2014 ver. 0.2 = adding function "Copy"
 
09/05/2014 ver. 0.2 = adding function "Copy"
 
<languages/>
 

Latest revision as of 17:36, 15 September 2019

Other languages:
Deutsch • ‎English • ‎français • ‎italiano

Macro CloneConvert.png Macro CloneConvert

Beschreibung
Erzeugt einen Klon des Objekts und konvertiert es an der gewählten Position und Größe (Zoll, mm, m, µm ...).

Versionsmakro : 0.13
Datum der letzten Änderung : 2019-09-15
FreeCAD version : All
Herunterladen : ToolBar Icon
Autor
mario52
Herunterladen
ToolBar Icon
Links
Macro-Version
0.13
Datum der letzten Änderung
2019-09-15
FreeCAD-Version(s)
All
Standardverknüpfung
None
Siehe auch
None


Beschreibung

Erzeugt einen Klon oder eine Kopie des Objekts und konvertiert es an der gewählten Position und Größe (Zoll, mm, m, µm ...) oder frei. Das Basisobjekt wird in mm (FreeCAd-Basis) erkannt.

Temporary code for external macro link. Do not use this code. This code is used exclusively by Addon_Installer.


##This code is copied instead of the original macro code

##to guide the user to the offline download page

##Use it if the code of the macro is larger than 64 KB and cannot be included in the wiki

##or if the RAW code url is extra wiki location

import PySide

from PySide import QtGui ,QtCore

diag = QtGui.QMessageBox(QtGui.QMessageBox.Information,u"Information",
    "This macro must by downloaded with this link" + "\n"
    " " + "\n"
    "https://gist.githubusercontent.com/mario52a/9f2f2f6144e1307a048f1840ef99300c/raw/786ad9caab88a206ba26aad7fd6fb7c00eec2083/Macro_CloneConvert.FCMacro" + "\n"
    " " + "\n"
    "Quit this window for access in the download page" )

diag.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint)

diag.setWindowModality(QtCore.Qt.ApplicationModal)

diag.exec_()

import webbrowser 

webbrowser.open("https://gist.githubusercontent.com/mario52a/9f2f2f6144e1307a048f1840ef99300c/raw/786ad9caab88a206ba26aad7fd6fb7c00eec2083/Macro_CloneConvert.FCMacro")
<class="rawcodeurl"><a href="https://gist.githubusercontent.com/mario52a/9f2f2f6144e1307a048f1840ef99300c/raw/786ad9caab88a206ba26aad7fd6fb7c00eec2083/Macro_CloneConvert.FCMacro">raw code</a>


Verwendet

Führen Sie das Makro und die XYZ-Einstellungen aus, wählen Sie "Klonen" oder "Kopieren" eine Einheit oder einen Wert Ihrer Wahl. Wählen Sie Ihr Objekt aus und klicken Sie auf die Schaltfläche Ok.

Wenn kein Wert eingegeben wird, wird eine Kopie oder ein Klon ohne Änderung erstellt. Wenn kein Objekt ausgewählt ist, wird die Schaltfläche Ok rot angezeigt.

Der Wert von Bounding Box, Volume und Surface wird in der Berichtansicht angezeigt, im Falle von 'Copy mehreren Objekten das Anzeige zeigt BoundingBox 0.0.


Die Basis ist das mm-Beispiel mit einem Würfel 1 mm der Seite:

Wählen Sie in der ComboBox inch, 1 inch = 25,4 mm die Felder Scale free automatisch auf 25,4 (die Werte in Scale-free kann separat geändert werden). Klicken Sie auf die Schaltfläche Ok. Der erstellte Klon enthält 25, 4 mm x 25,4 mm x 25,4 mm .

150% = 1,50 in the "Scale free" fields
104% = 1,04 in the "Scale free" fields

Inverse Operation:

Wenn Sie ein Objekt verkleinern möchten, z. B. einen Würfel von 25,4 mm (1 Zoll) in den Würfeln von 1 mm, verwenden Sie die Formel 1 / 25.4 = 0.0393700 und geben Sie den Wert 0,0393700' ein. (mit Komma) im Skalierungsfeld XY und Z.

In einem Würfel von 5 mm, 5 / 25.4 = 0.1968503 eingeben und den Wert 0,1968503 (mit Komma) in das Skalierungsfeld XY und Z eingeben.

50% = 0,50 in dem "Scale free" Felder
4% = 0,04 in dem "Scale free" Felder

Vordefinierte Einheiten sind : km, hm, dam, m, dm, cm, mm, µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique.

CloneConvert
  • Mode
  • Clone  : Die Klone der Objekte werden erstellt
  • Copy  : Es wird eine Kopie des Objekts erstellt
  • Comp  : Eine Kombination des Objekts ist create
  • Increm. : Inkrementieren der Koordinatendaten auf die ursprünglichen Koordinaten des Objekts (Platzierung, Drehung ...)
    Wenn diese Option nicht aktiviert ist, beginnt die Platzierung in den Koordinaten 0,0,0 von FreeCAD.
    In diesem Fall Eine zusammengesetzte Platzierungsinformation ist [0,0,0]. Die Platzierung beginnt an der Position des Objekts.
    Wenn der tatsächliche Standort von den Basiskoordinaten abweicht, verwenden Sie 0,0 ValueAt (). Schaltfläche für die tatsächliche Platzierung des ausgewählten Unterobjekts Fläche, Draht, Linie ....
  • Unique: Wenn dieses Kontrollkästchen markiert ist und mehrere Objekte ausgewählt sind, ist der erstellte Klon ein eindeutiges Objekt
  • Coordinates
  • ...: Diese Schaltfläche bringt die YZ-Werte auf den Wert von X an, um dieselben Werte wie XYZ (oder manuell) zu erhalten. Mit zwei Klicks setzen Sie die Koordinaten auf 0,0 zurück
  • Coordinate X: Verschiebt die Kopie auf die ausgewählte Koordinate X (Basis 0,0,0, wenn Increm nicht aktiviert ist)
  • Coordinate Y: Verschiebt die Kopie in die ausgewählte Koordinate Y (Basis 0,0,0, wenn Increm nicht aktiviert ist)
  • Coordinate Z: Verschiebt die Kopie in die ausgewählte Koordinate Z (Basis 0,0,0, wenn Increm nicht aktiviert ist)
  • Rotation
  • ...: Diese Schaltfläche passt die Pitch- und Roll-Werte an dem Wert von Yaw an, um dieselben Werte zu erhalten. Rotation (oder manuell)
    Mit einem zwei Klick setzen Sie das zurück Drehzahlwerte auf 0,0
  • Yaw (Z): Die Kopie auf die Achse Z (Yaw) drehen (0 beginnen, wenn Increm nicht aktiviert ist)
  • Pitch (Y): Die Kopie auf die Achse Y (Pitch) drehen (Start 0, wenn Increm nicht aktiviert ist)
  • Roll (X): Die Kopie auf die Achse X (Roll) drehen (Start 0, wenn Increm nicht aktiviert ist)
  • Scale predefined
  • Scale predefined : vordefinierte Skalen in Einheiten, km, hm, dam, m, dm, cm, mm, µm, nm, inch, link, foot, yard, perch, chain, furlong, mile, league, nautique or choose a free value in the Scale free field.
  • Number copy
  • Number copy : Anzahl der Kopien
  • Scale free
  • ...: Diese Schaltfläche bringt die Skalenwerte auf den Wert von Skalierung X an, um dieselben Werte XYZ (oder manuell) zu haben.
    Mit einem Klick können Sie die Skalen zurücksetzen Werte bis 1,0
  • Scale X:' freier Maßstab, wenn der Wert negativ (-10) ist, wird das Objekt x 10' skaliert und in der X-Achse umgekehrt. Um die Form zu reduzieren, geben Sie einen Dezimalwert ein (0,5).
  • Scale Y: freier Maßstab, wenn der Wert negativ (-10) ist, wird das Objekt x 10 skaliert und in der Y-Achse umgekehrt. Um die Form zu reduzieren, geben Sie einen Dezimalwert ein (0,5).
  • Scale Z: freier Maßstab, wenn der Wert negativ (-10) ist, wird das Objekt x 10 skaliert und in der Z-Achse umgekehrt. Um die Form zu reduzieren, geben Sie einen Dezimalwert ein (0,5).
  • ValueAt (): Geben Sie dem valueAt () das ausgewählte Unterobjekt an Face, Wire, Line ...
    Diese Option ist nützlich, wenn zusammengesetzte Platzierungsinformationen [0, 0,0] und seine tatsächliche Position ist von den Basiskoordinaten 0,0,0 entfernt (gibt keine Informationen über die Drehung des Objekts an)
  • Ok: Die OK-Schaltfläche bestätigt und startet den Befehl. Wenn kein Objekt ausgewählt ist, wird die Ok -Schaltfläche rot gefärbt
  • Reset: Der Reset-Button setzt alle Werte auf Null
  • Quit: die Schaltfläche Quit beendet das Makro


Skript

Das Symbol Macro CloneConvert.png

Macro_CloneConvert.FCMacro

Laden Sie das Makro in herunter Gist Macro_CloneConvert.FCMacro

Revision

15/09/2019 ver 0.13 replace the grec sign micro to "um", replace all "_translate("MainWindow", "mm", None)" to "mm" and comment line "text.encode('utf-8')" cause not work with FC 0.19 18.213

01/06/2019 ver 0.12 = adapted for 0.19 et correction "Copy:legacy=True" and ShapeColor .....

30/03/2018 ver 0.11 = odd checkBox, if multi selection the clone are object unique or object separate

07/06/2017 ver 0.10 = replace Draft...Copy to Part..Shape cause section Copy : not draw copy scaled of object but copy not scaled ??

14/06/2016 ver 0.9 = adding the choice of number of copies and labels optimization

31/01/2016 ver 0.8 = modify the buttons reset section for two click for reset (in case modification the value)

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"