Come si cambia la modalità di selezione dei colori predefinita da HSV a RGB?
L'impostazione predefinita di Blender 2.8x è HSV , ma voglio RGB come in 2.7x.
Il salvataggio del file di avvio non memorizza le nuove impostazioni.

Nelle impostazioni delle preferenze si può solo cambiare cerchio in quadrato o HSV in HSL, niente di più. Nessun cerchio o quadrato RGB

Risposte
non è possibile modificare il tipo di selettore colore in rgb
ma puoi scaricare il sorgente di Blender 2.83 e aggiungere un'opzione per cambiare i colori in rgb
blender-2.83.5 \ source \ blender \ editors \ interface_region_color_picker.c
Soluzione facile
come sai enum ha un valore predefinito

enum ePickerType {
PICKER_TYPE_RGB = 0,
PICKER_TYPE_HSV = 1,
PICKER_TYPE_HEX = 2,
};
per impostazione predefinita, il tipo di selettore colore è PICKER_TYPE_HSV = 1
così puoi cambiarlo in PICKER_TYPE_RGB = 0
static char colormode = 0;

Soluzione difficile Aggiunta alle preferenze
dovresti aggiungere un caso per RGB nelle preferenze
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;
}
c'è una funzione per cambiare hsv / hsl in 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,
};
Come funziona enum?
/* 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,
"");
quindi puoi usare questa funzione per cambiare il tipo di selettore di colori:
bpy.context.preferences.view.color_picker_type = 'CIRCLE_RGB'
Ho anche scaricato il sorgente di Blender 2.79 ho trovato una funzione per convertire rgb in hsv forse utile:
2.79 \ scripts \ addons \ cycles \ 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);
}
Soluzione sciocca
puoi usare un registratore di macro per cambiare il tipo di colore !!!
quando cambi il tipo di colore una volta che funziona per altri colori finché non chiudi il frullatore
quindi usa questo programma quando apri il frullatore

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()