public void GetElements(out ElementTypes[] elementTypes, out long[][] elementTags, out long[][] nodeTags, int dim = -1, int tag = -1) { IntPtr api_elementTypesPtr = IntPtr.Zero; IntPtr api_elementTagsPtr = IntPtr.Zero; IntPtr api_elementTags_nPtr = IntPtr.Zero; IntPtr api_nodeTags_Ptr = IntPtr.Zero; IntPtr api_nodeTags_nPtr = IntPtr.Zero; ulong api_api_elementTypes_n = 0; ulong api_elementTags_nn = 0; ulong api_nodeTags_nn = 0; GMshNativeMethods.gmshModelMeshGetElements(ref api_elementTypesPtr, ref api_api_elementTypes_n, ref api_elementTagsPtr, ref api_elementTags_nPtr, ref api_elementTags_nn, ref api_nodeTags_Ptr, ref api_nodeTags_nPtr, ref api_nodeTags_nn, dim, tag, ref ierr); if (ierr != 0) { throw new GMshException(ierr); } int[] elementTypesInt = new int[api_api_elementTypes_n]; if (api_api_elementTypes_n != 0) { Marshal.Copy(api_elementTypesPtr, elementTypesInt, 0, api_api_elementTypes_n.Toint()); } elementTypes = elementTypesInt.Select(e => (ElementTypes)e).ToArray(); api_elementTypesPtr.GmshFree(); long[] api_elementTags_n = new long[api_elementTags_nn]; elementTags = new long[api_elementTags_nn][]; if (api_elementTags_nn != 0) { var n = api_elementTags_nn.Toint(); Marshal.Copy(api_elementTags_nPtr, api_elementTags_n, 0, n); IntPtr[] ptrs = new IntPtr[api_elementTags_nn]; Marshal.Copy(api_elementTagsPtr, ptrs, 0, n); for (int i = 0; i < ptrs.Length; i++) { long[] ss = new long[api_elementTags_n[i]]; Marshal.Copy(ptrs[i], ss, 0, api_elementTags_n[i].Toint()); elementTags[i] = ss; ptrs[i].GmshFree(); } } api_elementTagsPtr.GmshFree(); api_elementTags_nPtr.GmshFree(); long[] api_nodeTags_n = new long[api_nodeTags_nn]; nodeTags = new long[api_nodeTags_nn][]; if (api_nodeTags_nn != 0) { var n = api_nodeTags_nn.Toint(); Marshal.Copy(api_nodeTags_nPtr, api_nodeTags_n, 0, n); IntPtr[] ptrs = new IntPtr[api_nodeTags_nn]; Marshal.Copy(api_nodeTags_Ptr, ptrs, 0, n); for (int i = 0; i < ptrs.Length; i++) { long[] ss = new long[api_nodeTags_n[i]]; Marshal.Copy(ptrs[i], ss, 0, api_nodeTags_n[i].Toint()); nodeTags[i] = ss; ptrs[i].GmshFree(); } } api_nodeTags_Ptr.GmshFree(); api_nodeTags_nPtr.GmshFree(); }