Trying to modify this to show up in the keymap instead of in toolsettings
https://developer.blender.org/D6322
Creator says it was done as a tool setting so it can know when to draw facedots in xray. Don’t really care about that either way. Can live without it, but I am pretty sure if I get an understanding of my problem it would allow this functionality.
What I’m interested in is getting this in the keymap, so it can be mapped to a modifier similar to the different selection modes.
I figured out how to get another checkbox in keymap, and where I want it to be, but I don’t know how to make a script check if that property is true/false, the same way it is currently checking if a tool setting is true/false.
Here is my new property ‘mesh_select_through’ in wm_operator_props.c
void WM_operator_properties_border(wmOperatorType *ot)
{
PropertyRNA *prop;
prop = RNA_def_int(ot->srna, "xmin", 0, INT_MIN, INT_MAX, "X Min", "", INT_MIN, INT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
prop = RNA_def_int(ot->srna, "xmax", 0, INT_MIN, INT_MAX, "X Max", "", INT_MIN, INT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
prop = RNA_def_int(ot->srna, "ymin", 0, INT_MIN, INT_MAX, "Y Min", "", INT_MIN, INT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
prop = RNA_def_int(ot->srna, "ymax", 0, INT_MIN, INT_MAX, "Y Max", "", INT_MIN, INT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
prop = RNA_def_boolean(ot->srna, "wait_for_input", true, "Wait for Input", "");
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
prop = RNA_def_boolean(ot->srna, "mesh_select_through", true, "Select Through", "");
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
}
It shows up in the keymap under ‘Wait for Input’ which is what I was hoping for. Now I just need the script to check for that property instead of its tool setting equivalent. This is done in two scripts from what I can tell, and getting it to work in one should be the same process as in the other.
I think I probably have to add an Include to something in that script, and then set a *prop variable to it? That’s the way it is checking for the tool setting, so it should work the same way, right?
Here’s what it does to check the ‘mesh_select_through’ tool setting and then do something about facedots in view3d_select.c
static bool do_mesh_box_select(ViewContext *vc,
wmGenericUserData *wm_userdata,
const rcti *rect,
const eSelectOp sel_op)
{
#ifdef DEBUG_TIME
double t1 = PIL_check_seconds_timer();
#endif
BoxSelectUserData data;
ToolSettings *ts = vc->scene->toolsettings;
view3d_userdata_boxselect_init(&data, vc, rect, sel_op);
if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
if (vc->em->bm->totvertsel) {
EDBM_flag_disable_all(vc->em, BM_ELEM_SELECT);
data.is_changed = true;
}
}
/* for non zbuf projections, don't change the GL state */
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d);
GPU_matrix_set(vc->rv3d->viewmat);
const bool use_zbuf = !(ts->mesh_select_through || XRAY_FLAG_ENABLED(vc->v3d));
const bool show_face_dots = (vc->v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_FACE_DOT) != 0;
It does a bunch of other stuff in view3d_select.c to make it all work, and something else in another script to draw facedots or not.
So I’m thinking all I have to do is set this up to check my operator property instead of the tool setting. But I don’t know how, and looking around has gotten me nothing, sorry. I wish I could just say
PropertyRNA *prop = vc->scene->property->mesh_select_through;
and
const bool use_zbuf = !(prop->mesh_select_through || XRAY_FLAG_ENABLED(vc->v3d));
and
#include "wm_operator_props.c"
But that doesn’t work and probably looks ridiculous to anybody who knows better.
Thanks for helping. There’s probably reasons to not do this, and other ways around it, but if anybody could please point me in a direction so I can become competent with dealing with this type of situation I would be grateful.
I wonder if I could just do something else entirely like getting a Tool Setting inside of the keymap?