You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

128 lines
4.7 KiB

using MODELING_DEF_DES_MI_VI.Controllers;
using MODELING_DEF_DES_MI_VI.Interfaces;
using MODELING_DEF_DES_MI_VI.Models;
using MODELING_DEF_DES_MI_VI.Helpers;
using System.Windows.Input;
using System.Collections.Generic;
using System.Threading;
using System.IO;
using System.Diagnostics;
using System.Collections.ObjectModel;
namespace MODELING_DEF_DES_MI_VI
{
public class MainWindowViewModel : PropertyChangedClass
{
public MaterialModel CurrentMaterial { get; set; }
public ObservableCollection<Pore> Pores { get; set; } = new ObservableCollection<Pore>();
public IEnumerable<IPoreSpread> Spreads { get; set; }
public IPoreSpread SelectedSpread { get; set; }
public IPoreGenerator PoreGeneratorInstance { get; set; }
public BatchGenerator BatchGenerator { get; }
public ConnectedPoreReportGenerator ConnectedPoreReportGenerator { get; }
private ReportGenerator ReportSaver;
private bool _disableGenerateAllFlag;
public bool DisableGenerateAllFlag
{
get => !_disableGenerateAllFlag && SelectedSpread != null;
set
{
_disableGenerateAllFlag = value;
}
}
public int NumberOfPores { get; set; }
public int ModelAndBatchNumber { get; set; } = 1;
public ICommand GeneratePoresCommand { get; set; }
public ICommand SaveToFileCommand { get; set; }
public ICommand GenAndSaveBatchCommand { get; set; }
public ICommand GenerateAllCommand { get; set; }
public ICommand OpenModelDirectoryCommand { get; set; }
public ICommand LoadRecommendParamsCommand { get; set; }
public BatchPoint BatchPoint { get; set; } = new BatchPoint();
public Thread AllSavingThread { get; set; }
public MainWindowViewModel(
MaterialModel material,
IEnumerable<IPoreSpread> spreads,
IPoreGenerator poreGenerator,
ReportGenerator reportSaver,
BatchGenerator batchGenerator,
ConnectedPoreReportGenerator connectedPoreReportGenerator)
{
CurrentMaterial = material;
Spreads = spreads;
PoreGeneratorInstance = poreGenerator;
ReportSaver = reportSaver;
BatchGenerator = batchGenerator;
ConnectedPoreReportGenerator = connectedPoreReportGenerator;
GeneratePoresCommand = new RelayCommand(GeneratePoresToForm, () => SelectedSpread != null);
SaveToFileCommand = new RelayCommand(Save, () => Pores?.Count > 0);
GenAndSaveBatchCommand = new RelayCommand(SaveBatch, () => Pores?.Count > 0);
GenerateAllCommand = new RelayCommand(c => GenAndSaveAll((int)c));
OpenModelDirectoryCommand = new RelayCommand(
() => Process.Start(@".\results\"),
() => Directory.Exists(@".\results\")
);
LoadRecommendParamsCommand = new RelayCommand(() => SelectedSpread.LoadRecommendParams(), () => SelectedSpread != null);
}
public void GeneratePoresToForm()
=> Pores = new ObservableCollection<Pore>(PoreGeneratorInstance.Generate(SelectedSpread));
public IList<Pore> GeneratePores()
=> PoreGeneratorInstance.Generate(SelectedSpread);
public void Save()
=> Save(Pores);
public void Save(IList<Pore> pores, int i = 0)
{
var n = string.Format(
"model_{0}_w{1}_d{2}_h{3}_n{4}",
i,
CurrentMaterial.Width,
CurrentMaterial.Depth,
CurrentMaterial.Height,
pores.Count);
ReportSaver.Save(pores, ReportSaver.AddOther(n));
}
public void SaveBatch()
=> SaveBatch(Pores);
public IEnumerable<Pore> SaveBatch(IEnumerable<Pore> pores, int i = -1)
{
var batch = BatchGenerator.GenerateBatch(BatchPoint, pores);
if (i != -1)
ReportSaver.Save(batch, ReportSaver.AddOther(string.Format("batch_{0}", i)));
return batch;
}
public void GenAndSaveAll(int num)
{
AllSavingThread = new Thread(() =>
{
DisableGenerateAllFlag = true;
for (int i = 0; i < num; i++)
{
List<Pore> list2;
var list = GeneratePores();
Save(list, i);
list2 = new List<Pore>(SaveBatch(list, i));
ConnectedPoreReportGenerator.CreateReport(list2, i);
}
DisableGenerateAllFlag = false;
});
AllSavingThread.Start();
}
}
}