lixiaojun
2023-04-12 fc6b7c9852f18e42fb9bccaf0cc22fbe5389d179
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using IStation.Bimface;
 
namespace IStation
{
    /// <summary>
    /// 文件转换
    /// </summary>
    public sealed partial class BimfaceClient
    {
        private const string _translateUrl = @"https://api.bimface.com/translate";//文件转换URL
 
        /// <summary>
        /// 转换Dwg
        /// </summary>
        /// <param name="fileid"></param>
        /// <param name="translateStyle"></param>
        /// <returns></returns>
        public TranslateFileResponse TranslateDwg(long fileid, eDwgTranslateStyle translateStyle)
        {
            GetAccessToken();
            if (translateStyle == eDwgTranslateStyle.Vector)
            {
                return TranslateDwgToVectorDrawings(_accesstoken, fileid);
            }
            else
            {
                return TranslateDwgToPicture(_accesstoken, fileid);
            }
        }
 
        /// <summary>
        /// 转换Dwg
        /// </summary>
        /// <returns></returns>
        public eTranslateStatus TranslateDwgEx(long fileid, eDwgTranslateStyle translateStyle)
        {
            var response = TranslateDwg(fileid, translateStyle);
            if (response.status == Constants.Success)
                return eTranslateStatus.Success;
            if (response.status == Constants.ProcessingStatus)
                return eTranslateStatus.ProcessingStatus;
            return eTranslateStatus.Success;
        }
 
        /// <summary>
        /// RVT文件转换
        /// </summary>
        /// <param name="fileid"></param>
        /// <param name="translateStyle"></param>
        /// <returns></returns>
        public TranslateFileResponse TranslateRvt(long fileid, eRvtTranslateStyle translateStyle)
        {
            GetAccessToken();
 
            if (translateStyle == eRvtTranslateStyle.Real)
            {
                return TranslateRvtToRealStyle(_accesstoken, fileid);
            }
            else
            {
                return TranslateRvtToRenderStyle(_accesstoken, fileid);
            }
        }
 
        /// <summary>
        /// 转换Rvt
        /// </summary>
        /// <param name="fileid"></param>
        /// <param name="translateStyle"></param>
        /// <returns></returns>
        public eTranslateStatus TranslateRvtEx(long fileid, eRvtTranslateStyle translateStyle)
        {
            var response = TranslateRvt(fileid, translateStyle);
            if (response.status == Constants.Success)
                return eTranslateStatus.Success;
            if (response.status == Constants.ProcessingStatus)
                return eTranslateStatus.ProcessingStatus;
            return eTranslateStatus.Success;
        }
 
        /// <summary>
        /// 转换其他3D模型
        /// </summary>
        /// <param name="fileid"></param>
        /// <returns></returns>
        public TranslateFileResponse TranslateOther3D(long fileid)
        {
            GetAccessToken();
            var request = new Other3DModelFileTranslateRequest();
            request.source = new TranslateSource() { fileId = fileid };
            var data = JsonHelper.Object2Json(request.GetJsonDict());
            return TranslateFile(_accesstoken, data);
        }
 
        /// <summary>
        /// 转换其他3D模型
        /// </summary>
        /// <param name="fileid"></param>
        /// <returns></returns>
        public eTranslateStatus TranslateOther3DEx(long fileid)
        {
            var response = TranslateOther3D(fileid);
            if (response.status == Constants.Success)
                return eTranslateStatus.Success;
            if (response.status == Constants.ProcessingStatus)
                return eTranslateStatus.ProcessingStatus;
            return eTranslateStatus.Success;
        }
 
        /// <summary>
        /// 获取文件转换状态
        /// </summary>
        /// <param name="fileid"></param>
        /// <returns></returns>
        public TranslateFileResponse GetTranslateStatus(long fileid)
        {
            GetAccessToken();
            var url = string.Format("{0}?fileId={1}", _translateUrl, fileid);
            using (var httpClient = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Get, url))
            {
                var autoHeader = new HttpHeaders().GetBasicAuthorHeader(_accesstoken);
                request.Headers.Add(autoHeader.Key, autoHeader.Value);
                var response = httpClient.SendAsync(request).Result;
                response.EnsureSuccessStatusCode();
                var responsetext = response.Content.ReadAsStringAsync().Result;
                var result = JsonHelper.Json2Object<Result<TranslateFileResponse>>(responsetext);
                if (result.code != Constants.Success)
                {
                    throw new BimfaceException(result.code);
                }
                return result.data;
            }
        }
 
        /// <summary>
        /// 获取文件转换状态
        /// </summary>
        /// <param name="fileid"></param>
        /// <returns></returns>
        public eTranslateStatus GetTranslateStatusEx(long fileid)
        {
            var response = GetTranslateStatus(fileid);
            if (response.status == Constants.Success)
                return eTranslateStatus.Success;
            if (response.status == Constants.ProcessingStatus)
                return eTranslateStatus.ProcessingStatus;
            return eTranslateStatus.Success;
        }
 
        //将Dwg转换为矢量图形
        private TranslateFileResponse TranslateDwgToVectorDrawings(string accessToken, long fieldid)
        {
            var request = new DwgFileTranslateRequest();
            request.source = new TranslateSource() { fileId = fieldid };
            var data = JsonHelper.Object2Json(request.GetJsonDict());
            return TranslateFile(accessToken, data);
        }
 
        //将Dwg转换为图片
        private TranslateFileResponse TranslateDwgToPicture(string accessToken, long fieldid)
        {
            var request = new DwgFileTranslateRequest();
            request.source = new TranslateSource() { fileId = fieldid };
            request.config = new DwgModelConfig() { exportDrawing = false };
            var data = JsonHelper.Object2Json(request.GetJsonDict());
            return TranslateFile(accessToken, data);
        }
 
        //发起转换。将RVT文件转换成真实模式的效果。
        private TranslateFileResponse TranslateRvtToRealStyle(string accessToken, long fieldid)
        {
            var request = new RvtFileTranslateRequest();
            request.config = new RvtModelConfig() { texture = true };
            request.source = new TranslateSource() { fileId = fieldid };
            var data = JsonHelper.Object2Json(request.GetJsonDict());
            return TranslateFile(accessToken, data);
        }
 
        //发起转换。将RVT文件转换成着色模式的效果。
        private TranslateFileResponse TranslateRvtToRenderStyle(string accessToken, long fieldid)
        {
            var request = new RvtFileTranslateRequest();
            request.source = new TranslateSource() { fileId = fieldid };
            var data = JsonHelper.Object2Json(request.GetJsonDict());
            return TranslateFile(accessToken, data);
        }
 
        //文件转换
        private TranslateFileResponse TranslateFile(string accesstoken, string data)
        {
            using (var httpClient = new HttpClient())
            using (var request = new HttpRequestMessage(HttpMethod.Put, _translateUrl))
            {
                var autoHeader = new HttpHeaders().GetBasicAuthorHeader(accesstoken);
                request.Headers.Add(autoHeader.Key, autoHeader.Value);
                request.Content= new StringContent(data,Encoding.UTF8,"application/json");
                var response = httpClient.SendAsync(request).Result;
                response.EnsureSuccessStatusCode();
                var responsetext=response.Content.ReadAsStringAsync().Result;
                var result = JsonHelper.Json2Object<Result<TranslateFileResponse>>(responsetext);
                if (result.code != Constants.Success)
                {
                    throw new BimfaceException(result.code);
                }
                return result.data;
            }
        }
 
 
 
 
 
    }
}