// Points Set Align 0.326 @name "PointsSetAlign" @version 2.6 @warnings @script modeler @define DESCRIPT "Points Set Align" var SrcVec[6]; var vx,vy,vz,cx,cy,cz; var AllFlag = true; // LS2.7用フラグ var StoreFlagX = false; var StoreFlagY = false; var StoreFlagZ = false; 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 Select"); return; } selmode(USER); editbegin(); SrcVec[1] = pointinfo(points[1]); SrcVec[2] = pointinfo(points[SelPts]); editend(); var BoxLow, BoxHigh; (BoxLow, BoxHigh) = boundingbox(); SrcVec[3] = BoxLow; SrcVec[4] = center(BoxLow, BoxHigh); SrcVec[5] = BoxHigh; SrcVec[6] = <0.0,0.0,0.0>; // 90/92/93 は変化の無いeditbeginでもUndoバッファを消費する // boundingboxでもUndoバッファを消費する @if version < 2.2 undo(); undo(); @end @if version > 2.7 undo(); undo(); @end reqbegin(DESCRIPT); reqsize(300,110); c0 = ctlchoice("", 1, @" 1st"," Last"," Min","Center"," Max"," Zero"@, false); ctlposition(c0, 3, 2,270); cx = ctlcheckbox(" X", false); ctlposition(cx, 9,22,84); cy = ctlcheckbox(" Y", false); ctlposition(cy, 99,22,84); cz = ctlcheckbox(" Z", false); ctlposition(cz,189,22,84); ca = ctlbutton(" ",16, "checkAll"); ctlposition(ca,279,22); vx = ctldistance("", SrcVec[1].x); ctlposition(vx, 3,42,90); vy = ctldistance("", SrcVec[1].y); ctlposition(vy, 93,42,90); vz = ctldistance("", SrcVec[1].z); ctlposition(vz,183,42,90); ctlrefresh(c0, "changeVal"); ctlrefresh(vx, "changeFlagX"); ctlrefresh(vy, "changeFlagY"); ctlrefresh(vz, "changeFlagZ"); return if !reqpost(); var XOn = getvalue(cx); var YOn = getvalue(cy) * 2; var ZOn = getvalue(cz) * 4; var VecX = getvalue(vx); var VecY = getvalue(vy); var VecZ = getvalue(vz); reqend(); editbegin(); switch(XOn + YOn + ZOn){ case 1: for(i = 1; i <= SelPts; i++) pointmove(points[i], ); break; case 2: for(i = 1; i <= SelPts; i++) pointmove(points[i], ); break; case 3: for(i = 1; i <= SelPts; i++) pointmove(points[i], ); break; case 4: for(i = 1; i <= SelPts; i++) pointmove(points[i], ); break; case 5: for(i = 1; i <= SelPts; i++) pointmove(points[i], ); break; case 6: for(i = 1; i <= SelPts; i++) pointmove(points[i], ); break; case 7: var Vec = ; for(i = 1; i <= SelPts; i++) pointmove(points[i], Vec); break; default: info(" No Select Axis"); break; } editend(); } // ------------------------------ checkAll { f = getvalue(cx); f += getvalue(cy); f += getvalue(cz); if((f >= 1)&& AllFlag){ AllFlag = 0; }else if((f == 0)&& !AllFlag){ AllFlag = 1; } setvalue(cx, AllFlag); setvalue(cy, AllFlag); setvalue(cz, AllFlag); AllFlag ^= 1; } changeVal: v { // LS2.6以降ではchangeVal→changeFlagAの流れが、changeFlagA→changeValの順に実行される setvalue(vx, SrcVec[v].x); setvalue(vy, SrcVec[v].y); setvalue(vz, SrcVec[v].z); setvalue(cx, StoreFlagX); setvalue(cy, StoreFlagY); setvalue(cz, StoreFlagZ); } changeFlagX: v { StoreFlagX = getvalue(cx); setvalue(cx, true); } changeFlagY: v { StoreFlagY = getvalue(cy); setvalue(cy, true); } changeFlagZ: v { StoreFlagZ = getvalue(cz); setvalue(cz, true); }