Chinaunix首页 | 论坛 | 博客
  • 博客访问: 891587
  • 博文数量: 380
  • 博客积分: 3495
  • 博客等级: 中校
  • 技术积分: 3996
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-02 09:35
文章分类

全部博文(380)

文章存档

2015年(2)

2014年(5)

2013年(9)

2012年(9)

2011年(67)

2010年(103)

2009年(182)

2008年(3)

我的朋友

分类:

2011-07-15 09:37:31

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)

阅读(2512) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~