Macro Cabinets32: Difference between revisions
(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 |
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 |
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
- Macro_PartsLibrary FreeCAD Library