¿Cómo cambio el modo selector de color predeterminado de HSV a RGB?

Aug 19 2020

El valor predeterminado de Blender 2.8x es HSV , pero quiero RGB como en 2.7x.

Guardar el archivo de inicio no almacena la nueva configuración.

En la configuración de preferencias, solo se puede cambiar de círculo a cuadrado o HSV a HSL, nada más. Sin círculo o cuadrado RGB

Respuestas

8 SeyedMortezaKamali Aug 30 2020 at 11:07

no hay opción para cambiar el tipo de selector de color a rgb

pero puede descargar la fuente de blender 2.83 y agregar una opción para cambiar los colores a rgb

blender-2.83.5 \ fuente \ blender \ editors \ interface_region_color_picker.c

Solución fácil

como sabes, enum tiene un valor predeterminado

enum ePickerType {
  PICKER_TYPE_RGB = 0,
  PICKER_TYPE_HSV = 1,
  PICKER_TYPE_HEX = 2,
};

por defecto, el tipo de selector de color es PICKER_TYPE_HSV = 1

para que puedas cambiarlo a PICKER_TYPE_RGB = 0

 static char colormode = 0;

Solución difícil Agregar a preferencias

debe agregar un caso para RGB en las preferencias

  switch (U.color_picker_type) {
    case USER_CP_SQUARE_SV:
      ui_colorpicker_square(block, ptr, prop, UI_GRAD_SV, cpicker);
      break;
    case USER_CP_SQUARE_HS:
      ui_colorpicker_square(block, ptr, prop, UI_GRAD_HS, cpicker);
      break;
    case USER_CP_SQUARE_HV:
      ui_colorpicker_square(block, ptr, prop, UI_GRAD_HV, cpicker);
      break;

    /* user default */
    case USER_CP_CIRCLE_HSV:
    case USER_CP_CIRCLE_HSL:
    case USER_CP_CIRCLE_RGB: # I ADD THIS CASE HERE
    default:
      ui_colorpicker_circle(block, ptr, prop, cpicker);
      break;
  }

hay una función para cambiar el hsv / hsl a rgb:

void ui_color_picker_to_rgb(float r_cp0, float r_cp1, float r_cp2, float *r, float *g, float *b)
{
  switch (U.color_picker_type) {
    case USER_CP_CIRCLE_HSL:
      hsl_to_rgb(r_cp0, r_cp1, r_cp2, r, g, b);
      break;
    default:
      hsv_to_rgb(r_cp0, r_cp1, r_cp2, r, g, b);
      break;
  }
}

enum ePickerType {
  PICKER_TYPE_RGB = 0,
  PICKER_TYPE_HSV = 1,
  PICKER_TYPE_HEX = 2,
};

¿Cómo funciona la enumeración?

 /* mode */
  yco = -1.5f * UI_UNIT_Y;
  UI_block_align_begin(block);
  bt = uiDefButC(block,
                 UI_BTYPE_ROW,
                 0,
                 IFACE_("RGB"),
                 0,
                 yco,
                 width / 3,
                 UI_UNIT_Y,
                 &colormode,
                 0.0,
                 (float)PICKER_TYPE_RGB,
                 0,
                 0,
                 "");

  UI_but_flag_disable(bt, UI_BUT_UNDO);
  UI_but_func_set(bt, ui_colorpicker_create_mode_cb, bt, NULL);
  bt->custom_data = cpicker;
  bt = uiDefButC(block,
                 UI_BTYPE_ROW,
                 0,
                 IFACE_((U.color_picker_type == USER_CP_CIRCLE_HSL) ? "HSL" : "HSV"),
                 width / 3,
                 yco,
                 width / 3,
                 UI_UNIT_Y,
                 &colormode,
                 0.0,
                 PICKER_TYPE_HSV,
                 0,
                 0,
                 "");

entonces puede usar esta función para cambiar el tipo de selector de color:

bpy.context.preferences.view.color_picker_type = 'CIRCLE_RGB'

También descargué la fuente de blender 2.79.Encontré una función para convertir rgb a hsv que puede ser útil:

2.79 \ scripts \ addons \ ciclos \ source \ util \ util_color.h

ccl_device float3 rgb_to_hsv(float3 rgb)
{
    float cmax, cmin, h, s, v, cdelta;
    float3 c;

    cmax = fmaxf(rgb.x, fmaxf(rgb.y, rgb.z));
    cmin = min(rgb.x, min(rgb.y, rgb.z));
    cdelta = cmax - cmin;

    v = cmax;

    if(cmax != 0.0f) {
        s = cdelta/cmax;
    }
    else {
        s = 0.0f;
        h = 0.0f;
    }

    if(s != 0.0f) {
        float3 cmax3 = make_float3(cmax, cmax, cmax);
        c = (cmax3 - rgb)/cdelta;

        if     (rgb.x == cmax) h =        c.z - c.y;
        else if(rgb.y == cmax) h = 2.0f + c.x - c.z;
        else                   h = 4.0f + c.y - c.x;

        h /= 6.0f;

        if(h < 0.0f)
            h += 1.0f;
    }
    else {
        h = 0.0f;
    }

    return make_float3(h, s, v);
}
2 SeyedMortezaKamali Aug 30 2020 at 14:49

Solución tonta

¡Puedes usar una grabadora de macros para cambiar el tipo de color!

cuando cambia el tipo de color una vez que funciona para otros colores hasta que cierra la licuadora

así que usa este programa cuando abras la licuadora

import pyautogui

print(pyautogui.position())

pyautogui.moveTo(863,687,0.2) # Materil Position
pyautogui.click()
pyautogui.moveTo(976,677,0.2) # Color Position
pyautogui.click()
pyautogui.moveTo(834,559,0.2) # Change The Color Type to RGB
pyautogui.click()