80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
namespace Parabox.STL
|
|
{
|
|
// Token: 0x02000004 RID: 4
|
|
public static class pb_Stl_Exporter
|
|
{
|
|
// Token: 0x06000007 RID: 7 RVA: 0x00002638 File Offset: 0x00000838
|
|
public static bool Export(string path, GameObject[] gameObjects, FileType type)
|
|
{
|
|
Mesh[] array = pb_Stl_Exporter.CreateWorldSpaceMeshesWithTransforms(gameObjects.Select((GameObject x) => x.transform).ToArray<Transform>());
|
|
bool flag = false;
|
|
if (array != null && array.Length != 0 && !string.IsNullOrEmpty(path))
|
|
{
|
|
flag = pb_Stl.WriteFile(path, array, type, true);
|
|
}
|
|
int num = 0;
|
|
while (array != null && num < array.Length)
|
|
{
|
|
global::UnityEngine.Object.DestroyImmediate(array[num]);
|
|
num++;
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
// Token: 0x06000008 RID: 8 RVA: 0x000026AC File Offset: 0x000008AC
|
|
private static Mesh[] CreateWorldSpaceMeshesWithTransforms(IList<Transform> transforms)
|
|
{
|
|
if (transforms == null || transforms.Count < 1)
|
|
{
|
|
return null;
|
|
}
|
|
Vector3 vector = Vector3.zero;
|
|
for (int i = 0; i < transforms.Count; i++)
|
|
{
|
|
vector += transforms[i].position;
|
|
}
|
|
Vector3 vector2 = vector / (float)transforms.Count;
|
|
GameObject gameObject = new GameObject();
|
|
gameObject.name = "ROOT";
|
|
gameObject.transform.position = vector2;
|
|
foreach (Transform transform in transforms)
|
|
{
|
|
GameObject gameObject2 = (GameObject)global::UnityEngine.Object.Instantiate(transform.gameObject);
|
|
gameObject2.transform.SetParent(transform.parent, false);
|
|
gameObject2.transform.SetParent(gameObject.transform, true);
|
|
}
|
|
gameObject.transform.position = Vector3.zero;
|
|
List<MeshFilter> list = (from x in gameObject.GetComponentsInChildren<MeshFilter>()
|
|
where x.sharedMesh != null
|
|
select x).ToList<MeshFilter>();
|
|
int count = list.Count;
|
|
Mesh[] array = new Mesh[count];
|
|
for (int j = 0; j < count; j++)
|
|
{
|
|
Transform transform2 = list[j].transform;
|
|
Vector3[] vertices = list[j].sharedMesh.vertices;
|
|
Vector3[] normals = list[j].sharedMesh.normals;
|
|
for (int k = 0; k < vertices.Length; k++)
|
|
{
|
|
vertices[k] = transform2.TransformPoint(vertices[k]);
|
|
normals[k] = transform2.TransformDirection(normals[k]);
|
|
}
|
|
array[j] = new Mesh
|
|
{
|
|
name = list[j].name,
|
|
vertices = vertices,
|
|
normals = normals,
|
|
triangles = list[j].sharedMesh.triangles
|
|
};
|
|
}
|
|
global::UnityEngine.Object.DestroyImmediate(gameObject);
|
|
return array;
|
|
}
|
|
}
|
|
}
|