Bagaimana cara mengubah mode pemilih warna default dari HSV ke RGB?

Aug 19 2020

Blender 2.8x defaultnya adalah HSV , tapi saya ingin RGB seperti di 2.7x.

Menyimpan file startup tidak menyimpan pengaturan baru.

Dalam pengaturan preferensi, seseorang hanya dapat mengubah lingkaran menjadi persegi atau HSV ke HSL, tidak lebih. Tidak ada RGB lingkaran atau persegi

Jawaban

8 SeyedMortezaKamali Aug 30 2020 at 11:07

tidak ada opsi untuk mengubah jenis pemilih warna ke rgb

tetapi Anda dapat mengunduh sumber blender 2.83 dan menambahkan opsi untuk mengubah warna menjadi rgb

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

Solusi Mudah

seperti yang Anda ketahui enum memiliki nilai default

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

secara default, jenis pemilih warna adalah PICKER_TYPE_HSV = 1

sehingga Anda dapat mengubahnya menjadi PICKER_TYPE_RGB = 0

 static char colormode = 0;

Solusi Keras Menambah preferensi

Anda harus menambahkan case untuk RGB dalam preferensi

  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;
  }

ada fungsi untuk merubah hsv / hsl menjadi 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,
};

Bagaimana cara kerja 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,
                 "");

lalu Anda dapat menggunakan fungsi ini untuk mengubah jenis pemilih warna:

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

Saya juga mengunduh sumber blender 2.79 Saya menemukan fungsi untuk mengubah rgb ke hsv mungkin berguna:

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);
}
2 SeyedMortezaKamali Aug 30 2020 at 14:49

Solusi Konyol

Anda dapat menggunakan perekam makro untuk mengubah jenis warna !!!

ketika Anda mengubah jenis warna setelah itu berfungsi untuk warna lain sampai Anda menutup blender

jadi gunakan program ini saat Anda membuka blender

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