/**************************************
指定した大きさになるように
スケーリングする***************************************/
@script modeler
@name ScaleTo
@version 2.3main
{
axis = @"X","Y","Z"@;
indexAxis = 2;
val = 1.0;
rog = true;
reqbegin("Scale to");
c1 = ctlchoice("Axis", indexAxis, axis, false);
c2 = ctldistance("Scale to", val);
c3 = ctlcheckbox("Rest on ground", rog);
return if !reqpost();
indexAxis = getvalue(c1);
val = getvalue(c2);
rog = getvalue(c3);
reqend();
fglayers = lyrfg();
numfg = sizeof(fglayers);
bbox = @<0.0, 0.0, 0.0>, <0.0, 0.0, 0.0>@;
for(i=1; i<=numfg; i++){
tempbbox = boundingbox(fglayers[i]);
if( tempbbox[1].x < bbox[1].x) bbox[1].x = tempbbox[1].x;
if( tempbbox[1].y < bbox[1].y) bbox[1].y = tempbbox[1].y;
if( tempbbox[1].z < bbox[1].z) bbox[1].z = tempbbox[1].z;
if( tempbbox[2].x > bbox[2].x) bbox[2].x = tempbbox[2].x;
if( tempbbox[2].y > bbox[2].y) bbox[2].y = tempbbox[2].y;
if( tempbbox[2].z > bbox[2].z) bbox[2].z = tempbbox[2].z;
}
if( 1 == indexAxis ) orgScale = bbox[2].x - bbox[1].x;
else if( 2 == indexAxis ) orgScale = bbox[2].y - bbox[1].y;
else orgScale = bbox[2].z - bbox[1].z;
if( true == rog ) move(0, -bbox[1].y, 0);
scl = val / orgScale;
scale(<scl, scl, scl>);
}