Sadly it only works when the Object got no Transformations on
it.
To get a BoundingBox, you could try to modify this, so that
it keeps the lowest/highest X/Y/Z-Component and Outputs them
(See the CustomICE-Node-Example "Get BoundingBox", thats
exactly the thing i would do in jScript to get a BoundingBox)
var
oSel = selection(0);
var
oSelCtr = Sel_Center(oSel);
var
vVecX = oSelCtr[0];
var
vVecY = oSelCtr[1];
var
vVecZ = oSelCtr[2];
var
vRotX = oSelCtr[3];
var
vRotY = oSelCtr[4];
var
vRotZ = oSelCtr[5];
//
------------------------------------------------------------------------
// Get Selection Center
function Sel_Center(oSel)
{
var
vAllVerts = 0;
var
vPosX = 0;
var vPosY = 0; var vPosZ = 0;
var
vNrmX = 0;
var vNrmY = 0; var vNrmZ = 0;
var
oSelType = oSel.Type;
switch (oSelType)
{
//
If Poly or Edge
case
"polySubComponent":
case
"edgeSubComponent":
var
vSubCompCount = oSel.SubComponent.ComponentCollection.Count;
for
(i=0; i<vSubCompCount; i++)
{
var
vVertCount =
oSel.SubComponent.ComponentCollection.Item(i).Vertices.Count;
for
(j=0; j<vVertCount; j++)
{
var
vAllVerts
=
vAllVerts + 1;
var
vPosX = vPosX
+
oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Position.x;
var
vPosY = vPosY
+
oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Position.y;
var
vPosZ = vPosZ
+
oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Position.z;
var
vNrmX = vNrmX
+
oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Normal.x;
var
vNrmY = vNrmY
+
oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Normal.y;
var
vNrmZ = vNrmZ
+
oSel.SubComponent.ComponentCollection.Item(i).Vertices(j).Normal.z;
}
// for j End
}
// for i End
break;
// Case End
//
If Vertex
case
"pntSubComponent":
var
vAllVerts
=
oSel.SubComponent.ComponentCollection.Count;
for
(i=0; i<vAllVerts; i++)
{
var
vPosX = vPosX
+ oSel.SubComponent.ComponentCollection.Item(i).Position.x;
var
vPosY = vPosY
+ oSel.SubComponent.ComponentCollection.Item(i).Position.y;
var
vPosZ = vPosZ
+ oSel.SubComponent.ComponentCollection.Item(i).Position.z;
var
vNrmX = vNrmX
+ oSel.SubComponent.ComponentCollection.Item(i).Normal.x;
var
vNrmY = vNrmY
+ oSel.SubComponent.ComponentCollection.Item(i).Normal.y;
var
vNrmZ = vNrmZ
+ oSel.SubComponent.ComponentCollection.Item(i).Normal.z;
}
// for i End
break;
//If
Selection =/= Poly/Vertex/Edge
default:
var
vAllVerts = 1;
} //Switch
End
//Convert
Normal-Direction to Rotation
var
vecWorldX
=
XSIMath.CreateVector3(); vecWorldX.Set (1,0,0);
var
vecWorldY
=
XSIMath.CreateVector3(); vecWorldY.Set (0,1,0);
var
vecWorldZ
=
XSIMath.CreateVector3(); vecWorldZ.Set (0,0,1);
var
vecNrmX = XSIMath.CreateVector3(); vecNrmX.Set ( vNrmX/vAllVerts, vNrmY/vAllVerts, vNrmZ/vAllVerts);
var
vecNrmY = XSIMath.CreateVector3(); vecNrmY.Set ( 0, vNrmY/vAllVerts, vNrmZ/vAllVerts);
var
vecNrmZ = XSIMath.CreateVector3(); vecNrmZ.Set ( 0, 0, vNrmZ/vAllVerts);
var
vRotX = vecNrmX.Dot (vecWorldX);
var
vRotY = vecNrmY.Dot (vecWorldY);
var
vRotZ = vecNrmZ.Dot (vecWorldZ);
LogMessage
("Position: X: " + vPosX/vAllVerts + " / Y: " +
vPosY/vAllVerts + " / Z: " + vPosZ/vAllVerts);
LogMessage
("Rotation: X: " + vRotX + " / Y: " + vRotY + " / Z: " +
vRotZ);
return
[vPosX/vAllVerts, vPosY/vAllVerts, vPosZ/vAllVerts, vRotX,
vRotY, vRotZ]
}
//
------------------------------------------------------------------------