GCode Preview - Unified preview data ranges to ensure proper paths colors
This commit is contained in:
parent
d91f59379b
commit
fe59958ea8
4 changed files with 34 additions and 54 deletions
xs/src
|
@ -688,9 +688,9 @@ void GCodeAnalyzer::_calc_gcode_preview_extrusion_layers(GCodePreviewData& previ
|
||||||
Helper::store_polyline(polyline, data, z, preview_data);
|
Helper::store_polyline(polyline, data, z, preview_data);
|
||||||
|
|
||||||
// updates preview ranges data
|
// updates preview ranges data
|
||||||
preview_data.extrusion.ranges.height.set_from(height_range);
|
preview_data.ranges.height.set_from(height_range);
|
||||||
preview_data.extrusion.ranges.width.set_from(width_range);
|
preview_data.ranges.width.set_from(width_range);
|
||||||
preview_data.extrusion.ranges.feedrate.set_from(feedrate_range);
|
preview_data.ranges.feedrate.set_from(feedrate_range);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeAnalyzer::_calc_gcode_preview_travel(GCodePreviewData& preview_data)
|
void GCodeAnalyzer::_calc_gcode_preview_travel(GCodePreviewData& preview_data)
|
||||||
|
@ -759,9 +759,9 @@ void GCodeAnalyzer::_calc_gcode_preview_travel(GCodePreviewData& preview_data)
|
||||||
Helper::store_polyline(polyline, type, direction, feedrate, extruder_id, preview_data);
|
Helper::store_polyline(polyline, type, direction, feedrate, extruder_id, preview_data);
|
||||||
|
|
||||||
// updates preview ranges data
|
// updates preview ranges data
|
||||||
preview_data.travel.ranges.height.set_from(height_range);
|
preview_data.ranges.height.set_from(height_range);
|
||||||
preview_data.travel.ranges.width.set_from(width_range);
|
preview_data.ranges.width.set_from(width_range);
|
||||||
preview_data.travel.ranges.feedrate.set_from(feedrate_range);
|
preview_data.ranges.feedrate.set_from(feedrate_range);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodeAnalyzer::_calc_gcode_preview_retractions(GCodePreviewData& preview_data)
|
void GCodeAnalyzer::_calc_gcode_preview_retractions(GCodePreviewData& preview_data)
|
||||||
|
|
|
@ -164,9 +164,6 @@ void GCodePreviewData::Extrusion::set_default()
|
||||||
view_type = Default_View_Type;
|
view_type = Default_View_Type;
|
||||||
|
|
||||||
::memcpy((void*)role_colors, (const void*)Default_Extrusion_Role_Colors, Num_Extrusion_Roles * sizeof(Color));
|
::memcpy((void*)role_colors, (const void*)Default_Extrusion_Role_Colors, Num_Extrusion_Roles * sizeof(Color));
|
||||||
::memcpy((void*)ranges.height.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
|
||||||
::memcpy((void*)ranges.width.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
|
||||||
::memcpy((void*)ranges.feedrate.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
|
||||||
|
|
||||||
for (unsigned int i = 0; i < Num_Extrusion_Roles; ++i)
|
for (unsigned int i = 0; i < Num_Extrusion_Roles; ++i)
|
||||||
{
|
{
|
||||||
|
@ -205,10 +202,6 @@ void GCodePreviewData::Travel::set_default()
|
||||||
height = Default_Height;
|
height = Default_Height;
|
||||||
::memcpy((void*)type_colors, (const void*)Default_Type_Colors, Num_Types * sizeof(Color));
|
::memcpy((void*)type_colors, (const void*)Default_Type_Colors, Num_Types * sizeof(Color));
|
||||||
|
|
||||||
::memcpy((void*)ranges.height.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
|
||||||
::memcpy((void*)ranges.width.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
|
||||||
::memcpy((void*)ranges.feedrate.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
|
||||||
|
|
||||||
is_visible = false;
|
is_visible = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,6 +232,10 @@ GCodePreviewData::GCodePreviewData()
|
||||||
|
|
||||||
void GCodePreviewData::set_default()
|
void GCodePreviewData::set_default()
|
||||||
{
|
{
|
||||||
|
::memcpy((void*)ranges.height.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
||||||
|
::memcpy((void*)ranges.width.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
||||||
|
::memcpy((void*)ranges.feedrate.colors, (const void*)Range::Default_Colors, Range::Colors_Count * sizeof(Color));
|
||||||
|
|
||||||
extrusion.set_default();
|
extrusion.set_default();
|
||||||
travel.set_default();
|
travel.set_default();
|
||||||
retraction.set_default();
|
retraction.set_default();
|
||||||
|
@ -248,6 +245,9 @@ void GCodePreviewData::set_default()
|
||||||
|
|
||||||
void GCodePreviewData::reset()
|
void GCodePreviewData::reset()
|
||||||
{
|
{
|
||||||
|
ranges.width.reset();
|
||||||
|
ranges.height.reset();
|
||||||
|
ranges.feedrate.reset();
|
||||||
extrusion.layers.clear();
|
extrusion.layers.clear();
|
||||||
travel.polylines.clear();
|
travel.polylines.clear();
|
||||||
retraction.positions.clear();
|
retraction.positions.clear();
|
||||||
|
@ -264,19 +264,19 @@ const GCodePreviewData::Color& GCodePreviewData::get_extrusion_role_color(Extrus
|
||||||
return extrusion.role_colors[role];
|
return extrusion.role_colors[role];
|
||||||
}
|
}
|
||||||
|
|
||||||
const GCodePreviewData::Color& GCodePreviewData::get_extrusion_height_color(float height) const
|
const GCodePreviewData::Color& GCodePreviewData::get_height_color(float height) const
|
||||||
{
|
{
|
||||||
return extrusion.ranges.height.get_color_at(height);
|
return ranges.height.get_color_at(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
const GCodePreviewData::Color& GCodePreviewData::get_extrusion_width_color(float width) const
|
const GCodePreviewData::Color& GCodePreviewData::get_width_color(float width) const
|
||||||
{
|
{
|
||||||
return extrusion.ranges.width.get_color_at(width);
|
return ranges.width.get_color_at(width);
|
||||||
}
|
}
|
||||||
|
|
||||||
const GCodePreviewData::Color& GCodePreviewData::get_extrusion_feedrate_color(float feedrate) const
|
const GCodePreviewData::Color& GCodePreviewData::get_feedrate_color(float feedrate) const
|
||||||
{
|
{
|
||||||
return extrusion.ranges.feedrate.get_color_at(feedrate);
|
return ranges.feedrate.get_color_at(feedrate);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GCodePreviewData::set_extrusion_role_color(const std::string& role_name, float red, float green, float blue, float alpha)
|
void GCodePreviewData::set_extrusion_role_color(const std::string& role_name, float red, float green, float blue, float alpha)
|
||||||
|
@ -356,26 +356,16 @@ GCodePreviewData::LegendItemsList GCodePreviewData::get_legend_items(const std::
|
||||||
{
|
{
|
||||||
struct Helper
|
struct Helper
|
||||||
{
|
{
|
||||||
static void FillListFromRange(LegendItemsList& list, const std::vector<const Range*>& ranges, unsigned int decimals, float scale_factor)
|
static void FillListFromRange(LegendItemsList& list, const Range& range, unsigned int decimals, float scale_factor)
|
||||||
{
|
{
|
||||||
if (ranges.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
list.reserve(Range::Colors_Count);
|
list.reserve(Range::Colors_Count);
|
||||||
|
|
||||||
Range total_range;
|
float step = range.step_size();
|
||||||
for (const Range* range : ranges)
|
|
||||||
{
|
|
||||||
if (range != nullptr)
|
|
||||||
total_range.update_from(*range);
|
|
||||||
}
|
|
||||||
|
|
||||||
float step = total_range.step_size();
|
|
||||||
for (unsigned int i = 0; i < Range::Colors_Count; ++i)
|
for (unsigned int i = 0; i < Range::Colors_Count; ++i)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
sprintf(buf, "%.*f/%.*f", decimals, scale_factor * (total_range.min + (float)i * step), decimals, scale_factor * (total_range.min + (float)(i + 1) * step));
|
sprintf(buf, "%.*f/%.*f", decimals, scale_factor * (range.min + (float)i * step), decimals, scale_factor * (range.min + (float)(i + 1) * step));
|
||||||
list.emplace_back(buf, ranges[0]->colors[i]);
|
list.emplace_back(buf, range.colors[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -399,26 +389,17 @@ GCodePreviewData::LegendItemsList GCodePreviewData::get_legend_items(const std::
|
||||||
}
|
}
|
||||||
case Extrusion::Height:
|
case Extrusion::Height:
|
||||||
{
|
{
|
||||||
std::vector<const Range*> ranges;
|
Helper::FillListFromRange(items, ranges.height, 3, 1.0f);
|
||||||
ranges.push_back(&extrusion.ranges.height);
|
|
||||||
ranges.push_back(&travel.ranges.height);
|
|
||||||
Helper::FillListFromRange(items, ranges, 3, 1.0f);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Extrusion::Width:
|
case Extrusion::Width:
|
||||||
{
|
{
|
||||||
std::vector<const Range*> ranges;
|
Helper::FillListFromRange(items, ranges.width, 3, 1.0f);
|
||||||
ranges.push_back(&extrusion.ranges.width);
|
|
||||||
ranges.push_back(&travel.ranges.width);
|
|
||||||
Helper::FillListFromRange(items, ranges, 3, 1.0f);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Extrusion::Feedrate:
|
case Extrusion::Feedrate:
|
||||||
{
|
{
|
||||||
std::vector<const Range*> ranges;
|
Helper::FillListFromRange(items, ranges.feedrate, 0, 1.0f);
|
||||||
ranges.push_back(&extrusion.ranges.feedrate);
|
|
||||||
ranges.push_back(&travel.ranges.feedrate);
|
|
||||||
Helper::FillListFromRange(items, ranges, 0, 1.0f);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Extrusion::Tool:
|
case Extrusion::Tool:
|
||||||
|
|
|
@ -92,7 +92,6 @@ public:
|
||||||
EViewType view_type;
|
EViewType view_type;
|
||||||
Color role_colors[Num_Extrusion_Roles];
|
Color role_colors[Num_Extrusion_Roles];
|
||||||
std::string role_names[Num_Extrusion_Roles];
|
std::string role_names[Num_Extrusion_Roles];
|
||||||
Ranges ranges;
|
|
||||||
LayersList layers;
|
LayersList layers;
|
||||||
unsigned int role_flags;
|
unsigned int role_flags;
|
||||||
|
|
||||||
|
@ -141,7 +140,6 @@ public:
|
||||||
float height;
|
float height;
|
||||||
Color type_colors[Num_Types];
|
Color type_colors[Num_Types];
|
||||||
bool is_visible;
|
bool is_visible;
|
||||||
Ranges ranges;
|
|
||||||
|
|
||||||
void set_default();
|
void set_default();
|
||||||
};
|
};
|
||||||
|
@ -180,6 +178,7 @@ public:
|
||||||
Retraction retraction;
|
Retraction retraction;
|
||||||
Retraction unretraction;
|
Retraction unretraction;
|
||||||
Shell shell;
|
Shell shell;
|
||||||
|
Ranges ranges;
|
||||||
|
|
||||||
GCodePreviewData();
|
GCodePreviewData();
|
||||||
|
|
||||||
|
@ -188,9 +187,9 @@ public:
|
||||||
bool empty() const;
|
bool empty() const;
|
||||||
|
|
||||||
const Color& get_extrusion_role_color(ExtrusionRole role) const;
|
const Color& get_extrusion_role_color(ExtrusionRole role) const;
|
||||||
const Color& get_extrusion_height_color(float height) const;
|
const Color& get_height_color(float height) const;
|
||||||
const Color& get_extrusion_width_color(float width) const;
|
const Color& get_width_color(float width) const;
|
||||||
const Color& get_extrusion_feedrate_color(float feedrate) const;
|
const Color& get_feedrate_color(float feedrate) const;
|
||||||
|
|
||||||
void set_extrusion_role_color(const std::string& role_name, float red, float green, float blue, float alpha);
|
void set_extrusion_role_color(const std::string& role_name, float red, float green, float blue, float alpha);
|
||||||
void set_extrusion_paths_colors(const std::vector<std::string>& colors);
|
void set_extrusion_paths_colors(const std::vector<std::string>& colors);
|
||||||
|
|
|
@ -1777,11 +1777,11 @@ void _3DScene::_load_gcode_extrusion_paths(const GCodePreviewData& preview_data,
|
||||||
case GCodePreviewData::Extrusion::FeatureType:
|
case GCodePreviewData::Extrusion::FeatureType:
|
||||||
return data.get_extrusion_role_color((ExtrusionRole)(int)value);
|
return data.get_extrusion_role_color((ExtrusionRole)(int)value);
|
||||||
case GCodePreviewData::Extrusion::Height:
|
case GCodePreviewData::Extrusion::Height:
|
||||||
return data.get_extrusion_height_color(value);
|
return data.get_height_color(value);
|
||||||
case GCodePreviewData::Extrusion::Width:
|
case GCodePreviewData::Extrusion::Width:
|
||||||
return data.get_extrusion_width_color(value);
|
return data.get_width_color(value);
|
||||||
case GCodePreviewData::Extrusion::Feedrate:
|
case GCodePreviewData::Extrusion::Feedrate:
|
||||||
return data.get_extrusion_feedrate_color(value);
|
return data.get_feedrate_color(value);
|
||||||
case GCodePreviewData::Extrusion::Tool:
|
case GCodePreviewData::Extrusion::Tool:
|
||||||
{
|
{
|
||||||
static GCodePreviewData::Color color;
|
static GCodePreviewData::Color color;
|
||||||
|
@ -2061,7 +2061,7 @@ bool _3DScene::_travel_paths_by_feedrate(const GCodePreviewData& preview_data, G
|
||||||
// creates a new volume for each feedrate
|
// creates a new volume for each feedrate
|
||||||
for (Feedrate& feedrate : feedrates)
|
for (Feedrate& feedrate : feedrates)
|
||||||
{
|
{
|
||||||
GLVolume* volume = new GLVolume(preview_data.get_extrusion_feedrate_color(feedrate.value).rgba);
|
GLVolume* volume = new GLVolume(preview_data.get_feedrate_color(feedrate.value).rgba);
|
||||||
if (volume == nullptr)
|
if (volume == nullptr)
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Reference in a new issue