Maya MEL 打造螺旋曲线(含脚本代码)
更新时间:2024-04-05 03:12:01 阅读量: 综合文库 文档下载
- maya推荐度:
- 相关推荐
了解Maya的人都知道Maya本身不能够创建螺旋曲线,这给我们在建模电话线、弹簧等具有螺旋结构的模型时带来了很多不便。那么怎样解决这个问题呢?就目前来看,主流的解决方法是采用外部插件,但由于需要到国外网站上下载,普通中国用户很难发掘到;而通过手动创建螺旋曲线的方法不仅方法笨拙,效率低下,而且在很多时候也很难满足我们的工作要求。今天小编就通过一个简单MEL程序来达到我们的要求,也希望借此抛砖引玉。
熟悉Maya的人都知道,Maya的任何一条命令都是一个MEL口令,例如我们在Maya中创建一条样条曲线,在Maya的脚本编辑器中就会显示这样的一条MEL口令:“curve -d 3 -p -6.121508 0 6.545092 -p -6.084318 0 -1.667924 -p -1.898864 0 6.298442 -p 0.172602 0 -1.310417 -p 2.51464 0 6.576429 -k 0 -k 0 -k 0 -k 1 -k 2 -k 2 -k 2 ;”而我们创建螺旋曲线的思路也正基于此。
首先看代码:
string $command=\for($i=1;$i<=100;$i++) {
float $x=5*sin($i); float $z=5*cos($i); float $y=$i;
$command+=\};
eval $command; 解释:
第一行 —— Maya的mel语言规定,变量前必须添加符号$。curve是mel命令,即创建曲线;-d定义曲线精度为3;该行的含义就是定义字符串变量“$command”。
第二行 —— 执行for循环语句。定义整数$i,自增100次,其实就是表示有100个CV点。
第四行 —— 定义实数$x,并将5*sin($i)赋值给$x。而第五行、第六行的语法与第四行相同。在本例中,第四行、第五行、第六行是程序关键,其实这三行就是螺旋线的数学方程式。
第七行 —— 将字符串合并,也就是获得一个创建曲线的完整表达方式,类似于:curve -d 3 -p -6.121508 0 6.545092 -p -6.084318 0 -1.667924 -p -1.898864 0 6.298442...
第九行 —— eval命令是求函数返回值,也就是将我们的程序计算结果输出。这一步很重要,如果没有这一步,用户可能看不到你所创建的曲线。
总结:
该mel程序的扩张性很强,用户可通过修改螺旋线的参数,进而获得其他形式的曲线。例如,当将螺旋线的半径5修改为$i,则可以获得圆锥螺旋线。
为方便大家以后的建模,现附上经过修改后的第三方插件,源代码:
global proc int helix_startSequence() { float $h, $t, $r1, $r2, $a, $k, $t0; int $prec, $encs, $encr, $encp, $helpVar; string $nm, $NM;
$nm = `textField -q -text name`; $NM = $nm + helix_checkName($nm); $h = `floatSliderGrp -q -value height`; $t = `floatSliderGrp -q -value turns`; $r1 = `floatSliderGrp -q -value r1`; $r2 = `floatSliderGrp -q -value r2`; $prec = `intSliderGrp -q -value prec`; $helpVar=`radioButtonGrp -q -sl radioButtons`; if(`textField -q -en A`) { $a=`textField -q -text A`; $k=`textField -q -text K`; $t0=`textField -q -text T`; } else { $a = 1.0; $k = 0.0; $t0 = 90.0;
}
if($helpVar==1) {$encs = 1; $encr = 0; $encp = 0;} if($helpVar==2) {$encs = 0; $encr = 1; $encp = 0;} if($helpVar==3) {$encs = 0; $encr = 0; $encp = 1;} if($helpVar==4) helix_drawSphere($NM, $t, $r1, $prec);
if($helpVar!=4) helix_drawHelix($NM, $h, $t, $r1, $r2, $prec, $a, $k, $t0, $encs, $encr, $encp); return 0; }
global proc int helix_checkName(string $NAME) { int $number=0,$ok,$k; string $NAM;
for($ok=0;$ok==0;$k++) { $number++; $NAM=$NAME+$number;
if(!`objExists $NAM`) $ok=1; }
return $number; }
global proc int helix_drawSphere(string $name, float $turns, float $radius1, int $precision) { float $y, $X, $Y, $Z, $i, $negRadius1; $negRadius1=-$radius1;
for($i=0;$i<=($precision*$radius1*2);$i++) { $y = $i / $precision;
$X = sqrt(($radius1*$radius1)-($y-$radius1)*($y-$radius1))*cos(($y*$turns*2*3.14159265)/($radius1*2)); $Y = $y;
$Z = sqrt(($radius1*$radius1)-($y-$radius1)*($y-$radius1))*sin(($y*$turns*2*3.14159265)/($radius1*2)); if(!`objExists $name`) { curve -d 3 -p 0 0 0; rename `ls -sl` $name; }
else curve -a -p $X $Y $Z $name; }
CenterPivot;
move 0 $negRadius1 0; return 0; }
global proc int helix_drawHelix(string $name, float $height, float $turns, float $radius1, float $radius2, int $precision, float $Amp, float $tms, float $ngl, int $ENCS, int $ENCR, int $ENCP) { float $t1, $t2, $t3, $t0; float $y, $X, $Y, $Z, $i;
for($i=0;$i<=($precision*$height);$i++)
{ float $tempy;
$t0=$Amp*sin(($tms*$y/$height)+3.14159265*($ngl/180)); $t1=($y/$height)*$ENCS; $t2=(sqrt($y/$height))*$ENCR; $t3=($y*$y/($height*$height))*$ENCP; $y = $i / $precision;
$X = $t0*($radius1-($radius1-$radius2)*($t1+$t2+$t3))*cos(($y*$turns*2*3.14159265)/$height); $Y = $y;
$Z = $t0*($radius1-($radius1-$radius2)*($t1+$t2+$t3))*sin(($y*$turns*2*3.14159265)/$height); if(!`objExists $name`) { curve -d 3 -p $radius1 0 0; rename `ls -sl` $name; }
else curve -a -p $X $Y $Z $name; } return 0; }
global proc int helix_changeState(int $statNr) { if($statNr==1)
{ floatSliderGrp -e -en 0 r2; floatSliderGrp -e -en 0 height; checkBox -e -en 0 box; textField -e -en 0 A; textField -e -en 0 K; textField -e -en 0 T; }
if($statNr==2)
{ floatSliderGrp -e -en 1 r2; floatSliderGrp -e -en 1 height; checkBox -e -en 1 box; if(`checkBox -q -value box`) { textField -e -en 1 A; textField -e -en 1 K; textField -e -en 1 T; } }
if($statNr==0)
{ if(`textField -q -en A`==0) { textField -e -en 1 A; textField -e -en 1 K; textField -e -en 1 T; } else
{ textField -e -en 0 A; textField -e -en 0 K; textField -e -en 0 T; } } return 0; }
global proc int helix_exitWindow() { deleteUI Helix; return 0; }
global proc helix() {
if(`window -q -exists Helix`) deleteUI Helix; window -w 200 -h 400 -title \scrollLayout sl1; columnLayout;
frameLayout -cll true -label \columnLayout;
rowColumnLayout -numberOfColumns 2; text -label \
textField -text \setParent ..;
rowColumnLayout -numberOfRows 5; floatSliderGrp -field true -min 0.0001 -max 10 -fmx 1000 -label \-value 1 height;
floatSliderGrp -field true -min 0 -max 10 -fmx 1000000 -label \-value 1 turns;
floatSliderGrp -field true -min 0 -max 10 -fmx 100
-label \-value 1 r1;
floatSliderGrp -field true -min 0 -max 10 -fmx 100
-label \-value 1 r2;
intSliderGrp -field true -min 5 -max 20 -fmx 1000
-label \-value 10 prec; setParent ..; setParent ..; setParent ..;
frameLayout -cll true -label \columnLayout;
rowColumnLayout -numberOfRows 5; radioButtonGrp -numberOfRadioButtons 4
-labelArray4 \-sl 1
-on4 \-of4 \radioButtons;
checkBox -label \setParent ..;
rowColumnLayout -numberOfColumns 2; text -label \
textField -text \text -label \
textField -text \text -label \textField -text \setParent ..; setParent ..; setParent ..;
rowColumnLayout -numberOfColumns 2;
button -label \button -label \
showWindow Helix; }
使用方法:
首先将该代码拷贝到你的脚本编辑器中,然后CTRL+回车键执行,最后在MEL命令栏(Maya窗口最下方)中输入helix回车,即可得到下图“创建螺旋曲线”窗口。
正在阅读:
放飞蜻蜓 教学设计01-19
论世界水资源现状之保护05-25
第八章公文处理概述07-27
心情不好的时候,就去做这5件事08-02
以感动为话题的作文02-04
昆工电机综合实验05-17
笔的演变作文02-04
燕窝的市场价格[1..07-29
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 螺旋
- 脚本
- 曲线
- 代码
- 打造
- Maya
- MEL
- 论房地产营销理念的创新
- 股票指标公式下载-买卖提示点(超短、短线)
- 《学前儿童数学教育》复习指导纲要
- SYB培训教案1-10步
- creo3.0config公制基本配置文件
- DBJ50-103-2010无机保温砂浆应用技术规程(重庆市工程建设标准)
- 后进生转化案例(一)
- 2017年度农村精神文明创建工作计划一
- 小额信贷可持续发展课题(12月)
- 成本会计学(专升本)阶段性作业4
- 马原实践报告 - 图文
- vb填空题练习
- 2013高考历史二轮专题:世界古代科技、思想、文化史专题训练
- 集团公司人力资源管理制度++
- 烧结机带冷机毕业论文
- 34载医改路27招行政松绑仍不着要害
- 网络联校方案
- 《局域网组建与维护》课程设计实训实施方案150609
- 中国内地的黄金交易
- 静安区2012学年第一学期期末教学质量调研 - 图文