diff options
Diffstat (limited to 'src/libslic3r/GCode/PreviewData.hpp')
-rw-r--r-- | src/libslic3r/GCode/PreviewData.hpp | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/src/libslic3r/GCode/PreviewData.hpp b/src/libslic3r/GCode/PreviewData.hpp new file mode 100644 index 000000000..ab74993f5 --- /dev/null +++ b/src/libslic3r/GCode/PreviewData.hpp @@ -0,0 +1,208 @@ +#ifndef slic3r_GCode_PreviewData_hpp_ +#define slic3r_GCode_PreviewData_hpp_ + +#include "../libslic3r.h" +#include "../ExtrusionEntity.hpp" + +#include "Point.hpp" + +namespace Slic3r { + +class GCodePreviewData +{ +public: + struct Color + { + float rgba[4]; + + Color(); + Color(float r, float g, float b, float a); + + std::vector<unsigned char> as_bytes() const; + + static const Color Dummy; + }; + + struct Range + { + static const unsigned int Colors_Count = 10; + static const Color Default_Colors[Colors_Count]; + + Color colors[Colors_Count]; + float min; + float max; + + Range(); + + void reset(); + bool empty() const; + void update_from(float value); + void update_from(const Range& other); + void set_from(const Range& other); + float step_size() const; + + Color get_color_at(float value) const; + }; + + struct Ranges + { + Range height; + Range width; + Range feedrate; + Range volumetric_rate; + }; + + struct LegendItem + { + std::string text; + Color color; + + LegendItem(const std::string& text, const Color& color); + }; + + typedef std::vector<LegendItem> LegendItemsList; + + struct Extrusion + { + enum EViewType : unsigned char + { + FeatureType, + Height, + Width, + Feedrate, + VolumetricRate, + Tool, + Num_View_Types + }; + + static const unsigned int Num_Extrusion_Roles = (unsigned int)erMixed + 1; + static const Color Default_Extrusion_Role_Colors[Num_Extrusion_Roles]; + static const std::string Default_Extrusion_Role_Names[Num_Extrusion_Roles]; + static const EViewType Default_View_Type; + + struct Layer + { + float z; + ExtrusionPaths paths; + + Layer(float z, const ExtrusionPaths& paths); + }; + + typedef std::vector<Layer> LayersList; + + EViewType view_type; + Color role_colors[Num_Extrusion_Roles]; + std::string role_names[Num_Extrusion_Roles]; + LayersList layers; + unsigned int role_flags; + + void set_default(); + bool is_role_flag_set(ExtrusionRole role) const; + + static bool is_role_flag_set(unsigned int flags, ExtrusionRole role); + }; + + struct Travel + { + enum EType : unsigned char + { + Move, + Extrude, + Retract, + Num_Types + }; + + static const float Default_Width; + static const float Default_Height; + static const Color Default_Type_Colors[Num_Types]; + + struct Polyline + { + enum EDirection + { + Vertical, + Generic, + Num_Directions + }; + + EType type; + EDirection direction; + float feedrate; + unsigned int extruder_id; + Polyline3 polyline; + + Polyline(EType type, EDirection direction, float feedrate, unsigned int extruder_id, const Polyline3& polyline); + }; + + typedef std::vector<Polyline> PolylinesList; + + PolylinesList polylines; + float width; + float height; + Color type_colors[Num_Types]; + bool is_visible; + + void set_default(); + }; + + struct Retraction + { + static const Color Default_Color; + + struct Position + { + Vec3crd position; + float width; + float height; + + Position(const Vec3crd& position, float width, float height); + }; + + typedef std::vector<Position> PositionsList; + + PositionsList positions; + Color color; + bool is_visible; + + void set_default(); + }; + + struct Shell + { + bool is_visible; + + void set_default(); + }; + + Extrusion extrusion; + Travel travel; + Retraction retraction; + Retraction unretraction; + Shell shell; + Ranges ranges; + + GCodePreviewData(); + + void set_default(); + void reset(); + bool empty() const; + + Color get_extrusion_role_color(ExtrusionRole role) const; + Color get_height_color(float height) const; + Color get_width_color(float width) const; + Color get_feedrate_color(float feedrate) const; + Color get_volumetric_rate_color(float rate) const; + + 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); + + std::string get_legend_title() const; + LegendItemsList get_legend_items(const std::vector<float>& tool_colors) const; +}; + +GCodePreviewData::Color operator + (const GCodePreviewData::Color& c1, const GCodePreviewData::Color& c2); +GCodePreviewData::Color operator * (float f, const GCodePreviewData::Color& color); + +} // namespace Slic3r + +#endif /* slic3r_GCode_PreviewData_hpp_ */ |