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
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();
|
|
}
|
|
}
|
|
}
|
|
|