// Weight Val Modifier 0.324 // 値を足したり引いたり掛けたり割ったり、コピーしたり。 @name "WValModifier" @version 2.5 @warnings @script modeler @define DESCRIPT "Weight Val Modifier" @define OVERWRITE false var l0; var VMapNames; var MapNum; var RecentMap; var AllBlock, InitBlock, CurBlock, RBlock; main { selmode(DIRECT); var SelPts = pointcount(); // 90/92/93 はpoint/poly countでUndoバッファを消費する @if version < 2.2 undo(); @end @if version > 2.7 undo(); @end if(!SelPts){ error("
Need Point Select"); return; } var vmap = VMap(VMWEIGHT); if(vmap == nil){ error("
Not Found Map"); return; } var i = 1; while(vmap && vmap.type == VMWEIGHT){ if(vmap.name != "Edge Weight"){ VMapNames += vmap.name; AllBlock[i] = i; i++; } vmap = vmap.next(); } MapNum = VMapNames.size(); RecentMap = recall("RecentMap", "--None--"); var RecentType = recall("RecentType", 2); var RNames = parse(",", RecentMap); var RNum = RNames.size(); var x = 1; for(c = 1; c <= RNum; c++){ for(i = 1; i <= MapNum; i++){ if(RNames[c] == VMapNames[i]){ RBlock[x++] = i; break; } } } RBlock.sortA(); RBlock.reduce(); InitBlock = RBlock; @if version != 2.5 vmap = VMap(VMWEIGHT, 0); if(vmap != nil){ if(vmap.name != "Edge Weight"){ for(i = 1; i <= MapNum; i++) if(vmap.name == VMapNames[i]) break; CurBlock[1] = i; if(RBlock != nil){ i = RBlock.size() + 1; InitBlock[i] = CurBlock[1]; InitBlock.sortA(); InitBlock.reduce(); } } } @end reqbegin(DESCRIPT); reqsize(285,278); l0 = ctllistbox("Weight Maps",160, 242, "lb_Count", "lb_Name"); ctlposition(l0, 3, 3); l1 = ctlbutton(" Select All", 78, "lb_AllSelect"); ctlposition(l1,190,203); l2 = ctlbutton("DeSelect All", 78, "lb_AllDeselect"); ctlposition(l2,190,223); @if version != 2.5 l3 = ctlbutton("Current", 50, "lb_CurrentMap"); ctlposition(l3,190,163); l4 = ctlbutton("Add", 28, "lb_CurrentMapAdd"); ctlposition(l4,240,163); @end l5 = ctlbutton("Recent", 50, "lb_RecentMap"); ctlposition(l5,190,183); l6 = ctlbutton("Add", 28, "lb_RecentMapAdd"); ctlposition(l6,240,183); c1 = ctlcheckbox("overwrite", OVERWRITE); ctlposition(c1,190, 5, 78); c0 = ctlchoice("", RecentType, @" Absolute"," Add / Sub"," Multiple"," Divide"," Copy"@, true); ctlposition(c0,184, 28, 84); v1 = ctlpercent("",1.0); ctlposition(v1,185,134, 74); v2 = ctlnumber("", 1.0); ctlposition(v2,185,134, 74); d0 = ctlsep(0,78); ctlposition(d0,190,129); d1 = ctlsep(0,78); ctlposition(d1,190,157); ctlactive( c0, "maskInputPerVal", v1); ctlactive( c0, "maskInputNumVal", v2); ctlvisible(c0, "maskInputPerVal", v1); ctlvisible(c0, "maskInputNumVal", v2); ctlactive( d0, "lb_InitMap", d1); return if !reqpost(); var SelMap = getvalue(l0); var SelType = getvalue(c0); var OvMode = getvalue(c1); var PerVal = getvalue(v1); var NumVal = getvalue(v2); reqend(); if(SelMap == nil){ error("
Not Select"); return; } var SelNum = SelMap.size(); var Val; editbegin(); switch(SelType){ // SET case 1: if(OvMode){ for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); for(i = 1; i <= SelPts; i++) vmap.setValue(points[i], PerVal); } }else{ for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); for(i = 1; i <= SelPts; i++) if(vmap.isMapped(points[i])) vmap.setValue(points[i], PerVal); } } break; // ADD SUB case 2: for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); for(i = 1; i <= SelPts; i++){ if(vmap.isMapped(points[i])){ (Val) = vmap.getValue(points[i]); Val += PerVal; vmap.setValue(points[i], Val); }else if(OvMode){ vmap.setValue(points[i], PerVal); } } } break; // MULTI case 3: if(NumVal == 0.0){ for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); for(i = 1; i <= SelPts; i++) if(vmap.isMapped(points[i])) vmap.setValue(points[i], 0.0); } }else{ for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); for(i = 1; i <= SelPts; i++){ if(vmap.isMapped(points[i])){ (Val) = vmap.getValue(points[i]); Val *= NumVal; vmap.setValue(points[i], Val); } } } } break; // DIVIDE case 4: if(NumVal == 0.0){ editend(ABORT); error("
Ooops! 0 Divide."); return; } for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); for(i = 1; i <= SelPts; i++){ if(vmap.isMapped(points[i])){ (Val) = vmap.getValue(points[i]); Val /= NumVal; vmap.setValue(points[i], Val); } } } break; // COPY case 5: if(OvMode){ for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); if(vmap.isMapped(points[1])){ (Val) = vmap.getValue(points[1]); for(i = 2; i <= SelPts; i++) vmap.setValue(points[i], Val); }else{ for(i = 2; i <= SelPts; i++) vmap.setValue(points[i], nil); } } }else{ for(c = 1; c <= SelNum; c++){ vmap = VMap(VMWEIGHT, VMapNames[SelMap[c]]); if(vmap.isMapped(points[1])){ (Val) = vmap.getValue(points[1]); for(i = 2; i <= SelPts; i++) if(vmap.isMapped(points[i])) vmap.setValue(points[i], Val); } } } break; default: break; } editend(); var CurrentMap; CurrentMap = VMapNames[SelMap[1]]; for(i = 2; i <= SelNum; i++) CurrentMap = CurrentMap + "," + VMapNames[SelMap[i]]; if(RecentMap != CurrentMap) store("RecentMap", CurrentMap); if(RecentType != SelType) store("RecentType", SelType); } // ---------------------------- maskInputPerVal: v { if(v <= 2) return(true); else return(false); } maskInputNumVal: v { if((v >= 3)&&(v != 5)) return(true); else return(false); } @if version != 2.5 lb_CurrentMap { if(CurBlock != nil) setvalue(l0, CurBlock); } lb_CurrentMapAdd { var TempBlock; if(CurBlock != nil){ TempBlock = getvalue(l0); if(TempBlock == nil){ setvalue(l0, CurBlock); }else{ i = TempBlock.size() + 1; TempBlock[i] = CurBlock[1]; TempBlock.sortA(); TempBlock.reduce(); setvalue(l0, TempBlock); } } } @end lb_RecentMap { if(RBlock != nil) setvalue(l0, RBlock); } lb_RecentMapAdd { var TempBlock; if(RBlock != nil){ TempBlock = getvalue(l0); if(TempBlock == nil){ setvalue(l0, RBlock); }else{ c = TempBlock.size() + 1; for(i = 1; i <= RBlock.size(); i++){ TempBlock[c] = RBlock[i]; c++; } TempBlock.sortA(); TempBlock.reduce(); setvalue(l0, TempBlock); } } } lb_InitMap: v { if(InitBlock != nil) setvalue(l0, InitBlock); } lb_Count { return(MapNum); } lb_Name: Index { return(VMapNames[Index]); } lb_AllSelect { setvalue(l0, AllBlock); } lb_AllDeselect { setvalue(l0, nil); }