Macros recipes

From FreeCAD Documentation
Revision as of 21:41, 24 July 2010 by Yorik (talk | contribs) (Created page with '=== Array copy === 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. impor…')
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Array copy

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.

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