Macro Cabinets32: Difference between revisions

From FreeCAD Documentation
(Created page with "<translate> <!--T:1--> {{Macro|Icon=Text-x-python|Name=Cabinets32|Description=drill holes for System32 cabinets.|Author=Berner}} <!--T:8--> [[File:cabinetside.png|480px|cabin...")
 
No edit summary
Line 5: Line 5:
<!--T:8-->
<!--T:8-->
[[File:cabinetside.png|480px|cabinetside]]
[[File:cabinetside.png|480px|cabinetside]]
[[File:cabinettop.png|480px|cabinettop]]
{{clear}}
{{clear}}



Revision as of 06:35, 22 January 2015

File:Text-x-python Cabinets32

Description
drill holes for System32 cabinets.

Author: Berner
Author
Berner
Download
None
Links
Macro Version
1.0
Date last modified
None
FreeCAD Version(s)
None
Default shortcut
None
See also
None

cabinetside cabinettop

Description

This macro creates Top/Bottom and sidewalls for a cabinet with System32 specification. The defaults in the Macro are for parts of manufacturer Hettich.

Use

  • Launch the macro and change length, height and width of your cabinet-board.
  • The Gui ask to drill one or two-hole connectors.
  • You can drill the hole board with holes in 32 mm distance.
  • You can drill holes for top/bottom boards of your cabinet.


Script

Cabinets32.FCMacro

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#***************************************************************************
#*                                                                         *
#*   Copyright (c) 2015 Bruno Bueckmann reset12 at gmx.de                  *
#*                      http://home.bb-24.net                              *
#*   This program is free software; you can redistribute it and/or modify  *
#*   it under the terms of the GNU Lesser General Public License (LGPL)    *
#*   as published by the Free Software Foundation; either version 2 of     *
#*   the License, or (at your option) any later version.                   *
#*   for detail see the LICENCE text file.                                 *
#*                                                                         *
#*   This program is distributed in the hope that it will be useful,       *
#*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
#*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
#*   GNU Library General Public License for more details.                  *
#*                                                                         *
#*   You should have received a copy of the GNU Library General Public     *
#*   License along with this program; if not, write to the Free Software   *
#*   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  *
#*   USA                                                                   *
#*                                                                         *
#***************************************************************************


# Macro Begin: cabinets32.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++
# This Macro generates holes and a groove for the side Base cabinet
# Top and Bottom Wall are OUTSIDE the side base
# like :
# -------
# |     |
# |     |
# -------

import FreeCAD
import Part
# GUI
debug="n"  #debugging on
guiok="y"  # flag for abort input
from PySide import QtGui
(width, ok) = QtGui.QInputDialog.getDouble( 
      QtGui.QWidget(), 'Thickness', 'Thickness of cabinet-side', 19, 0, 50, 2)
if ok:
  (length, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Depth', 'Depth of cabinet-side', 600, 0, 2000, 2)
else:
 guiok="n"
if (ok) and (guiok == "y"):
  (height, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Height', 'Height of cabinet-side', 2000, 0, 3000, 2)
else:
 guiok="n"
if (ok) and (guiok == "y"):
  (bradius, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Bradius', 'Radius of drill holes in cabinet-side', 2.5, 0, 50, 2)
else:
 guiok="n"
if ok:
  (bdeep, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Bdeep', 'Deepness of drill holes in cabinet-side', 12, 0, 50, 2)
else:
 guiok="n"
if ok:
  (fdist, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Fdist', 'Distance to Front of cabinet-side', 37, 0, 50, 2)
else:
 guiok="n"
if ok:
  (hole1, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Hole1', 'Distance first hole from top or bottom of cabinet-side', 10, 0, 50, 2)
else:
 guiok="n"
if ok:
  (holedistance, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Holedistance', 'Distance from hole to hole (System 32)', 32, 1, 50, 2)
else:
 guiok="n"
if ok:
  (groovethickness, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Groovethickness', 'Thickness of backpanel', 3, 1, 50, 2)
else:
 guiok="n"
if ok:
  (groovedeep, ok) = QtGui.QInputDialog.getDouble(
	QtGui.QWidget(), 'Groovedeep', 'Overlapping of backpanel in cabinet-side', 12, 1, 50, 2)
else:
 guiok="n"
if guiok=="y":
 # VB 35 / 18 or VB 36 M /19 from Hettich
 (connector, ok)  = QtGui.QInputDialog.getInt(
	QtGui.QWidget(), 'Connectortype', 'Zerohole(0) Singlehole(1) or Doublehole(2) Connector', 2, 0, 2, 1) 
if ok:
 fillwithholes = QtGui.QInputDialog.getText(None, "Fillwithholes", "Fill Board with holes y/n")[0]
else:
 guiok="n"
endhole = 9.5
if guiok=="y":
 endholes = QtGui.QInputDialog.getText(None, "Endholes", "Drill Holes on Top/Bottom vertikal for Connectors y/n")[0]
if guiok=="y" and endholes == 'y':
  (endhole, ok) = QtGui.QInputDialog.getDouble(
		QtGui.QWidget(), 'Endhole', 'Endhole distance from inner cabinet-side', 9.5, 1, 50, 2)
if debug == 'y':
  FreeCAD.Console.PrintMessage("width="+str(width) + " " + str(ok) + "\n" )
  FreeCAD.Console.PrintMessage("length="+str(length) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("bradius="+str(bradius) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("bdeep="+str(bdeep) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("fdist="+str(fdist) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("hole1="+str(hole1) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("holedistance="+str(holedistance) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("groovethickness="+str(groovethickness) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("groovedeep="+str(groovedeep) + " " + str(ok) + "\n")
  FreeCAD.Console.PrintMessage("connector="+str(connector) + " " + "\n")
  FreeCAD.Console.PrintMessage("fillwithholes="+str(fillwithholes) + " " + "\n")
  FreeCAD.Console.PrintMessage("endholes="+str(endholes) + " " + "\n")
  FreeCAD.Console.PrintMessage("endhole="+str(endhole) + " " + "\n")
  FreeCAD.Console.PrintMessage("guiok="+str(guiok) + " " + "\n")
#End GUI
if guiok == "y":
 #width= 19	# thickness of korpus
 #length= 600	# width of korpus
 #height= 2000	# height of korpus
 #
 #bradius = 2.5  	# Radius drill hole
 #bdeep = 12     	# deepness of drill hole 
 #fdist = 37    	# Distance to Front
 #hole1 = 9.5	# Distance first hole from top or bottom of korpus
 #holedistance = 32  # System 32
 #groovethickness = 3 # 3 mm backpanel
 #groovedeep = width-8 # deep of groovedeep
 if int(width) > 16:
  # first hole depend on specs for VB36 M / 19  for 19 mm boards von Hettich
  holetop = 9.5  # holedistance for screw of vb36
  hole1 = 9.5 + 0.5 # distance hole 1 from end of board
  hole1r = 10 # radius first hole
  hole1d = 14 # deepness first hole
  hole2r = 5 # radius 2. hole
  hole2d = 10.5 # deepness 2. hole
 else: 
 # first hole depend on specs for VB36 M / 16  for 16 mm boards von Hettich
  holetop = 9.5  # holedistance for screw of vb36
  hole1 = 9.5 + 0.5 # distance hole 1 from end of board
  hole1r = 10 # radius first hole
  hole1d = 12.5 # deepness first hole
  hole2r = 5 # radius 2. hole
  hole2d = 10.5 # deepness 2. hole
 if debug == 'y':
  FreeCAD.Console.PrintMessage("hole1d="+str(hole1d) + " " + str(ok) + "\n" )
 # functions
 def cut( tool ):
  global cutsnr,cuts 
  # cuts objects defined in string cuts
  if debug == 'y':
   FreeCAD.Console.PrintMessage("cuts=" + str(cuts) + " cutsnr=" + str(cutsnr) + "\n")
  data='App.activeDocument().addObject("Part::Cut","' + str(cuts.split(" ")[cutsnr + 1]) + '")'
  if debug == 'y':
   FreeCAD.Console.PrintMessage(str(data)  + "\n")
  exec(data)
  data="App.activeDocument()." + str(cuts.split(" ")[cutsnr + 1]) 
  data=data + ".Base = App.activeDocument()."+ str(cuts.split(" ")[cutsnr])
  if debug == 'y':
   FreeCAD.Console.PrintMessage(str(data)  + "\n")
  exec(data)
  data="App.activeDocument()." + str(cuts.split(" ")[cutsnr + 1]) 
  data=data + ".Tool = App.activeDocument()." + str(tool)
  if debug == 'y':
   FreeCAD.Console.PrintMessage(str(data)  + "\n")
  exec(data)
  cutsnr=cutsnr + 1
  cuts=cuts + " Cut%03d" % cutsnr
  return 0;
 # end functions
 # Korpus
 App.ActiveDocument.addObject("Part::Box","Box")
 App.ActiveDocument.ActiveObject.Label = "Cube"
 App.ActiveDocument.ActiveObject.Length = length
 App.ActiveDocument.ActiveObject.Width = width
 App.ActiveDocument.ActiveObject.Height = height
 Gui.ActiveDocument.Box.DiffuseColor= (0.67,0.67,0.00) #Change Color of Object
 App.ActiveDocument.recompute()
 # Groove
 App.ActiveDocument.addObject("Part::Box","Groove")
 App.ActiveDocument.ActiveObject.Label = "Groove"
 App.ActiveDocument.ActiveObject.Length = groovethickness 
 App.ActiveDocument.ActiveObject.Width = groovedeep
 App.ActiveDocument.ActiveObject.Height = height - (2 * groovedeep)
 Gui.ActiveDocument.Box.DiffuseColor= (0.67,0.67,0.00) #Change Color of Object
 App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(
                                              length-groovethickness,0,groovedeep), 
                                              App.Rotation(App.Vector(0,0,0),0), App.Vector(0,0,0))
 App.ActiveDocument.recompute()

 # make endholes
 cylinders=""  # labels of cylinders to cut
 if endholes == 'y':
  # Bottom holes
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderendl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderendl001"
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderendl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,bdeep,holetop),
                                                          App.Rotation(App.Vector(1,0,0),90), 
                                                          App.Vector(0,0,0))
  App.ActiveDocument.recompute()
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderendr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderendr001"
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderendr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,bdeep,holetop),
                                             App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0))
  App.ActiveDocument.recompute()
 # Top holes
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderendl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderendl002"
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderendl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,bdeep,(height-holetop)),
                                             App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0))
  App.ActiveDocument.recompute()
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderendr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderendr002"
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderendr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,bdeep,(height-holetop)),
                                             App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0))
  App.ActiveDocument.recompute()
 #
 if fillwithholes == 'n':
  n=0
 else:
  n=int(height/2/holedistance)
 # drill holes from bottom to half height
 # reduce holes for test to 2 alternative use n
 # Holes for Hettich VB36
 # Bohrloecher
 x = -1 # init value
 if connector >= 1:
  x=0
  FreeCAD.Console.PrintMessage("x="+str(x) + " " + "\n")
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole1r
  App.ActiveDocument.ActiveObject.Height = hole1d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,hole1d,hole1+x*holedistance),
                                             App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0))
  App.ActiveDocument.recompute() 

  App.ActiveDocument.addObject("Part::Cylinder","Cylinderr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole1r
  App.ActiveDocument.ActiveObject.Height = hole1d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,hole1d,hole1+
                                              x*holedistance), App.Rotation(App.Vector(1,0,0),90),
                                               App.Vector(0,0,0))
 if connector == 2:
  x=1
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole2r
  App.ActiveDocument.ActiveObject.Height = hole2d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,hole2d,hole1+
                                             x*holedistance), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute()

  App.ActiveDocument.addObject("Part::Cylinder","Cylinderr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole2r
  App.ActiveDocument.ActiveObject.Height = hole2d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,hole2d,hole1+
                                             x*holedistance), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute() 
 xs = x + 1
 for x in range(xs, n):
  # Bohrloecher
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,bdeep,hole1+x*holedistance),
                                             App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0))
  App.ActiveDocument.recompute()

  App.ActiveDocument.addObject("Part::Cylinder","Cylinderr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,bdeep,hole1+
                                             x*holedistance), App.Rotation(App.Vector(1,0,0),90), 
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute() 

 # drill holes from Top to half height
 # # Holes for Hettich VB36
 x = -1 # init value
 if connector >= 1:
  x=0
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole1r
  App.ActiveDocument.ActiveObject.Height = hole1d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,hole1d,(height-hole1)-
                                             (x*holedistance)), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute()

  App.ActiveDocument.addObject("Part::Cylinder","Cylinderr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole1r
  App.ActiveDocument.ActiveObject.Height = hole1d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,hole1d,
                                             (height-hole1)-(x*holedistance)), 
                                              App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0))
  App.ActiveDocument.recompute() 
 if connector == 2:
  x=1
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole2r
  App.ActiveDocument.ActiveObject.Height = hole2d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,hole2d,(height-hole1)-
                                             (x*holedistance)), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute()

  App.ActiveDocument.addObject("Part::Cylinder","Cylinderr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x
  App.ActiveDocument.ActiveObject.Radius = hole2r
  App.ActiveDocument.ActiveObject.Height = hole2d
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,hole2d,(height-hole1)-
                                             (x*holedistance)), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute()
 xs = x + 1
 for x in range(xs, n):
  # Drillholes
  App.ActiveDocument.addObject("Part::Cylinder","Cylinderl")
  App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,bdeep,(height-hole1)-
                                             (x*holedistance)), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute()

  App.ActiveDocument.addObject("Part::Cylinder","Cylinderr")
  App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x
  App.ActiveDocument.ActiveObject.Radius = bradius
  App.ActiveDocument.ActiveObject.Height = bdeep
  App.ActiveDocument.ActiveObject.Angle = 360
  cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name
  Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object
  App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,bdeep,(height-hole1)-
                                             (x*holedistance)), App.Rotation(App.Vector(1,0,0),90),
                                              App.Vector(0,0,0))
  App.ActiveDocument.recompute()
 if debug == 'y':
  FreeCAD.Console.PrintMessage("cylinders=")
  FreeCAD.Console.PrintMessage(cylinders  + "\n")
 # cut all holes
 cuts="Box Cut"  # cut labels
 cutsnr=0     	# index number in cuts
 # cut groove
 cut("Groove");
 cyls = cylinders.split()  # number of words
 if debug == 'y':
  FreeCAD.Console.PrintMessage("n=" + str(cyls)  + "\n")
 for x in cyls:
  if debug == "y":
    FreeCAD.Console.PrintMessage("cylinder(" + x + ")=" + str(x)  + "\n")
  cut(str(x));
 App.ActiveDocument.recompute()

# OS: Ubuntu 14.04.1 LTS
# Word size of OS: 32-bit
# Word size of FreeCAD: 32-bit
# Version: 0.15.4410 (Git)
# Branch: master
# Hash: 9ee08a97ea81304e2690694f76ee2dc013556a5d
# Python version: 2.7.6
# Qt version: 4.8.6
# Coin version: 4.0.0a

Links

Other languages: