[Bf-blender-cvs] [6d4d73ef084] temp-compositor-cryptomatte-picker: Cryptomatte: Show Name of Object/Material Under The Cursor.
Jeroen Bakker
noreply at git.blender.org
Fri Mar 12 15:41:28 CET 2021
Commit: 6d4d73ef08434de3166ad57b7e1a0063c53ddd19
Author: Jeroen Bakker
Date: Fri Mar 12 15:40:35 2021 +0100
Branches: temp-compositor-cryptomatte-picker
https://developer.blender.org/rB6d4d73ef08434de3166ad57b7e1a0063c53ddd19
Cryptomatte: Show Name of Object/Material Under The Cursor.
===================================================================
M source/blender/blenkernel/BKE_node.h
M source/blender/editors/interface/interface_eyedropper_color.c
M source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 4506ebf1447..8e353426061 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -1292,6 +1292,7 @@ const char *ntreeCompositCryptomatteLayerPrefix(const bNode *node);
/* Update the runtime layer names with the cryptomatte layer names of the references
* render layer or image. */
void ntreeCompositCryptomatteUpdateLayerNames(bNode *node);
+struct CryptomatteSession *ntreeCompositCryptomatteSession(bNode *node);
/** \} */
/* -------------------------------------------------------------------- */
diff --git a/source/blender/editors/interface/interface_eyedropper_color.c b/source/blender/editors/interface/interface_eyedropper_color.c
index c4391d57129..53cdc54a9cb 100644
--- a/source/blender/editors/interface/interface_eyedropper_color.c
+++ b/source/blender/editors/interface/interface_eyedropper_color.c
@@ -36,6 +36,7 @@
#include "BLI_string.h"
#include "BKE_context.h"
+#include "BKE_cryptomatte.h"
#include "BKE_image.h"
#include "BKE_main.h"
#include "BKE_node.h"
@@ -58,6 +59,7 @@
#include "ED_clip.h"
#include "ED_image.h"
#include "ED_node.h"
+#include "ED_screen.h"
#include "RE_pipeline.h"
@@ -78,9 +80,30 @@ typedef struct Eyedropper {
float accum_col[3];
int accum_tot;
+ void *draw_handle_sample_text;
+ char sample_text[MAX_NAME];
+
bNode *crypto_node;
+ struct CryptomatteSession *cryptomatte_session;
} Eyedropper;
+static void eyedropper_draw_cb(const wmWindow *window, void *arg)
+{
+ Eyedropper *eye = arg;
+ if (eye->sample_text[0] == '\0') {
+ return;
+ }
+
+ const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
+ int x = window->eventstate->x;
+ int y = window->eventstate->y;
+ y += U.widget_unit;
+ const float col_fg[4] = {1.0f, 1.0f, 1.0f, 1.0f};
+ const float col_bg[4] = {0.0f, 0.0f, 0.0f, 0.2f};
+
+ UI_fontstyle_draw_simple_backdrop(fstyle, x, y, eye->sample_text, col_fg, col_bg);
+}
+
static bool eyedropper_init(bContext *C, wmOperator *op)
{
Eyedropper *eye = MEM_callocN(sizeof(Eyedropper), __func__);
@@ -104,6 +127,8 @@ static bool eyedropper_init(bContext *C, wmOperator *op)
RNA_property_float_get_array(&eye->ptr, eye->prop, col);
if (ELEM(eye->ptr.type, &RNA_CompositorNodeCryptomatteV2, &RNA_CompositorNodeCryptomatte)) {
eye->crypto_node = (bNode *)eye->ptr.data;
+ eye->cryptomatte_session = ntreeCompositCryptomatteSession(eye->crypto_node);
+ eye->draw_handle_sample_text = WM_draw_cb_activate(CTX_wm_window(C), eyedropper_draw_cb, eye);
}
else {
eye->crypto_node = NULL;
@@ -128,12 +153,21 @@ static bool eyedropper_init(bContext *C, wmOperator *op)
static void eyedropper_exit(bContext *C, wmOperator *op)
{
- WM_cursor_modal_restore(CTX_wm_window(C));
+ Eyedropper *eye = op->customdata;
+ wmWindow *window = CTX_wm_window(C);
+ WM_cursor_modal_restore(window);
+
+ if (eye->draw_handle_sample_text) {
+ WM_draw_cb_exit(window, eye->draw_handle_sample_text);
+ eye->draw_handle_sample_text = NULL;
+ }
- if (op->customdata) {
- MEM_freeN(op->customdata);
- op->customdata = NULL;
+ if (eye->cryptomatte_session) {
+ BKE_cryptomatte_free(eye->cryptomatte_session);
+ eye->cryptomatte_session = NULL;
}
+
+ MEM_SAFE_FREE(op->customdata);
}
/* *** eyedropper_color_ helper functions *** */
@@ -403,6 +437,20 @@ static void eyedropper_color_sample(bContext *C, Eyedropper *eye, int mx, int my
eyedropper_color_set(C, eye, accum_col);
}
+static void eyedropper_color_sample_text_update(bContext *C, Eyedropper *eye, int mx, int my)
+{
+ float col[3];
+ eye->sample_text[0] = '\0';
+
+ if (eye->cryptomatte_session) {
+ if (eyedropper_cryptomatte_sample_fl(C, eye, mx, my, col)) {
+ BKE_cryptomatte_find_name(
+ eye->cryptomatte_session, col[0], eye->sample_text, sizeof(eye->sample_text));
+ eye->sample_text[sizeof(eye->sample_text) - 1] = '\0';
+ }
+ }
+}
+
static void eyedropper_cancel(bContext *C, wmOperator *op)
{
Eyedropper *eye = op->customdata;
@@ -449,6 +497,11 @@ static int eyedropper_modal(bContext *C, wmOperator *op, const wmEvent *event)
/* button is pressed so keep sampling */
eyedropper_color_sample(C, eye, event->x, event->y);
}
+
+ if (eye->draw_handle_sample_text) {
+ eyedropper_color_sample_text_update(C, eye, event->x, event->y);
+ ED_region_tag_redraw(CTX_wm_region(C));
+ }
}
return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
index b2e78e1c897..3be7325b564 100644
--- a/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
+++ b/source/blender/nodes/composite/nodes/node_composite_cryptomatte.cc
@@ -217,6 +217,13 @@ const char *ntreeCompositCryptomatteLayerPrefix(const bNode *node)
return first_layer_name.value().c_str();
}
+CryptomatteSession *ntreeCompositCryptomatteSession(bNode *node)
+{
+ blender::bke::cryptomatte::CryptomatteSessionPtr session_ptr = cryptomatte_init_from_node(
+ *node, 0, true);
+ return session_ptr.release();
+}
+
static void node_init_cryptomatte(bNodeTree *UNUSED(ntree), bNode *node)
{
NodeCryptomatte *user = static_cast<NodeCryptomatte *>(
More information about the Bf-blender-cvs
mailing list