/************************************************************************* * Copyright © 2018-2023 Liwen All rights reserved. *------------------------------------------------------------------------ * File : OsgbLoader.cs * Description : load osgb format tile interface *------------------------------------------------------------------------ * Author : Liwen * Version : 6.0.0 * Date : 1/5/2019 * Description : Initial development version. *************************************************************************/ using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Runtime.InteropServices; using System; namespace AIPagedLod { public class B3dmLoader { #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern IntPtr LoadB3dmFromData(ref byte data, int length); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern IntPtr OpenB3dmFile(string file); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern void CloseB3dmFile(IntPtr ptr); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetMeshCount(IntPtr ptr); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetVertexCount(IntPtr ptr, int index); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern IntPtr GetVertexPointer(IntPtr ptr, int meshIndex, int vertexIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif private static extern void GetVertexs(IntPtr ptr, int meshIndex, ref float vertexs); public static Vector3[] GetVertexs(IntPtr ptr, int meshIndex, bool isDaJiangData) { int vertexCount = GetVertexCount(ptr, meshIndex); Vector3[] results = new Vector3[vertexCount]; if (vertexCount > 0) { float[] vertexs = new float[vertexCount * 3]; GetVertexs(ptr, meshIndex, ref vertexs[0]); int index = 0; int scaleValue = isDaJiangData ? 100000 : 1; for (int i = 0; i < vertexs.Length; i = i + 3) { float cesiumX = vertexs[i]; float cesiumY = vertexs[i + 1]; float cesiumZ = vertexs[i + 2]; results[index] = new Vector3(cesiumX, cesiumZ, cesiumY); index++; } } return results; } #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetTriangleCount(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern IntPtr GetTrianglePointer(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern void GetTriangles(IntPtr ptr, int meshIndex,ref int triangles ); public static int[] GetTriangles(IntPtr ptr, int meshIndex, bool isDaJiangData) { int count = GetTriangleCount(ptr, meshIndex); int[] array = new int[count]; if (count > 0) { GetTriangles(ptr, meshIndex, ref array[0]); for (int i = 1; i < array.Length; i = i + 3) { int t = array[i]; array[i] = array[i + 1]; array[i + 1] = t; } } return array; } #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetImageSize(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern IntPtr GetImagePointer(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetImageResolutionS(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetImageResolutionT(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetImageFormat(IntPtr ptr, int meshIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif private static extern void GetImageData(IntPtr ptr, int meshIndex,ref byte iamgeData); public static byte[] GetImageData(IntPtr ptr, int meshIndex) { int imageSize = GetImageSize(ptr,meshIndex); byte[] imageData = new byte[imageSize]; if (imageSize > 0) { GetImageData(ptr, meshIndex, ref imageData[0]); } return imageData; } #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern int GetTexCoordCount(IntPtr ptr, int index); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif public static extern IntPtr GetTexCoordPointer(IntPtr ptr, int meshIndex, int texCoordIndex); #if UNITY_EDITOR [DllImport("3dTilesReader")] #elif UNITY_WEBGL [DllImport("__Internal")] #elif UNITY_ANDROID [DllImport("lib3dTilesReader")] #else [DllImport("3dTilesReader")] #endif private static extern void GetTexCoords(IntPtr ptr, int meshIndex, ref float texCoords); public static Vector2[] GetTexCoords(IntPtr ptr, int meshIndex) { int vertexCount = GetTexCoordCount(ptr, meshIndex); Vector2[] results = new Vector2[vertexCount]; if (vertexCount > 0) { float[] texCoords = new float[vertexCount * 2]; GetTexCoords(ptr, meshIndex, ref texCoords[0]); int index = 0; for (int i = 0; i < texCoords.Length; i = i + 2) { results[index] = new Vector3(texCoords[i], texCoords[i + 1]); index++; } } return results; } } }