デフォルトのカラーピッカーモードをHSVからRGBに変更するにはどうすればよいですか?

Aug 19 2020

Blenderの2.8倍デフォルトはHSVが、私はしたいRGBの2.7倍のように。

スタートアップファイルを保存しても、新しい設定は保存されません。

プリファレンス設定では、円を正方形に、HSVをHSLに変更することしかできません。円または正方形のRGBなし

回答

8 SeyedMortezaKamali Aug 30 2020 at 11:07

カラーピッカーのタイプをrgbに変更するオプションはありません

しかし、blender 2.83のソースをダウンロードして、色をrgbに変更するオプションを追加することができます

Blender-2.83.5 \ source \ブレンダー\ editors \ interface_region_color_picker.c

簡単な解決策

ご存知のように、列挙型にはデフォルト値があります

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

デフォルトのカラーピッカータイプは PICKER_TYPE_HSV = 1

に変更できます PICKER_TYPE_RGB = 0

 static char colormode = 0;

ハードソリューション設定への追加

設定でRGBのケースを追加する必要があります

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

hsv / hslを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,
};

列挙型はどのように機能しますか?

 /* 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,
                 "");

次に、この関数を使用して、カラーピッカーのタイプを変更できます。

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

また、blender2.79ソースをダウンロードしました。rgbをhsvに変換する関数が役立つかもしれません。

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

愚かな解決策

マクロレコーダーで色の種類を変えることができます!!!

ブレンダーを閉じるまで、他の色で機能するように色の種類を変更したとき

ブレンダーを開くときにこのプログラムを使用してください

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