VectorArray3i restore_list3i(String valueString) { string[] values = valueString.Split(' '); int N = values.Length / 3; VectorArray3i v = new VectorArray3i(N); for (int i = 0; i < N; ++i) { int x = 0, y = 0, z = 0; int.TryParse(values[3 * i], out x); int.TryParse(values[3 * i + 1], out y); int.TryParse(values[3 * i + 2], out z); v.Set(i, x, y, z); } return(v); }
VectorArray3i restore_list3i_binary(String valueString) { char[] str = valueString.ToCharArray(); byte[] buffer = Convert.FromBase64CharArray(str, 0, str.Length); int sz = sizeof(int); int Nvals = buffer.Length / sz; int Nvecs = Nvals / 3; VectorArray3i v = new VectorArray3i(Nvecs); for (int i = 0; i < Nvecs; i++) { int x = BitConverter.ToInt32(buffer, (3 * i) * sz); int y = BitConverter.ToInt32(buffer, (3 * i + 1) * sz); int z = BitConverter.ToInt32(buffer, (3 * i + 2) * sz); v.Set(i, x, y, z); } return(v); }
public void Initialize(VectorArray3d v, VectorArray3i t, VectorArray3f n = null, VectorArray3f c = null, VectorArray2f uv = null, int[] g = null) { Vertices = new DVector <double>(v); Triangles = new DVector <int>(t); Normals = Colors = UVs = null; FaceGroups = null; if (n != null) { Normals = new DVector <float>(n); } if (c != null) { Colors = new DVector <float>(c); } if (uv != null) { UVs = new DVector <float>(uv); } if (g != null) { FaceGroups = new DVector <int>(g); } }
public virtual SimpleMesh RestoreSimpleMesh(TypedAttribSet attributes, bool bSwapRightLeft) { bool bBinary = true; TypedAttribSet meshAttr = find_struct(attributes, IOStrings.BinaryMeshStruct); if (meshAttr == null) { meshAttr = find_struct(attributes, IOStrings.AsciiMeshStruct); bBinary = false; } if (meshAttr == null) { throw new Exception("SOFactory.RestoreSimpleMesh: Mesh ascii/binary struct not found!"); } VectorArray3d v = null; VectorArray3i t = null; VectorArray3f n = null, c = null; VectorArray2f uv = null; if (bBinary) { if (check_key_or_debug_print(meshAttr, IOStrings.AMeshVertices3Binary)) { v = meshAttr[IOStrings.AMeshVertices3Binary] as VectorArray3d; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshTrianglesBinary)) { t = meshAttr[IOStrings.AMeshTrianglesBinary] as VectorArray3i; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshNormals3Binary)) { n = meshAttr[IOStrings.AMeshNormals3Binary] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshColors3Binary)) { c = meshAttr[IOStrings.AMeshColors3Binary] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshUVs2Binary)) { uv = meshAttr[IOStrings.AMeshUVs2Binary] as VectorArray2f; } } else { if (check_key_or_debug_print(meshAttr, IOStrings.AMeshVertices3)) { v = meshAttr[IOStrings.AMeshVertices3] as VectorArray3d; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshTriangles)) { t = meshAttr[IOStrings.AMeshTriangles] as VectorArray3i; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshNormals3)) { n = meshAttr[IOStrings.AMeshNormals3] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshColors3)) { c = meshAttr[IOStrings.AMeshColors3] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshUVs2)) { uv = meshAttr[IOStrings.AMeshUVs2] as VectorArray2f; } } if (v == null || t == null) { return(null); } if (bSwapRightLeft) { int N = v.Count; for (int i = 0; i < N; ++i) { Vector3d vv = v[i]; v.Set(i, -vv.x, vv.y, -vv.z); } if (n != null && n.Count == N) { for (int i = 0; i < N; ++i) { Vector3f nn = n[i]; n.Set(i, -nn.x, nn.y, -nn.z); } } } SimpleMesh m = new SimpleMesh(); m.Initialize(v, t, n, c, uv); return(m); }
public virtual DMesh3 RestoreDMesh(TypedAttribSet attributes) { bool is_compressed = false; TypedAttribSet meshAttr = find_struct(attributes, IOStrings.BinaryDMeshStruct); if (meshAttr == null) { meshAttr = find_struct(attributes, IOStrings.CompressedDMeshStruct); is_compressed = true; } if (meshAttr == null) { throw new Exception("SOFactory.RestoreDMesh: DMesh binary or compressed struct not found!"); } VectorArray3d v = null; VectorArray3f n = null, c = null; VectorArray2f uv = null; VectorArray3i t = null; int[] g = null; IndexArray4i e = null; short[] e_ref = null; var storageMode = IOStrings.MeshStorageMode.EdgeRefCounts; if (meshAttr.ContainsKey(IOStrings.AMeshStorageMode)) { storageMode = (IOStrings.MeshStorageMode)(int) meshAttr[IOStrings.AMeshStorageMode]; } if (is_compressed) { if (check_key_or_debug_print(meshAttr, IOStrings.AMeshVertices3Compressed)) { v = meshAttr[IOStrings.AMeshVertices3Compressed] as VectorArray3d; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshNormals3Compressed)) { n = meshAttr[IOStrings.AMeshNormals3Compressed] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshColors3Compressed)) { c = meshAttr[IOStrings.AMeshColors3Compressed] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshUVs2Compressed)) { uv = meshAttr[IOStrings.AMeshUVs2Compressed] as VectorArray2f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshTrianglesCompressed)) { t = meshAttr[IOStrings.AMeshTrianglesCompressed] as VectorArray3i; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshTriangleGroupsCompressed)) { g = meshAttr[IOStrings.AMeshTriangleGroupsCompressed] as int[]; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshEdgesCompressed)) { e = meshAttr[IOStrings.AMeshEdgesCompressed] as IndexArray4i; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshEdgeRefCountsCompressed)) { e_ref = meshAttr[IOStrings.AMeshEdgeRefCountsCompressed] as short[]; } } else { if (check_key_or_debug_print(meshAttr, IOStrings.AMeshVertices3Binary)) { v = meshAttr[IOStrings.AMeshVertices3Binary] as VectorArray3d; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshNormals3Binary)) { n = meshAttr[IOStrings.AMeshNormals3Binary] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshColors3Binary)) { c = meshAttr[IOStrings.AMeshColors3Binary] as VectorArray3f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshUVs2Binary)) { uv = meshAttr[IOStrings.AMeshUVs2Binary] as VectorArray2f; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshTrianglesBinary)) { t = meshAttr[IOStrings.AMeshTrianglesBinary] as VectorArray3i; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshTriangleGroupsBinary)) { g = meshAttr[IOStrings.AMeshTriangleGroupsBinary] as int[]; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshEdgesBinary)) { e = meshAttr[IOStrings.AMeshEdgesBinary] as IndexArray4i; } if (check_key_or_debug_print(meshAttr, IOStrings.AMeshEdgeRefCountsBinary)) { e_ref = meshAttr[IOStrings.AMeshEdgeRefCountsBinary] as short[]; } } DMesh3 m = new DMesh3(); if (n != null) { m.EnableVertexNormals(Vector3f.Zero); } if (c != null) { m.EnableVertexColors(Vector3f.Zero); } if (uv != null) { m.EnableVertexUVs(Vector2f.Zero); } if (g != null) { m.EnableTriangleGroups(0); } if (storageMode == IOStrings.MeshStorageMode.EdgeRefCounts) { if (v == null || t == null || e == null || e_ref == null) { return(null); } m.VerticesBuffer = new DVector <double>(v); if (n != null) { m.NormalsBuffer = new DVector <float>(n); } if (c != null) { m.ColorsBuffer = new DVector <float>(c); } if (uv != null) { m.UVBuffer = new DVector <float>(uv); } m.TrianglesBuffer = new DVector <int>(t); if (g != null) { m.GroupsBuffer = new DVector <int>(g); } m.EdgesBuffer = new DVector <int>(e); m.EdgesRefCounts = new RefCountVector(e_ref); m.RebuildFromEdgeRefcounts(); } else if (storageMode == IOStrings.MeshStorageMode.Minimal) { if (v == null || t == null) { return(null); } int NV = v.Count; NewVertexInfo vinfo = new NewVertexInfo(); for (int k = 0; k < NV; ++k) { vinfo.v = v[k]; if (n != null) { vinfo.n = n[k]; } if (c != null) { vinfo.c = c[k]; } if (uv != null) { vinfo.uv = uv[k]; } m.AppendVertex(ref vinfo); } int NT = t.Count; for (int k = 0; k < NT; ++k) { Vector3i tri = t[k]; int setg = (g == null) ? -1 : g[k]; m.AppendTriangle(tri, setg); } } else { throw new Exception("SOFactory.RestoreDMesh: unsupported mesh storage mode"); } return(m); }