Enabled arcs render after adapting OpenCNCPilot code.

Started porting iosender to C++
This commit is contained in:
2023-05-16 09:18:06 +03:00
parent c05a6a1ad2
commit 42aefe8ed8
23 changed files with 2200 additions and 18 deletions
+49 -11
View File
@@ -4,6 +4,8 @@
#include "glm/vec3.hpp"
#include "glm/vec4.hpp"
#include "glm/gtc/type_ptr.hpp"
#include "gcode_parser.h"
#include <fstream>
static const char *vs_code = R"(
#version 330
@@ -101,7 +103,7 @@ static const char *ps_heightmap_code = R"(
}
)";
static void add_vertex(std::vector<float>& buffer_data, glm::vec3 v, glm::vec3 n, glm::vec4 col) {
static void add_vertex(std::vector<float> &buffer_data, glm::vec3 v, glm::vec3 n, glm::vec4 col) {
buffer_data.push_back(v.x);
buffer_data.push_back(v.y);
buffer_data.push_back(v.z);
@@ -116,7 +118,7 @@ static void add_vertex(std::vector<float>& buffer_data, glm::vec3 v, glm::vec3 n
buffer_data.push_back(col.a);
}
static void add_vertex(std::vector<float>& buffer_data, glm::vec3 v, glm::vec4 col) {
static void add_vertex(std::vector<float> &buffer_data, glm::vec3 v, glm::vec4 col) {
buffer_data.push_back(v.x);
buffer_data.push_back(v.y);
buffer_data.push_back(v.z);
@@ -127,24 +129,27 @@ static void add_vertex(std::vector<float>& buffer_data, glm::vec3 v, glm::vec4 c
buffer_data.push_back(col.a);
}
static void add_line(std::vector<float>& buffer_data, glm::vec3 from, glm::vec4 from_col, glm::vec3 to, glm::vec4 to_col) {
static void
add_line(std::vector<float> &buffer_data, glm::vec3 from, glm::vec4 from_col, glm::vec3 to, glm::vec4 to_col) {
add_vertex(buffer_data, from, from_col);
add_vertex(buffer_data, to, to_col);
}
static void add_line(std::vector<float>& buffer_data, glm::vec3 from, glm::vec3 to, glm::vec4 col) {
static void add_line(std::vector<float> &buffer_data, glm::vec3 from, glm::vec3 to, glm::vec4 col) {
add_vertex(buffer_data, from, col);
add_vertex(buffer_data, to, col);
}
static void add_triangle(std::vector<float>& buffer_data, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, glm::vec3 n, glm::vec4 col) {
static void
add_triangle(std::vector<float> &buffer_data, glm::vec3 p1, glm::vec3 p2, glm::vec3 p3, glm::vec3 n, glm::vec4 col) {
add_vertex(buffer_data, p1, n, col);
add_vertex(buffer_data, p2, n, col);
add_vertex(buffer_data, p3, n, col);
}
void grbl::program_renderer::render(glm::mat4 model, glm::mat4 view, glm::mat4 projection, glm::mat3 normal_mat, glm::vec2 viewport_size) {
void grbl::program_renderer::render(glm::mat4 model, glm::mat4 view, glm::mat4 projection, glm::mat3 normal_mat,
glm::vec2 viewport_size) {
if (shader == nullptr || heightmap_shader == nullptr) return;
// draw heightmap
@@ -191,7 +196,7 @@ void grbl::program_renderer::render(glm::mat4 model, glm::mat4 view, glm::mat4 p
shader->unbind();
}
void grbl::program_renderer::update(const grbl::program& pgm, const grbl::machine& cnc) {
void grbl::program_renderer::update(const grbl::program &pgm, const grbl::machine &cnc) {
if (!initialized) {
shader = new shader_program(vs_code, ps_code);
heightmap_shader = new shader_program(vs_heightmap_code, ps_heightmap_code);
@@ -338,9 +343,10 @@ void grbl::program_renderer::initialize_program_buffers() {
glBindVertexArray(0);
}
GLsizei grbl::program_renderer::update_model_vbo(const grbl::program& pgm) {
GLsizei grbl::program_renderer::update_model_vbo(const grbl::program &pgm) {
if (!pgm.is_loaded) return 0;
/*
static auto movement_re = std::regex(R"(([gG]0*1?\s+|[xXyYzZ]\s*[0-9\.\-]+))");
bool is_tool_on = false;
@@ -415,6 +421,36 @@ GLsizei grbl::program_renderer::update_model_vbo(const grbl::program& pgm) {
}
}
}
*/
std::vector<float> buffer_data;
grbl::grbl_parser parser;
std::ifstream in_file{pgm.filename};
if (in_file) {
parser.parse(in_file);
auto rapid_color = glm::vec4(1.0f);
auto feed_color = glm::vec4(1.0f, 0, 0, 1);
for (auto &c: parser.commands) {
auto line = dynamic_cast<grbl::line_motion_cmd *>(c.get());
auto arc = dynamic_cast<grbl::arc_motion_cmd *>(c.get());
if (line != nullptr) {
if (line->rapid)
add_line(buffer_data, line->start, rapid_color, line->end, rapid_color);
else
add_line(buffer_data, line->start, feed_color, line->end, feed_color);
} else if (arc != nullptr) {
auto pieces = arc->split(0.1);
for (auto &p: pieces) {
// transform arc to line
add_line(buffer_data, p->start, feed_color, p->end, feed_color);
}
}
}
}
const GLsizei size_of_vertex_in_bytes = 28;
auto number_of_vertices = buffer_data.size() * sizeof(float) / size_of_vertex_in_bytes;
@@ -426,7 +462,7 @@ GLsizei grbl::program_renderer::update_model_vbo(const grbl::program& pgm) {
}
void grbl::program_renderer::update_grid(const grbl::heightmap& grid) {
void grbl::program_renderer::update_grid(const grbl::heightmap &grid) {
glm::vec4 color = {0.5, 0.3, 0, 1};
@@ -528,7 +564,8 @@ bool check_compile_error(GLuint shader_id) {
if (is_compiled == GL_TRUE)
return true;
std::cerr << "Shader compile error: " << "(id: " << shader_id << ") - " << get_shader_info_log(shader_id) << std::endl;
std::cerr << "Shader compile error: " << "(id: " << shader_id << ") - " << get_shader_info_log(shader_id)
<< std::endl;
glDeleteShader(shader_id);
exit(1);
return false;
@@ -540,7 +577,8 @@ bool check_link_error(GLuint program_id) {
if (is_linked == GL_TRUE)
return true;
std::cerr << "Shader program link error: " << "(id: " << program_id << ") - " << get_program_info_log(program_id) << std::endl;
std::cerr << "Shader program link error: " << "(id: " << program_id << ") - " << get_program_info_log(program_id)
<< std::endl;
glDeleteProgram(program_id);
exit(1);
return false;