123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- /*************************************************************************
- * 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;
- }
- }
- }
|