SteamVRTrack.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Lib3MF;
  5. public class SteamVRTrack : MonoBehaviour
  6. {
  7. public string filePath;
  8. public float width = 1;
  9. public float height = 1;
  10. // Start is called before the first frame update
  11. void Start()
  12. {
  13. MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>();
  14. meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));
  15. MeshFilter meshFilter = gameObject.AddComponent<MeshFilter>();
  16. Mesh mesh = new Mesh();
  17. // Load trackpoint file
  18. CModel model = Wrapper.CreateModel();
  19. CReader reader = model.QueryReader("3mf");
  20. reader.ReadFromFile(filePath);
  21. CMeshObjectIterator iterator = model.GetMeshObjects();
  22. CMeshObject fileMesh = getSteamVrMesh(iterator);
  23. if (fileMesh == null)
  24. {
  25. return;
  26. }
  27. Vector3[] vertices = new Vector3[4]
  28. {
  29. new Vector3(0, 0, 0),
  30. new Vector3(width, 0, 0),
  31. new Vector3(0, height, 0),
  32. new Vector3(width, height, 0)
  33. };
  34. mesh.vertices = vertices;
  35. int[] tris = new int[6]
  36. {
  37. // lower left triangle
  38. 0, 2, 1,
  39. // upper right triangle
  40. 2, 3, 1
  41. };
  42. mesh.triangles = tris;
  43. Vector3[] normals = new Vector3[4]
  44. {
  45. -Vector3.forward,
  46. -Vector3.forward,
  47. -Vector3.forward,
  48. -Vector3.forward
  49. };
  50. mesh.normals = normals;
  51. Vector2[] uv = new Vector2[4]
  52. {
  53. new Vector2(0, 0),
  54. new Vector2(1, 0),
  55. new Vector2(0, 1),
  56. new Vector2(1, 1)
  57. };
  58. mesh.uv = uv;
  59. meshFilter.mesh = mesh;
  60. }
  61. // Update is called once per frame
  62. void Update()
  63. {
  64. }
  65. CMeshObject getSteamVrMesh(CMeshObjectIterator iterator)
  66. {
  67. iterator.MoveNext();
  68. bool found = false;
  69. ulong count = iterator.Count();
  70. CMeshObject fileMesh = iterator.GetCurrentMeshObject();
  71. for (ulong i = 1; i < count; i++)
  72. {
  73. if (fileMesh.GetName() == "steamvrtrack")
  74. {
  75. return fileMesh;
  76. }
  77. iterator.MoveNext();
  78. fileMesh = iterator.GetCurrentMeshObject();
  79. }
  80. return null;
  81. }
  82. }