helix是学习maya API的入门命令。思路很简单:设置curve上cv点的位置做成螺旋曲线的形状即可。将近三百行的代码,核心的就一句:
points[j] = MPoint(cos(double(j))*radius, pitch*j, sin(double(j))*radius); //reposition cvs
在maya中显示如下:
points[j] = MPoint(cos(double(j))*radius, pitch*j, sin(double(j))*radius); //reposition cvs
如将核心代码改换如下:
double para = -16*3.1415926/(*(numCVs+k));
for(unsigned i = 0; i < 4; i++)
{
for(unsigned j = i*(*(numCVs+k)/4);j < i*(*(numCVs+k)/4) + *(numCVs+k)/16; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926)*radius+radius, pitch*j, cos(para*double(j)+3.1415926)*radius);
for(unsigned j = i*(*(numCVs+k)/4) + *(numCVs+k)/16;j < i*(*(numCVs+k)/4) + *(numCVs+k)/8; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926*1.5)*radius, pitch*j, cos(para*double(j)+3.1415926*1.5)*radius+radius);
for(unsigned j = i*(*(numCVs+k)/4) + *(numCVs+k)/8;j < i*(*(numCVs+k)/4) + *(numCVs+k)*3/16; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926*2)*radius-radius, pitch*j, cos(para*double(j)+3.1415926*2)*radius);
for(unsigned j = i*(*(numCVs+k)/4) + *(numCVs+k)*3/16;j < i*(*(numCVs+k)/4) + *(numCVs+k)/4; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926*2.5)*radius, pitch*j, cos(para*double(j)+3.1415926*2.5)*radius-radius);
}
就可以得到四叶草型的螺旋线:
double para = -16*3.1415926/(*(numCVs+k));
for(unsigned i = 0; i < 4; i++)
{
for(unsigned j = i*(*(numCVs+k)/4);j < i*(*(numCVs+k)/4) + *(numCVs+k)/16; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926)*radius+radius, pitch*j, cos(para*double(j)+3.1415926)*radius);
for(unsigned j = i*(*(numCVs+k)/4) + *(numCVs+k)/16;j < i*(*(numCVs+k)/4) + *(numCVs+k)/8; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926*1.5)*radius, pitch*j, cos(para*double(j)+3.1415926*1.5)*radius+radius);
for(unsigned j = i*(*(numCVs+k)/4) + *(numCVs+k)/8;j < i*(*(numCVs+k)/4) + *(numCVs+k)*3/16; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926*2)*radius-radius, pitch*j, cos(para*double(j)+3.1415926*2)*radius);
for(unsigned j = i*(*(numCVs+k)/4) + *(numCVs+k)*3/16;j < i*(*(numCVs+k)/4) + *(numCVs+k)/4; j++)
points[j] = MPoint(sin(para*double(j)+3.1415926*2.5)*radius, pitch*j, cos(para*double(j)+3.1415926*2.5)*radius-radius);
}
代码里的数学公式有点拖沓,但曾几何时貌似看到过神一般的蝙蝠侠公式,所以……
anyway,虽然这个小插件有点无聊,但对于我进入更年期的记忆力,闲暇时来点自娱自乐的小刺激,也不至于被Maya枯燥繁杂的API结构给搞崩溃。
继续吧,路还长~