| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | 
							- /*************************************************************************
 
-  *  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 OsgbLoader
 
-     {
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetCC")]
 
-         public static extern bool GetOsgbFileCenter(string file, ref float center);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "OpenXXFile")]
 
-         public static extern IntPtr OpenOsgbFile(string file);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "OpenXXFileEx")]
 
-         public static extern IntPtr OpenOsgbFileEx(string file);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "CloseXXFile")]
 
-         public static extern void CloseOsgbFile(IntPtr ptr);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetMCC")]
 
-         public static extern int GetMeshCount(IntPtr ptr);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetVCC")]
 
-         public static extern int GetVertexCount(IntPtr ptr, int index);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetVP")]
 
-         public static extern IntPtr GetVertexPointer(IntPtr ptr, int meshIndex, int vertexIndex);
 
-         public static Vector3 GetVertex(IntPtr ptr)
 
-         {
 
-             float[] array = new float[3];
 
-             Marshal.Copy(ptr, array, 0, 3);
 
-             return new Vector3(-array[0], array[1], array[2]);
 
-         }
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetVS")]
 
-         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)
 
-                 {
 
-                     results[index] = new Vector3(vertexs[i] * scaleValue, vertexs[i + 2], vertexs[i + 1] * scaleValue);
 
-                     //results[index] = new Vector3(vertexs[i] * scaleValue, -vertexs[i + 1] * scaleValue, vertexs[i + 2]);
 
-                     index++;
 
-                 }
 
-             }
 
-             return results;
 
-         }
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetTCC")]
 
-         public static extern int GetTriangleCount(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetTP")]
 
-         public static extern IntPtr GetTrianglePointer(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetTS")]
 
-         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]);
 
-                 if (!isDaJiangData)
 
-                 {
 
-                     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;
 
-         }
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetISize")]
 
-         public static extern int GetImageSize(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetIP")]
 
-         public static extern IntPtr GetImagePointer(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetResolutionS")]
 
-         public static extern int GetImageResolutionS(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetResolutionT")]
 
-         public static extern int GetImageResolutionT(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetImageFormat")]
 
-         public static extern int GetImageFormat(IntPtr ptr, int meshIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetID")]
 
-         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;
 
-         }
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetTCCC")]
 
-         public static extern int GetTexCoordCount(IntPtr ptr, int index);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetTCP")]
 
-         public static extern IntPtr GetTexCoordPointer(IntPtr ptr, int meshIndex, int texCoordIndex);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetTCS")]
 
-         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;
 
-         }
 
-         public static Vector2 GetTexCoord(IntPtr ptr)
 
-         {
 
-             var array = new float[2];
 
-             Marshal.Copy(ptr, array, 0, 2);
 
-             return new Vector2(array[0], array[1]);
 
-         }
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetCFCC")]
 
-         public static extern int GetChildFileCount(IntPtr ptr);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetCF")]
 
-         public static extern void GetChildFile(IntPtr ptr,int index, ref byte outputFile);
 
-         public static string GetChildTileFile(IntPtr ptr, int index)
 
-         {
 
-             byte[] byteOutput = new byte[256];
 
-             GetChildFile(ptr, index,ref byteOutput[0]);
 
-             return System.Text.Encoding.ASCII.GetString(byteOutput, 0, byteOutput.Length);
 
-         }
 
-         //从内存中读取结点信息
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "OpenFromBuf")]
 
-         public static extern IntPtr OpenOsgbFileFromBuffer(ref byte dataBuf,int lenth);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetBR")]
 
-         public static extern float GetBoundRadius(IntPtr ptr);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetRL")]
 
-         public static extern void GetRangeList(IntPtr ptr, int childIndex, ref float rangeValues);
 
-         [DllImport("osgdb_reader", CharSet = CharSet.Ansi, EntryPoint = "GetBoundsBox")]
 
-         public static extern void GetBoundsBox(IntPtr ptr, ref float center, ref float min, ref float max);
 
-     }
 
- }
 
 
  |