#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define STB_IMAGE_STATIC #define STB_IMAGE_IMPLEMENTATION #if defined(_MSC_VER) # pragma warning (disable: 4505) // don't warn about dead code in stb_image.h #elif defined(__GNUC__) # pragma GCC diagnostic ignored "-Wunused-function" #endif #include #include "grbl.h" #include #include #include "grbl_machine.h" #include "string_utils.h" #include "render.h" #include "glm/gtx/quaternion.hpp" #include "nanogui/nanogui.h" #include #include #include // glm::vec3 #include // glm::vec4 #include // glm::mat4 #include // glm::translate, glm::rotate, glm::scale #include // glm::perspective #include // glm::pi using namespace nanogui; grbl::machine cnc{}; class SenderApp : public Screen, public grbl::machine_listener { public: Window *window; grbl::jog_state jog; Label *m_pos_x, *m_pos_y, *m_pos_z; TextArea *lblStatus, *lblSubstatus; nanogui::Color colRed = nanogui::Color(255, 0, 0, 255); nanogui::Color colGreen = nanogui::Color(0, 255, 0, 255); nanogui::Color colBg; int last_alarm = 0; grbl::program pgm; Button *btnLoadProgram, *btnCheckProgram, *btnRunProgram; grbl::program_renderer renderer; glm::vec3 cam_target = glm::vec3(0); float cam_zoom = 0; glm::quat cam_src_rotation = glm::quat(1.0, 0.0, 0.0, 0.0); // identity quaternion TabWidget *tab_widget; VScrollPanel *settings_vscroll; Widget *settings_layer; VScrollPanel *parameters_vscroll; Widget *parameters_layer; TextBox *mpos_x_text, *mpos_y_text, *mpos_z_text; void fill_in_settings() { settings_vscroll = new VScrollPanel(tab_widget); tab_widget->append_tab("Settings", settings_vscroll); settings_layer = new Widget(settings_vscroll); settings_layer->set_layout(new GridLayout(Orientation::Horizontal, 1, Alignment::Middle)); auto& settings = cnc.get_settings(); for (auto& s: settings) { auto w = settings_layer->add(); w->set_layout(new BoxLayout(Orientation::Horizontal, Alignment::Middle, 2, 2)); auto x = w->add