1
2
3
4 import empro.toolkit as toolkit
5 import empro.toolkit.geometry
6 import math
7 from empro import *
8 V = geometry.Vector3d
9
10
16 cornerPoints = cornerPointsAlongZ(minRadius,maxRadius,height,divisions)
17 mySketch = geometry.Sketch()
18 for index in range(len(cornerPoints)-1):
19 mySketch.add(geometry.Line(cornerPoints[index],cornerPoints[index+1]))
20 myRevolve = geometry.Revolve(mySketch,V(0.0,0.0,0.0),V(0.0,0.0,1.0))
21 myRevolve.options.steps = int(math.floor(180.0/arcResolution))
22 print myRevolve.options.steps
23 myModel = geometry.Model()
24 myModel.recipe.append(myRevolve)
25 myModel.name = "Solder Ball"
26 solderBall = geometry.Assembly()
27 solderBall.append(myModel)
28 return solderBall
29
30 -def sideView(iMinRadius,iMaxRadius,iHeight,iDivisions,iArcResolution):
31 points3D = cornerPointsAlongZ(iMinRadius,iMaxRadius,iHeight,iDivisions)
32 points2D = []
33 for i in range(len(points3D)):
34 point = points3D[i]
35 tmpPoint = (float(point.x),float(point.z))
36 if not tmpPoint in points2D:
37 points2D.append(tmpPoint)
38 for i in range(len(points3D)):
39 point = points3D[len(points3D)-1-i]
40 tmpPoint = (-float(point.x),float(point.z))
41 if not tmpPoint in points2D:
42 points2D.append(tmpPoint)
43 return points2D
44
46 halfOfDivisions = math.modf(iDivisions/2.0)[1]
47 incrementAlongZ = iHeight/iDivisions
48 if (iMinRadius == iMaxRadius):
49 corners = []
50 corners.append(V(0.0,0.0,0.0))
51 corners.append(V(iMinRadius,0.0,0.0))
52 corners.append(V(iMinRadius,0.0,iHeight))
53 corners.append(V(0.0,0.0,iHeight))
54 corners.append(corners[0])
55 else:
56 sign = (iMaxRadius-iMinRadius)/abs(iMaxRadius-iMinRadius)
57 middlePoint = V((iMinRadius+iMaxRadius)/2.0,0.0,halfOfDivisions*incrementAlongZ/2.0)
58 alpha = sign * math.pi/2.0 + math.atan2(halfOfDivisions*incrementAlongZ,iMaxRadius-iMinRadius)
59 xCenter = float(middlePoint.x) + (iHeight/2.0-float(middlePoint.z))/math.tan(alpha)
60 radius = math.sqrt(math.pow(xCenter-iMinRadius,2.0)+math.pow(iHeight/2.0,2.0))
61 corners = []
62 corners.append(V(0.0,0.0,0.0))
63 corners.append(V(iMinRadius,0.0,0.0))
64 for index in range(iDivisions-1):
65 z = (index+1)*incrementAlongZ
66 x = xCenter + sign * math.sqrt(math.pow(radius,2.0)-math.pow(z-iHeight/2.0,2.0))
67 corners.append(V(x,0.0,z))
68 corners.append(V(iMinRadius,0.0,iHeight))
69 corners.append(V(0.0,0.0,iHeight))
70 corners.append(corners[0])
71 return corners
72