Macro Cabinets32

From FreeCAD Documentation
Revision as of 06:35, 22 January 2015 by Berner (talk | contribs)
Jump to navigation Jump to search

32px Cabinets32

Description
drill holes for System32 cabinets.

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:
English • ‎français • ‎italiano