-
Notifications
You must be signed in to change notification settings - Fork 0
/
ClaraIO.cs
115 lines (103 loc) · 4.28 KB
/
ClaraIO.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
using UnityEngine;
using System;
using System.Collections;
using System.IO;
using System.Web;
using UnityEngine.UI;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using dotnet_clara;// dotnet-clara for .net3.5
using dotnet_clara.lib;
using dotnet_clara.lib.resources;
using RestSharp;//RestSharp Unity "https://github.com/Cratesmith/RestSharp-for-unity3d"
using Newtonsoft;
using Ionic.Zip;// dotnetZiplib-Unity "https://github.com/r2d2rigo/dotnetzip-for-unity"
using ICSharpCode.SharpZipLib.GZip;
using Unity.IO.Compression;// System.IO.Compression for Unity "https://www.assetstore.unity3d.com/en/#!/content/31902"
public class ClaraIO : MonoBehaviour {
// Use this for initialization
static string sceneUuid = "6962528b-f44f-46fc-a141-d8a3dee05498";
static string username = "zli";
static string apiToken = "a931a94a-020f-45d3-91cd-e6eed3588bae";
static string host = "editor.vimarket.io";
public dotnet_clara.lib.Clara clara;
void Start () {
clara = new dotnet_clara.lib.Clara(username, apiToken, host);
// The download folder of the files from clara
Directory.CreateDirectory (Application.persistentDataPath + "/Models/");
// Create the clara configuration file
var sr = File.CreateText(Application.persistentDataPath + "/dotnetClara.json");
sr.Close();
}
//Get the thumbnail of the scene
public void GetThumbnail()
{
foreach (string uuid in uuids)
{
string filePath = Application.persistentDataPath + "/" + uuid + ".jpg";
if (!File.Exists(filePath))
{
//*********get the scene thumbnail from clara***************************
var thunmbnail = clara.scenes.Thumbnail(uuid);
//**********************************************************************
FileStream imageFile = new FileStream(filePath, FileMode.Create);
imageFile.Write(thunmbnail, 0, thunmbnail.Length);
imageFile.Flush();
imageFile.Close();
}
}
}
//Download model from clara
public bool DownloadModel(string uuid)
{
string extractPath = Application.persistentDataPath + "/Models/" + uuid;
if (!Directory.Exists(extractPath))
Directory.CreateDirectory(extractPath);
string[] dirs = System.IO.Directory.GetDirectories(extractPath);
string[] files = System.IO.Directory.GetFiles(extractPath);
//unzip and save files
if (dirs.Length == 0 && files.Length == 0)// the directory is empty
{
//*********export the scene from clara, using "obj" format**************
var bytes = clara.scenes.Export(uuid, "obj", 1);// get the export data
//**********************************************************************
byte[] decompressed = Decompress(bytes);//decompress gzip file to byte array
Stream stream = new MemoryStream(decompressed);//convert byte array to stream
using (ZipFile zip = ZipFile.Read(stream)) //DotnetZip read stream
{
foreach (ZipEntry entry in zip)
{
entry.Extract(extractPath);//for each entry extract file to the extrac path.
}
}
}
return true;
}
//For unzip the downloaded zip file
static byte[] Decompress(byte[] gzip)
{
// Create a GZIP stream with decompression mode.
// ... Then create a buffer and write into while reading from the GZIP stream.
// using the Unity.IO.Compression instead of System.IO.Compression which is unsupported by Mono
using (GZipStream stream = new GZipStream(new MemoryStream(gzip), CompressionMode.Decompress))
{
const int size = 4096;
byte[] buffer = new byte[size];
using (MemoryStream memory = new MemoryStream())
{
int count = 0;
do
{
count = stream.Read(buffer, 0, size);
if (count > 0)
{
memory.Write(buffer, 0, count);
}
}
while (count > 0);
return memory.ToArray();
}
}
}
}