Fixed layer height profile editing for multipart objects

This commit is contained in:
Enrico Turri 2018-04-13 09:01:48 +02:00
parent a3fc49ee76
commit acd8d2df98
3 changed files with 13 additions and 11 deletions

View file

@ -1527,10 +1527,13 @@ sub draw_active_object_annotations {
my ($reset_left, $reset_bottom, $reset_right, $reset_top) = $self->_variable_layer_thickness_reset_rect_viewport; my ($reset_left, $reset_bottom, $reset_right, $reset_top) = $self->_variable_layer_thickness_reset_rect_viewport;
my $z_cursor_relative = $self->_variable_layer_thickness_bar_mouse_cursor_z_relative; my $z_cursor_relative = $self->_variable_layer_thickness_bar_mouse_cursor_z_relative;
my $print_object = $self->{print}->get_object($object_idx);
my $z_max = $print_object->model_object->bounding_box->z_max;
$self->{layer_height_edit_shader}->enable; $self->{layer_height_edit_shader}->enable;
$self->{layer_height_edit_shader}->set_uniform('z_to_texture_row', $volume->layer_height_texture_z_to_row_id); $self->{layer_height_edit_shader}->set_uniform('z_to_texture_row', $volume->layer_height_texture_z_to_row_id);
$self->{layer_height_edit_shader}->set_uniform('z_texture_row_to_normalized', 1. / $volume->layer_height_texture_height); $self->{layer_height_edit_shader}->set_uniform('z_texture_row_to_normalized', 1. / $volume->layer_height_texture_height);
$self->{layer_height_edit_shader}->set_uniform('z_cursor', $volume->bounding_box->z_max * $z_cursor_relative); $self->{layer_height_edit_shader}->set_uniform('z_cursor', $z_max * $z_cursor_relative);
$self->{layer_height_edit_shader}->set_uniform('z_cursor_band_width', $self->{layer_height_edit_band_width}); $self->{layer_height_edit_shader}->set_uniform('z_cursor_band_width', $self->{layer_height_edit_band_width});
glBindTexture(GL_TEXTURE_2D, $self->{layer_preview_z_texture_id}); glBindTexture(GL_TEXTURE_2D, $self->{layer_preview_z_texture_id});
glTexImage2D_c(GL_TEXTURE_2D, 0, GL_RGBA8, $volume->layer_height_texture_width, $volume->layer_height_texture_height, glTexImage2D_c(GL_TEXTURE_2D, 0, GL_RGBA8, $volume->layer_height_texture_width, $volume->layer_height_texture_height,
@ -1552,8 +1555,8 @@ sub draw_active_object_annotations {
glBegin(GL_QUADS); glBegin(GL_QUADS);
glVertex3f($bar_left, $bar_bottom, 0); glVertex3f($bar_left, $bar_bottom, 0);
glVertex3f($bar_right, $bar_bottom, 0); glVertex3f($bar_right, $bar_bottom, 0);
glVertex3f($bar_right, $bar_top, $volume->bounding_box->z_max); glVertex3f($bar_right, $bar_top, $z_max);
glVertex3f($bar_left, $bar_top, $volume->bounding_box->z_max); glVertex3f($bar_left, $bar_top, $z_max);
glEnd(); glEnd();
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
$self->{layer_height_edit_shader}->disable; $self->{layer_height_edit_shader}->disable;
@ -1572,7 +1575,6 @@ sub draw_active_object_annotations {
# Paint the graph. # Paint the graph.
#FIXME show some kind of legend. #FIXME show some kind of legend.
my $print_object = $self->{print}->get_object($object_idx);
my $max_z = unscale($print_object->size->z); my $max_z = unscale($print_object->size->z);
my $profile = $print_object->model_object->layer_height_profile; my $profile = $print_object->model_object->layer_height_profile;
my $layer_height = $print_object->config->get('layer_height'); my $layer_height = $print_object->config->get('layer_height');
@ -1934,8 +1936,6 @@ const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074);
#define INTENSITY_AMBIENT 0.3 #define INTENSITY_AMBIENT 0.3
uniform float z_to_texture_row;
// x = tainted, y = specular; // x = tainted, y = specular;
varying vec2 intensity; varying vec2 intensity;

View file

@ -305,7 +305,7 @@ void GLVolume::render_using_layer_height() const
glUniform1f(z_texture_row_to_normalized_id, (GLfloat)(1.0f / layer_height_texture_height())); glUniform1f(z_texture_row_to_normalized_id, (GLfloat)(1.0f / layer_height_texture_height()));
if (z_cursor_id >= 0) if (z_cursor_id >= 0)
glUniform1f(z_cursor_id, (GLfloat)(bounding_box.max.z * layer_height_texture_data.z_cursor_relative)); glUniform1f(z_cursor_id, (GLfloat)(layer_height_texture_data.print_object->model_object()->bounding_box().max.z * layer_height_texture_data.z_cursor_relative));
if (z_cursor_band_width_id >= 0) if (z_cursor_band_width_id >= 0)
glUniform1f(z_cursor_band_width_id, (GLfloat)layer_height_texture_data.edit_band_width); glUniform1f(z_cursor_band_width_id, (GLfloat)layer_height_texture_data.edit_band_width);
@ -327,6 +327,11 @@ void GLVolume::render_using_layer_height() const
glUseProgram(current_program_id); glUseProgram(current_program_id);
} }
double GLVolume::layer_height_texture_z_to_row_id() const
{
return (this->layer_height_texture.get() == nullptr) ? 0.0 : double(this->layer_height_texture->cells - 1) / (double(this->layer_height_texture->width) * this->layer_height_texture_data.print_object->model_object()->bounding_box().max.z);
}
void GLVolume::generate_layer_height_texture(PrintObject *print_object, bool force) void GLVolume::generate_layer_height_texture(PrintObject *print_object, bool force)
{ {
GLTexture *tex = this->layer_height_texture.get(); GLTexture *tex = this->layer_height_texture.get();

View file

@ -361,10 +361,7 @@ public:
return (layer_height_texture.get() == nullptr) ? 0 : return (layer_height_texture.get() == nullptr) ? 0 :
(void*)(layer_height_texture->data.data() + layer_height_texture->width * layer_height_texture->height * 4); (void*)(layer_height_texture->data.data() + layer_height_texture->width * layer_height_texture->height * 4);
} }
double layer_height_texture_z_to_row_id() const { double layer_height_texture_z_to_row_id() const;
return (this->layer_height_texture.get() == nullptr) ? 0. :
double(this->layer_height_texture->cells - 1) / (double(this->layer_height_texture->width) * bounding_box.max.z);
}
void generate_layer_height_texture(PrintObject *print_object, bool force); void generate_layer_height_texture(PrintObject *print_object, bool force);
void set_layer_height_texture_data(unsigned int texture_id, unsigned int shader_id, PrintObject* print_object, float z_cursor_relative, float edit_band_width) void set_layer_height_texture_data(unsigned int texture_id, unsigned int shader_id, PrintObject* print_object, float z_cursor_relative, float edit_band_width)