v6.0
Returns a PointLocatorData object containing the surface intersections found
by raycasting from the specified input positions and rays. By default, input positions have to be
defined in the object's local space reference.
In order to use this method you first need to specify siClosestSurfaceRaycastIntersection
in the Method argument of Geometry.SetupPointLocatorQueries.
When you call this method an acceleration cache is automatically created.
See Geometry.SetupPointLocatorQueries for more information.
Notice that the returned point locators can be evaluated on any Geometry
instance having the same topology.
PointLocatorData Geometry.GetRaycastIntersections( Object in_pPositions, Object in_pRays, siLineIntersectionType in_eLineType ); |
oReturn = Geometry.GetRaycastIntersections( Positions, Rays, LineType ); |
Parameter | Type | Description |
---|---|---|
Positions | Array | An array of Doubles, either formatted as a 1D array of packed XYZ triplets, or as a 2D array of XYZ triplets. |
Rays | Array | An array of Doubles, either formatted as a 1D array of packed XYZ triplets, or as a 2D array of XYZ triplets. Each one of these rays defines the vector used for the raycasting and whose length is important if you pass siSegmentIntersection for the LineType argument. |
LineType | siLineIntersectionType |
The type of line. Default Value: 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