diff --git a/CMakeLists.txt b/CMakeLists.txt index 98092ac..b3d90dc 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,6 @@ set(METHODS_PATH "./src/*/methods/*.cpp") set(VERSION "V10") file(GLOB_RECURSE METHODS_SRC "${METHODS_PATH}") -add_executable(main${VERSION} ./src/testMain.cpp ${METHODS_SRC} ) +add_executable(main${VERSION} ./src/Main.cpp ${METHODS_SRC} ) target_link_libraries(main${VERSION} PRIVATE SFML::Graphics ImGui-SFML::ImGui-SFML common glm) target_compile_definitions(main${VERSION} PRIVATE $<$:DEBUG_MODE>) \ No newline at end of file diff --git a/README.md b/README.md index 691df6b..5ff2b27 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,12 @@ Per spostare l'intera scena si tiene premuto il tasto centrale del mouse. - Modificata la funzione update di pezzi e collezioni per implementare controllo sul tempo - Aggiunta finestra con slider per selezione moltiplicatore del tempo +## Nella versione v0.10 +- Aggiunta controllo texture +- Aggiunta pavimento +- Refactoring generale +- Definizione main finale (non più di test) + # Per compilare: cmake --build diff --git a/build/bin/mainV10.exe b/build/bin/mainV10.exe index 9c5575b..9a73483 100644 Binary files a/build/bin/mainV10.exe and b/build/bin/mainV10.exe differ diff --git a/src/Main.cpp b/src/Main.cpp new file mode 100644 index 0000000..3f6909b --- /dev/null +++ b/src/Main.cpp @@ -0,0 +1,77 @@ +#include "include.hpp" + +int main() { + CSVProcessor processor; + + // inizializzo variabili per gestire l'intervallo di visualizzazione + + unsigned int min = 0; + unsigned int pos = 0; + unsigned int maj = 100; + + //Costruisco la GUI + State gs(800, 700, "Visualizzatore passo",&maj,&min,&pos); + gs.window.setFramerateLimit(70); + printf("Costruisco gli oggetti\n"); + + try{ + + processor.readCSVFile (DATA_PATH + "coscia_filt.csv"); //utilizzo questo file per definire la dimensione dei dati + const auto& coscia = processor.getData(); + gs.setIntervall(coscia.size()); + + //provo ad aggiungere una collection + //gs.collections.push_back(new Gamba({220,0,220},&pos,"coscia_filt.csv","caviglia_filt.csv")); + + std::vector data; + gamba_data d; + d.dataPos = &pos; + d.cavigliaData = "caviglia_dx.csv"; + d.cosciaData = "coscia_dx.csv"; + gamba_data s; + s.dataPos = &pos; + s.cavigliaData = "caviglia_sx.csv"; + s.cosciaData = "coscia_sx.csv"; + data.push_back(d); + data.push_back(s); + gs.collections.push_back(new Lower_Body(rb::Vector3{200,200,100},data)); + + + + //aggiungo il pavimento + gs.pieces.push_back(new Pavimento({200,200,550},_Float16(0.2) )); + gs.pieces[0]->body.setRot({0,-0.03,0}); + + printf("Ho costruito tutto!\n"); + } + catch(char* e){ + printf("%s\n",e); + } + printf("Avvio l'interfaccia grafica\n"); + + + unsigned int curTime = 0; + unsigned int freq = 50; //frequenza campionamento sensori + const unsigned int T = 1000/freq; //i sensori hanno una freq di campionamento di 50hz + + //Avvio il loop della GUI + gs.clock.start(); + gs.updateCollections(); + + sf::Clock mainClock; + while (gs.window.isOpen()) + { + curTime += mainClock.restart().asMilliseconds() *(*gs.tMul) ; + if (curTime > T){ + if (gs.play && pos+curTime/T < maj) pos += curTime / T; + curTime = 0; + } + + // Show update + gs.update(); + doGraphics(gs); + } + + return 0; +} + diff --git a/src/testMain.cpp b/src/testMain.cpp deleted file mode 100755 index bafa507..0000000 --- a/src/testMain.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "include.hpp" - -int main() { - CSVProcessor processor; - try { - processor.readCSVFile("data.csv"); - - // Access headers - const auto& headers = processor.getHeaders(); - for (const auto& header : headers) { - std::cout << header << "\t"; - } - std::cout << std::endl; - - // Access data - int n = 0; - const auto& data = processor.getData(); - for (const auto& row : data) { - if (n++ >40) break; - for (float value : row) { - std::cout << value << "\t"; - } - std::cout << std::endl; - } - } catch (const std::exception& e) { - std::cerr << "Error: " << e.what() << std::endl; - } - - // inizializzo variabili per gestire l'intervallo di visualizzazione - - unsigned int min = 0; - unsigned int pos = 0; - unsigned int maj = 100; - - //Costruisco la GUI - State gs(800, 700, "Visualizzatore passo",&maj,&min,&pos); - gs.window.setFramerateLimit(70); - printf("Costruisco gli oggetti\n"); - - try{ - - processor.readCSVFile (DATA_PATH + "coscia_filt.csv"); - const auto& coscia = processor.getData(); - gs.setIntervall(coscia.size()); - - /* - gs.pieces.push_back(new Coscia (rb::Vector3{0,0,0},2)); - gs.pieces.push_back(new Sensore (rb::Vector3{300,300,300},_Float16( 0.2 ),&pos,coscia)); - gs.pieces.push_back(new Caviglia (rb::Vector3{300,300,500},1)); - - gs.pieces[1]->body.setRot({0,0,0}); - - - processor.readCSVFile(DATA_PATH + "caviglia_filt.csv"); - const auto& caviglia = processor.getData(); - gs.pieces.push_back(new Sensore (rb::Vector3{300,300,500},_Float16( 0.2 ),&pos,caviglia)); - - gs.pieces.push_back(new Torso(rb::Vector3{300,400,150},2)); - - // modifico la rotazione relativa della gamba - gs.pieces[1]->body.setRot({_Float16 (1.3),_Float16 (1.7),0}); - gs.pieces[3]->body.setRot({_Float16 (1.8),_Float16 (1.7),0}); - - - - // aggiungo i joint - gs.joints.push_back(new PivotJoint(gs.pieces[4], {gs.pieces[1]}, rb::Vector3{0,-100,50})); - gs.joints.push_back(new RigidJoint(gs.pieces[1], {gs.pieces[0]})); - gs.joints.push_back(new PivotJoint(gs.pieces[1], {gs.pieces[3]}, rb::Vector3{0,0,100})); - gs.joints.push_back(new RigidJoint(gs.pieces[3], {gs.pieces[2]})); - - gs.pieces[2]->setDirection(Direction::R); - */ - - - - - - //provo ad aggiungere una collection - //gs.collections.push_back(new Gamba({220,0,220},&pos,"coscia_filt.csv","caviglia_filt.csv")); - - std::vector data; - gamba_data d; - d.dataPos = &pos; - d.cavigliaData = "caviglia_dx.csv"; - d.cosciaData = "coscia_dx.csv"; - gamba_data s; - s.dataPos = &pos; - s.cavigliaData = "caviglia_sx.csv"; - s.cosciaData = "coscia_sx.csv"; - data.push_back(d); - data.push_back(s); - gs.collections.push_back(new Lower_Body(rb::Vector3{200,200,100},data)); - - - - //aggiungo il pavimento - gs.pieces.push_back(new Pavimento({200,200,550},_Float16(0.2) )); - gs.pieces[0]->body.setRot({0,-0.03,0}); - - printf("Ho costruito tutto!\n"); - } - catch(char* e){ - printf("%s\n",e); - } - printf("Avvio l'interfaccia grafica\n"); - - - unsigned int curTime = 0; - unsigned int freq = 50; - const unsigned int T = 1000/freq; //i sensori hanno una freq di campionamento di 50hz - - //Avvio il loop della GUI - gs.clock.start(); - gs.updateCollections(); - - sf::Clock mainClock; - while (gs.window.isOpen()) - { - curTime += mainClock.restart().asMilliseconds() *(*gs.tMul) ; - if (curTime > T){ - if (gs.play && pos+curTime/T < maj) pos += curTime / T; - curTime = 0; - } - - // Show update - gs.update(); - doGraphics(gs); - } - - return 0; -} -