diff --git a/src/libvgcode/include/GCodeInputData.hpp b/src/libvgcode/include/GCodeInputData.hpp index e569dfd71b..a98484937f 100644 --- a/src/libvgcode/include/GCodeInputData.hpp +++ b/src/libvgcode/include/GCodeInputData.hpp @@ -16,9 +16,9 @@ struct GCodeInputData // Required to properly detect fictitious layer changes when spiral vase mode is enabled. // bool spiral_vase_mode{ false }; - // // List of path vertices (gcode moves) + // See: PathVertex // std::vector vertices; }; diff --git a/src/libvgcode/include/Types.hpp b/src/libvgcode/include/Types.hpp index 20f35150ee..5de480f6b5 100644 --- a/src/libvgcode/include/Types.hpp +++ b/src/libvgcode/include/Types.hpp @@ -15,8 +15,14 @@ namespace libvgcode { static constexpr float PI = 3.141592f; -static constexpr float DEFAULT_TRAVELS_RADIUS = 0.1f; -static constexpr float DEFAULT_WIPES_RADIUS = 0.1f; +// +// Default radius, in mm, of the cylinders used to render the travel moves. +// +static constexpr float DEFAULT_TRAVELS_RADIUS_MM = 0.1f; +// +// Default radius, in mm, of the cylinders used to render the wipe moves. +// +static constexpr float DEFAULT_WIPES_RADIUS_MM = 0.1f; // // Vector in 3 dimensions @@ -188,7 +194,7 @@ static constexpr size_t BBOX_TYPES_COUNT = static_cast(EBBoxType::COUNT) // // Predefined colors // -static const Color DUMMY_COLOR{ 64, 64, 64 }; +static const Color DUMMY_COLOR{ 64, 64, 64 }; // // Palette used to render moves by ranges @@ -211,6 +217,8 @@ static const std::vector RANGES_COLORS{ { // // Mapping from EMoveType to EOptionType +// Returns EOptionType::COUNT if the given move type does not correspond +// to any option type. // extern EOptionType move_type_to_option(EMoveType type); diff --git a/src/libvgcode/include/Viewer.hpp b/src/libvgcode/include/Viewer.hpp index f280afd245..36c6020dde 100644 --- a/src/libvgcode/include/Viewer.hpp +++ b/src/libvgcode/include/Viewer.hpp @@ -33,7 +33,7 @@ public: // // Release the resources used by the viewer. // This method must be called before releasing the OpenGL context if the viewer - // goes out of scope after releasing the OpenGL context. + // goes out of scope after releasing it. // void shutdown(); // @@ -51,28 +51,108 @@ public: // void render(const Mat4x4& view_matrix, const Mat4x4& projection_matrix); + // + // ************************************************************************ + // Settings + // The following methods can be used to query/customize the parameters + // used to chenge the way toolpaths are rendered. + // ************************************************************************ + // + + // + // View type + // See: EViewType + // EViewType get_view_type() const; void set_view_type(EViewType type); - + // + // Time mode + // See: ETimeMode + // ETimeMode get_time_mode() const; void set_time_mode(ETimeMode mode); - - const Interval& get_layers_view_range() const; - void set_layers_view_range(const Interval& range); - void set_layers_view_range(Interval::value_type min, Interval::value_type max); - + // + // Top layer only + // Whether or not the visible range is limited to the current top layer only. + // bool is_top_layer_only_view_range() const; - void set_top_layer_only_view_range(bool top_layer_only_view_range); - + void set_top_layer_only_view_range(bool top_layer_only); + // + // Spiral vase mode + // Whether or not the gcode was generated with spiral vase mode enabled. + // See: GCodeInputData + // bool is_spiral_vase_mode() const; - size_t get_layers_count() const; - float get_layer_z(size_t layer_id) const; - std::vector get_layers_zs() const; + // + // ************************************************************************ + // Layers range + // The following methods can be used to query/customize the visualized + // layers range. + // Layers are detected during the call to load() method. + // Their count can be queried using get_layers_count() method. + // Their global range is [0..get_layers_count() - 1]. + // ************************************************************************ + // + // + // Return the current layers range. + // + const Interval& get_layers_view_range() const; + // + // Set the current layers range with the given interval. + // Values are clamped to [0..get_layers_count() - 1]. + // + void set_layers_view_range(const Interval& range); + // + // Set the current layers range with the given min and max values. + // Values are clamped to [0..get_layers_count() - 1]. + // + void set_layers_view_range(Interval::value_type min, Interval::value_type max); + // + // Return the count of detected layers. + // + size_t get_layers_count() const; + + // + // ************************************************************************ + // Layers zs + // The following methods can be used to query the layers zs. + // Layers are detected during the call to load() method. + // Their count can be queried using get_layers_count() method. + // Their global range is [0..get_layers_count() - 1]. + // ************************************************************************ + // + + // + // Return the z of the layer with the given id + // or 0.0f if the id does not belong to [0..get_layers_count() - 1]. + // + float get_layer_z(size_t layer_id) const; + // + // Return the list of zs of the detected layers. + // + std::vector get_layers_zs() const; + // + // Return the id of the layer closest to the given z. + // size_t get_layer_id_at(float z) const; + // + // ************************************************************************ + // Extruders + // The following methods can be used to query informations about extruders. + // Extruders are detected during the call to load() method. + // ************************************************************************ + // + + // + // Return the count of detected used extruders. + // size_t get_used_extruders_count() const; + // + // Return the list of ids of the detected used extruders. + // const std::vector& get_used_extruders_ids() const; AABox get_bounding_box(EBBoxType type) const; @@ -88,7 +168,7 @@ public: const Interval& get_view_visible_range() const; // - // min must be smaller than max + // Set the current visible range. // values are clamped to the current view global range // void set_view_visible_range(uint32_t min, uint32_t max); @@ -195,18 +275,49 @@ public: void set_option_color(EOptionType type, const Color& color); void reset_default_options_colors(); + // + // Get the color range for height. + // const ColorRange& get_height_range() const; + // + // Get the color range for width. + // const ColorRange& get_width_range() const; + // + // Get the color range for speed. + // const ColorRange& get_speed_range() const; + // + // Get the color range for fan speed. + // const ColorRange& get_fan_speed_range() const; + // + // Get the color range for temperature. + // const ColorRange& get_temperature_range() const; + // + // Get the color range for volumetric range. + // const ColorRange& get_volumetric_rate_range() const; + // + // Get the color range for the layer time range with the given type. + // const ColorRange& get_layer_time_range(EColorRangeType type) const; - + // + // Get the radius, in mm, of the cylinders used to render the travel moves. + // float get_travels_radius() const; + // + // Set the radius, in mm, of the cylinders used to render the travel moves. + // void set_travels_radius(float radius); - + // + // Get the radius, in mm, of the cylinders used to render the wipe moves. + // float get_wipes_radius() const; + // + // Set the radius, in mm, of the cylinders used to render the wipe moves. + // void set_wipes_radius(float radius); #if ENABLE_COG_AND_TOOL_MARKERS diff --git a/src/libvgcode/src/Settings.hpp b/src/libvgcode/src/Settings.hpp index 7fbf2a34a1..e8e295826f 100644 --- a/src/libvgcode/src/Settings.hpp +++ b/src/libvgcode/src/Settings.hpp @@ -13,14 +13,23 @@ namespace libvgcode { struct Settings { - bool update_view_full_range{ true }; - bool update_enabled_entities{ true }; - bool update_colors{ true }; + // + // Visualization parameters + // EViewType view_type{ EViewType::FeatureType }; ETimeMode time_mode{ ETimeMode::Normal }; bool top_layer_only_view_range{ false }; bool spiral_vase_mode{ false }; + // + // Required update flags + // + bool update_view_full_range{ true }; + bool update_enabled_entities{ true }; + bool update_colors{ true }; + // + // Visibility maps + // std::map options_visibility{ { { EOptionType::Travels, false }, { EOptionType::Wipes, false }, diff --git a/src/libvgcode/src/Viewer.cpp b/src/libvgcode/src/Viewer.cpp index cb216bf648..26618f3717 100644 --- a/src/libvgcode/src/Viewer.cpp +++ b/src/libvgcode/src/Viewer.cpp @@ -62,6 +62,21 @@ void Viewer::set_time_mode(ETimeMode mode) m_impl->set_time_mode(mode); } +bool Viewer::is_top_layer_only_view_range() const +{ + return m_impl->is_top_layer_only_view_range(); +} + +void Viewer::set_top_layer_only_view_range(bool top_layer_only) +{ + m_impl->set_top_layer_only_view_range(top_layer_only); +} + +bool Viewer::is_spiral_vase_mode() const +{ + return m_impl->is_spiral_vase_mode(); +} + const Interval& Viewer::get_layers_view_range() const { return m_impl->get_layers_view_range(); @@ -77,21 +92,6 @@ void Viewer::set_layers_view_range(Interval::value_type min, Interval::value_typ m_impl->set_layers_view_range(min, max); } -bool Viewer::is_top_layer_only_view_range() const -{ - return m_impl->is_top_layer_only_view_range(); -} - -bool Viewer::is_spiral_vase_mode() const -{ - return m_impl->is_spiral_vase_mode(); -} - -void Viewer::set_top_layer_only_view_range(bool top_layer_only_view_range) -{ - m_impl->set_top_layer_only_view_range(top_layer_only_view_range); -} - size_t Viewer::get_layers_count() const { return m_impl->get_layers_count(); diff --git a/src/libvgcode/src/ViewerImpl.cpp b/src/libvgcode/src/ViewerImpl.cpp index 1250010000..42edf6d49b 100644 --- a/src/libvgcode/src/ViewerImpl.cpp +++ b/src/libvgcode/src/ViewerImpl.cpp @@ -779,6 +779,8 @@ void ViewerImpl::set_time_mode(ETimeMode mode) void ViewerImpl::set_layers_view_range(Interval::value_type min, Interval::value_type max) { + min = std::clamp(min, 0, m_layers.count() - 1); + max = std::clamp(max, 0, m_layers.count() - 1); m_layers.set_view_range(min, max); // force immediate update of the full range update_view_full_range(); diff --git a/src/libvgcode/src/ViewerImpl.hpp b/src/libvgcode/src/ViewerImpl.hpp index 1d15c45033..5d196faec7 100644 --- a/src/libvgcode/src/ViewerImpl.hpp +++ b/src/libvgcode/src/ViewerImpl.hpp @@ -196,8 +196,8 @@ private: std::vector m_options; std::array m_travels_time{ 0.0f, 0.0f }; std::vector m_used_extruders_ids; - float m_travels_radius{ DEFAULT_TRAVELS_RADIUS }; - float m_wipes_radius{ DEFAULT_WIPES_RADIUS }; + float m_travels_radius{ DEFAULT_TRAVELS_RADIUS_MM }; + float m_wipes_radius{ DEFAULT_WIPES_RADIUS_MM }; bool m_initialized{ false }; bool m_loading{ false }; diff --git a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.hpp b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.hpp index 7ce2fa0333..9205a550c3 100644 --- a/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.hpp +++ b/src/slic3r/GUI/LibVGCode/LibVGCodeWrapper.hpp @@ -55,8 +55,8 @@ extern ETimeMode convert(const Slic3r::PrintEstimatedStatistics::ETimeMode& mode extern Slic3r::PrintEstimatedStatistics::ETimeMode convert(const ETimeMode& mode); // mapping from Slic3r::GCodeProcessorResult to libvgcode::GCodeInputData -extern GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, float travels_radius = DEFAULT_TRAVELS_RADIUS, - float wipes_radius = DEFAULT_WIPES_RADIUS); +extern GCodeInputData convert(const Slic3r::GCodeProcessorResult& result, float travels_radius = DEFAULT_TRAVELS_RADIUS_MM, + float wipes_radius = DEFAULT_WIPES_RADIUS_MM); // mapping from Slic3r::Print to libvgcode::GCodeInputData extern GCodeInputData convert(const Slic3r::Print& print, const std::vector& str_tool_colors,