Example #1
0
        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);
            }
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
        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]));
                    }
                }
            }
        }
Example #5
0
 public MfPredictor(MfModel model)
 {
     _model = model;
 }
Example #6
0
        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);
        }