using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using IStation.Bimface;
namespace IStation
{
///
/// 文件转换
///
public sealed partial class BimfaceClient
{
private const string _translateUrl = @"https://api.bimface.com/translate";//文件转换URL
///
/// 转换Dwg
///
///
///
///
public TranslateFileResponse TranslateDwg(long fileid, eDwgTranslateStyle translateStyle)
{
GetAccessToken();
if (translateStyle == eDwgTranslateStyle.Vector)
{
return TranslateDwgToVectorDrawings(_accesstoken, fileid);
}
else
{
return TranslateDwgToPicture(_accesstoken, fileid);
}
}
///
/// 转换Dwg
///
///
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;
}
///
/// RVT文件转换
///
///
///
///
public TranslateFileResponse TranslateRvt(long fileid, eRvtTranslateStyle translateStyle)
{
GetAccessToken();
if (translateStyle == eRvtTranslateStyle.Real)
{
return TranslateRvtToRealStyle(_accesstoken, fileid);
}
else
{
return TranslateRvtToRenderStyle(_accesstoken, fileid);
}
}
///
/// 转换Rvt
///
///
///
///
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;
}
///
/// 转换其他3D模型
///
///
///
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);
}
///
/// 转换其他3D模型
///
///
///
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;
}
///
/// 获取文件转换状态
///
///
///
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>(responsetext);
if (result.code != Constants.Success)
{
throw new BimfaceException(result.code);
}
return result.data;
}
}
///
/// 获取文件转换状态
///
///
///
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>(responsetext);
if (result.code != Constants.Success)
{
throw new BimfaceException(result.code);
}
return result.data;
}
}
}
}