Macro Serie di copie

From FreeCAD Documentation
Revision as of 18:01, 24 December 2013 by FuzzyBot (talk | contribs) (Updating to match new version of source page)

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
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()