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