Hi,
nach meinen kürzlichen Versuchen, mittels OpenSCAD die Uniprokit-Bauteile parametrisch via Script zu generieren, hab ich mir jetzt auch mal FreeCAD vorgeknöpft.
Mit dem nachfolgenden Python-Script (in FreeCAD als Macro einbinden) kann man vollautomatisch die Winkel in allen beliebigen (d.h., durch 20 teilbaren) Längen erzeugen.
Dabei werden die Bauteile dann noch jeweils einzeln exportiert, und zwar als .stl, .stp und .iges-Dateiformat. Diverse weitere Formate wie .svg, .wrl, .dxf und viele mehr, wären ebenfalls möglich.
Hier das Script:
# Macro Begin: /mydir/upklib/base_struk/upk_winkel.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++
import FreeCAD
from FreeCAD import Base
import Part,PartGui
import ImportGui
import Mesh
doc=FreeCAD.newDocument()
# sizes = [20, 40, 60, 80, 120, 160, 240, 320, 640]
sizes = [20, 40, 60, 80]
#
for i in sizes:
#*********************************************************
# - Erzeugung eines Winkel-Objektes mit allen Bohrungen
# - Speicherung als .stl- und stp-Datei
#*********************************************************
partlen = i
partsize = partlen / 20
# Rohwinkel
myrawblock = Part.makeBox(20,partsize*20,20)
mycutblock = Part.makeBox(17,partsize*20,17,Base.Vector(3,0,3))
myangle = myrawblock.cut(mycutblock)
angleobj = doc.addObject("Part::Feature","upk_angle"+str(i))
angleobj.Shape = myangle
# Bohrloecher
for n in range(partsize):
# Erzeuge Bohrloch1
mycuthole = Part.makeCylinder(2.5,20, Base.Vector(10,((n+1)*20)-10,-8))
myangle = myangle.cut(mycuthole)
angleobj.Shape = myangle
# Erzeuge Bohrloch2
mycuthole = Part.makeCylinder(2.5,20, Base.Vector(0,0,0))
mycuthole.rotate(Base.Vector(0,0,0),Base.Vector(0,1,0),90)
mycuthole.translate(Base.Vector(-10,((n+1)*20)-10,10))
myangle = myangle.cut(mycuthole)
angleobj.Shape = myangle
# Bewege neuerzeugtes Winkelobjekt etwas zur Seite
pl = FreeCAD.Placement()
pl.move(FreeCAD.Vector(partsize*30,0,0))
angleobj.Placement = pl
# Export .stl
__objs__=[]
__objs__.append(FreeCAD.getDocument("Unnamed").getObject("upk_angle"+str(i)))
Mesh.export(__objs__,"/mydir/upklib/base_struk/upk_angle"+str(i)+".stl")
del __objs__
# Export .stp
__objs__=[]
__objs__.append(FreeCAD.getDocument("Unnamed").getObject("upk_angle"+str(i)))
ImportGui.export(__objs__,"/mydir/upklib/base_struk/upk_angle"+str(i)+".stp")
del __objs__
# Export .iges
__objs__=[]
__objs__.append(FreeCAD.getDocument("Unnamed").getObject("upk_angle"+str(i)))
Part.export(__objs__,"/mydir/upklib/base_struk/upk_angle"+str(i)+".iges")
del __objs__
Gui.activeDocument().activeView().viewAxometric()
Gui.SendMsgToActiveView("ViewFit")
doc.recompute()
# Macro End: /mydir/upklib/base_struk/upk_winkel.FCMacro +++++++++++++++++++++++++++++++++++++++++++++++++
Der Spass hat mich jetzt drei Tage gekostet um mich im FreeCAD-Scripting etwas zurechtzufinden, aber ich denke mal, das wars wert, weil sich damit einige gute Möglichkeiten ergeben. Die große Herausforderung (und damit der nächste Schritt) besteht nun darin, zu jedem einzelnen Bauteil noch die passende Fertigungszeichnung mit drei 2D- und einer 3D-Ansicht zu generieren und das Ganze zu bemaßen und beschriften.
Gruss, Oliver