public static HittableGeometryComponent ReadObj(FileInfo file) { var reader = new OBJReader(); var builder = new SimpleMeshBuilder(); using (var text = new StreamReader(File.OpenRead(file.FullName))) { var result = reader.Read(text, ReadOptions.Defaults, builder); } //var reader = new StandardMeshReader(); //var res = reader.Read(file.FullName, ReadOptions.Defaults); //StandardMeshReader.ReadMesh() var mesh = builder.Meshes[0]; return(new HittableGeometryComponent { Indices = mesh.GetTriangleArray().ToImmutableArray(), Normals = mesh.NormalsItr().Select(n => new Vector3(n.x, n.y, n.z)).ToImmutableArray(), Positions = mesh.VerticesItr().Select(n => new Vector3((float)n.x, (float)n.y, (float)n.z)).ToImmutableArray(), }); }
protected override void Awake() { base.Awake(); _Loader = new SampleChunkLoader(); _Unloader = new SimpleUnloader(); _MeshBuilder = new SimpleMeshBuilder(); _Navigators = new List <WorldNavigator>(); _Pool = GetComponent <ObjectPool>(); // Ensure the prefab has required components if (_Pool == null) { _Pool.Prefab.AddComponent <ObjectPool>(); } _LogSizeX = SetLogSize(ChunkSizeX); _LogSizeY = SetLogSize(ChunkSizeY); _LogSizeZ = SetLogSize(ChunkSizeZ); _MaskX = ChunkSizeX - 1; _MaskY = ChunkSizeY - 1; _MaskZ = ChunkSizeZ - 1; }
public static IEnumerable <IFileGeometry3D> ReadStl(FileInfo file) { var builder = new SimpleMeshBuilder(); var stl = new STLReader(); IOReadResult res; var reader = new ASCIIBinarySTLParser(); using (var fs = file.OpenRead()) { reader.Read(fs); //using (var br = new BinaryReader(fs)) { // res = stl.Read(br, new ReadOptions { }, builder); //} } return(reader.Geometry); // if (res.code == IOCode.Ok && builder.Meshes.Any()) { // var mesh = builder.Meshes.Single(); // return new[] { // new MeshData("STL", // mesh.GetVertexArrayFloat().ToVector3List().AsReadOnly(), // mesh.HasVertexNormals ? // mesh.GetVertexNormalArray().ToVector3List().AsReadOnly() // : new ReadOnlyCollection<Vector3>(new List<Vector3>()), // mesh.GetTriangleArray().AsReadOnly(), // mesh.HasVertexUVs ? // mesh.GetVertexUVArray().ToVector2List().AsReadOnly() // : new ReadOnlyCollection<Vector2>(new List<Vector2>()), // mesh.HasVertexColors ? // mesh.GetVertexColorArray().ToVector3List().AsReadOnly() // : new ReadOnlyCollection<Vector3>(new List<Vector3>()) // ) // }; // } // throw new Exception("Can't read STL."); }
protected override async Task _init(GeographyCollection layer) { SimpleMeshBuilder meshes = await loadObj(layer.Source); features = meshes.Meshes; symbology = layer.Properties.Units; Color col = symbology.ContainsKey("point") ? (Color)symbology["point"].Color : Color.white; Color sel = symbology.ContainsKey("point") ? new Color(1 - col.r, 1 - col.g, 1 - col.b, col.a) : Color.red; mainMat = Instantiate(HandleMaterial); mainMat.SetColor("_BaseColor", col); selectedMat = Instantiate(HandleMaterial); selectedMat.SetColor("_BaseColor", sel); }
private async Task <SimpleMeshBuilder> loadObj(string filename) { using (StreamReader reader = File.OpenText(filename)) { OBJReader objReader = new OBJReader(); SimpleMeshBuilder meshBuilder = new SimpleMeshBuilder(); try { IOReadResult result = objReader.Read(reader, new ReadOptions(), meshBuilder); } catch (Exception e) when( e is UnauthorizedAccessException || e is DirectoryNotFoundException || e is FileNotFoundException || e is NotSupportedException ) { Debug.LogError("Failed to Load" + filename + " : " + e.ToString()); meshBuilder = new SimpleMeshBuilder(); } return(meshBuilder); } }
// parse file and create a set of MeshSO objects public bool ReadFile(string sPath) { sSourcePath = sPath; SomeMeshesTooLargeForUnityWarning = false; // read the input file SimpleMeshBuilder build = new SimpleMeshBuilder(); StandardMeshReader reader = new StandardMeshReader() { MeshBuilder = build }; reader.warningEvent += on_warning; ReadOptions options = new ReadOptions(); options.ReadMaterials = true; LastReadResult = reader.Read(sPath, options); if (LastReadResult.code != IOCode.Ok) { return(false); } // create the material set List <SOMaterial> vSOMaterials = new List <SOMaterial>(); for (int k = 0; k < build.Materials.Count; ++k) { SOMaterial m = build_material(sPath, build.Materials[k]); vSOMaterials.Add(m); } // convert the read meshes into unity meshes SceneObjects = new List <ImportedObject>(); for (int k = 0; k < build.Meshes.Count; ++k) { if (build.Meshes[k].VertexCount > 64000 || build.Meshes[k].TriangleCount > 64000) { SomeMeshesTooLargeForUnityWarning = true; continue; } int matID = build.MaterialAssignment[k]; SOMaterial soMaterial = (matID < 0 || matID >= vSOMaterials.Count) ? null : vSOMaterials[matID]; try { Mesh unityMesh = UnityUtil.SimpleMeshToUnityMesh(build.Meshes[k], SwapLeftRight); if (unityMesh != null) { SceneObjects.Add(new ImportedObject() { mesh = unityMesh, material = soMaterial }); } } catch (Exception e) { Debug.Log("[UnitySceneImporter] error converting to unity mesh : " + e.Message); } } return(SceneObjects.Count > 0); }
public void UpdateBushes(MapData Data) { float t = height; //высота забора float m = width; // толщина забора float c = factor; // скос var s = new SimpleMeshBuilder(); float h = Data.MapHeight + 0.2f; float w = Data.MapWidth + 0.2f; // внутрення стенка s.AddRectSurface(new Vector3(-w / 2f, -h / 2f, 0), new Vector3(-w / 2f, -h / 2f, -t), new Vector3(-w / 2f, 0, -t * c), new Vector3(-w / 2f, 0, 0)); s.AddConnectedEdge(new Vector3(-w / 2f, 0, -t * c), new Vector3(-w / 2f, 0, 0)); s.AddConnectedEdge(new Vector3(-w / 2f, h / 2f, -t), new Vector3(-w / 2f, h / 2f, 0)); s.AddConnectedEdge(new Vector3(0, h / 2f, -t * c), new Vector3(0, h / 2f, 0)); s.AddConnectedEdge(new Vector3(w / 2f, h / 2f, -t), new Vector3(w / 2f, h / 2f, 0)); s.AddConnectedEdge(new Vector3(w / 2f, 0, -t * c), new Vector3(w / 2f, 0, 0)); s.AddConnectedEdge(new Vector3(w / 2f, -h / 2f, -t), new Vector3(w / 2f, -h / 2f, 0)); s.AddConnectedEdge(new Vector3(0, -h / 2f, -t * c), new Vector3(0, -h / 2f, 0)); s.AddConnectedEdge(new Vector3(-w / 2f, -h / 2f, -t), new Vector3(-w / 2f, -h / 2f, 0)); //внешняя стенка w++; h++; s.AddRectSurface(new Vector3(-w / 2f, -h / 2f, -t), new Vector3(-w / 2f, -h / 2f, 0), new Vector3(-w / 2f, -h / 2f + m, 0), new Vector3(-w / 2f, -h / 2f + m, -t)); s.AddConnectedEdge(new Vector3(-w / 2f, 0, 0), new Vector3(-w / 2f, 0, -t * c)); s.AddConnectedEdge(new Vector3(-w / 2f, h / 2f - m, 0), new Vector3(-w / 2f, h / 2f - m, -t)); s.AddConnectedEdge(new Vector3(-w / 2f, h / 2f, 0), new Vector3(-w / 2f, h / 2f, -t)); s.AddConnectedEdge(new Vector3(-w / 2f + m, h / 2f, 0), new Vector3(-w / 2f + m, h / 2f, -t)); s.AddConnectedEdge(new Vector3(0, h / 2f, 0), new Vector3(0, h / 2f, -t * c)); s.AddConnectedEdge(new Vector3(w / 2f - m, h / 2f, 0), new Vector3(w / 2f - m, h / 2f, -t)); s.AddConnectedEdge(new Vector3(w / 2f, h / 2f, 0), new Vector3(w / 2f, h / 2f, -t)); s.AddConnectedEdge(new Vector3(w / 2f, h / 2f - m, 0), new Vector3(w / 2f, h / 2f - m, -t)); s.AddConnectedEdge(new Vector3(w / 2f, 0, 0), new Vector3(w / 2f, 0, -t * c)); s.AddConnectedEdge(new Vector3(w / 2f, -h / 2f + m, 0), new Vector3(w / 2f, -h / 2f + m, -t)); s.AddConnectedEdge(new Vector3(w / 2f, -h / 2f, 0), new Vector3(w / 2f, -h / 2f, -t)); s.AddConnectedEdge(new Vector3(w / 2f - m, -h / 2f, 0), new Vector3(w / 2f - m, -h / 2f, -t)); s.AddConnectedEdge(new Vector3(0, -h / 2f, 0), new Vector3(0, -h / 2f, -t * c)); s.AddConnectedEdge(new Vector3(-w / 2f + m, -h / 2f, 0), new Vector3(-w / 2f + m, -h / 2f, -t)); s.AddConnectedEdge(new Vector3(-w / 2f, -h / 2f, 0), new Vector3(-w / 2f, -h / 2f, -t)); //верхняя часть //низ s.AddRectSurface(new Vector3(-w / 2f, -h / 2f, -t), new Vector3(-w / 2f, -h / 2f + m, -t), new Vector3(-w / 2f + m, -h / 2f + m, -t), new Vector3(-w / 2f + m, -h / 2f, -t)); s.AddConnectedEdge(new Vector3(0, -h / 2f + m, -t * c), new Vector3(0, -h / 2f, -t * c)); s.AddConnectedEdge(new Vector3(w / 2f - m, -h / 2f + m, -t), new Vector3(w / 2f - m, -h / 2f, -t)); s.AddConnectedEdge(new Vector3(w / 2f, -h / 2f + m, -t), new Vector3(w / 2f, -h / 2f, -t)); // //верх s.AddRectSurface(new Vector3(w / 2f, h / 2f, -t), new Vector3(w / 2f, h / 2f - m, -t), new Vector3(w / 2f - m, h / 2f - m, -t), new Vector3(w / 2f - m, h / 2f, -t)); s.AddConnectedEdge(new Vector3(0, h / 2f - m, -t * c), new Vector3(0, h / 2f, -t * c)); s.AddConnectedEdge(new Vector3(-w / 2f + m, h / 2f - m, -t), new Vector3(-w / 2f + m, h / 2f, -t)); s.AddConnectedEdge(new Vector3(-w / 2f, h / 2f - m, -t), new Vector3(-w / 2f, h / 2f, -t)); // //лево s.AddRectSurface(new Vector3(-w / 2f + m, -h / 2f + m, -t), new Vector3(-w / 2f, -h / 2f + m, -t), new Vector3(-w / 2f, 0, -t * c), new Vector3(-w / 2f + m, 0, -t * c)); s.AddConnectedEdge(new Vector3(-w / 2f, h / 2f - m, -t), new Vector3(-w / 2f + m, h / 2f - m, -t)); // //право s.AddRectSurface(new Vector3(w / 2f, -h / 2f + m, -t), new Vector3(w / 2f - m, -h / 2f + m, -t), new Vector3(w / 2f - m, 0, -t * c), new Vector3(w / 2f, 0, -t * c)); s.AddConnectedEdge(new Vector3(w / 2f - m, h / 2f - m, -t), new Vector3(w / 2f, h / 2f - m, -t)); GetComponent <MeshFilter>().mesh = s.ToMesh(); }