public PartDescription(int indexStart, int indexCount, TagRef <ShaderTag> shader, MeshElementType elementType) { IndexStart = indexStart; IndexCount = indexCount; Shader = shader; ElementType = elementType; }
internal static extern void Mesh_QuerySphere( IntPtr meshPtr, double cx, double cy, double cz, double radius, ref IntPtr retIndices, ref int numIndices, MeshElementType element);
private static int[] QueryMesh(Mesh mesh, BoundingBox box, MeshElementType element) { IntPtr meshPtr = mesh.ToUnmanagedMesh(); IntPtr retIndicesPtr = IntPtr.Zero; int nIndices = 0; Unsafe.Mesh_QueryBox(meshPtr, box.ToArray(), ref retIndicesPtr, ref nIndices, element); int[] retIndices = new int[nIndices]; Marshal.Copy(retIndicesPtr, retIndices, 0, nIndices); Unsafe.ReleaseInt(retIndicesPtr, true); Unsafe.Mesh_Delete(meshPtr); return(retIndices); }
private static int[] QueryMesh(Mesh mesh, Point3d center, double radius, MeshElementType element) { IntPtr meshptr = mesh.ToUnmanagedMesh(); IntPtr retIndicesPtr = IntPtr.Zero; int nIndices = 0; Unsafe.Mesh_QuerySphere(meshptr, center.X, center.Y, center.Z, radius, ref retIndicesPtr, ref nIndices, element); int[] retIndices = new int[nIndices]; Marshal.Copy(retIndicesPtr, retIndices, 0, nIndices); Unsafe.ReleaseInt(retIndicesPtr, true); Unsafe.Mesh_Delete(meshptr); return(retIndices); }
internal static extern void Mesh_QueryBox( IntPtr meshPtr, [MarshalAs(UnmanagedType.LPArray)] double[] bounds, ref IntPtr retIndices, ref int numIndices, MeshElementType element);