3
# (c) 2008 Werner Mayer LGPL
7
import FreeCAD, FreeCADGui
10
from FreeCAD import Base
12
def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0):
13
aPnt1=Base.Vector(-myWidth/2.,0,0)
14
aPnt2=Base.Vector(-myWidth/2.,-myThickness/4.,0)
15
aPnt3=Base.Vector(0,-myThickness/2.,0)
16
aPnt4=Base.Vector(myWidth/2.,-myThickness/4.,0)
17
aPnt5=Base.Vector(myWidth/2.,0,0)
19
aArcOfCircle = Part.Arc(aPnt2,aPnt3,aPnt4)
20
aSegment1=Part.LineSegment(aPnt1,aPnt2)
21
aSegment2=Part.LineSegment(aPnt4,aPnt5)
23
aEdge1=aSegment1.toShape()
24
aEdge2=aArcOfCircle.toShape()
25
aEdge3=aSegment2.toShape()
26
aWire=Part.Wire([aEdge1,aEdge2,aEdge3])
29
aTrsf.rotateZ(math.pi) # rotate around the z-axis
31
aMirroredWire=aWire.copy()
32
aMirroredWire.transformShape(aTrsf)
33
myWireProfile=Part.Wire([aWire,aMirroredWire])
35
myFaceProfile=Part.Face(myWireProfile)
36
aPrismVec=Base.Vector(0,0,myHeight)
37
myBody=myFaceProfile.extrude(aPrismVec)
39
myBody=myBody.makeFillet(myThickness/12.0,myBody.Edges)
41
neckLocation=Base.Vector(0,0,myHeight)
42
neckNormal=Base.Vector(0,0,1)
44
myNeckRadius = myThickness / 4.
45
myNeckHeight = myHeight / 10
46
myNeck = Part.makeCylinder(myNeckRadius,myNeckHeight,neckLocation,neckNormal)
47
myBody = myBody.fuse(myNeck)
52
for xp in myBody.Faces:
54
if type(surf) == Part.Plane:
60
# This doesn't work for any reason
61
myBody = myBody.makeThickness([faceToRemove],-myThickness/50 , 1.e-3)
62
myThreading = Part.makeThread(myNeckHeight/10, myNeckRadius*0.06, myHeight/10, myNeckRadius*0.99)
63
myThreading.translate(Base.Vector(0,0,myHeight))
64
myCompound = Part.Compound([myBody, myThreading])
69
# create a document if needed
70
if App.ActiveDocument is None:
71
App.newDocument("Solid")
73
Group = App.ActiveDocument.addObject("App::DocumentObjectGroup","Group")
74
Group.Label="Bore hole"
76
V1 = Base.Vector(0,10,0)
77
V2 = Base.Vector(30,10,0)
78
V3 = Base.Vector(30,-10,0)
79
V4 = Base.Vector(0,-10,0)
80
VC1 = Base.Vector(-10,0,0)
81
C1 = Part.Arc(V1,VC1,V4)
83
VC2 = Base.Vector(40,0,0)
84
C2 = Part.Arc(V2,VC2,V3)
85
L1 = Part.LineSegment(V1,V2)
87
L2 = Part.LineSegment(V4,V3)
88
S1 = Part.Shape([C1,C2,L1,L2])
92
P=F.extrude(Base.Vector(0,0,5))
94
# add objects with the shape
95
Wire=Group.newObject("Part::Feature","Wire")
97
Face=Group.newObject("Part::Feature","Face")
99
Prism=Group.newObject("Part::Feature","Extrude")
102
c=Part.Circle(Base.Vector(0,0,-1),Base.Vector(0,0,1),2.0)
103
w=Part.Wire(c.toShape())
105
p=f.extrude(Base.Vector(0,0,7))
109
Bore1=Group.newObject("Part::Feature","Borer_1")
111
Hole1=Group.newObject("Part::Feature","Borer_Hole1")
114
c=Part.Circle(Base.Vector(0,-11,2.5),Base.Vector(0,1,0),1.0)
115
w=Part.Wire(c.toShape())
117
p=f.extrude(Base.Vector(0,22,0))
121
Bore2=Group.newObject("Part::Feature","Borer_2")
123
Hole2=Group.newObject("Part::Feature","Borer_Hole2")
126
App.ActiveDocument.recompute()
128
# hide all objects except of the final one
129
Gui.ActiveDocument.getObject(Wire.Name).hide()
130
Gui.ActiveDocument.getObject(Face.Name).hide()
131
Gui.ActiveDocument.getObject(Prism.Name).hide()
132
Gui.ActiveDocument.getObject(Bore1.Name).hide()
133
Gui.ActiveDocument.getObject(Hole1.Name).hide()
134
Gui.ActiveDocument.getObject(Bore2.Name).hide()
135
Gui.ActiveDocument.ActiveView.fitAll()