1.算法的基本思路
由给定的几个参数来计算出每个齿的顶点,然后把这些顶点连成边, 连成面。
要注意的是:
每顶点是个triple(x,y,z)。
每个边要2个顶点。
每个面要3个或是4个顶点。
2.基本参数:
齿轮是由下面这个函数生成的。
add_gear(teethNum, radius, Ad, De, base, p_angle,
width=1, skew=0, conangle=0, rack=0, crown=0.0)
参数含义如下:
teethNum: 齿的个数。
radius:半径
Ad: 齿冠的高度
De: 齿根的高度
base: 内径
p_angle:齿冠的压力角,形成齿冠的两侧梯形
width: 齿轮的厚度
skew: 齿轮的齿是否是有偏角的,及偏角的大小
rack: 不清楚
crown: 齿是否要突出齿轮。
o (1.) 齿轮的圆心
1-2为齿轮的内径
*-*---*---* (2.) verts_inner_base
| | | | 此部分长度为 radius-base-dedendum
*-*---*---* (3.) verts_outer_base
| | | 4-3为齿轮的齿根, dedendum, 4-1之间为半径, radius
*---*---* (4.) verts_middle_tooth
\ | / 5-4为齿轮的齿冠, addendum
*-*-* (5.) verts_tip_tooth
3.算法
实际上只要算出上面图中的每个齿的(2), (3), (4), (5)处的顶点就可以得出所有的顶点。
随后将这些顶点连成边,面就成形成我们的mesh物体了。
而算出每个顶点的算法还是比较简单的。
x = 半径*cos(a)
y = 半径*sin(a)
z = 厚度
4.调用blender的内置python api来生成物体。
# Create new mesh
mesh = bpy.data.meshes.new(name)
# Make a mesh from a list of verts/edges/faces.
mesh.from_pydata(verts, edges, faces)
# Update mesh geometry after adding stuff.
mesh.update()
import add_object_utils
return add_object_utils.object_data_add(context, mesh, operator=None)
阅读(2608) | 评论(0) | 转发(0) |