// 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); }