Merge branch 'master' of https://github.com/Prusa3D/PrusaSlicer
This commit is contained in:
commit
135b3fcea8
@ -22,6 +22,19 @@ const vec3 WHITE = vec3(1.0, 1.0, 1.0);
|
|||||||
const float EPSILON = 0.0001;
|
const float EPSILON = 0.0001;
|
||||||
const float BANDS_WIDTH = 10.0;
|
const float BANDS_WIDTH = 10.0;
|
||||||
|
|
||||||
|
struct PrintVolumeDetection
|
||||||
|
{
|
||||||
|
// 0 = rectangle, 1 = circle, 2 = custom, 3 = invalid
|
||||||
|
int type;
|
||||||
|
// type = 0 (rectangle):
|
||||||
|
// x = min.x, y = min.y, z = max.x, w = max.y
|
||||||
|
// type = 1 (circle):
|
||||||
|
// x = center.x, y = center.y, z = radius
|
||||||
|
vec4 xy_data;
|
||||||
|
// x = min z, y = max z
|
||||||
|
vec2 z_data;
|
||||||
|
};
|
||||||
|
|
||||||
struct SlopeDetection
|
struct SlopeDetection
|
||||||
{
|
{
|
||||||
bool actived;
|
bool actived;
|
||||||
@ -44,11 +57,10 @@ varying vec3 clipping_planes_dots;
|
|||||||
// x = diffuse, y = specular;
|
// x = diffuse, y = specular;
|
||||||
varying vec2 intensity;
|
varying vec2 intensity;
|
||||||
|
|
||||||
varying vec3 delta_box_min;
|
uniform PrintVolumeDetection print_volume;
|
||||||
varying vec3 delta_box_max;
|
|
||||||
|
|
||||||
varying vec4 model_pos;
|
varying vec4 model_pos;
|
||||||
varying float world_pos_z;
|
varying vec4 world_pos;
|
||||||
varying float world_normal_z;
|
varying float world_normal_z;
|
||||||
varying vec3 eye_normal;
|
varying vec3 eye_normal;
|
||||||
|
|
||||||
@ -63,15 +75,30 @@ void main()
|
|||||||
color = vec3(0.7, 0.7, 1.0);
|
color = vec3(0.7, 0.7, 1.0);
|
||||||
alpha = 1.0;
|
alpha = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the fragment is outside the print volume -> use darker color
|
// if the fragment is outside the print volume -> use darker color
|
||||||
color = (any(lessThan(delta_box_min, ZERO)) || any(greaterThan(delta_box_max, ZERO))) ? mix(color, ZERO, 0.3333) : color;
|
vec3 pv_check_min = ZERO;
|
||||||
|
vec3 pv_check_max = ZERO;
|
||||||
|
if (print_volume.type == 0) {
|
||||||
|
// rectangle
|
||||||
|
pv_check_min = world_pos.xyz - vec3(print_volume.xy_data.x, print_volume.xy_data.y, print_volume.z_data.x);
|
||||||
|
pv_check_max = world_pos.xyz - vec3(print_volume.xy_data.z, print_volume.xy_data.w, print_volume.z_data.y);
|
||||||
|
}
|
||||||
|
else if (print_volume.type == 1) {
|
||||||
|
// circle
|
||||||
|
float delta_radius = print_volume.xy_data.z - distance(world_pos.xy, print_volume.xy_data.xy);
|
||||||
|
pv_check_min = vec3(delta_radius, 0.0, world_pos.z - print_volume.z_data.x);
|
||||||
|
pv_check_max = vec3(0.0, 0.0, world_pos.z - print_volume.z_data.y);
|
||||||
|
}
|
||||||
|
color = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color, ZERO, 0.3333) : color;
|
||||||
|
|
||||||
#ifdef ENABLE_ENVIRONMENT_MAP
|
#ifdef ENABLE_ENVIRONMENT_MAP
|
||||||
if (use_environment_tex)
|
if (use_environment_tex)
|
||||||
gl_FragColor = vec4(0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, alpha);
|
gl_FragColor = vec4(0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, alpha);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha);
|
gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha);
|
||||||
|
|
||||||
// In the support painting gizmo and the seam painting gizmo are painted triangles rendered over the already
|
// In the support painting gizmo and the seam painting gizmo are painted triangles rendered over the already
|
||||||
// rendered object. To resolved z-fighting between previously rendered object and painted triangles, values
|
// rendered object. To resolved z-fighting between previously rendered object and painted triangles, values
|
||||||
// inside the depth buffer are offset by small epsilon for painted triangles inside those gizmos.
|
// inside the depth buffer are offset by small epsilon for painted triangles inside those gizmos.
|
||||||
|
@ -18,14 +18,6 @@ const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074);
|
|||||||
|
|
||||||
const vec3 ZERO = vec3(0.0, 0.0, 0.0);
|
const vec3 ZERO = vec3(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
struct PrintBoxDetection
|
|
||||||
{
|
|
||||||
bool actived;
|
|
||||||
vec3 min;
|
|
||||||
vec3 max;
|
|
||||||
mat4 volume_world_matrix;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SlopeDetection
|
struct SlopeDetection
|
||||||
{
|
{
|
||||||
bool actived;
|
bool actived;
|
||||||
@ -33,7 +25,7 @@ struct SlopeDetection
|
|||||||
mat3 volume_world_normal_matrix;
|
mat3 volume_world_normal_matrix;
|
||||||
};
|
};
|
||||||
|
|
||||||
uniform PrintBoxDetection print_box;
|
uniform mat4 volume_world_matrix;
|
||||||
uniform SlopeDetection slope;
|
uniform SlopeDetection slope;
|
||||||
|
|
||||||
// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane.
|
// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane.
|
||||||
@ -44,46 +36,33 @@ uniform vec4 clipping_plane;
|
|||||||
// x = diffuse, y = specular;
|
// x = diffuse, y = specular;
|
||||||
varying vec2 intensity;
|
varying vec2 intensity;
|
||||||
|
|
||||||
varying vec3 delta_box_min;
|
|
||||||
varying vec3 delta_box_max;
|
|
||||||
|
|
||||||
varying vec3 clipping_planes_dots;
|
varying vec3 clipping_planes_dots;
|
||||||
|
|
||||||
varying vec4 model_pos;
|
varying vec4 model_pos;
|
||||||
varying float world_pos_z;
|
varying vec4 world_pos;
|
||||||
varying float world_normal_z;
|
varying float world_normal_z;
|
||||||
varying vec3 eye_normal;
|
varying vec3 eye_normal;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
// First transform the normal into camera space and normalize the result.
|
// First transform the normal into camera space and normalize the result.
|
||||||
eye_normal = normalize(gl_NormalMatrix * gl_Normal);
|
eye_normal = normalize(gl_NormalMatrix * gl_Normal);
|
||||||
|
|
||||||
// Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex.
|
// Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex.
|
||||||
// Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range.
|
// Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range.
|
||||||
float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0);
|
float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0);
|
||||||
|
|
||||||
intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE;
|
intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE;
|
||||||
vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz;
|
vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz;
|
||||||
intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS);
|
intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS);
|
||||||
|
|
||||||
// Perform the same lighting calculation for the 2nd light source (no specular applied).
|
// Perform the same lighting calculation for the 2nd light source (no specular applied).
|
||||||
NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0);
|
NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0);
|
||||||
intensity.x += NdotL * LIGHT_FRONT_DIFFUSE;
|
intensity.x += NdotL * LIGHT_FRONT_DIFFUSE;
|
||||||
|
|
||||||
model_pos = gl_Vertex;
|
model_pos = gl_Vertex;
|
||||||
// Point in homogenous coordinates.
|
// Point in homogenous coordinates.
|
||||||
vec4 world_pos = print_box.volume_world_matrix * gl_Vertex;
|
world_pos = volume_world_matrix * gl_Vertex;
|
||||||
world_pos_z = world_pos.z;
|
|
||||||
|
|
||||||
// compute deltas for out of print volume detection (world coordinates)
|
|
||||||
if (print_box.actived) {
|
|
||||||
delta_box_min = world_pos.xyz - print_box.min;
|
|
||||||
delta_box_max = world_pos.xyz - print_box.max;
|
|
||||||
} else {
|
|
||||||
delta_box_min = ZERO;
|
|
||||||
delta_box_max = ZERO;
|
|
||||||
}
|
|
||||||
|
|
||||||
// z component of normal vector in world coordinate used for slope shading
|
// z component of normal vector in world coordinate used for slope shading
|
||||||
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * gl_Normal)).z : 0.0;
|
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * gl_Normal)).z : 0.0;
|
||||||
|
@ -1,106 +0,0 @@
|
|||||||
#version 110
|
|
||||||
|
|
||||||
#define INTENSITY_CORRECTION 0.6
|
|
||||||
|
|
||||||
// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31)
|
|
||||||
const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929);
|
|
||||||
#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION)
|
|
||||||
#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION)
|
|
||||||
#define LIGHT_TOP_SHININESS 20.0
|
|
||||||
|
|
||||||
// normalized values for (1./1.43, 0.2/1.43, 1./1.43)
|
|
||||||
const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074);
|
|
||||||
#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION)
|
|
||||||
|
|
||||||
#define INTENSITY_AMBIENT 0.3
|
|
||||||
|
|
||||||
const vec3 ZERO = vec3(0.0, 0.0, 0.0);
|
|
||||||
const vec3 GREEN = vec3(0.0, 0.7, 0.0);
|
|
||||||
const vec3 YELLOW = vec3(0.5, 0.7, 0.0);
|
|
||||||
const vec3 RED = vec3(0.7, 0.0, 0.0);
|
|
||||||
const vec3 WHITE = vec3(1.0, 1.0, 1.0);
|
|
||||||
const float EPSILON = 0.0001;
|
|
||||||
const float BANDS_WIDTH = 10.0;
|
|
||||||
|
|
||||||
struct PrintVolumeDetection
|
|
||||||
{
|
|
||||||
// 0 = rectangle, 1 = circle, 2 = custom, 3 = invalid
|
|
||||||
int type;
|
|
||||||
// type = 0 (rectangle):
|
|
||||||
// x = min.x, y = min.y, z = max.x, w = max.y
|
|
||||||
// type = 1 (circle):
|
|
||||||
// x = center.x, y = center.y, z = radius
|
|
||||||
vec4 xy_data;
|
|
||||||
// x = min z, y = max z
|
|
||||||
vec2 z_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct SlopeDetection
|
|
||||||
{
|
|
||||||
bool actived;
|
|
||||||
float normal_z;
|
|
||||||
mat3 volume_world_normal_matrix;
|
|
||||||
};
|
|
||||||
|
|
||||||
uniform vec4 uniform_color;
|
|
||||||
uniform SlopeDetection slope;
|
|
||||||
|
|
||||||
uniform bool offset_depth_buffer;
|
|
||||||
|
|
||||||
#ifdef ENABLE_ENVIRONMENT_MAP
|
|
||||||
uniform sampler2D environment_tex;
|
|
||||||
uniform bool use_environment_tex;
|
|
||||||
#endif // ENABLE_ENVIRONMENT_MAP
|
|
||||||
|
|
||||||
varying vec3 clipping_planes_dots;
|
|
||||||
|
|
||||||
// x = diffuse, y = specular;
|
|
||||||
varying vec2 intensity;
|
|
||||||
|
|
||||||
uniform PrintVolumeDetection print_volume;
|
|
||||||
|
|
||||||
varying vec4 model_pos;
|
|
||||||
varying vec4 world_pos;
|
|
||||||
varying float world_normal_z;
|
|
||||||
varying vec3 eye_normal;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
if (any(lessThan(clipping_planes_dots, ZERO)))
|
|
||||||
discard;
|
|
||||||
vec3 color = uniform_color.rgb;
|
|
||||||
float alpha = uniform_color.a;
|
|
||||||
|
|
||||||
if (slope.actived && world_normal_z < slope.normal_z - EPSILON) {
|
|
||||||
color = vec3(0.7, 0.7, 1.0);
|
|
||||||
alpha = 1.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if the fragment is outside the print volume -> use darker color
|
|
||||||
vec3 pv_check_min = ZERO;
|
|
||||||
vec3 pv_check_max = ZERO;
|
|
||||||
if (print_volume.type == 0) {
|
|
||||||
// rectangle
|
|
||||||
pv_check_min = world_pos.xyz - vec3(print_volume.xy_data.x, print_volume.xy_data.y, print_volume.z_data.x);
|
|
||||||
pv_check_max = world_pos.xyz - vec3(print_volume.xy_data.z, print_volume.xy_data.w, print_volume.z_data.y);
|
|
||||||
}
|
|
||||||
else if (print_volume.type == 1) {
|
|
||||||
// circle
|
|
||||||
float delta_radius = print_volume.xy_data.z - distance(world_pos.xy, print_volume.xy_data.xy);
|
|
||||||
pv_check_min = vec3(delta_radius, 0.0, world_pos.z - print_volume.z_data.x);
|
|
||||||
pv_check_max = vec3(0.0, 0.0, world_pos.z - print_volume.z_data.y);
|
|
||||||
}
|
|
||||||
color = (any(lessThan(pv_check_min, ZERO)) || any(greaterThan(pv_check_max, ZERO))) ? mix(color, ZERO, 0.3333) : color;
|
|
||||||
|
|
||||||
#ifdef ENABLE_ENVIRONMENT_MAP
|
|
||||||
if (use_environment_tex)
|
|
||||||
gl_FragColor = vec4(0.45 * texture2D(environment_tex, normalize(eye_normal).xy * 0.5 + 0.5).xyz + 0.8 * color * intensity.x, alpha);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
gl_FragColor = vec4(vec3(intensity.y) + color * intensity.x, alpha);
|
|
||||||
|
|
||||||
// In the support painting gizmo and the seam painting gizmo are painted triangles rendered over the already
|
|
||||||
// rendered object. To resolved z-fighting between previously rendered object and painted triangles, values
|
|
||||||
// inside the depth buffer are offset by small epsilon for painted triangles inside those gizmos.
|
|
||||||
gl_FragDepth = gl_FragCoord.z - (offset_depth_buffer ? EPSILON : 0.0);
|
|
||||||
}
|
|
@ -1,73 +0,0 @@
|
|||||||
#version 110
|
|
||||||
|
|
||||||
#define INTENSITY_CORRECTION 0.6
|
|
||||||
|
|
||||||
// normalized values for (-0.6/1.31, 0.6/1.31, 1./1.31)
|
|
||||||
const vec3 LIGHT_TOP_DIR = vec3(-0.4574957, 0.4574957, 0.7624929);
|
|
||||||
#define LIGHT_TOP_DIFFUSE (0.8 * INTENSITY_CORRECTION)
|
|
||||||
#define LIGHT_TOP_SPECULAR (0.125 * INTENSITY_CORRECTION)
|
|
||||||
#define LIGHT_TOP_SHININESS 20.0
|
|
||||||
|
|
||||||
// normalized values for (1./1.43, 0.2/1.43, 1./1.43)
|
|
||||||
const vec3 LIGHT_FRONT_DIR = vec3(0.6985074, 0.1397015, 0.6985074);
|
|
||||||
#define LIGHT_FRONT_DIFFUSE (0.3 * INTENSITY_CORRECTION)
|
|
||||||
//#define LIGHT_FRONT_SPECULAR (0.0 * INTENSITY_CORRECTION)
|
|
||||||
//#define LIGHT_FRONT_SHININESS 5.0
|
|
||||||
|
|
||||||
#define INTENSITY_AMBIENT 0.3
|
|
||||||
|
|
||||||
const vec3 ZERO = vec3(0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
struct SlopeDetection
|
|
||||||
{
|
|
||||||
bool actived;
|
|
||||||
float normal_z;
|
|
||||||
mat3 volume_world_normal_matrix;
|
|
||||||
};
|
|
||||||
|
|
||||||
uniform mat4 volume_world_matrix;
|
|
||||||
uniform SlopeDetection slope;
|
|
||||||
|
|
||||||
// Clipping plane, x = min z, y = max z. Used by the FFF and SLA previews to clip with a top / bottom plane.
|
|
||||||
uniform vec2 z_range;
|
|
||||||
// Clipping plane - general orientation. Used by the SLA gizmo.
|
|
||||||
uniform vec4 clipping_plane;
|
|
||||||
|
|
||||||
// x = diffuse, y = specular;
|
|
||||||
varying vec2 intensity;
|
|
||||||
|
|
||||||
varying vec3 clipping_planes_dots;
|
|
||||||
|
|
||||||
varying vec4 model_pos;
|
|
||||||
varying vec4 world_pos;
|
|
||||||
varying float world_normal_z;
|
|
||||||
varying vec3 eye_normal;
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
// First transform the normal into camera space and normalize the result.
|
|
||||||
eye_normal = normalize(gl_NormalMatrix * gl_Normal);
|
|
||||||
|
|
||||||
// Compute the cos of the angle between the normal and lights direction. The light is directional so the direction is constant for every vertex.
|
|
||||||
// Since these two are normalized the cosine is the dot product. We also need to clamp the result to the [0,1] range.
|
|
||||||
float NdotL = max(dot(eye_normal, LIGHT_TOP_DIR), 0.0);
|
|
||||||
|
|
||||||
intensity.x = INTENSITY_AMBIENT + NdotL * LIGHT_TOP_DIFFUSE;
|
|
||||||
vec3 position = (gl_ModelViewMatrix * gl_Vertex).xyz;
|
|
||||||
intensity.y = LIGHT_TOP_SPECULAR * pow(max(dot(-normalize(position), reflect(-LIGHT_TOP_DIR, eye_normal)), 0.0), LIGHT_TOP_SHININESS);
|
|
||||||
|
|
||||||
// Perform the same lighting calculation for the 2nd light source (no specular applied).
|
|
||||||
NdotL = max(dot(eye_normal, LIGHT_FRONT_DIR), 0.0);
|
|
||||||
intensity.x += NdotL * LIGHT_FRONT_DIFFUSE;
|
|
||||||
|
|
||||||
model_pos = gl_Vertex;
|
|
||||||
// Point in homogenous coordinates.
|
|
||||||
world_pos = volume_world_matrix * gl_Vertex;
|
|
||||||
|
|
||||||
// z component of normal vector in world coordinate used for slope shading
|
|
||||||
world_normal_z = slope.actived ? (normalize(slope.volume_world_normal_matrix * gl_Normal)).z : 0.0;
|
|
||||||
|
|
||||||
gl_Position = ftransform();
|
|
||||||
// Fill in the scalars for fragment shader clipping. Fragments with any of these components lower than zero are discarded.
|
|
||||||
clipping_planes_dots = vec3(dot(world_pos, clipping_plane), world_pos.z - z_range.x, z_range.y - world_pos.z);
|
|
||||||
}
|
|
@ -1764,6 +1764,8 @@ public:
|
|||||||
// By setting min=0, only nonnegative input is allowed.
|
// By setting min=0, only nonnegative input is allowed.
|
||||||
int min = INT_MIN;
|
int min = INT_MIN;
|
||||||
int max = INT_MAX;
|
int max = INT_MAX;
|
||||||
|
// To check if it's not a typo and a % is missing
|
||||||
|
double max_literal = 1;
|
||||||
ConfigOptionMode mode = comSimple;
|
ConfigOptionMode mode = comSimple;
|
||||||
// Legacy names for this configuration option.
|
// Legacy names for this configuration option.
|
||||||
// Used when parsing legacy configuration file.
|
// Used when parsing legacy configuration file.
|
||||||
|
@ -719,9 +719,7 @@ void GCodeProcessor::UsedFilaments::process_caches(GCodeProcessor* processor)
|
|||||||
void GCodeProcessorResult::reset() {
|
void GCodeProcessorResult::reset() {
|
||||||
moves = std::vector<GCodeProcessorResult::MoveVertex>();
|
moves = std::vector<GCodeProcessorResult::MoveVertex>();
|
||||||
bed_shape = Pointfs();
|
bed_shape = Pointfs();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
max_print_height = 0.0f;
|
max_print_height = 0.0f;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
settings_ids.reset();
|
settings_ids.reset();
|
||||||
extruders_count = 0;
|
extruders_count = 0;
|
||||||
extruder_colors = std::vector<std::string>();
|
extruder_colors = std::vector<std::string>();
|
||||||
@ -736,9 +734,7 @@ void GCodeProcessorResult::reset() {
|
|||||||
moves.clear();
|
moves.clear();
|
||||||
lines_ends.clear();
|
lines_ends.clear();
|
||||||
bed_shape = Pointfs();
|
bed_shape = Pointfs();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
max_print_height = 0.0f;
|
max_print_height = 0.0f;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
settings_ids.reset();
|
settings_ids.reset();
|
||||||
extruders_count = 0;
|
extruders_count = 0;
|
||||||
extruder_colors = std::vector<std::string>();
|
extruder_colors = std::vector<std::string>();
|
||||||
@ -889,9 +885,7 @@ void GCodeProcessor::apply_config(const PrintConfig& config)
|
|||||||
if (first_layer_height != nullptr)
|
if (first_layer_height != nullptr)
|
||||||
m_first_layer_height = std::abs(first_layer_height->value);
|
m_first_layer_height = std::abs(first_layer_height->value);
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_result.max_print_height = config.max_print_height;
|
m_result.max_print_height = config.max_print_height;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
|
void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
|
||||||
@ -1122,11 +1116,9 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config)
|
|||||||
if (first_layer_height != nullptr)
|
if (first_layer_height != nullptr)
|
||||||
m_first_layer_height = std::abs(first_layer_height->value);
|
m_first_layer_height = std::abs(first_layer_height->value);
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
const ConfigOptionFloat* max_print_height = config.option<ConfigOptionFloat>("max_print_height");
|
const ConfigOptionFloat* max_print_height = config.option<ConfigOptionFloat>("max_print_height");
|
||||||
if (max_print_height != nullptr)
|
if (max_print_height != nullptr)
|
||||||
m_result.max_print_height = max_print_height->value;
|
m_result.max_print_height = max_print_height->value;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeProcessor::enable_stealth_time_estimator(bool enabled)
|
void GCodeProcessor::enable_stealth_time_estimator(bool enabled)
|
||||||
|
@ -117,9 +117,7 @@ namespace Slic3r {
|
|||||||
// Positions of ends of lines of the final G-code this->filename after TimeProcessor::post_process() finalizes the G-code.
|
// Positions of ends of lines of the final G-code this->filename after TimeProcessor::post_process() finalizes the G-code.
|
||||||
std::vector<size_t> lines_ends;
|
std::vector<size_t> lines_ends;
|
||||||
Pointfs bed_shape;
|
Pointfs bed_shape;
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
float max_print_height;
|
float max_print_height;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
SettingsIds settings_ids;
|
SettingsIds settings_ids;
|
||||||
size_t extruders_count;
|
size_t extruders_count;
|
||||||
std::vector<std::string> extruder_colors;
|
std::vector<std::string> extruder_colors;
|
||||||
|
@ -33,14 +33,12 @@ bool directions_parallel(double angle1, double angle2, double max_diff)
|
|||||||
return diff < max_diff || fabs(diff - PI) < max_diff;
|
return diff < max_diff || fabs(diff - PI) < max_diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool directions_perpendicular(double angle1, double angle2, double max_diff)
|
bool directions_perpendicular(double angle1, double angle2, double max_diff)
|
||||||
{
|
{
|
||||||
double diff = fabs(angle1 - angle2);
|
double diff = fabs(angle1 - angle2);
|
||||||
max_diff += EPSILON;
|
max_diff += EPSILON;
|
||||||
return fabs(diff - 0.5 * PI) < max_diff || fabs(diff - 1.5 * PI) < max_diff;
|
return fabs(diff - 0.5 * PI) < max_diff || fabs(diff - 1.5 * PI) < max_diff;
|
||||||
}
|
}
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
bool contains(const std::vector<T> &vector, const Point &point)
|
bool contains(const std::vector<T> &vector, const Point &point)
|
||||||
|
@ -288,9 +288,7 @@ bool liang_barsky_line_clipping(
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool directions_parallel(double angle1, double angle2, double max_diff = 0);
|
bool directions_parallel(double angle1, double angle2, double max_diff = 0);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool directions_perpendicular(double angle1, double angle2, double max_diff = 0);
|
bool directions_perpendicular(double angle1, double angle2, double max_diff = 0);
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
template<class T> bool contains(const std::vector<T> &vector, const Point &point);
|
template<class T> bool contains(const std::vector<T> &vector, const Point &point);
|
||||||
template<typename T> T rad2deg(T angle) { return T(180.0) * angle / T(PI); }
|
template<typename T> T rad2deg(T angle) { return T(180.0) * angle / T(PI); }
|
||||||
double rad2deg_dir(double angle);
|
double rad2deg_dir(double angle);
|
||||||
|
@ -70,7 +70,6 @@ bool Line::parallel_to(const Line& line) const
|
|||||||
return sqr(cross2(v1, v2)) < sqr(EPSILON) * v1.squaredNorm() * v2.squaredNorm();
|
return sqr(cross2(v1, v2)) < sqr(EPSILON) * v1.squaredNorm() * v2.squaredNorm();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool Line::perpendicular_to(double angle) const
|
bool Line::perpendicular_to(double angle) const
|
||||||
{
|
{
|
||||||
return Slic3r::Geometry::directions_perpendicular(this->direction(), angle);
|
return Slic3r::Geometry::directions_perpendicular(this->direction(), angle);
|
||||||
@ -82,7 +81,6 @@ bool Line::perpendicular_to(const Line& line) const
|
|||||||
const Vec2d v2 = (line.b - line.a).cast<double>();
|
const Vec2d v2 = (line.b - line.a).cast<double>();
|
||||||
return sqr(v1.dot(v2)) < sqr(EPSILON) * v1.squaredNorm() * v2.squaredNorm();
|
return sqr(v1.dot(v2)) < sqr(EPSILON) * v1.squaredNorm() * v2.squaredNorm();
|
||||||
}
|
}
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
bool Line::intersection(const Line &l2, Point *intersection) const
|
bool Line::intersection(const Line &l2, Point *intersection) const
|
||||||
{
|
{
|
||||||
|
@ -105,10 +105,8 @@ public:
|
|||||||
double perp_distance_to(const Point &point) const;
|
double perp_distance_to(const Point &point) const;
|
||||||
bool parallel_to(double angle) const;
|
bool parallel_to(double angle) const;
|
||||||
bool parallel_to(const Line& line) const;
|
bool parallel_to(const Line& line) const;
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool perpendicular_to(double angle) const;
|
bool perpendicular_to(double angle) const;
|
||||||
bool perpendicular_to(const Line& line) const;
|
bool perpendicular_to(const Line& line) const;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
double atan2_() const { return atan2(this->b(1) - this->a(1), this->b(0) - this->a(0)); }
|
double atan2_() const { return atan2(this->b(1) - this->a(1), this->b(0) - this->a(0)); }
|
||||||
double orientation() const;
|
double orientation() const;
|
||||||
double direction() const;
|
double direction() const;
|
||||||
|
@ -374,6 +374,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path.");
|
"Detour length could be specified either as an absolute value or as percentage (for example 50%) of a direct travel path.");
|
||||||
def->sidetext = L("mm or % (zero to disable)");
|
def->sidetext = L("mm or % (zero to disable)");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 1000;
|
||||||
def->mode = comExpert;
|
def->mode = comExpert;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0., false));
|
||||||
|
|
||||||
@ -720,6 +721,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"If expressed as percentage (for example 200%), it will be computed over layer height.");
|
"If expressed as percentage (for example 200%), it will be computed over layer height.");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
@ -831,6 +833,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->max = 1000;
|
def->max = 1000;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
@ -1181,6 +1184,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->ratio_over = "first_layer_height";
|
def->ratio_over = "first_layer_height";
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(200, true));
|
def->set_default_value(new ConfigOptionFloatOrPercent(200, true));
|
||||||
|
|
||||||
@ -1200,6 +1204,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"(for example: 40%) it will scale the default speeds.");
|
"(for example: 40%) it will scale the default speeds.");
|
||||||
def->sidetext = L("mm/s or %");
|
def->sidetext = L("mm/s or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 20;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(30, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(30, false));
|
||||||
|
|
||||||
@ -1374,6 +1379,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"Set this parameter to zero to disable anchoring perimeters connected to a single infill line.");
|
"Set this parameter to zero to disable anchoring perimeters connected to a single infill line.");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->ratio_over = "infill_extrusion_width";
|
def->ratio_over = "infill_extrusion_width";
|
||||||
|
def->max_literal = 1000;
|
||||||
def->gui_type = ConfigOptionDef::GUIType::f_enum_open;
|
def->gui_type = ConfigOptionDef::GUIType::f_enum_open;
|
||||||
def->enum_values.push_back("0");
|
def->enum_values.push_back("0");
|
||||||
def->enum_values.push_back("1");
|
def->enum_values.push_back("1");
|
||||||
@ -1401,6 +1407,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"Set this parameter to zero to disable anchoring.");
|
"Set this parameter to zero to disable anchoring.");
|
||||||
def->sidetext = def_infill_anchor_min->sidetext;
|
def->sidetext = def_infill_anchor_min->sidetext;
|
||||||
def->ratio_over = def_infill_anchor_min->ratio_over;
|
def->ratio_over = def_infill_anchor_min->ratio_over;
|
||||||
|
def->max_literal = def_infill_anchor_min->max_literal;
|
||||||
def->gui_type = def_infill_anchor_min->gui_type;
|
def->gui_type = def_infill_anchor_min->gui_type;
|
||||||
def->enum_values = def_infill_anchor_min->enum_values;
|
def->enum_values = def_infill_anchor_min->enum_values;
|
||||||
def->enum_labels.push_back(L("0 (not anchored)"));
|
def->enum_labels.push_back(L("0 (not anchored)"));
|
||||||
@ -1429,6 +1436,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
@ -1928,6 +1936,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->aliases = { "perimeters_extrusion_width" };
|
def->aliases = { "perimeters_extrusion_width" };
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
@ -2300,6 +2309,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
@ -2474,6 +2484,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->ratio_over = "external_perimeter_extrusion_width";
|
def->ratio_over = "external_perimeter_extrusion_width";
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 10;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
// Default is half the external perimeter width.
|
// Default is half the external perimeter width.
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
|
def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
|
||||||
@ -2560,6 +2571,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
@ -2793,6 +2805,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
"If expressed as percentage (for example 90%) it will be computed over layer height.");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
|
def->max_literal = 50;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
|
@ -80,9 +80,6 @@
|
|||||||
|
|
||||||
// Enable rendering modifiers and similar objects always as transparent
|
// Enable rendering modifiers and similar objects always as transparent
|
||||||
#define ENABLE_MODIFIERS_ALWAYS_TRANSPARENT (1 && ENABLE_2_4_0_BETA1)
|
#define ENABLE_MODIFIERS_ALWAYS_TRANSPARENT (1 && ENABLE_2_4_0_BETA1)
|
||||||
// Enable the fix for the detection of the out of bed state for sinking objects
|
|
||||||
// and detection of out of bed using the bed perimeter
|
|
||||||
#define ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS (1 && ENABLE_2_4_0_BETA1)
|
|
||||||
|
|
||||||
|
|
||||||
//====================
|
//====================
|
||||||
|
@ -436,7 +436,6 @@ BoundingBoxf3 TriangleMesh::transformed_bounding_box(const Transform3d &trafo) c
|
|||||||
return bbox;
|
return bbox;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
BoundingBoxf3 TriangleMesh::transformed_bounding_box(const Transform3d& trafod, double world_min_z) const
|
BoundingBoxf3 TriangleMesh::transformed_bounding_box(const Transform3d& trafod, double world_min_z) const
|
||||||
{
|
{
|
||||||
// 1) Allocate transformed vertices with their position with respect to print bed surface.
|
// 1) Allocate transformed vertices with their position with respect to print bed surface.
|
||||||
@ -487,7 +486,6 @@ BoundingBoxf3 TriangleMesh::transformed_bounding_box(const Transform3d& trafod,
|
|||||||
};
|
};
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
TriangleMesh TriangleMesh::convex_hull_3d() const
|
TriangleMesh TriangleMesh::convex_hull_3d() const
|
||||||
{
|
{
|
||||||
|
@ -125,10 +125,8 @@ public:
|
|||||||
BoundingBoxf3 bounding_box() const;
|
BoundingBoxf3 bounding_box() const;
|
||||||
// Returns the bbox of this TriangleMesh transformed by the given transformation
|
// Returns the bbox of this TriangleMesh transformed by the given transformation
|
||||||
BoundingBoxf3 transformed_bounding_box(const Transform3d &trafo) const;
|
BoundingBoxf3 transformed_bounding_box(const Transform3d &trafo) const;
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
// Variant returning the bbox of the part of this TriangleMesh above the given world_min_z
|
// Variant returning the bbox of the part of this TriangleMesh above the given world_min_z
|
||||||
BoundingBoxf3 transformed_bounding_box(const Transform3d& trafo, double world_min_z) const;
|
BoundingBoxf3 transformed_bounding_box(const Transform3d& trafo, double world_min_z) const;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
// Return the size of the mesh in coordinates.
|
// Return the size of the mesh in coordinates.
|
||||||
Vec3d size() const { return m_stats.size.cast<double>(); }
|
Vec3d size() const { return m_stats.size.cast<double>(); }
|
||||||
/// Return the center of the related bounding box.
|
/// Return the center of the related bounding box.
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "libslic3r/PresetBundle.hpp"
|
#include "libslic3r/PresetBundle.hpp"
|
||||||
#include "libslic3r/ClipperUtils.hpp"
|
#include "libslic3r/ClipperUtils.hpp"
|
||||||
#include "libslic3r/Tesselate.hpp"
|
#include "libslic3r/Tesselate.hpp"
|
||||||
|
#include "libslic3r/PrintConfig.hpp"
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@ -262,11 +263,9 @@ void GLIndexedVertexArray::render(
|
|||||||
const std::pair<size_t, size_t>& tverts_range,
|
const std::pair<size_t, size_t>& tverts_range,
|
||||||
const std::pair<size_t, size_t>& qverts_range) const
|
const std::pair<size_t, size_t>& qverts_range) const
|
||||||
{
|
{
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
// this method has been called before calling finalize() ?
|
// this method has been called before calling finalize() ?
|
||||||
if (this->vertices_and_normals_interleaved_VBO_id == 0 && !this->vertices_and_normals_interleaved.empty())
|
if (this->vertices_and_normals_interleaved_VBO_id == 0 && !this->vertices_and_normals_interleaved.empty())
|
||||||
return;
|
return;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
assert(this->vertices_and_normals_interleaved_VBO_id != 0);
|
assert(this->vertices_and_normals_interleaved_VBO_id != 0);
|
||||||
assert(this->triangle_indices_VBO_id != 0 || this->quad_indices_VBO_id != 0);
|
assert(this->triangle_indices_VBO_id != 0 || this->quad_indices_VBO_id != 0);
|
||||||
@ -524,7 +523,6 @@ BoundingBoxf3 GLVolume::transformed_convex_hull_bounding_box(const Transform3d &
|
|||||||
bounding_box().transformed(trafo);
|
bounding_box().transformed(trafo);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
BoundingBoxf3 GLVolume::transformed_non_sinking_bounding_box(const Transform3d& trafo) const
|
BoundingBoxf3 GLVolume::transformed_non_sinking_bounding_box(const Transform3d& trafo) const
|
||||||
{
|
{
|
||||||
return GUI::wxGetApp().plater()->model().objects[object_idx()]->volumes[volume_idx()]->mesh().transformed_bounding_box(trafo, 0.0);
|
return GUI::wxGetApp().plater()->model().objects[object_idx()]->volumes[volume_idx()]->mesh().transformed_bounding_box(trafo, 0.0);
|
||||||
@ -539,7 +537,6 @@ const BoundingBoxf3& GLVolume::transformed_non_sinking_bounding_box() const
|
|||||||
}
|
}
|
||||||
return *m_transformed_non_sinking_bounding_box;
|
return *m_transformed_non_sinking_bounding_box;
|
||||||
}
|
}
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
void GLVolume::set_range(double min_z, double max_z)
|
void GLVolume::set_range(double min_z, double max_z)
|
||||||
{
|
{
|
||||||
@ -773,9 +770,7 @@ int GLVolumeCollection::load_wipe_tower_preview(
|
|||||||
volumes.emplace_back(new GLVolume(color));
|
volumes.emplace_back(new GLVolume(color));
|
||||||
GLVolume& v = *volumes.back();
|
GLVolume& v = *volumes.back();
|
||||||
v.indexed_vertex_array.load_mesh(mesh);
|
v.indexed_vertex_array.load_mesh(mesh);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
v.set_convex_hull(mesh.convex_hull_3d());
|
v.set_convex_hull(mesh.convex_hull_3d());
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
v.indexed_vertex_array.finalize_geometry(opengl_initialized);
|
v.indexed_vertex_array.finalize_geometry(opengl_initialized);
|
||||||
v.set_volume_offset(Vec3d(pos_x, pos_y, 0.0));
|
v.set_volume_offset(Vec3d(pos_x, pos_y, 0.0));
|
||||||
v.set_volume_rotation(Vec3d(0., 0., (M_PI / 180.) * rotation_angle));
|
v.set_volume_rotation(Vec3d(0., 0., (M_PI / 180.) * rotation_angle));
|
||||||
@ -882,17 +877,10 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab
|
|||||||
shader->set_uniform("uniform_color", volume.first->render_color);
|
shader->set_uniform("uniform_color", volume.first->render_color);
|
||||||
shader->set_uniform("z_range", m_z_range, 2);
|
shader->set_uniform("z_range", m_z_range, 2);
|
||||||
shader->set_uniform("clipping_plane", m_clipping_plane, 4);
|
shader->set_uniform("clipping_plane", m_clipping_plane, 4);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
shader->set_uniform("print_volume.type", static_cast<int>(m_print_volume.type));
|
shader->set_uniform("print_volume.type", static_cast<int>(m_print_volume.type));
|
||||||
shader->set_uniform("print_volume.xy_data", m_print_volume.data);
|
shader->set_uniform("print_volume.xy_data", m_print_volume.data);
|
||||||
shader->set_uniform("print_volume.z_data", m_print_volume.zs);
|
shader->set_uniform("print_volume.z_data", m_print_volume.zs);
|
||||||
shader->set_uniform("volume_world_matrix", volume.first->world_matrix());
|
shader->set_uniform("volume_world_matrix", volume.first->world_matrix());
|
||||||
#else
|
|
||||||
shader->set_uniform("print_box.min", m_print_box_min, 3);
|
|
||||||
shader->set_uniform("print_box.max", m_print_box_max, 3);
|
|
||||||
shader->set_uniform("print_box.actived", volume.first->shader_outside_printer_detection_enabled);
|
|
||||||
shader->set_uniform("print_box.volume_world_matrix", volume.first->world_matrix());
|
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
shader->set_uniform("slope.actived", m_slope.active && !volume.first->is_modifier && !volume.first->is_wipe_tower);
|
shader->set_uniform("slope.actived", m_slope.active && !volume.first->is_modifier && !volume.first->is_wipe_tower);
|
||||||
shader->set_uniform("slope.volume_world_normal_matrix", static_cast<Matrix3f>(volume.first->world_matrix().matrix().block(0, 0, 3, 3).inverse().transpose().cast<float>()));
|
shader->set_uniform("slope.volume_world_normal_matrix", static_cast<Matrix3f>(volume.first->world_matrix().matrix().block(0, 0, 3, 3).inverse().transpose().cast<float>()));
|
||||||
shader->set_uniform("slope.normal_z", m_slope.normal_z);
|
shader->set_uniform("slope.normal_z", m_slope.normal_z);
|
||||||
@ -1033,7 +1021,9 @@ void GLVolumeCollection::update_colors_by_extruder(const DynamicPrintConfig* con
|
|||||||
|
|
||||||
if (static_cast<PrinterTechnology>(config->opt_int("printer_technology")) == ptSLA)
|
if (static_cast<PrinterTechnology>(config->opt_int("printer_technology")) == ptSLA)
|
||||||
{
|
{
|
||||||
const std::string& txt_color = config->opt_string("material_colour");
|
const std::string& txt_color = config->opt_string("material_colour").empty() ?
|
||||||
|
print_config_def.get("material_colour")->get_default_value<ConfigOptionString>()->value :
|
||||||
|
config->opt_string("material_colour");
|
||||||
if (Slic3r::GUI::BitmapCache::parse_color(txt_color, rgb)) {
|
if (Slic3r::GUI::BitmapCache::parse_color(txt_color, rgb)) {
|
||||||
colors.resize(1);
|
colors.resize(1);
|
||||||
colors[0].set(txt_color, rgb);
|
colors[0].set(txt_color, rgb);
|
||||||
|
@ -315,7 +315,7 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
|||||||
set_value(double_to_string(val), true);
|
set_value(double_to_string(val), true);
|
||||||
}
|
}
|
||||||
else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
|
else if (((m_opt.sidetext.rfind("mm/s") != std::string::npos && val > m_opt.max) ||
|
||||||
(m_opt.sidetext.rfind("mm ") != std::string::npos && val > 1)) &&
|
(m_opt.sidetext.rfind("mm ") != std::string::npos && val > /*1*/m_opt.max_literal)) &&
|
||||||
(m_value.empty() || std::string(str.ToUTF8().data()) != boost::any_cast<std::string>(m_value)))
|
(m_value.empty() || std::string(str.ToUTF8().data()) != boost::any_cast<std::string>(m_value)))
|
||||||
{
|
{
|
||||||
if (!check_value) {
|
if (!check_value) {
|
||||||
@ -330,7 +330,6 @@ void Field::get_value_by_opt_type(wxString& str, const bool check_value/* = true
|
|||||||
const wxString msg_text = from_u8((boost::format(_utf8(L("Do you mean %s%% instead of %s %s?\n"
|
const wxString msg_text = from_u8((boost::format(_utf8(L("Do you mean %s%% instead of %s %s?\n"
|
||||||
"Select YES if you want to change this value to %s%%, \n"
|
"Select YES if you want to change this value to %s%%, \n"
|
||||||
"or NO if you are sure that %s %s is a correct value."))) % stVal % stVal % sidetext % stVal % stVal % sidetext).str());
|
"or NO if you are sure that %s %s is a correct value."))) % stVal % stVal % sidetext % stVal % stVal % sidetext).str());
|
||||||
// wxMessageDialog dialog(m_parent, msg_text, _(L("Parameter validation")) + ": " + m_opt_id , wxICON_WARNING | wxYES | wxNO);
|
|
||||||
WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES | wxNO);
|
WarningDialog dialog(m_parent, msg_text, _L("Parameter validation") + ": " + m_opt_id, wxYES | wxNO);
|
||||||
if ((!infill_anchors || val > 100) && dialog.ShowModal() == wxID_YES) {
|
if ((!infill_anchors || val > 100) && dialog.ShowModal() == wxID_YES) {
|
||||||
set_value(from_u8((boost::format("%s%%") % stVal).str()), false/*true*/);
|
set_value(from_u8((boost::format("%s%%") % stVal).str()), false/*true*/);
|
||||||
|
@ -709,9 +709,7 @@ void GCodeViewer::load(const GCodeProcessorResult& gcode_result, const Print& pr
|
|||||||
if (wxGetApp().is_gcode_viewer())
|
if (wxGetApp().is_gcode_viewer())
|
||||||
m_custom_gcode_per_print_z = gcode_result.custom_gcode_per_print_z;
|
m_custom_gcode_per_print_z = gcode_result.custom_gcode_per_print_z;
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_max_print_height = gcode_result.max_print_height;
|
m_max_print_height = gcode_result.max_print_height;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
load_toolpaths(gcode_result);
|
load_toolpaths(gcode_result);
|
||||||
|
|
||||||
@ -859,9 +857,7 @@ void GCodeViewer::reset()
|
|||||||
|
|
||||||
m_paths_bounding_box = BoundingBoxf3();
|
m_paths_bounding_box = BoundingBoxf3();
|
||||||
m_max_bounding_box = BoundingBoxf3();
|
m_max_bounding_box = BoundingBoxf3();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_max_print_height = 0.0f;
|
m_max_print_height = 0.0f;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_tool_colors = std::vector<Color>();
|
m_tool_colors = std::vector<Color>();
|
||||||
m_extruders_count = 0;
|
m_extruders_count = 0;
|
||||||
m_extruder_ids = std::vector<unsigned char>();
|
m_extruder_ids = std::vector<unsigned char>();
|
||||||
@ -878,9 +874,7 @@ void GCodeViewer::reset()
|
|||||||
#if ENABLE_GCODE_VIEWER_STATISTICS
|
#if ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
m_statistics.reset_all();
|
m_statistics.reset_all();
|
||||||
#endif // ENABLE_GCODE_VIEWER_STATISTICS
|
#endif // ENABLE_GCODE_VIEWER_STATISTICS
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_contained_in_bed = true;
|
m_contained_in_bed = true;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeViewer::render()
|
void GCodeViewer::render()
|
||||||
|
@ -780,9 +780,7 @@ private:
|
|||||||
BoundingBoxf3 m_paths_bounding_box;
|
BoundingBoxf3 m_paths_bounding_box;
|
||||||
// bounding box of toolpaths + marker tools
|
// bounding box of toolpaths + marker tools
|
||||||
BoundingBoxf3 m_max_bounding_box;
|
BoundingBoxf3 m_max_bounding_box;
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
float m_max_print_height{ 0.0f };
|
float m_max_print_height{ 0.0f };
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
std::vector<Color> m_tool_colors;
|
std::vector<Color> m_tool_colors;
|
||||||
Layers m_layers;
|
Layers m_layers;
|
||||||
std::array<unsigned int, 2> m_layers_z_range;
|
std::array<unsigned int, 2> m_layers_z_range;
|
||||||
@ -807,9 +805,7 @@ private:
|
|||||||
|
|
||||||
std::vector<CustomGCode::Item> m_custom_gcode_per_print_z;
|
std::vector<CustomGCode::Item> m_custom_gcode_per_print_z;
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool m_contained_in_bed{ true };
|
bool m_contained_in_bed{ true };
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GCodeViewer();
|
GCodeViewer();
|
||||||
@ -839,9 +835,7 @@ public:
|
|||||||
const SequentialView& get_sequential_view() const { return m_sequential_view; }
|
const SequentialView& get_sequential_view() const { return m_sequential_view; }
|
||||||
void update_sequential_view_current(unsigned int first, unsigned int last);
|
void update_sequential_view_current(unsigned int first, unsigned int last);
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool is_contained_in_bed() const { return m_contained_in_bed; }
|
bool is_contained_in_bed() const { return m_contained_in_bed; }
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
EViewType get_view_type() const { return m_view_type; }
|
EViewType get_view_type() const { return m_view_type; }
|
||||||
void set_view_type(EViewType type) {
|
void set_view_type(EViewType type) {
|
||||||
|
@ -1354,7 +1354,10 @@ void GLCanvas3D::allow_multisample(bool allow)
|
|||||||
|
|
||||||
void GLCanvas3D::zoom_to_bed()
|
void GLCanvas3D::zoom_to_bed()
|
||||||
{
|
{
|
||||||
_zoom_to_box(m_bed.build_volume().bounding_volume());
|
BoundingBoxf3 box = m_bed.build_volume().bounding_volume();
|
||||||
|
box.min.z() = 0.0;
|
||||||
|
box.max.z() = 0.0;
|
||||||
|
_zoom_to_box(box);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLCanvas3D::zoom_to_volumes()
|
void GLCanvas3D::zoom_to_volumes()
|
||||||
@ -2585,9 +2588,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
|
|||||||
displacement = multiplier * direction;
|
displacement = multiplier * direction;
|
||||||
|
|
||||||
m_selection.translate(displacement);
|
m_selection.translate(displacement);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_selection.stop_dragging();
|
m_selection.stop_dragging();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -2686,9 +2687,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
|
|||||||
auto do_rotate = [this](double angle_z_rad) {
|
auto do_rotate = [this](double angle_z_rad) {
|
||||||
m_selection.start_dragging();
|
m_selection.start_dragging();
|
||||||
m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint));
|
m_selection.rotate(Vec3d(0.0, 0.0, angle_z_rad), TransformationType(TransformationType::World_Relative_Joint));
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_selection.stop_dragging();
|
m_selection.stop_dragging();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
// wxGetApp().obj_manipul()->set_dirty();
|
// wxGetApp().obj_manipul()->set_dirty();
|
||||||
};
|
};
|
||||||
@ -3242,10 +3241,8 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) {
|
else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) {
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
if (evt.LeftUp())
|
if (evt.LeftUp())
|
||||||
m_selection.stop_dragging();
|
m_selection.stop_dragging();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
if (m_layers_editing.state != LayersEditing::Unknown) {
|
if (m_layers_editing.state != LayersEditing::Unknown) {
|
||||||
m_layers_editing.state = LayersEditing::Unknown;
|
m_layers_editing.state = LayersEditing::Unknown;
|
||||||
@ -5098,36 +5095,35 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type)
|
|||||||
|
|
||||||
m_camera_clipping_plane = m_gizmos.get_clipping_plane();
|
m_camera_clipping_plane = m_gizmos.get_clipping_plane();
|
||||||
|
|
||||||
if (m_picking_enabled) {
|
if (m_picking_enabled)
|
||||||
// Update the layer editing selection to the first object selected, update the current object maximum Z.
|
// Update the layer editing selection to the first object selected, update the current object maximum Z.
|
||||||
m_layers_editing.select_object(*m_model, this->is_layers_editing_enabled() ? m_selection.get_object_idx() : -1);
|
m_layers_editing.select_object(*m_model, this->is_layers_editing_enabled() ? m_selection.get_object_idx() : -1);
|
||||||
|
|
||||||
if (const BuildVolume &build_volume = m_bed.build_volume(); build_volume.valid()) {
|
if (const BuildVolume &build_volume = m_bed.build_volume(); build_volume.valid()) {
|
||||||
switch (build_volume.type()) {
|
switch (build_volume.type()) {
|
||||||
case BuildVolume::Type::Rectangle: {
|
case BuildVolume::Type::Rectangle: {
|
||||||
const BoundingBox3Base<Vec3d> bed_bb = build_volume.bounding_volume().inflated(BuildVolume::SceneEpsilon);
|
const BoundingBox3Base<Vec3d> bed_bb = build_volume.bounding_volume().inflated(BuildVolume::SceneEpsilon);
|
||||||
m_volumes.set_print_volume({ 0, // circle
|
m_volumes.set_print_volume({ 0, // circle
|
||||||
{ float(bed_bb.min.x()), float(bed_bb.min.y()), float(bed_bb.max.x()), float(bed_bb.max.y()) },
|
{ float(bed_bb.min.x()), float(bed_bb.min.y()), float(bed_bb.max.x()), float(bed_bb.max.y()) },
|
||||||
{ 0.0f, float(build_volume.max_print_height()) } });
|
{ 0.0f, float(build_volume.max_print_height()) } });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case BuildVolume::Type::Circle: {
|
case BuildVolume::Type::Circle: {
|
||||||
m_volumes.set_print_volume({ 1, // rectangle
|
m_volumes.set_print_volume({ 1, // rectangle
|
||||||
{ unscaled<float>(build_volume.circle().center.x()), unscaled<float>(build_volume.circle().center.y()), unscaled<float>(build_volume.circle().radius + BuildVolume::SceneEpsilon), 0.0f },
|
{ unscaled<float>(build_volume.circle().center.x()), unscaled<float>(build_volume.circle().center.y()), unscaled<float>(build_volume.circle().radius + BuildVolume::SceneEpsilon), 0.0f },
|
||||||
{ 0.0f, float(build_volume.max_print_height() + BuildVolume::SceneEpsilon) } });
|
{ 0.0f, float(build_volume.max_print_height() + BuildVolume::SceneEpsilon) } });
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
case BuildVolume::Type::Custom: {
|
case BuildVolume::Type::Custom: {
|
||||||
m_volumes.set_print_volume({ static_cast<int>(type),
|
m_volumes.set_print_volume({ static_cast<int>(type),
|
||||||
{ 0.0f, 0.0f, 0.0f, 0.0f },
|
{ 0.0f, 0.0f, 0.0f, 0.0f },
|
||||||
{ 0.0f, 0.0f } });
|
{ 0.0f, 0.0f } });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (m_requires_check_outside_state) {
|
if (m_requires_check_outside_state) {
|
||||||
m_volumes.check_outside_state(build_volume, nullptr);
|
m_volumes.check_outside_state(build_volume, nullptr);
|
||||||
m_requires_check_outside_state = false;
|
m_requires_check_outside_state = false;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5139,7 +5135,7 @@ void GLCanvas3D::_render_objects(GLVolumeCollection::ERenderType type)
|
|||||||
m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data());
|
m_volumes.set_clipping_plane(m_camera_clipping_plane.get_data());
|
||||||
m_volumes.set_show_sinking_contours(! m_gizmos.is_hiding_instances());
|
m_volumes.set_show_sinking_contours(! m_gizmos.is_hiding_instances());
|
||||||
|
|
||||||
GLShaderProgram* shader = wxGetApp().get_shader("gouraud_mod");
|
GLShaderProgram* shader = wxGetApp().get_shader("gouraud");
|
||||||
if (shader != nullptr) {
|
if (shader != nullptr) {
|
||||||
shader->start_using();
|
shader->start_using();
|
||||||
|
|
||||||
@ -6342,15 +6338,8 @@ void GLCanvas3D::_set_warning_notification_if_needed(EWarning warning)
|
|||||||
show = _is_any_volume_outside();
|
show = _is_any_volume_outside();
|
||||||
else {
|
else {
|
||||||
if (wxGetApp().is_editor()) {
|
if (wxGetApp().is_editor()) {
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
if (current_printer_technology() != ptSLA)
|
if (current_printer_technology() != ptSLA)
|
||||||
show = m_gcode_viewer.has_data() && !m_gcode_viewer.is_contained_in_bed();
|
show = m_gcode_viewer.has_data() && !m_gcode_viewer.is_contained_in_bed();
|
||||||
#else
|
|
||||||
BoundingBoxf3 test_volume = (m_config != nullptr) ? print_volume(*m_config) : BoundingBoxf3();
|
|
||||||
const BoundingBoxf3& paths_volume = m_gcode_viewer.get_paths_bounding_box();
|
|
||||||
if (test_volume.radius() > 0.0 && paths_volume.radius() > 0.0)
|
|
||||||
show = !test_volume.contains(paths_volume);
|
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,9 +479,7 @@ private:
|
|||||||
const DynamicPrintConfig* m_config;
|
const DynamicPrintConfig* m_config;
|
||||||
Model* m_model;
|
Model* m_model;
|
||||||
BackgroundSlicingProcess *m_process;
|
BackgroundSlicingProcess *m_process;
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool m_requires_check_outside_state{ false };
|
bool m_requires_check_outside_state{ false };
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
std::array<unsigned int, 2> m_old_size{ 0, 0 };
|
std::array<unsigned int, 2> m_old_size{ 0, 0 };
|
||||||
|
|
||||||
@ -618,9 +616,7 @@ public:
|
|||||||
void post_event(wxEvent &&event);
|
void post_event(wxEvent &&event);
|
||||||
|
|
||||||
void set_as_dirty();
|
void set_as_dirty();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
void requires_check_outside_state() { m_requires_check_outside_state = true; }
|
void requires_check_outside_state() { m_requires_check_outside_state = true; }
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
unsigned int get_volumes_count() const;
|
unsigned int get_volumes_count() const;
|
||||||
const GLVolumeCollection& get_volumes() const { return m_volumes; }
|
const GLVolumeCollection& get_volumes() const { return m_volumes; }
|
||||||
|
@ -61,12 +61,7 @@ std::pair<bool, std::string> GLShadersManager::init()
|
|||||||
// used to render extrusion and travel paths as lines in gcode preview
|
// used to render extrusion and travel paths as lines in gcode preview
|
||||||
valid &= append_shader("toolpaths_lines", { "toolpaths_lines.vs", "toolpaths_lines.fs" });
|
valid &= append_shader("toolpaths_lines", { "toolpaths_lines.vs", "toolpaths_lines.fs" });
|
||||||
// used to render objects in 3d editor
|
// used to render objects in 3d editor
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
// When setting this technology to default rename the following from "gouraud_mod" to "gouraud"
|
|
||||||
valid &= append_shader("gouraud_mod", { "gouraud_mod.vs", "gouraud_mod.fs" }
|
|
||||||
#else
|
|
||||||
valid &= append_shader("gouraud", { "gouraud.vs", "gouraud.fs" }
|
valid &= append_shader("gouraud", { "gouraud.vs", "gouraud.fs" }
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
#if ENABLE_ENVIRONMENT_MAP
|
#if ENABLE_ENVIRONMENT_MAP
|
||||||
, { "ENABLE_ENVIRONMENT_MAP"sv }
|
, { "ENABLE_ENVIRONMENT_MAP"sv }
|
||||||
#endif // ENABLE_ENVIRONMENT_MAP
|
#endif // ENABLE_ENVIRONMENT_MAP
|
||||||
|
@ -657,14 +657,10 @@ void ObjectManipulation::update_if_dirty()
|
|||||||
else
|
else
|
||||||
m_og->disable();
|
m_og->disable();
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
if (!selection.is_dragging()) {
|
if (!selection.is_dragging()) {
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
update_reset_buttons_visibility();
|
||||||
update_reset_buttons_visibility();
|
update_mirror_buttons_visibility();
|
||||||
update_mirror_buttons_visibility();
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
m_dirty = false;
|
m_dirty = false;
|
||||||
}
|
}
|
||||||
@ -820,9 +816,7 @@ void ObjectManipulation::change_position_value(int axis, double value)
|
|||||||
Selection& selection = canvas->get_selection();
|
Selection& selection = canvas->get_selection();
|
||||||
selection.start_dragging();
|
selection.start_dragging();
|
||||||
selection.translate(position - m_cache.position, selection.requires_local_axes());
|
selection.translate(position - m_cache.position, selection.requires_local_axes());
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
selection.stop_dragging();
|
selection.stop_dragging();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
canvas->do_move(L("Set Position"));
|
canvas->do_move(L("Set Position"));
|
||||||
|
|
||||||
m_cache.position = position;
|
m_cache.position = position;
|
||||||
@ -854,9 +848,7 @@ void ObjectManipulation::change_rotation_value(int axis, double value)
|
|||||||
selection.rotate(
|
selection.rotate(
|
||||||
(M_PI / 180.0) * (transformation_type.absolute() ? rotation : rotation - m_cache.rotation),
|
(M_PI / 180.0) * (transformation_type.absolute() ? rotation : rotation - m_cache.rotation),
|
||||||
transformation_type);
|
transformation_type);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
selection.stop_dragging();
|
selection.stop_dragging();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
canvas->do_rotate(L("Set Orientation"));
|
canvas->do_rotate(L("Set Orientation"));
|
||||||
|
|
||||||
m_cache.rotation = rotation;
|
m_cache.rotation = rotation;
|
||||||
@ -935,9 +927,7 @@ void ObjectManipulation::do_scale(int axis, const Vec3d &scale) const
|
|||||||
|
|
||||||
selection.start_dragging();
|
selection.start_dragging();
|
||||||
selection.scale(scaling_factor, transformation_type);
|
selection.scale(scaling_factor, transformation_type);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
selection.stop_dragging();
|
selection.stop_dragging();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
wxGetApp().plater()->canvas3D()->do_scale(L("Set Scale"));
|
wxGetApp().plater()->canvas3D()->do_scale(L("Set Scale"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,20 +66,12 @@ GLGizmoPainterBase::ClippingPlaneDataWrapper GLGizmoPainterBase::get_clipping_pl
|
|||||||
|
|
||||||
void GLGizmoPainterBase::render_triangles(const Selection& selection) const
|
void GLGizmoPainterBase::render_triangles(const Selection& selection) const
|
||||||
{
|
{
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
auto* shader = wxGetApp().get_shader("gouraud_mod");
|
|
||||||
#else
|
|
||||||
auto* shader = wxGetApp().get_shader("gouraud");
|
auto* shader = wxGetApp().get_shader("gouraud");
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
if (! shader)
|
if (! shader)
|
||||||
return;
|
return;
|
||||||
shader->start_using();
|
shader->start_using();
|
||||||
shader->set_uniform("slope.actived", false);
|
shader->set_uniform("slope.actived", false);
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
shader->set_uniform("print_volume.type", 0);
|
shader->set_uniform("print_volume.type", 0);
|
||||||
#else
|
|
||||||
shader->set_uniform("print_box.actived", false);
|
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
shader->set_uniform("clipping_plane", this->get_clipping_plane_data().clp_dataf);
|
shader->set_uniform("clipping_plane", this->get_clipping_plane_data().clp_dataf);
|
||||||
ScopeGuard guard([shader]() { if (shader) shader->stop_using(); });
|
ScopeGuard guard([shader]() { if (shader) shader->stop_using(); });
|
||||||
|
|
||||||
@ -106,11 +98,7 @@ void GLGizmoPainterBase::render_triangles(const Selection& selection) const
|
|||||||
// to the shader input variable print_box.volume_world_matrix before
|
// to the shader input variable print_box.volume_world_matrix before
|
||||||
// rendering the painted triangles. When this matrix is not set, the
|
// rendering the painted triangles. When this matrix is not set, the
|
||||||
// wrong transformation matrix is used for "Clipping of view".
|
// wrong transformation matrix is used for "Clipping of view".
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
shader->set_uniform("volume_world_matrix", trafo_matrix);
|
shader->set_uniform("volume_world_matrix", trafo_matrix);
|
||||||
#else
|
|
||||||
shader->set_uniform("print_box.volume_world_matrix", trafo_matrix);
|
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
m_triangle_selectors[mesh_id]->render(m_imgui);
|
m_triangle_selectors[mesh_id]->render(m_imgui);
|
||||||
|
|
||||||
@ -609,11 +597,7 @@ void TriangleSelectorGUI::render(ImGuiWrapper* imgui)
|
|||||||
auto* shader = wxGetApp().get_current_shader();
|
auto* shader = wxGetApp().get_current_shader();
|
||||||
if (! shader)
|
if (! shader)
|
||||||
return;
|
return;
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
assert(shader->get_name() == "gouraud_mod");
|
|
||||||
#else
|
|
||||||
assert(shader->get_name() == "gouraud");
|
assert(shader->get_name() == "gouraud");
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
ScopeGuard guard([shader]() { if (shader) shader->set_uniform("offset_depth_buffer", false);});
|
ScopeGuard guard([shader]() { if (shader) shader->set_uniform("offset_depth_buffer", false);});
|
||||||
shader->set_uniform("offset_depth_buffer", true);
|
shader->set_uniform("offset_depth_buffer", true);
|
||||||
for (auto iva : {std::make_pair(&m_iva_enforcers, enforcers_color),
|
for (auto iva : {std::make_pair(&m_iva_enforcers, enforcers_color),
|
||||||
|
@ -715,22 +715,18 @@ bool GLGizmosManager::on_mouse(wxMouseEvent& evt)
|
|||||||
}
|
}
|
||||||
else if (evt.LeftUp() && m_current == Flatten && m_gizmos[m_current]->get_hover_id() != -1) {
|
else if (evt.LeftUp() && m_current == Flatten && m_gizmos[m_current]->get_hover_id() != -1) {
|
||||||
// to avoid to loose the selection when user clicks an the white faces of a different object while the Flatten gizmo is active
|
// to avoid to loose the selection when user clicks an the white faces of a different object while the Flatten gizmo is active
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
selection.stop_dragging();
|
selection.stop_dragging();
|
||||||
wxGetApp().obj_manipul()->set_dirty();
|
wxGetApp().obj_manipul()->set_dirty();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
processed = true;
|
processed = true;
|
||||||
}
|
}
|
||||||
else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && !m_parent.is_mouse_dragging()) {
|
else if (evt.RightUp() && (m_current == FdmSupports || m_current == Seam || m_current == MmuSegmentation) && !m_parent.is_mouse_dragging()) {
|
||||||
gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down);
|
gizmo_event(SLAGizmoEventType::RightUp, mouse_pos, evt.ShiftDown(), evt.AltDown(), control_down);
|
||||||
processed = true;
|
processed = true;
|
||||||
}
|
}
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
else if (evt.LeftUp()) {
|
else if (evt.LeftUp()) {
|
||||||
selection.stop_dragging();
|
selection.stop_dragging();
|
||||||
wxGetApp().obj_manipul()->set_dirty();
|
wxGetApp().obj_manipul()->set_dirty();
|
||||||
}
|
}
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// mouse inside toolbar
|
// mouse inside toolbar
|
||||||
|
@ -141,7 +141,7 @@ public:
|
|||||||
wxStaticText *info_size;
|
wxStaticText *info_size;
|
||||||
wxStaticText *info_volume;
|
wxStaticText *info_volume;
|
||||||
wxStaticText *info_facets;
|
wxStaticText *info_facets;
|
||||||
wxStaticText *info_materials;
|
// wxStaticText *info_materials;
|
||||||
wxStaticText *info_manifold;
|
wxStaticText *info_manifold;
|
||||||
|
|
||||||
wxStaticText *label_volume;
|
wxStaticText *label_volume;
|
||||||
@ -199,7 +199,7 @@ ObjectInfo::ObjectInfo(wxWindow *parent) :
|
|||||||
sizer_manifold->Add(info_manifold, 0, wxLEFT, 2);
|
sizer_manifold->Add(info_manifold, 0, wxLEFT, 2);
|
||||||
Add(sizer_manifold, 0, wxEXPAND | wxTOP, 4);
|
Add(sizer_manifold, 0, wxEXPAND | wxTOP, 4);
|
||||||
|
|
||||||
sla_hidden_items = { label_volume, info_volume, /*label_materials, */info_materials };
|
sla_hidden_items = { label_volume, info_volume, /*label_materials, info_materials*/ };
|
||||||
}
|
}
|
||||||
|
|
||||||
void ObjectInfo::show_sizer(bool show)
|
void ObjectInfo::show_sizer(bool show)
|
||||||
|
@ -819,8 +819,11 @@ void PlaterPresetComboBox::update()
|
|||||||
|
|
||||||
bitmap_key += single_bar ? filament_rgb : filament_rgb + extruder_rgb;
|
bitmap_key += single_bar ? filament_rgb : filament_rgb + extruder_rgb;
|
||||||
}
|
}
|
||||||
else if (m_type == Preset::TYPE_SLA_MATERIAL)
|
else if (m_type == Preset::TYPE_SLA_MATERIAL) {
|
||||||
material_rgb = is_selected ? m_preset_bundle->sla_materials.get_edited_preset().config.opt_string("material_colour") : preset.config.opt_string("material_colour");
|
material_rgb = is_selected ? m_preset_bundle->sla_materials.get_edited_preset().config.opt_string("material_colour") : preset.config.opt_string("material_colour");
|
||||||
|
if (material_rgb.empty())
|
||||||
|
material_rgb = print_config_def.get("material_colour")->get_default_value<ConfigOptionString>()->value;
|
||||||
|
}
|
||||||
|
|
||||||
wxBitmap* bmp = get_bmp(bitmap_key, wide_icons, bitmap_type_name,
|
wxBitmap* bmp = get_bmp(bitmap_key, wide_icons, bitmap_type_name,
|
||||||
preset.is_compatible, preset.is_system || preset.is_default,
|
preset.is_compatible, preset.is_system || preset.is_default,
|
||||||
|
@ -112,9 +112,7 @@ Selection::Selection()
|
|||||||
, m_type(Empty)
|
, m_type(Empty)
|
||||||
, m_valid(false)
|
, m_valid(false)
|
||||||
, m_scale_factor(1.0f)
|
, m_scale_factor(1.0f)
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
, m_dragging(false)
|
, m_dragging(false)
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
{
|
{
|
||||||
this->set_bounding_boxes_dirty();
|
this->set_bounding_boxes_dirty();
|
||||||
}
|
}
|
||||||
@ -693,10 +691,7 @@ void Selection::start_dragging()
|
|||||||
if (!m_valid)
|
if (!m_valid)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
m_dragging = true;
|
m_dragging = true;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
set_caches();
|
set_caches();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -737,9 +732,7 @@ void Selection::translate(const Vec3d& displacement, bool local)
|
|||||||
|
|
||||||
ensure_not_below_bed();
|
ensure_not_below_bed();
|
||||||
set_bounding_boxes_dirty();
|
set_bounding_boxes_dirty();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
wxGetApp().plater()->canvas3D()->requires_check_outside_state();
|
wxGetApp().plater()->canvas3D()->requires_check_outside_state();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rotate an object around one of the axes. Only one rotation component is expected to be changing.
|
// Rotate an object around one of the axes. Only one rotation component is expected to be changing.
|
||||||
@ -853,9 +846,7 @@ void Selection::rotate(const Vec3d& rotation, TransformationType transformation_
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_bounding_boxes_dirty();
|
set_bounding_boxes_dirty();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
wxGetApp().plater()->canvas3D()->requires_check_outside_state();
|
wxGetApp().plater()->canvas3D()->requires_check_outside_state();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Selection::flattening_rotate(const Vec3d& normal)
|
void Selection::flattening_rotate(const Vec3d& normal)
|
||||||
@ -954,9 +945,7 @@ void Selection::scale(const Vec3d& scale, TransformationType transformation_type
|
|||||||
|
|
||||||
ensure_on_bed();
|
ensure_on_bed();
|
||||||
set_bounding_boxes_dirty();
|
set_bounding_boxes_dirty();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
wxGetApp().plater()->canvas3D()->requires_check_outside_state();
|
wxGetApp().plater()->canvas3D()->requires_check_outside_state();
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Selection::scale_to_fit_print_volume(const DynamicPrintConfig& config)
|
void Selection::scale_to_fit_print_volume(const DynamicPrintConfig& config)
|
||||||
|
@ -219,10 +219,7 @@ private:
|
|||||||
GLModel m_curved_arrow;
|
GLModel m_curved_arrow;
|
||||||
|
|
||||||
float m_scale_factor;
|
float m_scale_factor;
|
||||||
|
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
bool m_dragging;
|
bool m_dragging;
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Selection();
|
Selection();
|
||||||
@ -316,10 +313,8 @@ public:
|
|||||||
const BoundingBoxf3& get_scaled_instance_bounding_box() const;
|
const BoundingBoxf3& get_scaled_instance_bounding_box() const;
|
||||||
|
|
||||||
void start_dragging();
|
void start_dragging();
|
||||||
#if ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
void stop_dragging() { m_dragging = false; }
|
void stop_dragging() { m_dragging = false; }
|
||||||
bool is_dragging() const { return m_dragging; }
|
bool is_dragging() const { return m_dragging; }
|
||||||
#endif // ENABLE_OUT_OF_BED_DETECTION_IMPROVEMENTS
|
|
||||||
|
|
||||||
void translate(const Vec3d& displacement, bool local = false);
|
void translate(const Vec3d& displacement, bool local = false);
|
||||||
void rotate(const Vec3d& rotation, TransformationType transformation_type);
|
void rotate(const Vec3d& rotation, TransformationType transformation_type);
|
||||||
|
Loading…
Reference in New Issue
Block a user