ある ObjectSpace で記述されている位置を、異なる ObjectSpace での位置に変換します。
SIVector3 XSIMath.MapObjectPositionToObjectSpace( SITransformation in_pObjectSpace, SITransformation in_pSpace, SIVector3 in_pPosition ); |
oReturn = XSIMath.MapObjectPositionToObjectSpace( ObjectSpace, Space, Position ); |
SIVector3(位置)
パラメータ | タイプ | 説明 |
---|---|---|
ObjectSpace | SITransformation | 位置が記述されている ObjectSpace |
Space | SITransformation | 位置を変換する先の ObjectSpace |
Position | SIVector3 | 変換する位置 |
var oCube = ActiveSceneRoot.AddGeometry("Cube","MeshSurface"); oCube.Kinematics.Global.Parameters("posy").value = 4.0; oCube.Kinematics.Global.Parameters("posx").value = 2.0; var oGrid = ActiveSceneRoot.AddGeometry("Grid", "MeshSurface"); oGrid.Kinematics.Global.Parameters("posy").value = -2.0; if( Above(oCube, oGrid) ) Application.LogMessage ( "The Cube is above the Grid" ); else Application.LogMessage ( "The Cube is not above the Grid" ); //Function that returns true if in_obj1 is above in_obj2. //Which means that all " y" values of in_obj1 vertices relative to in_obj2 are bigger //than in_obj2 "y" values function Above(in_obj1, in_obj2) { var l_trans1, l_trans2, l_pos, l_biggesty; l_biggesty = 0; var oGeometry2 = in_obj2.activeprimitive.geometry; var l_nbPoints = oGeometry2.Points.Count; //Determine the upper position on in_obj2 for(var i = 0; i < l_nbPoints; i++) { if (oGeometry2.Points(i).position.y > l_biggesty) l_biggesty = oGeometry2.Points(i).position.y; } l_trans1 = in_obj1.Kinematics.Global.Transform; l_trans2 = in_obj2.Kinematics.Global.Transform; var oGeometry1 = in_obj1.activeprimitive.geometry; l_nbPoints = oGeometry1.Points.Count; //Determine if all vertices of in_obj1 are above in_obj2 for(var i = 0; i < l_nbPoints; i++) { l_pos = oGeometry1.Points(i).position; l_pos = XSIMath.MapObjectPositionToObjectSpace(l_trans1, l_trans2, l_pos);; if( l_pos.y < l_biggesty ) return false; } return true; } //OUTPUT //INFO : The Cube is above the Grid |
set oRoot = Application.ActiveProject.ActiveScene.Root set oCube = oRoot.AddGeometry("Cube","MeshSurface") oCube.Kinematics.Global.Parameters("posy").value = 4.0 oCube.Kinematics.Global.Parameters("posx").value = 2.0 set oGrid = oRoot.AddGeometry("Grid", "MeshSurface") oGrid.Kinematics.Global.Parameters("posy").value = -2.0 if Above(oCube, oGrid) then Application.LogMessage "The Cube is above the Grid" else Application.LogMessage "The Cube is not above the Grid" end if 'Function that returns true if in_obj1 is above in_obj2. 'Which means that all " y" values of in_obj1 vertices relative to in_obj2 are bigger 'than in_obj2 "y" values Function Above(in_obj1, in_obj2) Dim l_trans1, l_trans2, l_pos, l_biggesty l_biggesty = 0 'Determine the upper position on in_obj2 for each p in in_obj2.activeprimitive.geometry.points if p.position.y > l_biggesty then l_biggesty = p.position.y end if next set l_trans1 = in_obj1.Kinematics.Global.Transform set l_trans2 = in_obj2.Kinematics.Global.Transform 'Determine if all vertices of in_obj1 are above in_obj2 for each p in in_obj1.activeprimitive.geometry.points set l_pos = p.position set l_pos = xsimath.MapObjectPositionToObjectSpace(l_trans1, l_trans2, l_pos) if l_pos.y < l_biggesty then Above = False Exit Function end if next Above = True End Function |