10#include "MRMesh/MRFlagOperators.h"
12#include "MRMesh/MRVector2.h"
13#include "MRMesh/MRColor.h"
14#include "MRViewer/MRViewerFwd.h"
15#include "MRViewer/MRImGui.h"
16#include "MRViewer/MRImGuiVectorOperators.h"
17#include <misc/cpp/imgui_stdlib.h>
35static auto vector_getter = [] (
void* vec,
int idx ) ->
const char*
37 auto& vector = *
static_cast< std::vector<std::string>*
>( vec );
38 if ( idx < 0 || idx >=
static_cast< int >( vector.size() ) )
40 assert(
false &&
"Combo: vector_getter invalid index" );
43 return vector.at( idx ).c_str();
46inline bool Combo(
const char* label,
int* idx,
const std::vector<std::string>& values)
48 if (values.empty()) {
return false; }
49 return Combo(label, idx, vector_getter,
50 const_cast<void *
>(
static_cast<const void*
>(&values) ), (
int)values.size());
53inline bool Combo(
const char* label,
int* idx, std::function<
const char *(
int)> getter,
int items_count)
55 auto func = [](
void* data,
int i) ->
const char*
57 auto &getter = *
reinterpret_cast<std::function<
const char *(
int)
> *>(data);
58 const char *s = getter(i);
63 assert(
false &&
"Combo: getter return nullptr" );
67 return Combo(label, idx, func,
reinterpret_cast<void *
>(&getter), items_count);
70inline bool ListBox(
const char* label,
int* idx,
const std::vector<std::string>& values)
72 if (values.empty()) {
return false; }
73 return ListBox(label, idx, vector_getter,
74 const_cast<void *
>(
static_cast<const void*
>(&values) ), (
int)values.size());
77inline bool InputText(
const char* label, std::string &str, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL,
void* user_data = NULL)
79 return ImGui::InputText( label, &str, flags, callback, user_data );
86MRVIEWER_API
bool DragFloatValid(
const char *label,
float* value,
float speed=1.0f,
87 float min = std::numeric_limits<float>::lowest(),
88 float max = std::numeric_limits<float>::max(),
89 const char* format =
"%.3f", ImGuiSliderFlags flags = 0 );
92MRVIEWER_API
bool DragFloatValidLineWidth(
const char* label,
float* value );
96 bool valueChanged =
false;
97 bool itemDeactivatedAfterEdit =
false;
98 explicit operator bool()
const {
return valueChanged; }
105MRVIEWER_API
MultiDragRes DragFloatValid2(
const char* label,
float v[2],
float v_speed = 1.0f,
106 float min = std::numeric_limits<float>::lowest(),
107 float max = std::numeric_limits<float>::max(),
108 const char* format =
"%.3f", ImGuiSliderFlags flags = 0,
109 const char* ( *tooltips )[2] =
nullptr );
115MRVIEWER_API
MultiDragRes DragFloatValid3(
const char * label,
float v[3],
float v_speed = 1.0f,
116 float min = std::numeric_limits<float>::lowest(),
117 float max = std::numeric_limits<float>::max(),
118 const char* format =
"%.3f", ImGuiSliderFlags flags = 0,
119 const char* (*tooltips)[3] =
nullptr );
124MRVIEWER_API
bool DragIntValid(
const char *label,
int* value,
float speed = 1,
125 int min = std::numeric_limits<int>::lowest(),
126 int max = std::numeric_limits<int>::max(),
127 const char* format =
"%d" );
133MRVIEWER_API
MultiDragRes DragIntValid3(
const char* label,
int v[3],
float speed = 1,
134 int min = std::numeric_limits<int>::lowest(),
135 int max = std::numeric_limits<int>::max(),
136 const char* format =
"%d",
137 const char* ( *tooltips )[3] =
nullptr );
142MRVIEWER_API
bool InputIntValid(
const char* label,
int* value,
int min,
int max,
143 int step = 1,
int step_fast = 100, ImGuiInputTextFlags flags = 0 );
146template<
typename Getter,
typename Setter>
147inline bool Checkbox(
const char* label, Getter get, Setter set)
150 bool ret = ImGui::Checkbox(label, &value);
169MRVIEWER_API
void PlotCustomHistogram(
const char* str_id,
170 std::function<
float(
int idx )> values_getter,
171 std::function<
void(
int idx )> tooltip,
172 std::function<
void(
int idx )> on_click,
173 int values_count,
int values_offset = 0,
174 float scale_min = FLT_MAX,
float scale_max = FLT_MAX,
175 ImVec2 frame_size = ImVec2( 0, 0 ),
int selectedBarId = -1,
int hoveredBarId = -1,
176 const std::vector<HistogramGridLine>& gridIndexes = {},
177 const std::vector<HistogramGridLine>& gridValues = {} );
180MRVIEWER_API
bool BeginStatePlugin(
const char* label,
bool* open,
float width );
202 ImGuiWindowFlags
flags = ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize;
215MRVIEWER_API ImVec2 GetDownPosition(
const float width );
218MRVIEWER_API
float GetTitleBarHeght();
227MRVIEWER_API std::pair<ImVec2, bool> LoadSavedWindowPos(
const char* label, ImGuiWindow* window,
float width,
const ImVec2* position =
nullptr );
228MRVIEWER_API std::pair<ImVec2, bool> LoadSavedWindowPos(
const char* label,
float width,
const ImVec2* position =
nullptr );
233MRVIEWER_API
void SaveWindowPosition(
const char* label, ImGuiWindow* window );
234MRVIEWER_API
void SaveWindowPosition(
const char* label );
243 ImGuiWindowFlags flags = 0;
247MRVIEWER_API
bool BeginSavedWindowPos(
const std::string& name,
bool* open,
const SavedWindowPosParams& params );
253MRVIEWER_API
void EndCustomStatePlugin();
256MRVIEWER_API
bool BeginModalNoAnimation(
const char* label,
bool* open =
nullptr, ImGuiWindowFlags flags = 0 );
263MRVIEWER_API
bool InputIntBitSet(
const char* label,
int* v,
const MR::BitSet& bs,
int step = 1,
int step_fast = 100, ImGuiInputTextFlags flags = 0 );
270MRVIEWER_API
bool DragInputInt(
const char* label,
int* value,
float speed = 1,
int min = std::numeric_limits<int>::lowest(),
271 int max = std::numeric_limits<int>::max(),
const char* format =
"%d", ImGuiSliderFlags flags = ImGuiSliderFlags_None );
277MRVIEWER_API
bool Link(
const char* label, uint32_t color =
MR::Color( 60, 120, 255 ).getUInt32() );
281enum class PaletteChanges
287 All = Texture | Ranges | Reset,
289MR_MAKE_FLAG_OPERATORS( PaletteChanges )
297MRVIEWER_API PaletteChanges Palette(
300 std::string& presetName,
302 bool* fixZero =
nullptr,
304 float min = std::numeric_limits<float>::lowest(),
305 float max = std::numeric_limits<float>::max()
309enum class PlaneWidgetFlags
312 DisableVisibility = 1
314MR_MAKE_FLAG_OPERATORS( PlaneWidgetFlags )
319MRVIEWER_API
void Plane(
MR::PlaneWidget& planeWidget, PlaneWidgetFlags flags = {} );
325MRVIEWER_API
bool Direction(
MR::DirectionWidget& dirWidget,
bool& editDragging,
const std::string& historyName );
329MRVIEWER_API
void Image(
const MR::ImGuiImage& image,
const ImVec2& size,
const ImVec4& multColor = { 1, 1, 1, 1 } );
336MRVIEWER_API
void Spinner(
float radius );
339MRVIEWER_API
bool ModalBigTitle(
const char* title );
342MRVIEWER_API
bool ModalExitButton();
345inline float getExpSpeed(
float val,
float frac = 0.01f,
float min = 1e-5f )
346 {
return std::max( val * frac, min ); }
349inline float getLuminance(
const ImVec4& col )
351 return 0.2126f * col.x + 0.7152f * col.y + 0.0722f * col.z;
355MRVIEWER_API
bool isMultiViewportEnabled();
357#ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
360MRVIEWER_API ImVec2 GetWindowContentRegionMax();
364inline ImVec2 GetContentRegionMax()
366 return GetContentRegionAvail() + GetCursorScreenPos() - GetWindowPos();
Definition MRMesh/MRBitSet.h:24
Definition MRImGuiImage.h:15
Class to hold one dimension texture with value to UV mapping.
Definition MRPalette.h:27
Structure that contains parameters for State plugin window with custom style.
Definition ImGuiHelpers.h:184
std::function< void()> helpBtnFn
reaction on press "Help" button
Definition ImGuiHelpers.h:208
float width
window width (should be already scaled with UI::scale())
Definition ImGuiHelpers.h:192
float height
window height, usually calculated internally (if value is zero)
Definition ImGuiHelpers.h:194
std::function< void()> customHeaderFn
draw custom header items immediately after the caption
Definition ImGuiHelpers.h:206
ImGuiWindowFlags flags
window flags, ImGuiWindowFlags_NoScrollbar and ImGuiWindow_NoScrollingWithMouse are forced inside Beg...
Definition ImGuiHelpers.h:202
bool allowScrollbar
If false, will never show the scrollbar.
Definition ImGuiHelpers.h:196
ImVec2 * position
start Position
Definition ImGuiHelpers.h:198
bool closeWithEscape
if true esc button closes the plugin
Definition ImGuiHelpers.h:210
ImVec2 * changedSize
outside owned parameter for windows with resize option
Definition ImGuiHelpers.h:204
ImVec2 pivot
the position of the starting point of the window
Definition ImGuiHelpers.h:200
bool * collapsed
Definition ImGuiHelpers.h:190
helper structure for PlotCustomHistogram describing background grid line and label
Definition ImGuiHelpers.h:157
std::string tooltip
label tooltip
Definition ImGuiHelpers.h:163
std::string label
label text
Definition ImGuiHelpers.h:161
float value
value on the corresponding axis where the line and label are located
Definition ImGuiHelpers.h:159
Definition ImGuiHelpers.h:95
Parameters drawing classic ImGui::Begin with loading / saving window position.
Definition ImGuiHelpers.h:238
const ImVec2 * pos
(optional) preliminary window position
Definition ImGuiHelpers.h:242
ImVec2 size
window size
Definition ImGuiHelpers.h:240
Definition MRMesh/MRColor.h:9