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); } } }