// Point Value Round 0.116 // 頂点座標値を丸める @name "PointValueRound" @version 2.5 @warnings @script modeler @define DESCRIPT "Point Value Round" @define DEFAULT_ROUND 6 // 0.123-456-789x // m mm um 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; } reqbegin(DESCRIPT); reqsize(265,100); cx = ctlcheckbox("X", true); ctlposition(cx, 6, 4); cy = ctlcheckbox("Y", true); ctlposition(cy, 6,24); cz = ctlcheckbox("Z", true); ctlposition(cz, 6,44); c1 = ctlchoice("", DEFAULT_ROUND, @"0","1","2","3","4","5","6","7","8"@, false); ctlposition(c1, 84, 4); tx1 = ctltext("","Eval : "); ctlposition(tx1,58, 8); tx2 = ctltext("", "* . 0 1 2 . 3 4 5 . 6 7 8 .-"); ctlposition(tx2,80,24); tx3 = ctltext("", " m mm um ??"); ctlposition(tx3,82,35); return if !reqpost(); var XOn = getvalue(cx); var YOn = getvalue(cy) * 2; var ZOn = getvalue(cz) * 4; var RNum = getvalue(c1) - 1; reqend(); // マイナス値にround(n,0)すると変なので、0の時は-1倍してから処理し、後に-1倍する。 // 見えない所での誤差は気にする必要はなさげ。LS2.11で改訂された。 var SrcVec; editbegin(); switch(XOn + YOn + ZOn){ case 1: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.x = round(SrcVec.x, RNum); @else if((RNum == 0) && (SrcVec.x < 0.0)) SrcVec.x = round(SrcVec.x * -1.0, 0) * -1.0; else SrcVec.x = round(SrcVec.x, RNum); @end pointmove(points[i], SrcVec); } break; case 2: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.y = round(SrcVec.y, RNum); @else if((RNum == 0) && (SrcVec.y < 0.0)) SrcVec.y = round(SrcVec.y * -1.0, 0) * -1.0; else SrcVec.y = round(SrcVec.y, RNum); @end pointmove(points[i], SrcVec); } break; case 3: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.x = round(SrcVec.x, RNum); SrcVec.y = round(SrcVec.y, RNum); @else if(RNum == 0){ if(SrcVec.x < 0.0) SrcVec.x = round(SrcVec.x * -1.0, 0) * -1.0; else SrcVec.x = round(SrcVec.x, RNum); if(SrcVec.y < 0.0) SrcVec.y = round(SrcVec.y * -1.0, 0) * -1.0; else SrcVec.y = round(SrcVec.y, RNum); }else{ SrcVec.x = round(SrcVec.x, RNum); SrcVec.y = round(SrcVec.y, RNum); } @end pointmove(points[i], SrcVec); } break; case 4: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.z = round(SrcVec.z, RNum); @else if((RNum == 0) && (SrcVec.z < 0.0)) SrcVec.z = round(SrcVec.z * -1.0, 0) * -1.0; else SrcVec.z = round(SrcVec.z, RNum); @end pointmove(points[i], SrcVec); } break; case 5: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.x = round(SrcVec.x, RNum); SrcVec.z = round(SrcVec.z, RNum); @else if(RNum == 0){ if(SrcVec.x < 0.0) SrcVec.x = round(SrcVec.x * -1.0, 0) * -1.0; else SrcVec.x = round(SrcVec.x, RNum); if(SrcVec.z < 0.0) SrcVec.z = round(SrcVec.z * -1.0, 0) * -1.0; else SrcVec.z = round(SrcVec.z, RNum); }else{ SrcVec.x = round(SrcVec.x, RNum); SrcVec.z = round(SrcVec.z, RNum); } @end pointmove(points[i], SrcVec); } break; case 6: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.y = round(SrcVec.y, RNum); SrcVec.z = round(SrcVec.z, RNum); @else if(RNum == 0){ if(SrcVec.y < 0.0) SrcVec.y = round(SrcVec.y * -1.0, 0) * -1.0; else SrcVec.y = round(SrcVec.y, RNum); if(SrcVec.z < 0.0) SrcVec.z = round(SrcVec.z * -1.0, 0) * -1.0; else SrcVec.z = round(SrcVec.z, RNum); }else{ SrcVec.y = round(SrcVec.y, RNum); SrcVec.z = round(SrcVec.z, RNum); } @end pointmove(points[i], SrcVec); } break; case 7: for(i = 1; i <= SelPts; i++){ SrcVec = pointinfo(points[i]); @if version < 2.2 SrcVec.x = round(SrcVec.x, RNum); SrcVec.y = round(SrcVec.y, RNum); SrcVec.z = round(SrcVec.z, RNum); @else if(RNum == 0){ if(SrcVec.x < 0.0) SrcVec.x = round(SrcVec.x * -1.0, 0) * -1.0; else SrcVec.x = round(SrcVec.x, RNum); if(SrcVec.y < 0.0) SrcVec.y = round(SrcVec.y * -1.0, 0) * -1.0; else SrcVec.y = round(SrcVec.y, RNum); if(SrcVec.z < 0.0) SrcVec.z = round(SrcVec.z * -1.0, 0) * -1.0; else SrcVec.z = round(SrcVec.z, RNum); }else{ SrcVec.x = round(SrcVec.x, RNum); SrcVec.y = round(SrcVec.y, RNum); SrcVec.z = round(SrcVec.z, RNum); } @end pointmove(points[i], SrcVec); } break; default: info("
No Select Axis"); break; } editend(); }