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...") |
(Icon) |
||
(14 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
|||
<translate> |
<translate> |
||
<!--T:1--> |
<!--T:1--> |
||
{{Macro |
|||
{{Macro|Icon=Text-x-python|Name=Cabinets32|Description=drill holes for System32 cabinets.|Author=Berner}} |
|||
|Name=Cabinets32 |
|||
|Icon=Macro_Cabinets32.png |
|||
<!--T:8--> |
|||
|Description=This macro creates Top/Bottom and sidewalls for a cabinet with System32 specification. |
|||
[[File:cabinetside.png|480px|cabinetside]] |
|||
The defaults in the Macro are for parts of manufacturer Hettich. |
|||
{{clear}} |
|||
|Author=Berner |
|||
|Version=1.0 |
|||
|Date=2015-01-22 |
|||
|FCVersion=All |
|||
|Download=[https://www.freecadweb.org/wiki/images/6/64/Macro_Cabinets32.png TollBar Icon] |
|||
}} |
|||
==Description== <!--T:2--> |
|||
<!--T:3--> |
<!--T:3--> |
||
Line 13: | Line 20: | ||
The defaults in the Macro are for parts of manufacturer Hettich. |
The defaults in the Macro are for parts of manufacturer Hettich. |
||
<!--T:8--> |
|||
[[File:cabinetside.png|480px]] |
|||
{{Caption|cabinetside}} |
|||
<!--T:9--> |
|||
[[File:cabinettop.png|480px]] |
|||
{{Caption|cabinettop}} |
|||
==Use== <!--T:4--> |
|||
<!--T:5--> |
<!--T:5--> |
||
Line 22: | Line 37: | ||
==Script== <!--T:6--> |
|||
</translate> |
</translate> |
||
Cabinets32.FCMacro |
|||
TollBar Icon [[Image:Macro_Cabinets32.png]] |
|||
<syntaxhighlight> |
|||
'''Cabinets32.FCMacro''' |
|||
<pre> |
|||
#!/usr/bin/env python |
#!/usr/bin/env python |
||
# -*- coding: utf-8 -*- |
# -*- coding: utf-8 -*- |
||
#*************************************************************************** |
# *************************************************************************** |
||
#* * |
# * * |
||
#* Copyright (c) 2015 Bruno Bueckmann reset12 at gmx.de * |
# * Copyright (c) 2015 Bruno Bueckmann reset12 at gmx.de * |
||
#* http://home.bb-24.net * |
# * http://home.bb-24.net * |
||
#* This program is free software; you can redistribute it and/or modify * |
# * This program is free software; you can redistribute it and/or modify * |
||
#* it under the terms of the GNU Lesser General Public License (LGPL) * |
# * it under the terms of the GNU Lesser General Public License (LGPL) * |
||
#* as published by the Free Software Foundation; either version 2 of * |
# * as published by the Free Software Foundation; either version 2 of * |
||
#* the License, or (at your option) any later version. * |
# * the License, or (at your option) any later version. * |
||
#* for detail see the LICENCE text file. * |
# * for detail see the LICENCE text file. * |
||
#* * |
# * * |
||
#* This program is distributed in the hope that it will be useful, * |
# * This program is distributed in the hope that it will be useful, * |
||
#* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
# * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
||
#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
||
#* GNU Library General Public License for more details. * |
# * GNU Library General Public License for more details. * |
||
#* * |
# * * |
||
#* You should have received a copy of the GNU Library General Public * |
# * You should have received a copy of the GNU Library General Public * |
||
#* License along with this program; if not, write to the Free Software * |
# * License along with this program; if not, write to the Free Software * |
||
#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * |
# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * |
||
#* USA * |
# * USA * |
||
#* * |
# * * |
||
#*************************************************************************** |
# *************************************************************************** |
||
# Macro Begin: cabinets32.FCMacro |
# Macro Begin: cabinets32.FCMacro ++++++++++++++++++++++++++++++++++++++++++++++ |
||
# This Macro generates holes and a groove for the side Base cabinet |
# This Macro generates holes and a groove for the side Base cabinet |
||
# Top and Bottom Wall are OUTSIDE the side base |
# Top and Bottom Wall are OUTSIDE the side base |
||
Line 60: | Line 78: | ||
# ------- |
# ------- |
||
import |
from __future__ import division |
||
import Part |
|||
import FreeCAD as App |
|||
# GUI |
|||
import FreeCADGui as Gui |
|||
debug="n" #debugging on |
|||
guiok="y" # flag for abort input |
|||
from PySide import QtGui |
from PySide import QtGui |
||
(width, ok) = QtGui.QInputDialog.getDouble( |
|||
# GUI |
|||
QtGui.QWidget(), 'Thickness', 'Thickness of cabinet-side', 19, 0, 50, 2) |
|||
debug = False # debugging on |
|||
guiok = True # flag for abort input |
|||
width, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Thickness', 'Thickness of cabinet-side', 19, 0, 50, 2) |
|||
if ok: |
if ok: |
||
length, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Depth', 'Depth of cabinet-side', 600, 0, 2000, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if (ok) and (guiok == "y"): |
|||
if ok and guiok: |
|||
(height, ok) = QtGui.QInputDialog.getDouble( |
|||
height, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Height', 'Height of cabinet-side', 2000, 0, 3000, 2) |
|||
QtGui.QWidget(), 'Height', 'Height of cabinet-side', 2000, 0, 3000, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if (ok) and (guiok == "y"): |
|||
if ok and guiok: |
|||
(bradius, ok) = QtGui.QInputDialog.getDouble( |
|||
bradius, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Bradius', 'Radius of drill holes in cabinet-side', 2.5, 0, 50, 2) |
|||
QtGui.QWidget(), 'Bradius', 'Radius of drill holes in cabinet-side', |
|||
2.5, 0, 50, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if ok: |
if ok: |
||
bdeep, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Bdeep', 'Depth of drill holes in cabinet-side', |
|||
12, 0, 50, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if ok: |
if ok: |
||
fdist, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Fdist', 'Distance to Front of cabinet-side', |
|||
37, 0, 50, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if ok: |
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: |
else: |
||
guiok = False |
|||
if ok: |
if ok: |
||
holedistance, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Holedistance', |
|||
QtGui.QWidget(), 'Holedistance', 'Distance from hole to hole (System 32)', 32, 1, 50, 2) |
|||
'Distance from hole to hole (System 32)', 32, 1, 50, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if ok: |
if ok: |
||
groovethickness, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Groovethickness', 'Thickness of backpanel', |
|||
3, 1, 50, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if ok: |
if ok: |
||
groovedeep, ok = QtGui.QInputDialog.getDouble( |
|||
QtGui.QWidget(), 'Groovedeep', |
|||
'Overlapping of backpanel in cabinet-side', 12, 1, 50, 2) |
|||
else: |
else: |
||
guiok = False |
|||
if guiok=="y": |
|||
if guiok: |
|||
# VB 35 / 18 or VB 36 M /19 from Hettich |
|||
# VB 35 / 18 or VB 36 M /19 from Hettich |
|||
(connector, ok) = QtGui.QInputDialog.getInt( |
|||
connector, ok = QtGui.QInputDialog.getInt( |
|||
QtGui.QWidget(), 'Connectortype', 'Zerohole(0) Singlehole(1) or Doublehole(2) Connector', 2, 0, 2, 1) |
|||
QtGui.QWidget(), 'Connectortype', |
|||
'Zerohole(0) Singlehole(1) or Doublehole(2) Connector', 2, 0, 2, 1) |
|||
if ok: |
if ok: |
||
fillwithholes, ok = QtGui.QInputDialog.getItem(None, |
|||
"Fillwithholes", |
|||
"Fill Board with holes?", |
|||
["no", "yes"], |
|||
editable=False) |
|||
else: |
else: |
||
guiok = False |
|||
endhole = 9.5 |
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() |
|||
if ok and guiok: |
|||
# make endholes |
|||
endholes, ok = QtGui.QInputDialog.getItem(None, |
|||
cylinders="" # labels of cylinders to cut |
|||
"Endholes", |
|||
if endholes == 'y': |
|||
"Drill Holes on Top/Bottom vertical for Connectors", |
|||
# Bottom holes |
|||
['no', 'yes'], |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderendl") |
|||
editable=False) |
|||
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() |
|||
if ok and guiok and endholes == 'yes': |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderr") |
|||
endhole, ok = QtGui.QInputDialog.getDouble( |
|||
App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x |
|||
QtGui.QWidget(), 'Endhole', |
|||
App.ActiveDocument.ActiveObject.Radius = hole1r |
|||
'Endhole distance from inner cabinet-side', 9.5, 1, 50, 2) |
|||
App.ActiveDocument.ActiveObject.Height = hole1d |
|||
if debug: |
|||
App.ActiveDocument.ActiveObject.Angle = 360 |
|||
App.Console.PrintMessage("ok?: {}\n".format(ok)) |
|||
cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name |
|||
App.Console.PrintMessage("width = {}\n".format(width)) |
|||
Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object |
|||
App.Console.PrintMessage("length = {}\n".format(length)) |
|||
App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,hole1d,hole1+ |
|||
App.Console.PrintMessage("bradius = {}\n".format(bradius)) |
|||
x*holedistance), App.Rotation(App.Vector(1,0,0),90), |
|||
App.Console.PrintMessage("bdeep = {}\n".format(bdeep)) |
|||
App.Vector(0,0,0)) |
|||
App.Console.PrintMessage("fdist = {}\n".format(fdist)) |
|||
if connector == 2: |
|||
App.Console.PrintMessage("hole1 = {}\n".format(hole1)) |
|||
x=1 |
|||
App.Console.PrintMessage("holedistance = {}\n".format(holedistance)) |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderl") |
|||
App.Console.PrintMessage("groovethickness = {}\n".format(groovethickness)) |
|||
App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x |
|||
App.Console.PrintMessage("groovedeep = {}\n".format(groovedeep)) |
|||
App.ActiveDocument.ActiveObject.Radius = hole2r |
|||
App.Console.PrintMessage("connector = {}\n".format(connector)) |
|||
App.ActiveDocument.ActiveObject.Height = hole2d |
|||
App.Console.PrintMessage("fillwithholes = {}\n".format(fillwithholes)) |
|||
App.ActiveDocument.ActiveObject.Angle = 360 |
|||
App.Console.PrintMessage("endholes = {}\n".format(endholes)) |
|||
cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name |
|||
App.Console.PrintMessage("endhole = {}\n".format(endhole)) |
|||
Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object |
|||
App.Console.PrintMessage("guiok = {}\n".format(guiok)) |
|||
App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,hole2d,hole1+ |
|||
# End GUI |
|||
x*holedistance), App.Rotation(App.Vector(1,0,0),90), |
|||
App.Vector(0,0,0)) |
|||
App.ActiveDocument.recompute() |
|||
if guiok: |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderr") |
|||
# width= 19 # thickness of korpus |
|||
App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x |
|||
# length= 600 # width of korpus |
|||
App.ActiveDocument.ActiveObject.Radius = hole2r |
|||
# height= 2000 # height of korpus |
|||
App.ActiveDocument.ActiveObject.Height = hole2d |
|||
# |
|||
App.ActiveDocument.ActiveObject.Angle = 360 |
|||
# bradius = 2.5 # Radius drill hole |
|||
cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name |
|||
# bdeep = 12 # deepness of drill hole |
|||
Gui.ActiveDocument.Cylinderr.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object |
|||
# fdist = 37 # Distance to Front |
|||
App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,hole2d,hole1+ |
|||
# hole1 = 9.5 # Distance first hole from top or bottom of korpus |
|||
x*holedistance), App.Rotation(App.Vector(1,0,0),90), |
|||
# holedistance = 32 # System 32 |
|||
App.Vector(0,0,0)) |
|||
# groovethickness = 3 # 3 mm backpanel |
|||
App.ActiveDocument.recompute() |
|||
# groovedeep = width-8 # deep of groovedeep |
|||
xs = x + 1 |
|||
if int(width) > 16: |
|||
for x in range(xs, n): |
|||
# First hole depends on specs for VB36 M / 19 for 19 mm boards from |
|||
# Bohrloecher |
|||
# Hettich. |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderl") |
|||
holetop = 9.5 # holedistance for screw of vb36 |
|||
App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x |
|||
hole1 = 9.5 + 0.5 # distance hole 1 from end of board |
|||
App.ActiveDocument.ActiveObject.Radius = bradius |
|||
hole1r = 10 # radius first hole |
|||
App.ActiveDocument.ActiveObject.Height = bdeep |
|||
hole1d = 14 # deepness first hole |
|||
App.ActiveDocument.ActiveObject.Angle = 360 |
|||
hole2r = 5 # radius 2. hole |
|||
cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name |
|||
hole2d = 10.5 # deepness 2. hole |
|||
Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object |
|||
else: |
|||
App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,bdeep,hole1+x*holedistance), |
|||
# First hole depends on specs for VB36 M / 16 for 16 mm boards from |
|||
App.Rotation(App.Vector(1,0,0),90), App.Vector(0,0,0)) |
|||
# Hettich. |
|||
App.ActiveDocument.recompute() |
|||
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: |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderr") |
|||
App.Console.PrintMessage("hole1d = {}\n".format(hole1d)) |
|||
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() |
|||
# functions |
|||
# drill holes from Top to half height |
|||
def cut(tool): |
|||
# # Holes for Hettich VB36 |
|||
global cutsnr |
|||
x = -1 # init value |
|||
global cuts |
|||
if connector >= 1: |
|||
# cuts objects defined in string cuts |
|||
x=0 |
|||
if debug: |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderl") |
|||
App.Console.PrintMessage("cuts = {}, cutsnr = {}\n".format( |
|||
App.ActiveDocument.ActiveObject.Label = "Cylinderl%03d" % x |
|||
cuts, cutsnr)) |
|||
App.ActiveDocument.ActiveObject.Radius = hole1r |
|||
data = 'App.activeDocument().addObject("Part::Cut","' + str(cuts.split(" ")[cutsnr + 1]) + '")' |
|||
App.ActiveDocument.ActiveObject.Height = hole1d |
|||
if debug: |
|||
App.ActiveDocument.ActiveObject.Angle = 360 |
|||
App.Console.PrintMessage(str(data) + "\n") |
|||
cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name |
|||
exec(data) |
|||
Gui.ActiveDocument.Cylinderl.DiffuseColor= (0.00,0.00,0.00) #Change Color of Object |
|||
data = "App.activeDocument()." + str(cuts.split(" ")[cutsnr + 1]) |
|||
App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(fdist,hole1d,(height-hole1)- |
|||
data = data + ".Base = App.activeDocument()." + str(cuts.split(" ")[cutsnr]) |
|||
(x*holedistance)), App.Rotation(App.Vector(1,0,0),90), |
|||
if debug: |
|||
App.Vector(0,0,0)) |
|||
App.Console.PrintMessage(str(data) + "\n") |
|||
App.ActiveDocument.recompute() |
|||
exec(data) |
|||
data = "App.activeDocument()." + str(cuts.split(" ")[cutsnr + 1]) |
|||
data = data + ".Tool = App.activeDocument()." + str(tool) |
|||
if debug: |
|||
App.Console.PrintMessage(str(data) + "\n") |
|||
exec(data) |
|||
cutsnr = cutsnr + 1 |
|||
cuts = cuts + " Cut%03d" % cutsnr |
|||
return 0 |
|||
# end functions |
|||
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() |
|||
doc = App.activeDocument() |
|||
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() |
|||
# Korpus |
|||
App.ActiveDocument.addObject("Part::Cylinder","Cylinderr") |
|||
box = doc.addObject("Part::Box", "Box") |
|||
App.ActiveDocument.ActiveObject.Label = "Cylinderr%03d" % x |
|||
box.Label = "Cube" |
|||
App.ActiveDocument.ActiveObject.Radius = bradius |
|||
box.Length = length |
|||
App.ActiveDocument.ActiveObject.Height = bdeep |
|||
box.Width = width |
|||
App.ActiveDocument.ActiveObject.Angle = 360 |
|||
box.Height = height |
|||
cylinders=cylinders + " " + App.ActiveDocument.ActiveObject.Name |
|||
# Change Color of Object. |
|||
box.ViewObject.DiffuseColor = (0.67, 0.67, 0.0) |
|||
App.ActiveDocument.ActiveObject.Placement=App.Placement(App.Vector(length-fdist,bdeep,(height-hole1)- |
|||
if debug: |
|||
(x*holedistance)), App.Rotation(App.Vector(1,0,0),90), |
|||
doc.recompute() |
|||
App.Vector(0,0,0)) |
|||
# Groove |
|||
App.ActiveDocument.recompute() |
|||
groove = doc.addObject("Part::Box", "Groove") |
|||
if debug == 'y': |
|||
groove.Label = "Groove" |
|||
FreeCAD.Console.PrintMessage("cylinders=") |
|||
groove.Length = groovethickness |
|||
FreeCAD.Console.PrintMessage(cylinders + "\n") |
|||
groove.Width = groovedeep |
|||
# cut all holes |
|||
groove.Height = height - (2 * groovedeep) |
|||
cuts="Box Cut" # cut labels |
|||
groove.ViewObject.DiffuseColor = (0.67, 0.67, 0.0) |
|||
cutsnr=0 # index number in cuts |
|||
groove.Placement = App.Placement( |
|||
# cut groove |
|||
App.Vector(length - groovethickness, 0, groovedeep), |
|||
cut("Groove"); |
|||
App.Rotation()) |
|||
cyls = cylinders.split() # number of words |
|||
if debug: |
|||
if debug == 'y': |
|||
doc.recompute() |
|||
FreeCAD.Console.PrintMessage("n=" + str(cyls) + "\n") |
|||
for x in cyls: |
|||
# make endholes |
|||
if debug == "y": |
|||
cylinders = "" # labels of cylinders to cut |
|||
FreeCAD.Console.PrintMessage("cylinder(" + x + ")=" + str(x) + "\n") |
|||
if endholes == 'y': |
|||
cut(str(x)); |
|||
# Bottom holes |
|||
App.ActiveDocument.recompute() |
|||
cylendl = doc.addObject("Part::Cylinder", "Cylinderendl") |
|||
cylendl.Label = "Cylinderendl001" |
|||
cylendl.Radius = bradius |
|||
cylendl.Height = bdeep |
|||
cylendl.Angle = 360 |
|||
cylinders = cylinders + " " + cylendl.Name |
|||
cylendl.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
doc.ActiveObject.Placement = App.Placement( |
|||
App.Vector(fdist, bdeep, holetop), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylendr = doc.addObject("Part::Cylinder", "Cylinderendr") |
|||
cylendr.Label = "Cylinderendr001" |
|||
cylendr.Radius = bradius |
|||
cylendr.Height = bdeep |
|||
cylendr.Angle = 360 |
|||
cylinders = cylinders + " " + cylendr.Name |
|||
cylendr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylendr.Placement = App.Placement( |
|||
App.Vector(length - fdist, bdeep, holetop), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
# Top holes |
|||
cylendl = doc.addObject("Part::Cylinder", "Cylinderendl") |
|||
cylendl.Label = "Cylinderendl002" |
|||
cylendl.Radius = bradius |
|||
cylendl.Height = bdeep |
|||
cylendl.Angle = 360 |
|||
cylinders = cylinders + " " + cylendl.Name |
|||
cylendl.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylendl.Placement = App.Placement( |
|||
App.Vector(fdist, bdeep, height - holetop), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylendr = doc.addObject("Part::Cylinder", "Cylinderendr") |
|||
cylendr.Label = "Cylinderendr002" |
|||
cylendr.Radius = bradius |
|||
cylendr.Height = bdeep |
|||
cylendr.Angle = 360 |
|||
cylinders = cylinders + " " + cylendr.Name |
|||
cylendr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylendr.Placement = App.Placement( |
|||
App.Vector(length - fdist, bdeep, height-holetop), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
if fillwithholes == 'no': |
|||
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 |
|||
App.Console.PrintMessage("x="+str(x) + " " + "\n") |
|||
cyll = doc.addObject("Part::Cylinder", "Cylinderl") |
|||
cyll.Label = "Cylinderl%03d" % x |
|||
cyll.Radius = hole1r |
|||
cyll.Height = hole1d |
|||
cyll.Angle = 360 |
|||
cylinders = cylinders + " " + cyll.Name |
|||
cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cyll.Placement = App.Placement( |
|||
App.Vector(fdist, hole1d, hole1 + x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylr = doc.addObject("Part::Cylinder", "Cylinderr") |
|||
cylr.Label = "Cylinderr%03d" % x |
|||
cylr.Radius = hole1r |
|||
cylr.Height = hole1d |
|||
cylr.Angle = 360 |
|||
cylinders = cylinders + " " + cylr.Name |
|||
cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylr.Placement = App.Placement( |
|||
App.Vector(length - fdist, hole1d, hole1 + x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if connector == 2: |
|||
x = 1 |
|||
cyll = doc.addObject("Part::Cylinder", "Cylinderl") |
|||
cyll.Label = "Cylinderl%03d" % x |
|||
cyll.Radius = hole2r |
|||
cyll.Height = hole2d |
|||
cyll.Angle = 360 |
|||
cylinders = cylinders + " " + cyll.Name |
|||
cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cyll.Placement = App.Placement( |
|||
App.Vector(fdist, hole2d, hole1 + x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylr = doc.addObject("Part::Cylinder", "Cylinderr") |
|||
cylr.Label = "Cylinderr%03d" % x |
|||
cylr.Radius = hole2r |
|||
cylr.Height = hole2d |
|||
cylr.Angle = 360 |
|||
cylinders = cylinders + " " + cylr.Name |
|||
cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylr.Placement = App.Placement( |
|||
App.Vector(length - fdist, hole2d, hole1 + x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
xs = x + 1 |
|||
for x in range(xs, n): |
|||
# Bohrloecher |
|||
cyll = doc.addObject("Part::Cylinder", "Cylinderl") |
|||
cyll.Label = "Cylinderl%03d" % x |
|||
cyll.Radius = bradius |
|||
cyll.Height = bdeep |
|||
cyll.Angle = 360 |
|||
cylinders = cylinders + " " + cyll.Name |
|||
cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cyll.Placement = App.Placement( |
|||
App.Vector(fdist, bdeep, hole1 + x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylr = doc.addObject("Part::Cylinder", "Cylinderr") |
|||
cylr.Label = "Cylinderr%03d" % x |
|||
cylr.Radius = bradius |
|||
cylr.Height = bdeep |
|||
cylr.Angle = 360 |
|||
cylinders = cylinders + " " + cylr.Name |
|||
cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylr.Placement = App.Placement( |
|||
App.Vector(length - fdist, bdeep, hole1 + x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
# drill holes from Top to half height |
|||
# # Holes for Hettich VB36 |
|||
x = -1 # init value |
|||
if connector >= 1: |
|||
x = 0 |
|||
cyll = doc.addObject("Part::Cylinder", "Cylinderl") |
|||
cyll.Label = "Cylinderl%03d" % x |
|||
cyll.Radius = hole1r |
|||
cyll.Height = hole1d |
|||
cyll.Angle = 360 |
|||
cylinders = cylinders + " " + cyll.Name |
|||
cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cyll.Placement = App.Placement( |
|||
App.Vector(fdist, hole1d, height - hole1 - x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylr = doc.addObject("Part::Cylinder", "Cylinderr") |
|||
cylr.Label = "Cylinderr%03d" % x |
|||
cylr.Radius = hole1r |
|||
cylr.Height = hole1d |
|||
cylr.Angle = 360 |
|||
cylinders = cylinders + " " + cylr.Name |
|||
cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylr.Placement = App.Placement( |
|||
App.Vector(length - fdist, hole1d, height-hole1 - x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
if connector == 2: |
|||
x = 1 |
|||
cyll = doc.addObject("Part::Cylinder", "Cylinderl") |
|||
cyll.Label = "Cylinderl%03d" % x |
|||
cyll.Radius = hole2r |
|||
cyll.Height = hole2d |
|||
cyll.Angle = 360 |
|||
cylinders = cylinders + " " + cyll.Name |
|||
cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cyll.Placement = App.Placement( |
|||
App.Vector(fdist, hole2d, height - hole1 - x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylr = doc.addObject("Part::Cylinder", "Cylinderr") |
|||
cylr.Label = "Cylinderr%03d" % x |
|||
cylr.Radius = hole2r |
|||
cylr.Height = hole2d |
|||
cylr.Angle = 360 |
|||
cylinders = cylinders + " " + cylr.Name |
|||
cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylr.Placement = App.Placement( |
|||
App.Vector( |
|||
length - fdist, hole2d, height - hole1 - x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
xs = x + 1 |
|||
for x in range(xs, n): |
|||
# Drillholes |
|||
cyll = doc.addObject("Part::Cylinder", "Cylinderl") |
|||
cyll.Label = "Cylinderl%03d" % x |
|||
cyll.Radius = bradius |
|||
cyll.Height = bdeep |
|||
cyll.Angle = 360 |
|||
cylinders = cylinders + " " + cyll.Name |
|||
cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cyll.Placement = App.Placement( |
|||
App.Vector(fdist, bdeep, height - hole1 - x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
cylr = doc.addObject("Part::Cylinder", "Cylinderr") |
|||
cylr.Label = "Cylinderr%03d" % x |
|||
cylr.Radius = bradius |
|||
cylr.Height = bdeep |
|||
cylr.Angle = 360 |
|||
cylinders = cylinders + " " + cylr.Name |
|||
cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) |
|||
cylr.Placement = App.Placement( |
|||
App.Vector( |
|||
length - fdist, bdeep, height - hole1 - x * holedistance), |
|||
App.Rotation(App.Vector(1, 0, 0), 90)) |
|||
if debug: |
|||
doc.recompute() |
|||
if debug: |
|||
App.Console.PrintMessage("cylinders = ") |
|||
App.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: |
|||
App.Console.PrintMessage("n=" + str(cyls) + "\n") |
|||
for x in cyls: |
|||
if debug: |
|||
App.Console.PrintMessage("cylinder(" + x + ")=" + str(x) + "\n") |
|||
cut(str(x)) |
|||
doc.recompute() |
|||
Gui.SendMsgToActiveView('ViewFit') |
|||
# OS: Ubuntu 14.04.1 LTS |
# OS: Ubuntu 14.04.1 LTS |
||
Line 453: | Line 551: | ||
# Qt version: 4.8.6 |
# Qt version: 4.8.6 |
||
# Coin version: 4.0.0a |
# Coin version: 4.0.0a |
||
</pre> |
|||
</syntaxhighlight> |
|||
<translate> |
<translate> |
||
==Links== <!--T:7--> |
|||
*[[Macro_PartsLibrary|Macro_PartsLibrary]] FreeCAD Library |
*[[Macro_PartsLibrary|Macro_PartsLibrary]] FreeCAD Library |
||
</translate> |
</translate> |
||
{{clear}} |
{{clear}} |
||
<languages/> |
Revision as of 17:47, 23 July 2019
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. |
Author |
Berner |
Download |
TollBar Icon |
Links |
Macros recipes How to install macros How to customize toolbars |
Macro Version |
1.0 |
Date last modified |
2015-01-22 |
FreeCAD Version(s) |
All |
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.
cabinetside
cabinettop
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 : # ------- # | | # | | # ------- from __future__ import division import FreeCAD as App import FreeCADGui as Gui from PySide import QtGui # GUI debug = False # debugging on guiok = True # flag for abort input 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 = False if ok and guiok: height, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Height', 'Height of cabinet-side', 2000, 0, 3000, 2) else: guiok = False if ok and guiok: bradius, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Bradius', 'Radius of drill holes in cabinet-side', 2.5, 0, 50, 2) else: guiok = False if ok: bdeep, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Bdeep', 'Depth of drill holes in cabinet-side', 12, 0, 50, 2) else: guiok = False if ok: fdist, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Fdist', 'Distance to Front of cabinet-side', 37, 0, 50, 2) else: guiok = False 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 = False if ok: holedistance, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Holedistance', 'Distance from hole to hole (System 32)', 32, 1, 50, 2) else: guiok = False if ok: groovethickness, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Groovethickness', 'Thickness of backpanel', 3, 1, 50, 2) else: guiok = False if ok: groovedeep, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Groovedeep', 'Overlapping of backpanel in cabinet-side', 12, 1, 50, 2) else: guiok = False if guiok: # 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, ok = QtGui.QInputDialog.getItem(None, "Fillwithholes", "Fill Board with holes?", ["no", "yes"], editable=False) else: guiok = False endhole = 9.5 if ok and guiok: endholes, ok = QtGui.QInputDialog.getItem(None, "Endholes", "Drill Holes on Top/Bottom vertical for Connectors", ['no', 'yes'], editable=False) if ok and guiok and endholes == 'yes': endhole, ok = QtGui.QInputDialog.getDouble( QtGui.QWidget(), 'Endhole', 'Endhole distance from inner cabinet-side', 9.5, 1, 50, 2) if debug: App.Console.PrintMessage("ok?: {}\n".format(ok)) App.Console.PrintMessage("width = {}\n".format(width)) App.Console.PrintMessage("length = {}\n".format(length)) App.Console.PrintMessage("bradius = {}\n".format(bradius)) App.Console.PrintMessage("bdeep = {}\n".format(bdeep)) App.Console.PrintMessage("fdist = {}\n".format(fdist)) App.Console.PrintMessage("hole1 = {}\n".format(hole1)) App.Console.PrintMessage("holedistance = {}\n".format(holedistance)) App.Console.PrintMessage("groovethickness = {}\n".format(groovethickness)) App.Console.PrintMessage("groovedeep = {}\n".format(groovedeep)) App.Console.PrintMessage("connector = {}\n".format(connector)) App.Console.PrintMessage("fillwithholes = {}\n".format(fillwithholes)) App.Console.PrintMessage("endholes = {}\n".format(endholes)) App.Console.PrintMessage("endhole = {}\n".format(endhole)) App.Console.PrintMessage("guiok = {}\n".format(guiok)) # End GUI if guiok: # 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 depends on specs for VB36 M / 19 for 19 mm boards from # 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 depends on specs for VB36 M / 16 for 16 mm boards from # 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: App.Console.PrintMessage("hole1d = {}\n".format(hole1d)) # functions def cut(tool): global cutsnr global cuts # cuts objects defined in string cuts if debug: App.Console.PrintMessage("cuts = {}, cutsnr = {}\n".format( cuts, cutsnr)) data = 'App.activeDocument().addObject("Part::Cut","' + str(cuts.split(" ")[cutsnr + 1]) + '")' if debug: App.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: App.Console.PrintMessage(str(data) + "\n") exec(data) data = "App.activeDocument()." + str(cuts.split(" ")[cutsnr + 1]) data = data + ".Tool = App.activeDocument()." + str(tool) if debug: App.Console.PrintMessage(str(data) + "\n") exec(data) cutsnr = cutsnr + 1 cuts = cuts + " Cut%03d" % cutsnr return 0 # end functions doc = App.activeDocument() # Korpus box = doc.addObject("Part::Box", "Box") box.Label = "Cube" box.Length = length box.Width = width box.Height = height # Change Color of Object. box.ViewObject.DiffuseColor = (0.67, 0.67, 0.0) if debug: doc.recompute() # Groove groove = doc.addObject("Part::Box", "Groove") groove.Label = "Groove" groove.Length = groovethickness groove.Width = groovedeep groove.Height = height - (2 * groovedeep) groove.ViewObject.DiffuseColor = (0.67, 0.67, 0.0) groove.Placement = App.Placement( App.Vector(length - groovethickness, 0, groovedeep), App.Rotation()) if debug: doc.recompute() # make endholes cylinders = "" # labels of cylinders to cut if endholes == 'y': # Bottom holes cylendl = doc.addObject("Part::Cylinder", "Cylinderendl") cylendl.Label = "Cylinderendl001" cylendl.Radius = bradius cylendl.Height = bdeep cylendl.Angle = 360 cylinders = cylinders + " " + cylendl.Name cylendl.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) doc.ActiveObject.Placement = App.Placement( App.Vector(fdist, bdeep, holetop), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylendr = doc.addObject("Part::Cylinder", "Cylinderendr") cylendr.Label = "Cylinderendr001" cylendr.Radius = bradius cylendr.Height = bdeep cylendr.Angle = 360 cylinders = cylinders + " " + cylendr.Name cylendr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylendr.Placement = App.Placement( App.Vector(length - fdist, bdeep, holetop), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() # Top holes cylendl = doc.addObject("Part::Cylinder", "Cylinderendl") cylendl.Label = "Cylinderendl002" cylendl.Radius = bradius cylendl.Height = bdeep cylendl.Angle = 360 cylinders = cylinders + " " + cylendl.Name cylendl.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylendl.Placement = App.Placement( App.Vector(fdist, bdeep, height - holetop), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylendr = doc.addObject("Part::Cylinder", "Cylinderendr") cylendr.Label = "Cylinderendr002" cylendr.Radius = bradius cylendr.Height = bdeep cylendr.Angle = 360 cylinders = cylinders + " " + cylendr.Name cylendr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylendr.Placement = App.Placement( App.Vector(length - fdist, bdeep, height-holetop), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() if fillwithholes == 'no': 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 App.Console.PrintMessage("x="+str(x) + " " + "\n") cyll = doc.addObject("Part::Cylinder", "Cylinderl") cyll.Label = "Cylinderl%03d" % x cyll.Radius = hole1r cyll.Height = hole1d cyll.Angle = 360 cylinders = cylinders + " " + cyll.Name cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cyll.Placement = App.Placement( App.Vector(fdist, hole1d, hole1 + x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylr = doc.addObject("Part::Cylinder", "Cylinderr") cylr.Label = "Cylinderr%03d" % x cylr.Radius = hole1r cylr.Height = hole1d cylr.Angle = 360 cylinders = cylinders + " " + cylr.Name cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylr.Placement = App.Placement( App.Vector(length - fdist, hole1d, hole1 + x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if connector == 2: x = 1 cyll = doc.addObject("Part::Cylinder", "Cylinderl") cyll.Label = "Cylinderl%03d" % x cyll.Radius = hole2r cyll.Height = hole2d cyll.Angle = 360 cylinders = cylinders + " " + cyll.Name cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cyll.Placement = App.Placement( App.Vector(fdist, hole2d, hole1 + x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylr = doc.addObject("Part::Cylinder", "Cylinderr") cylr.Label = "Cylinderr%03d" % x cylr.Radius = hole2r cylr.Height = hole2d cylr.Angle = 360 cylinders = cylinders + " " + cylr.Name cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylr.Placement = App.Placement( App.Vector(length - fdist, hole2d, hole1 + x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() xs = x + 1 for x in range(xs, n): # Bohrloecher cyll = doc.addObject("Part::Cylinder", "Cylinderl") cyll.Label = "Cylinderl%03d" % x cyll.Radius = bradius cyll.Height = bdeep cyll.Angle = 360 cylinders = cylinders + " " + cyll.Name cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cyll.Placement = App.Placement( App.Vector(fdist, bdeep, hole1 + x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylr = doc.addObject("Part::Cylinder", "Cylinderr") cylr.Label = "Cylinderr%03d" % x cylr.Radius = bradius cylr.Height = bdeep cylr.Angle = 360 cylinders = cylinders + " " + cylr.Name cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylr.Placement = App.Placement( App.Vector(length - fdist, bdeep, hole1 + x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() # drill holes from Top to half height # # Holes for Hettich VB36 x = -1 # init value if connector >= 1: x = 0 cyll = doc.addObject("Part::Cylinder", "Cylinderl") cyll.Label = "Cylinderl%03d" % x cyll.Radius = hole1r cyll.Height = hole1d cyll.Angle = 360 cylinders = cylinders + " " + cyll.Name cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cyll.Placement = App.Placement( App.Vector(fdist, hole1d, height - hole1 - x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylr = doc.addObject("Part::Cylinder", "Cylinderr") cylr.Label = "Cylinderr%03d" % x cylr.Radius = hole1r cylr.Height = hole1d cylr.Angle = 360 cylinders = cylinders + " " + cylr.Name cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylr.Placement = App.Placement( App.Vector(length - fdist, hole1d, height-hole1 - x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() if connector == 2: x = 1 cyll = doc.addObject("Part::Cylinder", "Cylinderl") cyll.Label = "Cylinderl%03d" % x cyll.Radius = hole2r cyll.Height = hole2d cyll.Angle = 360 cylinders = cylinders + " " + cyll.Name cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cyll.Placement = App.Placement( App.Vector(fdist, hole2d, height - hole1 - x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylr = doc.addObject("Part::Cylinder", "Cylinderr") cylr.Label = "Cylinderr%03d" % x cylr.Radius = hole2r cylr.Height = hole2d cylr.Angle = 360 cylinders = cylinders + " " + cylr.Name cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylr.Placement = App.Placement( App.Vector( length - fdist, hole2d, height - hole1 - x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() xs = x + 1 for x in range(xs, n): # Drillholes cyll = doc.addObject("Part::Cylinder", "Cylinderl") cyll.Label = "Cylinderl%03d" % x cyll.Radius = bradius cyll.Height = bdeep cyll.Angle = 360 cylinders = cylinders + " " + cyll.Name cyll.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cyll.Placement = App.Placement( App.Vector(fdist, bdeep, height - hole1 - x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() cylr = doc.addObject("Part::Cylinder", "Cylinderr") cylr.Label = "Cylinderr%03d" % x cylr.Radius = bradius cylr.Height = bdeep cylr.Angle = 360 cylinders = cylinders + " " + cylr.Name cylr.ViewObject.DiffuseColor = (0.0, 0.0, 0.0) cylr.Placement = App.Placement( App.Vector( length - fdist, bdeep, height - hole1 - x * holedistance), App.Rotation(App.Vector(1, 0, 0), 90)) if debug: doc.recompute() if debug: App.Console.PrintMessage("cylinders = ") App.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: App.Console.PrintMessage("n=" + str(cyls) + "\n") for x in cyls: if debug: App.Console.PrintMessage("cylinder(" + x + ")=" + str(x) + "\n") cut(str(x)) doc.recompute() Gui.SendMsgToActiveView('ViewFit') # 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