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) { string modelFile = Path.Combine(uploadFolder, meta.path); if (!File.Exists(modelFile)) continue; string configFile = Path.Combine(Tool.TempDir, ExportUtil.DateStr + ".json"); string outPath = Path.Combine(tilesFolder, meta.type, meta.id.ToString()); string jsonFile = Path.Combine(outPath, "tileset.json"); if (!Directory.Exists(outPath)) Directory.CreateDirectory(outPath); if (File.Exists(jsonFile)) File.Delete(jsonFile); WriteText(configFile, string.Format(JobConfig, outPath.Replace("\\", "\\\\"))); ExecNavisworks(modelFile, configFile); File.Delete(configFile); count += File.Exists(jsonFile) ? 1 : 0; } return count; } /// /// 运行Navisworks /// public static void ExecNavisworks(string modelFile, string configFile) { Process p = null; try { string args = string.Format("-licensing AdLM -OpenFile \"{0}\" -ExecuteAddInPlugin \"EngineBatch_Sample.SmartEarth\" \"{1}\" -log D:\\xyz\\auto\\log.txt -NoGui -Exit", modelFile, configFile); // 启动进程 p = Process.Start(RoamerExe, args); // 让组件等候相关的进程进入闲置状态 p.WaitForInputIdle(); // 让组件无限期地等待关联进程退出 p.WaitForExit(); } catch (Exception ex) { LogOut.Error(ex.StackTrace); } finally { if (p != null) { p.Close(); p.Dispose(); p = null; } } } /// /// 写文本文件 /// private static void WriteText(string file, string str) { File.WriteAllText(file, str); } } }