Aggiunta Imgui e sliders per intervallo visualizzazione
This commit is contained in:
+61
-16
@@ -2,6 +2,8 @@
|
||||
#include <math.h>
|
||||
#include "pieces/headers/piece_interface.hpp"
|
||||
#include "joints/headers/joint_interface.hpp"
|
||||
#include <imgui.h>
|
||||
#include <imgui-SFML.h>
|
||||
|
||||
template <typename T1, typename T2>
|
||||
double dist(sf::Vector2<T1> p1, sf::Vector2<T2> p2)
|
||||
@@ -31,12 +33,22 @@ struct State
|
||||
bool drag = false;
|
||||
sf::Vector2i mouse_pos;
|
||||
|
||||
/// per settare l'ntervallo di visualizzazione
|
||||
unsigned int pos = 0;
|
||||
unsigned int intervalMajLimit = 1000;
|
||||
unsigned int intervalMinLimit = 0;
|
||||
unsigned int maxEntries = 10000;
|
||||
|
||||
State(unsigned w, unsigned h, std::string title)
|
||||
{
|
||||
window = sf::RenderWindow(sf::VideoMode({w, h}), title);
|
||||
ImGui::SFML::Init(window);
|
||||
clock.restart();
|
||||
}
|
||||
void update();
|
||||
void setIntervall(int n){
|
||||
maxEntries = n;
|
||||
}
|
||||
};
|
||||
|
||||
///
|
||||
@@ -49,7 +61,7 @@ void State::update(){
|
||||
|
||||
|
||||
for(PieceInterface* p : pieces){
|
||||
//p->update(clock);
|
||||
p->update(clock);
|
||||
}
|
||||
for(JointInterface* j : joints){
|
||||
j->movechild();
|
||||
@@ -61,17 +73,17 @@ void State::update(){
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
/// Callback functions
|
||||
void handle(const sf::Event::Closed &, State &gs)
|
||||
void handle_close(State &gs)
|
||||
{
|
||||
gs.window.close();
|
||||
}
|
||||
|
||||
void handle(const sf::Event::TextEntered &textEnter, State &gs)
|
||||
void handle_text(const sf::Event::TextEntered &textEnter, State &gs)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void handle(const sf::Event::KeyPressed &keyPressed, State &gs)
|
||||
void handle_keyPressed(const sf::Event::KeyPressed &keyPressed, State &gs)
|
||||
{
|
||||
if (keyPressed.scancode == sf::Keyboard::Scancode::Space){
|
||||
if (gs.selectedPlane == ReferencePlane::XZ)
|
||||
@@ -81,7 +93,7 @@ void handle(const sf::Event::KeyPressed &keyPressed, State &gs)
|
||||
}
|
||||
}
|
||||
|
||||
void handle(const sf::Event::MouseMoved &mouseMoved, State &gs)
|
||||
void handle_mouseMove(const sf::Event::MouseMoved &mouseMoved, State &gs)
|
||||
{
|
||||
sf::Vector2i offset = mouseMoved.position - gs.mouse_pos;
|
||||
gs.mouse_pos = mouseMoved.position;
|
||||
@@ -123,7 +135,7 @@ void handle(const sf::Event::MouseMoved &mouseMoved, State &gs)
|
||||
|
||||
}
|
||||
|
||||
void handle(const sf::Event::MouseButtonPressed &mouseBP, State &gs)
|
||||
void handle_mousePressed(const sf::Event::MouseButtonPressed &mouseBP, State &gs)
|
||||
{
|
||||
gs.mouse_pos = mouseBP.position;
|
||||
if ( mouseBP.button == sf::Mouse::Button::Middle) gs.drag = true;
|
||||
@@ -162,7 +174,7 @@ void handle(const sf::Event::MouseButtonPressed &mouseBP, State &gs)
|
||||
|
||||
}
|
||||
|
||||
void handle(const sf::Event::MouseButtonReleased &, State &gs)
|
||||
void handle_mouseRelease(const sf::Event::MouseButtonReleased &, State &gs)
|
||||
{
|
||||
gs.drag = false;
|
||||
gs.drag_Piece = false;
|
||||
@@ -170,17 +182,13 @@ void handle(const sf::Event::MouseButtonReleased &, State &gs)
|
||||
gs.selected = -1;
|
||||
}
|
||||
|
||||
void handle(const sf::Event::Resized &resized, State &gs)
|
||||
void handle_resize(const sf::Event::Resized &resized, State &gs)
|
||||
{
|
||||
sf::FloatRect visibleArea({0.f, 0.f}, sf::Vector2f(resized.size));
|
||||
gs.window.setView(sf::View(visibleArea));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void handle(const T &, State &gs)
|
||||
{
|
||||
// All unhandled events will end up here
|
||||
}
|
||||
|
||||
///
|
||||
////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -191,18 +199,55 @@ void doGUI(State &gs)
|
||||
{
|
||||
// TODO: here code to display the menus
|
||||
//Bottoni
|
||||
|
||||
sf::Time elapsed = gs.clock.restart();
|
||||
|
||||
unsigned int zero = 0;
|
||||
|
||||
ImGui::SFML::Update(gs.window, elapsed);
|
||||
ImGui::ShowDemoWindow();
|
||||
ImGui::Begin("Set data position");
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.3);
|
||||
ImGui::SliderScalar("Min", ImGuiDataType_U32 ,&gs.intervalMinLimit,&zero,&gs.intervalMajLimit);
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.5);
|
||||
ImGui::SliderScalar("Pos", ImGuiDataType_U32 ,&gs.pos,&gs.intervalMinLimit,&gs.intervalMajLimit);
|
||||
ImGui::SameLine();
|
||||
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x * 0.8);
|
||||
ImGui::SliderScalar("Max", ImGuiDataType_U32 ,&gs.intervalMajLimit,&gs.intervalMinLimit,&gs.maxEntries);
|
||||
|
||||
ImGui::End();
|
||||
|
||||
ImGui::SFML::Render(gs.window);
|
||||
}
|
||||
|
||||
void doGraphics(State &gs)
|
||||
{
|
||||
|
||||
gs.window.clear();
|
||||
doGUI(gs);
|
||||
|
||||
for(PieceInterface* p: gs.pieces){
|
||||
gs.window.draw(*p->draw(gs.selectedPlane));
|
||||
}
|
||||
|
||||
while (const std::optional event = gs.window.pollEvent()) {
|
||||
ImGui::SFML::ProcessEvent(gs.window, *event);
|
||||
if (event->is<sf::Event::Closed>())
|
||||
handle_close (gs);
|
||||
if (const auto* resized = event->getIf<sf::Event::Resized>())
|
||||
handle_resize (*resized, gs);
|
||||
if (const auto* pressed = event->getIf<sf::Event::KeyPressed>())
|
||||
handle_keyPressed (*pressed, gs);
|
||||
if (const auto* moved = event->getIf<sf::Event::MouseMoved>())
|
||||
handle_mouseMove (*moved, gs);
|
||||
if (const auto* mpressed = event->getIf<sf::Event::MouseButtonPressed>())
|
||||
handle_mousePressed (*mpressed, gs);
|
||||
if (const auto* mreleased = event->getIf<sf::Event::MouseButtonReleased>())
|
||||
handle_mouseRelease (*mreleased, gs);
|
||||
}
|
||||
doGUI(gs);
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: add here code to display shapes in your canvas
|
||||
|
||||
gs.window.display();
|
||||
|
||||
Reference in New Issue
Block a user