public static MfModel LoadModelFromFile(string filePath) { using (var fp = new StreamReader(filePath)) { var mString = fp.ReadLine(); var m = int.Parse(mString.Split(" ").Last()); var nString = fp.ReadLine(); var n = int.Parse(nString.Split(" ").Last()); var kString = fp.ReadLine(); var k = int.Parse(kString.Split(" ").Last()); var model = new MfModel { M = m, N = n, K = k, W = new float[k][], H = new float[k][] }; for (int i = 0; i < k; i++) { model.W[i] = fp.ReadLine().Split(" ").Select(float.Parse).ToArray(); } for (int i = 0; i < k; i++) { model.H[i] = fp.ReadLine().Split(" ").Select(float.Parse).ToArray(); } return(model); } }
private Task <string> UploadXbim(MfModel model, string ifcFilepath) { var url = model.GetXbimUploadUrl(); if (String.IsNullOrEmpty(url)) { return(Task.Factory.StartNew(() => "没有找到上传的网站地址!")); } return(ExportUtility.UploadXbim(url, ifcFilepath)); }
public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiDoc = commandData.Application.ActiveUIDocument; var doc = uiDoc.Document; Element selElem; #if R2014 var elems = uiDoc.Selection.Elements; if (elems.Size != 1) #else var elemIds = uiDoc.Selection.GetElementIds(); if (elemIds.Count != 1) #endif { ShowMessage("请选择一个构件!"); return(Result.Failed); } #if R2014 selElem = elems.OfType <Element>().First(); #else selElem = doc.GetElement(elemIds.First()); #endif var guid = selElem.UniqueId; var mfModel = MfModel.GetModel(doc.PathName); try { var url = mfModel.GetPart(guid); if (url == null) { ShowMessage("系统中未能找到相应构件:" + guid, TaskDialogIcon.TaskDialogIconWarning); return(Result.Failed); } Process.Start(url); } catch (Exception ex) { ShowMessage(ex.Message, TaskDialogIcon.TaskDialogIconWarning); return(Result.Failed); } return(Result.Succeeded); }
public static void SaveModelToFile(this MfModel model, string filePath) { using (FileStream fstream = File.OpenWrite(filePath)) { using (var fp = new StreamWriter(fstream)) { fp.WriteLine($"m {model.M}"); fp.WriteLine($"n {model.N}"); fp.WriteLine($"k {model.K}"); for (int k = 0; k < model.K; k++) { fp.WriteLine(string.Join(" ", model.W[k])); } for (int k = 0; k < model.K; k++) { fp.WriteLine(string.Join(" ", model.H[k])); } } } }
public MfPredictor(MfModel model) { _model = model; }
public override Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { var uiDoc = commandData.Application.ActiveUIDocument; var doc = uiDoc.Document; var sw = new Stopwatch(); sw.Start(); var revit = new RevitModel(doc); var model = revit.GetData(); var modelErr = model.GetErr(); if (!String.IsNullOrEmpty(modelErr)) { ShowMessage(modelErr); return(Result.Failed); } var folder = Path.GetTempPath(); MfModel.SetModelId(model); File.WriteAllText(Path.Combine(folder, model.Name + ".json"), JsonConvert.SerializeObject(model, Formatting.None)); //var jCount = Utility.GetBytes(json).LongLength; //var zCount = Utility.Zip(json).LongLength; //ShowMessage(jCount + " vs "+zCount + ": " + (jCount > zCount), TaskDialogIcon.TaskDialogIconWarning); var mfModel = MfModel.GetClientModel(model); if (mfModel.IsPublished()) { var res = ShowMessage("此模型已发布,是否重新发布?", btn: TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No); if (res != TaskDialogResult.Yes) { return(Result.Cancelled); } } string err = String.Empty; var log = MfProjectModel.GetTrace <ExportUtility>(); try { if (model.IsProject) { var ifcPath = Path.Combine(folder, model.Name + ".ifc"); ExportUtility.ExportIFC(doc, ifcPath, true); log.TraceInformation("添加IFC模型..."); mfModel.AddIfc(ifcPath); log.TraceInformation("开始上传预览模型..."); var task = UploadXbim(mfModel, ifcPath); log.TraceInformation("开始转换模型..."); err = mfModel.ServerRun(ToJson, ToDict, mfModel.GetModelUrl()); string uploadRes = String.Empty; if (task.Exception != null) { uploadRes = task.Exception.InnerException.Message; } else { uploadRes = task.Result; } var res = uploadRes; log.TraceInformation(String.Format("上传IFC文件({0})为Web模型:{1}", ifcPath, res)); ShowMessage("发布预览模型: " + res); } else { mfModel.ToMf(); } } finally { log.Close(); } //mfModel.ToMf(); sw.Stop(); var msg = "运行时间:" + sw.ElapsedMilliseconds / 1000 + "s"; if (!String.IsNullOrEmpty(err)) { msg += "\r\nError: " + err; } ShowMessage(msg); return(Result.Succeeded); }