// UV SetAlign 0.141
// 選択1点目のU Vに合わせる。
@name "UV SetAlign"
@version 2.5
@warnings
@script modeler
@define DESCRIPT "UV SetAlign"
// checkUVMap(str):Map strの有無をチェック。在ればIndexを、無ければ0が返る
// selUVMap(v):vを初期IndexとしたUVMap選択をする。完遂すればIndexを、中断すれば0が返る
var VMapNames;
main
{
selmode(DIRECT);
var SelPts = pointcount();
if(SelPts == 1){
error("
Need 2pts or more");
return;
}
var RecentMap = recall("RecentMap", "--None--");
var ListIdx = checkUVMap(RecentMap);
if(!SelPts){
selUVMap(ListIdx);
return;
}
if(!ListIdx){
if(!(ListIdx = selUVMap(ListIdx))) return;
}
var vmap = VMap(VMTEXTURE, VMapNames[ListIdx]);
reqbegin(DESCRIPT);
reqsize(190,60);
c0 = ctlchoice("", 1,@" U"," V"," U&V"@, false);
ctlposition(c0, 4, 3, 175);
return if !reqpost();
var SelType = getvalue(c0);
reqend();
editbegin();
if(!vmap.isMapped(points[1])){
editend();
error("
not mapped UVs. on 1st Pts.");
return;
}
var SrcUV[2];
SrcUV = vmap.getValue(points[1]);
switch(SelType){
case 1:
for(i = 2; i <= SelPts; i++) vmap.setValue(points[i], SrcUV[1] ,1);
break;
case 2:
for(i = 2; i <= SelPts; i++) vmap.setValue(points[i], SrcUV[2] ,2);
break;
case 3:
for(i = 2; i <= SelPts; i++) vmap.setValue(points[i], SrcUV);
break;
default:
break;
}
editend();
}
// ---------------------------
selUVMap: ListIdx
{
if(!ListIdx) ListIdx = 1;
reqbegin(DESCRIPT);
reqsize(190,60);
c1 = ctlpopup("", ListIdx, VMapNames);
ctlposition(c1, 4, 3, 175);
return(false) if !reqpost();
i = getvalue(c1);
reqend();
store("RecentMap", VMapNames[i]);
info("
Set [ ",VMapNames[i]," ]");
return(i);
}
checkUVMap: RecentMap
{
var vmap = VMap(VMTEXTURE);
if(vmap == nil){
error("
Not Found UV Map");
return;
}
VMapNames = nil;
while(vmap && vmap.type == VMTEXTURE){
VMapNames += vmap.name;
vmap = vmap.next();
}
var MapCnt = VMapNames.size();
var ListIdx = 0;
for(i = 1; i <= MapCnt; i++){
if(RecentMap == VMapNames[i]){
ListIdx = i;
break;
}
}
return(ListIdx);
}