Enabled arcs render after adapting OpenCNCPilot code.
Started porting iosender to C++
This commit is contained in:
+49
-11
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user