/// <summary> /// Расчет инсоляции в файле /// </summary> public void Calc() { var docIns = InsCompare.GetDocumentOrOpen(calcFile); var dbIns = docIns.Database; // Очистка инс объектов InsCompare.GetInsObjects(calcFile, a => { a.UpgradeOpen(); a.Erase(); Debug.WriteLine($"Erase - {a}"); }); using (docIns.LockDocument()) using (var t = dbIns.TransactionManager.StartTransaction()) { //InsService var insModel = InsModel.LoadIns(docIns); insModel.Tree.IsVisualTreeOn = true; insModel.Tree.IsVisualIllumsOn = true; insModel.Front.Groups?.ToList().ForEach(g => g.IsVisualFrontOn = true); insModel.Place.Places?.ToList().ForEach(p => p.IsVisualPlaceOn = true); insModel.Place.IsEnableCalc = true; insModel.Update(docIns); // Визуализация на чертеже всех расчетов insModel.Tree.DrawVisuals(); insModel.Front.DrawVisuals(); insModel.Place.DrawVisuals(); t.Commit(); } }
/// <summary> /// Включение отключение расчета для текущего документа /// </summary> /// <param name="onOff">Включение или выключение расчета</param> private static void ActivateIns(bool onOff) { Inspector.Clear(); var doc = Application.DocumentManager.MdiActiveDocument; if (insViewModel == null) { return; } if (doc == null || doc.IsDisposed) { insViewModel.Model = null; return; } var insModel = GetInsModel(doc); // Включение расчета для текущего документа if (onOff) { if (insModel == null) { // Новый расчет // Загрузка сохраненного расчета в чертеже (если он есть) insModel = InsModel.LoadIns(doc); if (insModel == null) { // Создание нового расчета insModel = new InsModel(); } insModels.Add(doc, insModel); // Инициализация расчета //insModel.Initialize(doc); //insModel.Map.UpdateVisual();// Т.к. расчет не обновляется, то визуализация домов на карте (без отдельной визуализации домов во фронтах.) // Не обновлять расчет - пусть вручную обновляют //try //{ // insModel.Update(); //} //catch(UserBreakException) //{ //} // лог включения инсоляции для текущего чертежа Logger.Log.Info($"Включение расчета инсоляции для чертежа - {doc.Name}"); } //else //{ // insModel.Initialize(doc); // insModel.UpdateVisual(); //} insModel.IsEnabled = true; insModel.Update(); } // Отключение расчета для текущего документа else { if (insModel != null) { insModel.ClearVisual(); // Очистка визуализаций insModel.IsEnabled = false; // лог отключения инсоляции для текущего чертежа Logger.Log.Info($"Отключение расчета инсоляции для чертежа - {doc.Name}"); } } // Переключение на модель (или на null) insViewModel.Model = insModel; Inspector.Show(); }