Macro ArrayCopy: Difference between revisions
Renatorivo (talk | contribs) (Marked this version for translation) |
Renatorivo (talk | contribs) (solved indentation error) |
||
Line 9: | Line 9: | ||
<syntaxhighlight> |
<syntaxhighlight> |
||
import FreeCAD, FreeCADGui, Part |
|||
from PyQt4 import QtGui,QtCore |
|||
def proceed(): |
|||
try: |
|||
u = (int(l1.text()),float(l2.text())) |
|||
v = (int(l3.text()),float(l4.text())) |
|||
except: |
|||
FreeCAD.Console.PrintError("Wrong input! Only numbers allowed...\n") |
|||
sel = FreeCADGui.Selection.getSelection() |
|||
if sel: |
|||
sel = sel[0] |
|||
name = sel.Name |
|||
shape = sel.Shape |
|||
for column in range(u[0]): |
|||
for row in range(v[0]): |
|||
if (column != 0) or (row != 0): |
|||
delta = FreeCAD.Vector(column*u[1],row*v[1],0) |
|||
newshape = sel.Shape.copy() |
|||
newshape.translate(delta) |
|||
newobject = FreeCAD.ActiveDocument.addObject("Part::Feature",name) |
|||
newobject.Shape = newshape |
|||
else: |
|||
FreeCAD.Console.PrintError("Error: One object must be selected") |
|||
hide() |
|||
def hide(): |
|||
dialog.hide() |
|||
dialog = QtGui.QDialog() |
|||
dialog.resize(200,300) |
|||
dialog.setWindowTitle("Array") |
|||
la = QtGui.QVBoxLayout(dialog) |
|||
t1 = QtGui.QLabel("number of columns") |
|||
la.addWidget(t1) |
|||
l1 = QtGui.QLineEdit() |
|||
la.addWidget(l1) |
|||
t2 = QtGui.QLabel("distance between columns") |
|||
la.addWidget(t2) |
|||
l2 = QtGui.QLineEdit() |
|||
la.addWidget(l2) |
|||
t3 = QtGui.QLabel("number of rows") |
|||
la.addWidget(t3) |
|||
l3 = QtGui.QLineEdit() |
|||
la.addWidget(l3) |
|||
t4 = QtGui.QLabel("distance between rows") |
|||
la.addWidget(t4) |
|||
l4 = QtGui.QLineEdit() |
|||
la.addWidget(l4) |
|||
okbox = QtGui.QDialogButtonBox(dialog) |
|||
okbox.setOrientation(QtCore.Qt.Horizontal) |
|||
okbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) |
|||
la.addWidget(okbox) |
|||
QtCore.QObject.connect(okbox, QtCore.SIGNAL("accepted()"), proceed) |
|||
QtCore.QObject.connect(okbox, QtCore.SIGNAL("rejected()"), hide) |
|||
QtCore.QMetaObject.connectSlotsByName(dialog) |
|||
dialog.show() |
|||
</syntaxhighlight> |
</syntaxhighlight> |
Revision as of 21:09, 4 May 2014
File:Text-x-python ArrayCopy |
Description |
---|
This macro copies the selected object several times, on an array grid Author: Yorik |
Author |
Yorik |
Download |
None |
Links |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
1.0 |
Date last modified |
None |
FreeCAD Version(s) |
None |
Default shortcut |
None |
See also |
None |
This macro copies the selected object several times, on an array grid. You can define the number of rows and columns and the distance between them. You need pyqt installed.
import FreeCAD, FreeCADGui, Part
from PyQt4 import QtGui,QtCore
def proceed():
try:
u = (int(l1.text()),float(l2.text()))
v = (int(l3.text()),float(l4.text()))
except:
FreeCAD.Console.PrintError("Wrong input! Only numbers allowed...\n")
sel = FreeCADGui.Selection.getSelection()
if sel:
sel = sel[0]
name = sel.Name
shape = sel.Shape
for column in range(u[0]):
for row in range(v[0]):
if (column != 0) or (row != 0):
delta = FreeCAD.Vector(column*u[1],row*v[1],0)
newshape = sel.Shape.copy()
newshape.translate(delta)
newobject = FreeCAD.ActiveDocument.addObject("Part::Feature",name)
newobject.Shape = newshape
else:
FreeCAD.Console.PrintError("Error: One object must be selected")
hide()
def hide():
dialog.hide()
dialog = QtGui.QDialog()
dialog.resize(200,300)
dialog.setWindowTitle("Array")
la = QtGui.QVBoxLayout(dialog)
t1 = QtGui.QLabel("number of columns")
la.addWidget(t1)
l1 = QtGui.QLineEdit()
la.addWidget(l1)
t2 = QtGui.QLabel("distance between columns")
la.addWidget(t2)
l2 = QtGui.QLineEdit()
la.addWidget(l2)
t3 = QtGui.QLabel("number of rows")
la.addWidget(t3)
l3 = QtGui.QLineEdit()
la.addWidget(l3)
t4 = QtGui.QLabel("distance between rows")
la.addWidget(t4)
l4 = QtGui.QLineEdit()
la.addWidget(l4)
okbox = QtGui.QDialogButtonBox(dialog)
okbox.setOrientation(QtCore.Qt.Horizontal)
okbox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
la.addWidget(okbox)
QtCore.QObject.connect(okbox, QtCore.SIGNAL("accepted()"), proceed)
QtCore.QObject.connect(okbox, QtCore.SIGNAL("rejected()"), hide)
QtCore.QMetaObject.connectSlotsByName(dialog)
dialog.show()