using ExportMap.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Web;
namespace ExportMap.cs
{
///
/// 模型转换工具
///
public class ConvertUtils
{
///
/// 工作配置
///
public static string JobConfig = "{{ \"format\": \"3dtiles\", \"mode\": 0, \"outputPath\": \"{0}\", \"outputOptions\": null, \"levelOfDetail\": -1, \"levelOfDetailText\": \"Auto\", \"georeferenced\": null }}";
///
/// Roamer.exe
///
public static string RoamerExe = "\"C:\\Program Files\\Autodesk\\Navisworks Manage 2020\\Roamer.exe\"";
///
/// 模型转换
///
public static int Convert(List ids)
{
int count = 0;
string uploadFolder = Tool.GetSetting("uploadFolder");
string tilesFolder = Path.Combine(Tool.GetSetting("lfData"), "3d\\3dtiles");
List list = XYZUtils.selectMetas(ids, "and type in ('ifc', 'fbx', 'rvt')");
if (null == list || list.Count == 0) return 0;
foreach (SysMeta meta in list)
{
try
{
string modelFile = Path.Combine(uploadFolder, meta.path);
if (!File.Exists(modelFile))
{
continue;
}
string configFile = Path.Combine(Tool.BaseDir, ExportUtil.DateStr + ".json");
string outPath = Path.Combine(tilesFolder, meta.type, meta.id.ToString());
if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath);
WriteText(configFile, string.Format(JobConfig, outPath));
ExecNavisworks(modelFile, configFile);
File.Delete(configFile);
count++;
}
catch (Exception ex)
{
LogOut.Error(ex.StackTrace);
}
}
return count;
}
///
/// 运行Navisworks
///
public static string ExecNavisworks(string modelFile, string configFile)
{
string args = string.Format("-licensing AdLM -OpenFile \"{0}\" -ExecuteAddInPlugin \"EngineBatch_Sample.SmartEarth\" \"{1}\" -NoGui -Exit", modelFile, configFile);
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.ErrorDialog = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.RedirectStandardError = false;
p.StartInfo.FileName = RoamerExe;
p.StartInfo.Arguments = args;
p.StartInfo.CreateNoWindow = true;
p.Start();
return string.Empty;
}
///
/// 写文本文件
///
private static void WriteText(string file, string str)
{
File.WriteAllText(file, str);
}
}
}