From 62d4cd7819448487d671dbac82fa6877220b40c8 Mon Sep 17 00:00:00 2001 From: Italo Almeida Aguiar Date: Thu, 21 Apr 2022 15:40:01 -0300 Subject: [PATCH] =?UTF-8?q?Ajustes=20na=20engine=20de=20simula=C3=A7=C3=A3?= =?UTF-8?q?o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 362 ++++++++++++++++++ installer/Windows Installer/UWP/App.xaml | 14 + installer/Windows Installer/UWP/App.xaml.cs | 100 +++++ .../UWP/Assets/LockScreenLogo.scale-200.png | Bin 0 -> 1430 bytes .../UWP/Assets/SplashScreen.scale-200.png | Bin 0 -> 7700 bytes .../Assets/Square150x150Logo.scale-200.png | Bin 0 -> 2937 bytes .../UWP/Assets/Square44x44Logo.scale-200.png | Bin 0 -> 1647 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 1255 bytes .../UWP/Assets/StoreLogo.png | Bin 0 -> 1451 bytes .../UWP/Assets/Wide310x150Logo.scale-200.png | Bin 0 -> 3204 bytes installer/Windows Installer/UWP/MainPage.xaml | 57 +++ .../Windows Installer/UWP/MainPage.xaml.cs | 30 ++ .../UWP/Package.appxmanifest | 49 +++ .../UWP/Properties/AssemblyInfo.cs | 29 ++ .../UWP/Properties/Default.rd.xml | 31 ++ installer/Windows Installer/UWP/UWP.csproj | 171 +++++++++ installer/Windows Installer/UWP/UWP.sln | 51 +++ src/.vs/MASLAB/DesignTimeBuild/.dtbcache.v2 | Bin 233098 -> 233098 bytes src/.vs/MASLAB/v17/.futdcache.v1 | Bin 624 -> 734 bytes src/.vs/MASLAB/v17/.suo | Bin 44032 -> 71168 bytes src/MASLAB.sln | 8 +- src/MASLAB/Services/CodeAnalysisService.cs | 1 + src/MASLAB/Services/CompilationService.cs | 1 + src/MASLAB/Simulation/SimulationTank.cs | 98 +++++ src/MASLAB/Simulation/Simulator.cs | 8 + src/MASLAB/ViewModels/MainWindowViewModel.cs | 216 ++++++----- .../ViewModels/SimulationSettingsViewModel.cs | 4 +- src/MASLAB/Views/MainWindow.xaml | 4 +- 28 files changed, 1138 insertions(+), 96 deletions(-) create mode 100644 .gitignore create mode 100644 installer/Windows Installer/UWP/App.xaml create mode 100644 installer/Windows Installer/UWP/App.xaml.cs create mode 100644 installer/Windows Installer/UWP/Assets/LockScreenLogo.scale-200.png create mode 100644 installer/Windows Installer/UWP/Assets/SplashScreen.scale-200.png create mode 100644 installer/Windows Installer/UWP/Assets/Square150x150Logo.scale-200.png create mode 100644 installer/Windows Installer/UWP/Assets/Square44x44Logo.scale-200.png create mode 100644 installer/Windows Installer/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 installer/Windows Installer/UWP/Assets/StoreLogo.png create mode 100644 installer/Windows Installer/UWP/Assets/Wide310x150Logo.scale-200.png create mode 100644 installer/Windows Installer/UWP/MainPage.xaml create mode 100644 installer/Windows Installer/UWP/MainPage.xaml.cs create mode 100644 installer/Windows Installer/UWP/Package.appxmanifest create mode 100644 installer/Windows Installer/UWP/Properties/AssemblyInfo.cs create mode 100644 installer/Windows Installer/UWP/Properties/Default.rd.xml create mode 100644 installer/Windows Installer/UWP/UWP.csproj create mode 100644 installer/Windows Installer/UWP/UWP.sln diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1ee5385 --- /dev/null +++ b/.gitignore @@ -0,0 +1,362 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd diff --git a/installer/Windows Installer/UWP/App.xaml b/installer/Windows Installer/UWP/App.xaml new file mode 100644 index 0000000..12a62e2 --- /dev/null +++ b/installer/Windows Installer/UWP/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + diff --git a/installer/Windows Installer/UWP/App.xaml.cs b/installer/Windows Installer/UWP/App.xaml.cs new file mode 100644 index 0000000..7a3571e --- /dev/null +++ b/installer/Windows Installer/UWP/App.xaml.cs @@ -0,0 +1,100 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.ApplicationModel; +using Windows.ApplicationModel.Activation; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +namespace UWP +{ + /// + ///Fornece o comportamento específico do aplicativo para complementar a classe Application padrão. + /// + sealed partial class App : Application + { + /// + /// Inicializa o objeto singleton do aplicativo. Essa é a primeira linha do código criado + /// executado e, por isso, é o equivalente lógico de main() ou WinMain(). + /// + public App() + { + this.InitializeComponent(); + this.Suspending += OnSuspending; + } + + /// + /// Invocado quando o aplicativo é iniciado normalmente pelo usuário final. Outros pontos de entrada + /// serão usados, por exemplo, quando o aplicativo for iniciado para abrir um arquivo específico. + /// + /// Detalhes sobre a solicitação e o processo de inicialização. + protected override void OnLaunched(LaunchActivatedEventArgs e) + { + Frame rootFrame = Window.Current.Content as Frame; + + // Não repita a inicialização do aplicativo quando a Janela já tiver conteúdo, + // apenas verifique se a janela está ativa + if (rootFrame == null) + { + // Crie um Quadro para atuar como o contexto de navegação e navegue para a primeira página + rootFrame = new Frame(); + + rootFrame.NavigationFailed += OnNavigationFailed; + + if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) + { + // TODO: Carregue o estado do aplicativo suspenso anteriormente + } + + // Coloque o quadro na Janela atual + Window.Current.Content = rootFrame; + } + + if (e.PrelaunchActivated == false) + { + if (rootFrame.Content == null) + { + // Quando a pilha de navegação não for restaurada, navegar para a primeira página, + // configurando a nova página passando as informações necessárias como um parâmetro + // de navegação + rootFrame.Navigate(typeof(MainPage), e.Arguments); + } + // Verifique se a janela atual está ativa + Window.Current.Activate(); + } + } + + /// + /// Chamado quando ocorre uma falha na Navegação para uma determinada página + /// + /// O Quadro com navegação com falha + /// Detalhes sobre a falha na navegação + void OnNavigationFailed(object sender, NavigationFailedEventArgs e) + { + throw new Exception("Failed to load Page " + e.SourcePageType.FullName); + } + + /// + /// Invocado quando a execução do aplicativo é suspensa. O estado do aplicativo é salvo + /// sem saber se o aplicativo será encerrado ou retomado com o conteúdo + /// da memória ainda intacto. + /// + /// A origem da solicitação de suspensão. + /// Detalhes sobre a solicitação de suspensão. + private void OnSuspending(object sender, SuspendingEventArgs e) + { + var deferral = e.SuspendingOperation.GetDeferral(); + //TODO: Salvar o estado do aplicativo e parar qualquer atividade em segundo plano + deferral.Complete(); + } + } +} diff --git a/installer/Windows Installer/UWP/Assets/LockScreenLogo.scale-200.png b/installer/Windows Installer/UWP/Assets/LockScreenLogo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..735f57adb5dfc01886d137b4e493d7e97cf13af3 GIT binary patch literal 1430 zcmaJ>TTC2P7~aKltDttVHYH6u8Io4i*}3fO&d$gd*bA_<3j~&e7%8(eXJLfhS!M@! zKrliY>>6yT4+Kr95$!DoD(Qn-5TP|{V_KS`k~E6(LGS@#`v$hQo&^^BKsw3HIsZBT z_y6C2n`lK@apunKojRQ^(_P}Mgewt$(^BBKCTZ;*xa?J3wQ7~@S0lUvbcLeq1Bg4o zH-bvQi|wt~L7q$~a-gDFP!{&TQfc3fX*6=uHv* zT&1&U(-)L%Xp^djI2?~eBF2cxC@YOP$+9d?P&h?lPy-9M2UT9fg5jKm1t$m#iWE{M zIf%q9@;fyT?0UP>tcw-bLkz;s2LlKl2qeP0w zECS7Ate+Awk|KQ+DOk;fl}Xsy4o^CY=pwq%QAAKKl628_yNPsK>?A>%D8fQG6IgdJ ztnxttBz#NI_a@fk7SU`WtrpsfZsNs9^0(2a z@C3#YO3>k~w7?2hipBf{#b6`}Xw1hlG$yi?;1dDs7k~xDAw@jiI*+tc;t2Lflg&bM)0!Y;0_@=w%`LW^8DsYpS#-bLOklX9r?Ei}TScw|4DbpW%+7 zFgAI)f51s}{y-eWb|vrU-Ya!GuYKP)J7z#*V_k^Xo>4!1Yqj*m)x&0L^tg3GJbVAJ zJ-Pl$R=NAabouV=^z_t;^K*0AvFs!vYU>_<|I^#c?>>CR<(T?=%{;U=aI*SbZADLH z&(f2wz_Y0??Tf|g;?|1Znw6}6U43Q#qNRwv1vp9uFn1)V#*4p&%$mP9x&15^OaBiDS(XppT|z^>;B{PLVEbS3IFYV yGvCsSX*m literal 0 HcmV?d00001 diff --git a/installer/Windows Installer/UWP/Assets/SplashScreen.scale-200.png b/installer/Windows Installer/UWP/Assets/SplashScreen.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..023e7f1feda78d5100569825acedfd213a0d84e9 GIT binary patch literal 7700 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 literal 0 HcmV?d00001 diff --git a/installer/Windows Installer/UWP/Assets/Square150x150Logo.scale-200.png b/installer/Windows Installer/UWP/Assets/Square150x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..af49fec1a5484db1d52a7f9b5ec90a27c7030186 GIT binary patch literal 2937 zcma)84OCO-8BSud5)jwMLRVKgX(S?$n?Ld|vrsm<$CF7)&zTbyy1FE5bU`Q17MRv`9ue$;R(@8kR;#vJ*IM0>cJIAOte!d7oRgdH zd%ySjdB6L9=gX^A6)VzH7p2l@v~3zJAMw|DFy#^)F@@F*`mqUn=Il>l)8_+ab;nOW{%+iPx z+s{Eu|&pIs)Z7{La9~?xKfyl z#43?gjEL15d4WbOZo#SiP%>DB^+BcnJ=7dHEe;r#G=tuw|ka z%q@}##Uh7;tc%L_64m(kHtw74ty%BJMb)_1)#S0j`)F8_1jF7vScpsnH=0V19bO8y zR`0SjIdCUo&=>JwMQF8KHA<{ODHTiQh}0^@5QRmCA?gOH6_H3K^-_sNB^RrdNuK-R zOO*vOrKCVvDwgUck`kF(E7j{I#iiN;b*ZdCt4m@HPA`EuEqGGf4%!K<;(=I=&Vyrw z%TwcWtxa}8mCZ%Cyf&ActJ6_$ox5z6-D!0-dvnRx6t7y3d+h6QYpKWO;8OdnvERo7 zuEf>ih5`wqY)~o@OeVt-wM?Q!>QzdGRj!bz6fzYrfw$hZfAKzr2-M+D+R>}~oT574c;_3zquHcElqKIsryILt3g8n3jcMb+j?i?-L3FpZJ z2WRVBRdDPc+G5aaYg#5hpE+6nQ|(VSoxT3|biF;BUq#==-27Xi=gihDPYP$7?=9cP zYKE$jeQ|3~_L0VG-(F~2ZPyD0=k{J4Q~h(t__{-mz_w8{JDY9{`1ouzz!Vr5!ECdE z6U~O1k8c}24V7~zzXWTV-Pe4)y}wQJS&q%H5`Fo_f_JvIU489aCX$;P`u#!I-=^4ijC2{&9!O&h>mi?9oYD=GC#%)6{GzN6nQYw+Fal50!#x^asjBBR50i`+mho*ttoqV)ubM2KD9S~k7+FR4>{29?6 z{!l6kDdyTN0YJ9LgkPWeXm|gyi@zM3?0@{&pXT12w|78&W-q!RRF)&iLCEZVH<|fR zN0fr2^t8H(>L?>K#>^+jWROLral(Qy-xoBq1U7A&DV||wClb)Otd9?(gZ|8znMF}D zf<1haWz^s0qgecz;RFGt0C-B4g`jNGHsFU+;{<%t65v^sjk^h$lmWn#B0#_)9ij&d z-~lc`A)YYExi^7sBuPM^Y|wA2g*5?`K?#7tzELQYNxGo$UB$4J8RJp1k(8Jj+~hMT zlN~>M@KTTh^--8y3PK_NZ@AC!{PT=CziBzGd+wTJ^@icH!Bd}%)g8V)%K?|c&WTUk zy}qv1C%(fjRoZ4ozC3{O%@5?)XzH35zHns$pgU*Q?fj4v?fp1Qbm+j;3l;9jam9Da zXVcKjPlQ73x78QPu|Ffm6x?`~e3oD=gl=4kYK?={kD5j~QCXU)`HSdduNNENzA*2$ zOm3PzF!lN5e*06-f1Uot67wY#{o-S1!KZ7E=!~7ynnk9_iJR#kFoNbAOT#^2Gd17F zMmvU6>lndZQGd|ax9kUoXXO+$N?|j@6qpsF&_j7YXvwo_C{JpmLw5&#e6k>atv%es z5)7r*Wvv_JkUpT}M!_o!nVlEk1Zbl=a*2hQ*<|%*K1Glj^FcF`6kTzGQ3lz~2tCc@ z&x|tj;aH&1&9HwcJBcT`;{?a+pnej;M1HO(6Z{#J!cZA04hnFl;NXA+&`=7bjW_^o zfC40u3LMG?NdPtwGl>Tq6u}*QG)}-y;)lu-_>ee3kibW(69n0$0Zy!}9rQz%*v1iO zT9_H>99yIrSPYVy6^);rR}7Yo=J_T@hi+qhTZXnVWyf;JDYm5#eYLTxr*?kiNn!+Y zQ+LUkBafNJ#rH#C(?d5^;gw9o#%daEI{mA*LHPIHPU`#|H$hD zwm>0&+kahQ)E#%~k>&5@&#Vg82H?s%71=)(soi@174pi9--2{w{1$}Sz4zGn3Du&x bht0Iza^2ykEt4(epJ78uh5nDlX8(TxzDYwP literal 0 HcmV?d00001 diff --git a/installer/Windows Installer/UWP/Assets/Square44x44Logo.scale-200.png b/installer/Windows Installer/UWP/Assets/Square44x44Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..ce342a2ec8a61291ba76c54604aea7e9d20af11b GIT binary patch literal 1647 zcmaJ?eM}Q)7(e+G1Q(|`V9JhTI2>MkceK4;p;PR&$Pi?ejk3YQ_3o`S&|W_dsOZ8# zWPTt69g`t$ab`0cj-Y0yiBSOqmd)tG7G(}M5aP0_%&9TijB#&)I{zSE^4@#z^FF`l z`8{8`o%wlL(UI|y2!cdsuVamHH~H86F!*-15em4)NqUpCQM5?aoC_eCf@lV4wvF2a zjDQn1JBL69f&@2M3rvzJcfE!eZ8FZUBlFlC5RD)it33{mF9#B82AiyQE%w)`vlwa> zv{<1sm&kSKK$&%2jSFn7$t&P%%6Ue>R=EAnG8N7fqynWG8L3p!4801a;8{+nliO(qd(jNJ_?+9W3#hLIDLoT6~3fx9=`CC-D}-AMrpEO7HK zt3$GicGPc?GmDjy7K2P@La;eu4!$zWCZ`ym{Z$b zu-O6RM&K4JT|BIZB`E-gxqG%FzanI#+2FFmqHqXG7yxWB=w55RGOM)$xMb(>kSNR z2w=1AZi%z=AmG~yea~XaXJR!v7vLn(RUnELfiB1|6D84ICOS}^Zo2AdN}<&*h}G_u z{xZ!(%>tLT3J3<5XhWy-tg+6)0nmUUENLW8TWA{R6bgVd3X;anYFZ^IRis*_P-C-r z;i>%1^eL3UI2-{w8nuFFcs0e~7J{O2k^~Ce%+Ly4U?|=!0LH=t6()xi<^I-rs+9sF z*q{E-CxZbGPeu#a;XJwE;9S1?#R&uns>^0G3p`hEUF*v`M?@h%T%J%RChmD|EVydq zmHWh*_=S%emRC*mhxaVLzT@>Z2SX0u9v*DIJ@WC^kLVdlGV6LpK$KIrlJqc zpJ921)+3JJdTx|<`G&kXpKkjGJv=76R`yYIQ{#c-`%+`#V(7}Q;&@6U8!Td1`d;?N z_9mnI#?AA}4J!r)LN4!E-@H5eXauuB7TOawS>Y|{-P?NNx-lq+z1W-+y(;39P&&LP zL{N80?&=C*qKmdA^moMZRuPcD!B<*mq$ch=0Cnlitw#txRWhb3%TQvPqjkC`F69G4b! ze7z9MZ#+;_#l?H37UqUhDFb^l&s2{oM$3I0o^Q!yx;;V)QmCMo)Tb_ui|mit8MS?U zm##6$sZZ1$@|s%?l@>4Z<*Q}sRBSKMhb4I{e5LdEhsHIHTe8Bod5c>6QtT>$XgUBz z6MK`kO$=jmt@FqggOhJ5j~e@ygRbG;<{Vu)*+nn9aQeo0;$#j;|MS=S$&L?BeV25z xs3B`@=#`5TF{^6(A1rvdY@|-RtQ|iS5{tyX+wH?;n8E)G$kykv-D^wh{{!TZT%7;_ literal 0 HcmV?d00001 diff --git a/installer/Windows Installer/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/installer/Windows Installer/UWP/Assets/Square44x44Logo.targetsize-24_altform-unplated.png new file mode 100644 index 0000000000000000000000000000000000000000..f6c02ce97e0a802b85f6021e822c89f8bf57d5cd GIT binary patch literal 1255 zcmaJ>TWs4@7*5+{G#S+&C!qC#> zf>5N3P6jO*Cz>ug*(_DmW=)kea&m$gZ^+nyiF`;j%w@}y8)>p*SH}C`m?DXeieF2U zyQHecc_L%Gh!7GMt+hG06y;+|p4>m~}PjA}rKViGiEnn7G0ZO<>G|7q;2?NwGCM3s?eued6%hd$B+ z*kQJ{#~$S=DFE(%=E+UkmlEI*%3llUf~8Ja9YU1Vui0IbGBkW_gHB%Rd&!!ioX zs40O?i9I{};kle7GMvE7(rk`la=gTI)47=>%?q@^iL-nUo3}h4S}N-KHn8t5mVP8w z&bSErwp+37 zNJJ8?a|{r5Q3R0Z5s-LB1WHOwYC@7pCHWND#cL1cZ?{kJ368_*(UDWUDyb<}0y@o# zfMF016iMWPCb6obAxT$JlB6(2DrlXDTB&!0`!m??4F(qWMhjVZo?JXQmz`1*58Z=& zcDmB|S-E@j?BoFGix0flckqdS4jsPNzhfWyWIM98GxcLs89C(~dw%$_t;JjX-SD}E zfiGV;{8Q%8r}w9x>EEigW81>`kvnU@pK)4+xk9@+bNj9L!AAZ@SZ@q|)&BmY3+HZx zul~BeG4|}-;L%cHViQGQX?^zFfO0&#cHwel=d`lH9sJ-@Sl@n*(8J2>%Ac`IxyY?Q z{=GhWvC#gu-~Ia7*n{=+;qM?Ul_wy1+u7ho;=`>EwP^g~R@{unBds`!#@}tluZQpS zm)M~nYEifJWJGx?_6DcTy>#uh%>!H9=hb^(v`=m3F1{L>db=<5_tm+_&knAQ2EU$s Mu9UqpbNZeC0BbUo^Z)<= literal 0 HcmV?d00001 diff --git a/installer/Windows Installer/UWP/Assets/StoreLogo.png b/installer/Windows Installer/UWP/Assets/StoreLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..7385b56c0e4d3c6b0efe3324aa1194157d837826 GIT binary patch literal 1451 zcmaJ>eN5D57_Z|bH;{0+1#mbl)eTU3{h)Wf7EZV?;HD@XL@{B`Ui%(2aMxQ~xdXSv z5nzWi(LW)U2=Vc-cY@s7nPt{i0hc6!7xN4NNHI#EQl>YNBy8l4%x9gr_W-j zEZMQmmTIy(>;lblRfh`dIyTgc9W5d!VP$L4(kKrN1c5G~(O_#xG zAJCNTstD^5SeXFB+&$h=ToJP2H>xr$iqPs-#O*;4(!Fjw25-!gEb*)mU}=)J;Iu>w zxK(5XoD0wrPSKQ~rbL^Cw6O_03*l*}i=ydbu7adJ6y;%@tjFeXIXT+ms30pmbOP%Q zX}S;+LBh8Tea~TSkHzvX6$rYb)+n&{kSbIqh|c7hmlxmwSiq5iVhU#iEQ<>a18|O^Sln-8t&+t`*{qBWo5M?wFM(JuimAOb5!K#D}XbslM@#1ZVz_;!9U zpfEpLAOz=0g@bd6Xj_ILi-x^!M}73h^o@}hM$1jflTs|Yuj9AL@A3<-?MV4!^4q`e z)fO@A;{9K^?W?DbnesnPr6kK>$zaKo&;FhFd(GYFCIU^T+OIMb%Tqo+P%oq(IdX7S zf6+HLO?7o0m+p>~Tp5UrXWh!UH!wZ5kv!E`_w)PTpI(#Iw{AS`gH4^b(bm^ZCq^FZ zY9DD7bH}rq9mg88+KgA$Zp!iWncuU2n1AuIa@=sWvUR-s`Qb{R*kk(SPU^`$6BXz8 zn#7yaFOIK%qGxyi`dYtm#&qqox0$h=pNi#u=M8zUG@bpiZ=3sT=1}Trr}39cC)H|v zbL?W)=&s4zrh)7>L(|cc%$1#!zfL?HjpeP%T+x_a+jZ16b^iKOHxFEX$7d|8${H-* zIrOJ5w&i$>*D>AKaIoYg`;{L@jM((Kt?$N$5OnuPqVvq**Nm}(f0wwOF%iX_Pba;V z;m@wxX&NcV3?<1+u?A{y_DIj7#m3Af1rCE)o`D&Y3}0%7E;iX1yMDiS)sh0wKi!36 zL!Wmq?P^Ku&rK~HJd97KkLTRl>ScGFYZNlYytWnhmuu|)L&ND8_PmkayQb{HOY640 bno1(wj@u8DCVuFR|31B*4ek@pZJqxCDDe1x literal 0 HcmV?d00001 diff --git a/installer/Windows Installer/UWP/Assets/Wide310x150Logo.scale-200.png b/installer/Windows Installer/UWP/Assets/Wide310x150Logo.scale-200.png new file mode 100644 index 0000000000000000000000000000000000000000..288995b397fdbef1fb7e85afd71445d5de1952c5 GIT binary patch literal 3204 zcmbVPeQXow8NYmBd90>}0NP?GhXW~VaeThm=a0tV#EwJMI!)6M3}|c4_Bl3=Kd>G0 z(GHx1wl<7(tP?FsOQkTilSo*iIvF%uArExJ73~P zSv1xEy!U(Wd4A9D`FQV@W3@F^qJ@PEF$@z`Z!*BbFsS(^?B zyiAzJ+q})bkgiQHWqEb*jJD-coHYr1^iocg)l!Qa{Xqs-l~6J}p-|##ZHYofskQ3$ zI0;xzXyhazBeXhIsg5A=%ufo@f)1yy&ScKS0;HF^!r_2UE^lpZEom(+@duma3awTv zCrCL-%D_SvYWIcdHkmI}#50(fkUi)Qgx!80ju>g1za^}ff>JI8Z@^-iCiaCgg@TgF z+vtE?Q9{VQUX&MW9SYYmGcxA14%N2@7FwBTD4N<(2{nWgV8$e3?-F=L^&FrtWn~(U_Q~~^uYiyeY6-KoTnfh9AWz@ zIKje0)u!_Lw)E}G!#kEfwKVdNt(UAf9*f>tEL_(=xco-T%jTi@7YlC3hs2ik%Le0H ztj}RTeCF(5mwvi3_56>-yB?l;J>-1%!9~=fs|QcNG3J~a@JCu`4SB460s0ZO+##4fFUSGLcj_ja^fL4&BKALfb#$6$O?>P@qx2Agl^x0i&ugt zsy5Pyu=()`7HRMG3IB7F1@`_ z+-!J%#i6e^U$e#+C%Q>_qVRzWRsG^W_n+@OcX@vzI&z;mzHNb!GQ?LWA(wtpqHqTM z1OFw_{Zn?fD)p)`c`kOgv{de=v@suGRqY{N^U7gI1VF3*F=obwaXI6ob5__Yn zVTguS!%(NI09J8x#AO_aW!9W7k*UvB;IWDFC3srwftr{kHj%g)fvnAm;&h_dnl~

MY- zf+K}sCe8qU6Ujs`3ua{U0Of$R_gVQBuUA za0v=mu#vIOqiiAZOr&h*$WyOw&k-xr$;G4Ixa!#TJNr>95(h>l%)PUy4p+^SgR(uR zta%k*?ny-+nAr8spEk1fo{J4i!b^Fia`N{_F6@zidA2ZTTrjl#^5Z-2KfB@Cu}l9s z(*|Z2jc?p~vn2f)3y9i*7zJV1L{$?|&q)4oaT;uXi6>1GkRXVTOzAz(RHEmr=eFIi z`}<>-Q?K0GN8!IYxeP1XKXO+jsJbp~o^);Bc;%b7Flpe7;1`Ny@3r7ZR;?R)aJt8C ziNlEC<@3f_lIV4TwV}&e;D!Ee5_|e#g0LUh=5vmYWYm7&2h*M>QPKvGh9-)wfMMW3 z8J9b%1k7dzPzO0_NGQy92BZ^FR6R~6;^6?lqO;-QUP4BY%cG%3vEhbm#>4vIhPBh3 z-+pZGjh$x%Hp{?=FHsMp0&wNPlj00us{&`1ZOZTqs8%4X&xH=UDr*xyBW(Zp&Em94 zf)ZSfn#yg0N)>!1kWdkqJ^S*z0FF5|fj&qcE#Na|%OY0$uO>!&hP+1ywfD_WXk@4J(?MBftK7>$Nvqh@tDuarN%PrTLQ2Uzysx>UV=V zk^RrDSvdQ?0;=hY67EgII-f4`t=+i*yS=Y~!XlqIy_4x&%+OdfbKOFPXS2X5%4R{N z$SQMX^AK6(fA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/Windows Installer/UWP/MainPage.xaml.cs b/installer/Windows Installer/UWP/MainPage.xaml.cs new file mode 100644 index 0000000..5924440 --- /dev/null +++ b/installer/Windows Installer/UWP/MainPage.xaml.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using Windows.Foundation; +using Windows.Foundation.Collections; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Controls.Primitives; +using Windows.UI.Xaml.Data; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Media; +using Windows.UI.Xaml.Navigation; + +// O modelo de item de Página em Branco está documentado em https://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x416 + +namespace UWP +{ + ///

+ /// Uma página vazia que pode ser usada isoladamente ou navegada dentro de um Quadro. + /// + public sealed partial class MainPage : Page + { + public MainPage() + { + this.InitializeComponent(); + } + } +} diff --git a/installer/Windows Installer/UWP/Package.appxmanifest b/installer/Windows Installer/UWP/Package.appxmanifest new file mode 100644 index 0000000..61b944f --- /dev/null +++ b/installer/Windows Installer/UWP/Package.appxmanifest @@ -0,0 +1,49 @@ + + + + + + + + + + UWP + italo + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/installer/Windows Installer/UWP/Properties/AssemblyInfo.cs b/installer/Windows Installer/UWP/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1724b44 --- /dev/null +++ b/installer/Windows Installer/UWP/Properties/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// As informações gerais sobre um assembly são controladas por +// conjunto de atributos. Altere estes valores de atributo para modificar as informações +// associadas ao assembly. +[assembly: AssemblyTitle("UWP")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("UWP")] +[assembly: AssemblyCopyright("Copyright © 2022")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// As informações da versão de um assembly consistem nos quatro valores a seguir: +// +// Versão Principal +// Versão Secundária +// Número da Versão +// Revisão +// +// É possível especificar todos os valores ou usar como padrão os Números de Build e da Revisão +// usando o "*" como mostrado abaixo: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] \ No newline at end of file diff --git a/installer/Windows Installer/UWP/Properties/Default.rd.xml b/installer/Windows Installer/UWP/Properties/Default.rd.xml new file mode 100644 index 0000000..f5b53a0 --- /dev/null +++ b/installer/Windows Installer/UWP/Properties/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/installer/Windows Installer/UWP/UWP.csproj b/installer/Windows Installer/UWP/UWP.csproj new file mode 100644 index 0000000..a57b925 --- /dev/null +++ b/installer/Windows Installer/UWP/UWP.csproj @@ -0,0 +1,171 @@ + + + + + Debug + x86 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7} + AppContainerExe + Properties + UWP + UWP + pt-BR + UAP + 10.0.19041.0 + 10.0.17763.0 + 14 + 512 + {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + true + false + + + true + bin\x86\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x86 + false + prompt + true + + + bin\x86\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x86 + false + prompt + true + true + + + true + bin\ARM\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM + false + prompt + true + + + bin\ARM\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM + false + prompt + true + true + + + true + bin\ARM64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + ARM64 + false + prompt + true + true + + + bin\ARM64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + ARM64 + false + prompt + true + true + + + true + bin\x64\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP + ;2008 + full + x64 + false + prompt + true + + + bin\x64\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP + true + ;2008 + pdbonly + x64 + false + prompt + true + true + + + PackageReference + + + + App.xaml + + + MainPage.xaml + + + + + + Designer + + + + + + + + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + + + 6.2.12 + + + 2.7.0 + + + + 14.0 + + + + \ No newline at end of file diff --git a/installer/Windows Installer/UWP/UWP.sln b/installer/Windows Installer/UWP/UWP.sln new file mode 100644 index 0000000..6bfc8db --- /dev/null +++ b/installer/Windows Installer/UWP/UWP.sln @@ -0,0 +1,51 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.32014.148 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UWP", "UWP.csproj", "{6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|ARM.ActiveCfg = Debug|ARM + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|ARM.Build.0 = Debug|ARM + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|ARM.Deploy.0 = Debug|ARM + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|ARM64.Build.0 = Debug|ARM64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|ARM64.Deploy.0 = Debug|ARM64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|x64.ActiveCfg = Debug|x64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|x64.Build.0 = Debug|x64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|x64.Deploy.0 = Debug|x64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|x86.ActiveCfg = Debug|x86 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|x86.Build.0 = Debug|x86 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Debug|x86.Deploy.0 = Debug|x86 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|ARM.ActiveCfg = Release|ARM + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|ARM.Build.0 = Release|ARM + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|ARM.Deploy.0 = Release|ARM + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|ARM64.ActiveCfg = Release|ARM64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|ARM64.Build.0 = Release|ARM64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|ARM64.Deploy.0 = Release|ARM64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|x64.ActiveCfg = Release|x64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|x64.Build.0 = Release|x64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|x64.Deploy.0 = Release|x64 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|x86.ActiveCfg = Release|x86 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|x86.Build.0 = Release|x86 + {6B6A62F3-1C24-4A4C-A584-E544DF52A2C7}.Release|x86.Deploy.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {63B55D46-5FFE-4B8E-82F4-5C0368D8D03C} + EndGlobalSection +EndGlobal diff --git a/src/.vs/MASLAB/DesignTimeBuild/.dtbcache.v2 b/src/.vs/MASLAB/DesignTimeBuild/.dtbcache.v2 index d27f4ffa93cb63221864a1d3c1e0403c94f2721e..1ec7d640c791b0e56f8fab037a5b004d5973f221 100644 GIT binary patch delta 36835 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 HJrDjL#BdQV delta 35682 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 diff --git a/src/.vs/MASLAB/v17/.futdcache.v1 b/src/.vs/MASLAB/v17/.futdcache.v1 index fbdb48bf29a437d0fa06a4f37dfb5fd182197e0a..fc08b7fd5cfe13cca8ee2de146fbb4b88e73e7f8 100644 GIT binary patch delta 30 gcmeysa*vgfeIsK&(?pgy0p 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 delta 6270 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 l%OPa53k)L?K_q)8LN+G8JpAd*G&s=M0H public double ValveConstant2 { get; set; } = 0.5; + /// + /// Simulador + /// + internal Simulator Simulator { get; set; } + + /// + /// Comando para salvar o gráfico + /// + internal Action SaveChartCommand { get; set; } /// @@ -40,6 +49,11 @@ public abstract class SimulationTank /// public virtual void OnSimulationStarting() { } + /// + /// Método chamado quando a simulação é finalizada. + /// + public virtual void OnSimulationFinished() { } + /// /// Método chamado a cada atualização das entradas do tanque /// @@ -129,6 +143,90 @@ public void Log(double time, object value) { Log(TimeSpan.FromSeconds(time), value); } + + /// + /// Reinicia a contagem de tempo da simulação + /// + public void RestartTimer() + { + if (Simulator != null) + Simulator.Reset(); + } + + /// + /// Inicia a simulação + /// + public void Start() + { + if (Simulator != null) + Simulator.Start(); + } + + /// + /// Para a simulação + /// + public void Stop() + { + if (Simulator != null) + Simulator.Stop(); + } + + /// + /// Salva a imagem do gráfico no formato png + /// + /// Caminho para o arquivo de salvamento + public void SaveChart(string path) + { + SaveChartCommand?.Invoke(path); + } + + private static Dictionary ValueBag { get; set; } + + /// + /// Salva um valor compartilhado na simulação + /// + /// Tipo do valor a ser salvo + /// Identificador ou nome + /// Valor a ser salvo + /// Retorna o valor inserido + public T SetValue(string key, T value) + { + if(ValueBag == null) + ValueBag = new Dictionary(); + + if(ValueBag.ContainsKey(key)) + ValueBag[key] = value; + else + ValueBag.Add(key, value); + + return value; + } + + /// + /// Retorna um valor previamente salvo. Se o valor não for encontrado, retorna o valor padrão informado + /// + /// Tipo do valor salvo + /// Identificador ou nome + /// Valor padrão + /// Retorna o valor salvo previamente + public T GetValueOrDefault(string key, T defaultValue) + { + if (ValueBag == null) + ValueBag = new Dictionary(); + + if(ValueBag.ContainsKey(key)) + return (T)ValueBag[key]; + else + return defaultValue; + } + + /// + /// Limpa os dados da plotagem + /// + public void ClearChart() + { + ChartService.GetService().Clear(); + } } } diff --git a/src/MASLAB/Simulation/Simulator.cs b/src/MASLAB/Simulation/Simulator.cs index 81d8686..c367ebd 100644 --- a/src/MASLAB/Simulation/Simulator.cs +++ b/src/MASLAB/Simulation/Simulator.cs @@ -211,6 +211,14 @@ private void Simule(CancellationToken token) } } + /// + /// Redefine o tempo da simulação para o instante zero + /// + public void Reset() + { + SimulationTime = TimeSpan.Zero; + } + private void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); diff --git a/src/MASLAB/ViewModels/MainWindowViewModel.cs b/src/MASLAB/ViewModels/MainWindowViewModel.cs index a13c137..4f3e718 100644 --- a/src/MASLAB/ViewModels/MainWindowViewModel.cs +++ b/src/MASLAB/ViewModels/MainWindowViewModel.cs @@ -52,9 +52,11 @@ public MainWindowViewModel() Simulator = new Simulator(); Simulator.SimulationType = SimulationType.RealTime; Simulator.SimulationDuration = TimeSpan.FromMinutes(5); - Simulator.Tick += OnSimulationTick; + Simulator.Tick += (s, a) => jobs.Enqueue(a); Simulator.PropertyChanged += (s, a) => UpdateCommands(); + StartSimulationLoop(); + //configura o comando de abertura de arquivo OpenCommand = new CommandAdapter(true) { @@ -87,7 +89,8 @@ public MainWindowViewModel() { //compila o código de todos os tanques await t.Compile(); - + t.SimulationTank.Simulator = Simulator; + t.SimulationTank.SaveChartCommand = s => ExportPng(ChartControl, s); //chama o método de inicialização de cada tanque t.SimulationTank.OnSimulationStarting(); } @@ -146,7 +149,8 @@ public MainWindowViewModel() //configura o comando de adição de níveis AddLevelCommand = new CommandAdapter(true) { - Action = (p) => { + Action = (p) => + { var level = new Level(Project); level.Name = $"Nível {Project.Levels.Count + 1}"; level.Items = new ObservableCollection() { new Tank(level) }; @@ -159,7 +163,7 @@ public MainWindowViewModel() }; //configura o comando para exportar imagens do diagrama - ExportCommand = new CommandAdapter(true){ Action = Export }; + ExportCommand = new CommandAdapter(true) { Action = Export }; SimulationSettingsCommand = new CommandAdapter(true) @@ -183,7 +187,7 @@ public MainWindowViewModel() Action = (p) => ((OxyPlot.Avalonia.PlotView)p).ResetAllAxes() }; - + ChartZoomInCommand = new CommandAdapter(true) { Action = (p) => ((OxyPlot.Avalonia.PlotView)p).ZoomAllAxes(1.1) @@ -208,23 +212,40 @@ private void CheckCommandLine() { //seleciona o primeiro arquivo encontrado com a extensão .masl var r = Environment.GetCommandLineArgs().FirstOrDefault(x => x.ToLower().EndsWith(".masl")); - if(r != null) + if (r != null) { OpenFile(r); } } + private void NotifyEnd() + { + if (endNotified == false) + { + foreach (var l in Project.Levels) + foreach (var t in l.Items) + { + try + { + t?.SimulationTank?.OnSimulationFinished(); + } + catch { } + } + } + } + private async void ShowErrorDialog(string message) { await MASLAB.Views.MessageBox.Show(message, "Erro"); } bool linkEnabled; + bool endNotified = false; IList pointCollection = new List(); Project project; bool about; int selectedTabIndex = 0; - + Queue jobs = new Queue(); /// @@ -337,9 +358,9 @@ public bool IsAboutOpen /// /// Determina se a adição de novas conexões está habilitado /// - public bool LinkEnabled - { - get => linkEnabled; + public bool LinkEnabled + { + get => linkEnabled; private set => this.RaiseAndSetIfChanged(ref linkEnabled, value); } @@ -347,21 +368,26 @@ public bool LinkEnabled /// /// Obtém a lista de pontos da conexão atual /// - public IList PointCollection - { - get => pointCollection; - set => pointCollection = this.RaiseAndSetIfChanged(ref pointCollection, value); + public IList PointCollection + { + get => pointCollection; + set => pointCollection = this.RaiseAndSetIfChanged(ref pointCollection, value); } /// /// Obtém ou define o índice da aba selecionada /// - public int SelectedTabIndex - { + public int SelectedTabIndex + { get => selectedTabIndex; set => this.RaiseAndSetIfChanged(ref selectedTabIndex, value); } + /// + /// Controle do gráfico + /// + public Control ChartControl { get; set; } + /// /// Método utilizado para abrir um projeto /// @@ -372,7 +398,7 @@ public async void Open() OpenFileDialog ofd = new OpenFileDialog(); ofd.Filters.Add(new FileDialogFilter() //configura a extensão do arquivo de projeto { - Extensions = new List { ".masl" }, + Extensions = new List { "masl" }, Name = "Projeto do MASLAB" }); @@ -468,89 +494,101 @@ private void SaveProjectFile(string filename) } - + /// /// Método chamado a cada TIC do simulador /// - /// Instância do simulador - /// Parâmetros do simulador - private async void OnSimulationTick(object sender, SimulationTickEventArgs e) + private async void StartSimulationLoop() { try { await Task.Run(async () => { - //obtém os tanques de todos os níveis - foreach (var t in Project.Levels.SelectMany(x => x.Items)) + while(true) { + if(jobs.Count > 0) + { + endNotified = false; + var job = jobs.Dequeue(); - //obtém as conexões de cada tanque - var r = Project.Connections.Where(x => x.Target.Tank == t || x.Origin.Tank == t).ToArray(); + foreach (var t in Project.Levels.SelectMany(x => x.Items)) + { - double tl = 0; - double tr = 0; - double bl = 0; - double br = 0; - var tl_ = r.FirstOrDefault(x => x.Target.Tank == t && x.Type == LinkType.Unidiretional && x.Target.ConnectionPosition == ConnectionPosition.TopLeft); + //obtém as conexões de cada tanque + var r = Project.Connections.Where(x => x.Target.Tank == t || x.Origin.Tank == t).ToArray(); + + double tl = 0; + double tr = 0; + double bl = 0; + double br = 0; + + var tl_ = r.FirstOrDefault(x => x.Target.Tank == t && x.Type == LinkType.Unidiretional && x.Target.ConnectionPosition == ConnectionPosition.TopLeft); + + if (tl_?.Origin.ConnectionPosition == ConnectionPosition.BottomRight) + tl = tl_.Origin.Tank.RightOutput; + else + tl = tl_?.Origin?.Tank?.LeftOutput ?? 0; + + var tr_ = r.FirstOrDefault(x => x.Target.Tank == t && x.Type == LinkType.Unidiretional && x.Target.ConnectionPosition == ConnectionPosition.TopRight); + + if (tr_?.Origin.ConnectionPosition == ConnectionPosition.BottomRight) + tr = tr_.Origin.Tank.RightOutput; + else + tr = tr_?.Origin?.Tank?.LeftOutput ?? 0; - if (tl_?.Origin.ConnectionPosition == ConnectionPosition.BottomRight) - tl = tl_.Origin.Tank.RightOutput; - else - tl = tl_?.Origin?.Tank?.LeftOutput ?? 0; - var tr_ = r.FirstOrDefault(x => x.Target.Tank == t && x.Type == LinkType.Unidiretional && x.Target.ConnectionPosition == ConnectionPosition.TopRight); - if (tr_?.Origin.ConnectionPosition == ConnectionPosition.BottomRight) - tr = tr_.Origin.Tank.RightOutput; + var bl_ = r.FirstOrDefault(x => + x.Type == LinkType.Bidiretional && + ((x.Origin.Tank == t && x.Origin.ConnectionPosition == ConnectionPosition.BottomLeft) || (x.Target.Tank == t && x.Target.ConnectionPosition == ConnectionPosition.BottomLeft))); + + if (bl_?.Origin?.Tank != t) + if (bl_?.Origin?.ConnectionPosition == ConnectionPosition.BottomRight) + bl = bl_?.Origin?.Tank?.RightOutput ?? 0; + else + bl = bl_?.Origin?.Tank?.LeftOutput ?? 0; + else if (bl_?.Target?.Tank != t) + if (bl_?.Target?.ConnectionPosition == ConnectionPosition.BottomRight) + bl = bl_?.Target?.Tank?.RightOutput ?? 0; + else + bl = bl_?.Target?.Tank?.LeftOutput ?? 0; + + var br_ = r.FirstOrDefault(x => + x.Type == LinkType.Bidiretional && + ((x.Origin.Tank == t && x.Origin.ConnectionPosition == ConnectionPosition.BottomRight) || (x.Target.Tank == t && x.Target.ConnectionPosition == ConnectionPosition.BottomRight))); + + if (br_?.Origin?.Tank != t) + if (br_?.Origin?.ConnectionPosition == ConnectionPosition.BottomRight) + br = br_?.Origin?.Tank?.RightOutput ?? 0; + else + br = br_?.Origin?.Tank?.LeftOutput ?? 0; + else if (br_?.Target?.Tank != t) + if (br_?.Target?.ConnectionPosition == ConnectionPosition.BottomRight) + br = br_?.Target?.Tank?.RightOutput ?? 0; + else + br = br_?.Target?.Tank?.LeftOutput ?? 0; + + + await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() => + { + t.UpdateTank(job.CurrentTime, Simulator.SimulationInterval, tl, tr, bl, br); + return true; + }); + } + } else - tr = tr_?.Origin?.Tank?.LeftOutput ?? 0; - - - - var bl_ = r.FirstOrDefault(x => - x.Type == LinkType.Bidiretional && - ((x.Origin.Tank == t && x.Origin.ConnectionPosition == ConnectionPosition.BottomLeft) || (x.Target.Tank == t && x.Target.ConnectionPosition == ConnectionPosition.BottomLeft))); - - if (bl_?.Origin?.Tank != t) - if(bl_?.Origin?.ConnectionPosition == ConnectionPosition.BottomRight) - bl = bl_?.Origin?.Tank?.RightOutput ?? 0; - else - bl = bl_?.Origin?.Tank?.LeftOutput ?? 0; - else if (bl_?.Target?.Tank != t) - if (bl_?.Target?.ConnectionPosition == ConnectionPosition.BottomRight) - bl = bl_?.Target?.Tank?.RightOutput ?? 0; - else - bl = bl_?.Target?.Tank?.LeftOutput ?? 0; - - var br_ = r.FirstOrDefault(x => - x.Type == LinkType.Bidiretional && - ((x.Origin.Tank == t && x.Origin.ConnectionPosition == ConnectionPosition.BottomRight) || (x.Target.Tank == t && x.Target.ConnectionPosition == ConnectionPosition.BottomRight))); - - if (br_?.Origin?.Tank != t) - if (br_?.Origin?.ConnectionPosition == ConnectionPosition.BottomRight) - br = br_?.Origin?.Tank?.RightOutput ?? 0; - else - br = br_?.Origin?.Tank?.LeftOutput ?? 0; - else if (br_?.Target?.Tank != t) - if (br_?.Target?.ConnectionPosition == ConnectionPosition.BottomRight) - br = br_?.Target?.Tank?.RightOutput ?? 0; - else - br = br_?.Target?.Tank?.LeftOutput ?? 0; - - - await Avalonia.Threading.Dispatcher.UIThread.InvokeAsync(() => { - t.UpdateTank(e.CurrentTime, Simulator.SimulationInterval, tl, tr, bl, br); - }); - - } - }); + NotifyEnd(); + endNotified = true; + } + }; + }); } - catch(Exception ex) + catch (Exception ex) { LogService.GetService().Log("!! FALHA: " + ex.Message); @@ -592,7 +630,7 @@ private void OnConnectionStarted(Connection c) /// Dados da conexão entre dois tanques private void OnConnectionCompleted(Link l) { - if(l == null) + if (l == null) { LinkEnabled = false; PointCollection = new List(); @@ -606,7 +644,7 @@ private void OnConnectionCompleted(Link l) Project.Connections.Add(l); l.Points = new List(PointCollection); - + PointCollection = new List(); } @@ -620,13 +658,14 @@ private async void Export(object control) { try { + ChartControl = (Control)control; SaveFileDialog saveFileDialog1 = new SaveFileDialog(); saveFileDialog1.Filters.Add(new FileDialogFilter() //configura a extensão do arquivo .png - { - Name = "Imagem PNG (*.png)", - Extensions = new List { ".png" } + { + Name = "Imagem PNG (*.png)", + Extensions = new List { ".png" } }); - + saveFileDialog1.Filters.Add(new FileDialogFilter() //configura a extensão do arquivo .mat { Extensions = new List { "mat" }, @@ -656,7 +695,7 @@ private async void Export(object control) break; } } - + } catch (Exception e) { @@ -671,7 +710,8 @@ private async void Export(object control) /// Caminho para o arquivo private void ExportPng(object control, string filename) { - var target = control as TabControl; + var target = control as Control; + var pixelSize = new PixelSize((int)target.Bounds.Width, (int)target.Bounds.Height); var size = new Size(target.Bounds.Width, target.Bounds.Height); var dpiVector = new Vector(96, 96); @@ -734,7 +774,7 @@ private void ExportCsvFile(string filename) string[] labels = new string[ChartService.Model.Series.Count * 2]; for (int i = 0; i < ChartService.Model.Series.Count * 2; i = i + 2) { - LineSeries serie = (LineSeries)ChartService.Model.Series[i/2]; + LineSeries serie = (LineSeries)ChartService.Model.Series[i / 2]; for (int j = 0; j < serie.Points.Count; j++) { data[j, i] = serie.Points[j].X; diff --git a/src/MASLAB/ViewModels/SimulationSettingsViewModel.cs b/src/MASLAB/ViewModels/SimulationSettingsViewModel.cs index 2568544..a0d6e93 100644 --- a/src/MASLAB/ViewModels/SimulationSettingsViewModel.cs +++ b/src/MASLAB/ViewModels/SimulationSettingsViewModel.cs @@ -12,7 +12,7 @@ public class SimulationSettingsViewModel:ViewModelBase { TimeSpan duration = TimeSpan.FromSeconds(2); TimeSpan interval = TimeSpan.FromMilliseconds(50); - string durationString = "00:02:000"; + string durationString = "00:00:02:000"; string intervalString = "00:00:050"; bool isRealTime = true; @@ -45,7 +45,7 @@ public string DurationString this.RaiseAndSetIfChanged(ref durationString, value); try { - Duration = TimeSpan.ParseExact(value, @"m\:s\:fff", System.Globalization.CultureInfo.InvariantCulture); + Duration = TimeSpan.ParseExact(value, @"h\:m\:s\:fff", System.Globalization.CultureInfo.InvariantCulture); } catch { } } diff --git a/src/MASLAB/Views/MainWindow.xaml b/src/MASLAB/Views/MainWindow.xaml index 6c6ccf4..09b26cb 100644 --- a/src/MASLAB/Views/MainWindow.xaml +++ b/src/MASLAB/Views/MainWindow.xaml @@ -71,7 +71,7 @@ - + @@ -88,7 +88,7 @@ - +