v6.0
指定した入力位置と配列からレイキャストを介して検索されたサーフェイス交点を含むPointLocatorDataオブジェクトを戻します。デフォルトでは、入力位置はオブジェクトのローカル空間リファレンスに定義する必要があります。
このメソッドを使用するには、まずGeometry.SetupPointLocatorQueriesの Method 引数で siClosestSurfaceRaycastIntersection を指定する必要があります。
このメソッドを呼び出すと、高速化用のキャッシュが自動的に作成されます。詳細については、Geometry.SetupPointLocatorQueries を参照してください。
同じトポロジを持つ任意の Geometry インスタンスについてポイントロケータが計算され、戻される場合があります。
PointLocatorData Geometry.GetRaycastIntersections( Object in_pPositions, Object in_pRays, siLineIntersectionType in_eLineType ); |
oReturn = Geometry.GetRaycastIntersections( Positions, Rays, LineType ); |
パラメータ | タイプ | 説明 |
---|---|---|
Positions | Array | パックされたXYZトリプレットの 1D 配列または XYZトリプレットの 2D 配列のいずれかの書式のDouble配列。 |
レイ | Array | パックされたXYZトリプレットの 1D 配列または XYZトリプレットの 2D 配列のいずれかの書式のDouble配列。これらのレイがそれぞれ、レイキャストで使用されるベクトルを定義します。ベクトルの長さは、LineType 引数の SiSegmentIntersection を渡す場合に重要です。 |
LineType | siLineIntersectionType |
ラインのタイプです。 デフォルト値:siSemiLineIntersection |
/* Example using GetRaycastIntersections to find the intersection with a ray and a mesh sphere */ NewScene(); var NullObj = Application.ActiveSceneRoot.AddNull(); Translate(NullObj, -2.0, 8.0, 5.0, siRelative, siView, siObj, siXYZ); var SphereObj = Application.ActiveSceneRoot.AddGeometry("Sphere", "MeshSurface"); var SphereGeom = SphereObj.ActivePrimitive.Geometry; var vbArr = new VBArray( NullObj.Kinematics.Global.Transform.GetTranslationValues2() ); var array = vbArr.toArray(); var vbArr2 = new VBArray( SphereObj.Kinematics.Global.Transform.GetTranslationValues2() ); var array2 = vbArr2.toArray(); array2[0] = array2[0] - array[0]; array2[1] = array2[1] - array[1]; array2[2] = array2[2] - array[2]; var ClosestPointLocator = SphereGeom.GetRaycastIntersections( array, array2 ); var ClosestPosition = SphereGeom.EvaluatePositions(ClosestPointLocator).toArray(); var TriangleVertices = SphereGeom.GetTriangleVertexIndexArray(ClosestPointLocator).toArray(); var TriangleWeights = SphereGeom.GetTriangleWeightArray(ClosestPointLocator).toArray(); Application.LogMessage("The intersection of the mesh sphere and the ray starting where the Null is and ending at 0,0,0 is (" + ClosestPosition[0] + ", " + ClosestPosition[1] + ", " + ClosestPosition[2] + ")"); Application.LogMessage("which corresponds to the triangle made of vertices (" + TriangleVertices[0] + ", " + TriangleVertices[1] + ", " + TriangleVertices[2] + ")."); Application.LogMessage("The barycentric weight relatively to each triangle vertex is (" + TriangleWeights[0] + ", " + TriangleWeights[1] + ", " + TriangleWeights[2] + ")."); //INFO : The intersection of the mesh sphere and the ray starting where the Null is and ending at 0,0,0 is (-0.7933665513992314, 3.1734662419917105, 1.9834164080087983) //INFO : which corresponds to the triangle made of vertices (14, 21, 22). //INFO : The barycentric weight relatively to each triangle vertex is (0.3966832756996155, 0.20538949966430664, 0.3979272246360779). |
PointLocatorData Geometry Geometry.GetClosestLocations Geometry.SetupPointLocatorQueries Geometry.GetSurfacePointLocatorsFromPoints Geometry.EvaluatePositions Geometry.EvaluateNormals Geometry.EvaluateClusterProperty PolygonMesh.GetPolygonIndexArray PolygonMesh.GetTriangleVertexIndexArray PolygonMesh.GetTriangleNodeIndexArray PolygonMesh.GetTriangleWeightArray PolygonMesh.ConstructPointLocators NurbsSurfaceMesh.GetSubSurfaceIndexArray NurbsSurfaceMesh.GetNormalizedUVArray NurbsSurfaceMesh.ConstructPointLocators