/// <summary> /// Установка настроек /// </summary> public void SetOptions(InsOptions options, out bool needUpdate) { // Если изменился регион, то требуется обновление needUpdate = options?.Region?.Latitude != Options?.Region?.Latitude; // Если изменился проект - обновление объектов для связывания var needUpdateHousesDbSel = Options?.Project != options?.Project; Options = options; HasProject = Options?.Project != null; if (needUpdateHousesDbSel) { UpdateHousesDbSel(); } }
/// <summary> /// Общие действия и при создании нового расчета и при загрузке существующего /// Обязательно запускать после создания расчета /// </summary> public void Initialize(Document doc) { Doc = doc; // Дефолтные настройки if (Options == null) { Options = InsOptions.Default(); } // Сервис расчета DefineCalcService(); // Загрузка карты if (Map == null) { Map = new Map(this); Map.BuildingAdded += Map_BuildingAdded; Map.BuildingErased += Map_BuildingErased; Map.BuildingModified += Map_BuildingModified; Map.InsPointAdded += Map_InsPointAdded; } Map.Update(); // Создание расчета елочек if (Tree == null) { Tree = new TreeModel(); } Tree.Initialize(this); // Расчет фронтов if (Front == null) { Front = new FrontModel(); } Front.Initialize(this); LoadPoints(); // Расчет площадок if (Place == null) { Place = new PlaceModel(); } Place.Initialize(this); doc.Database.BeginSave += Database_BeginSave; }
/// <summary> /// Загрузка расчета из документа (если он был там сохранен) /// Без инициализации!!! /// </summary> /// <param name="doc">Документ</param> /// <returns>Расчет инсоляции или null</returns> public static InsModel LoadIns(Document doc) { InsModel model = null; // Загрузка словаря модели var dicModel = InsExtDataHelper.LoadFromNod(doc, "InsModel"); if (dicModel == null) { return(model); } // список значений самой модели var recModel = dicModel.GetRec("InsModelRec"); // Настройки var opt = new InsOptions(); opt.SetExtDic(dicModel.GetInner("InsOptions"), doc); // Расчет елочек var tree = new TreeModel(); tree.SetExtDic(dicModel.GetInner("TreeModel"), doc); // Расчет фронтов var front = new FrontModel(); front.SetExtDic(dicModel.GetInner("FrontModel"), doc); // Расчет площадок var place = new PlaceModel(); place.SetExtDic(dicModel.GetInner("PlaceModel"), doc); model = new InsModel(); model.Doc = doc; model.SetDataValues(recModel?.Values, doc); model.Tree = tree; model.Front = front; model.Place = place; bool needUpdate; // Тут не нужно обновлять расчет model.SetOptions(opt, out needUpdate); //model.Initialize(doc); return(model); }