81 const Span<int3> tris = mesh_eval->corner_tris();
82 const Span<int> tri_faces = mesh_eval->corner_tri_faces();
89 const int face_i = tri_faces[tri_index];
99 if (slot && slot->
uvname) {
111 bary_coord, tris[tri_index], uv_map);
127 float3 start_world, end_world;
131 const float4x4 &world_to_object = vc->
obact->world_to_object();
147 if (ray_hit.
index == -1) {
152 mesh.vert_positions(), mesh.corner_verts(), mesh.corner_tris()[ray_hit.
index], ray_hit.
co);
154 *r_tri_index = ray_hit.
index;
155 *r_face_index = mesh.corner_tri_faces()[ray_hit.
index];
186 if (v3d && texpaint_proj) {
204 const int mval[2] = {
x,
y};
211 &vc, mval, &tri_index, &faceindex, &bary_coord, *mesh_eval) &&
212 !hide_poly[faceindex];
215 Image *image =
nullptr;
253 float u = uv[0] * ibuf->
x;
254 float v = uv[1] * ibuf->
y;
298 else if (sima !=
nullptr) {
350 IFACE_(
"Sample color for %s"),
351 !
data->sample_palette ?
352 IFACE_(
"Brush. Use Left Click to sample for palette instead") :
353 IFACE_(
"Palette. Use Left Click to sample more colors"));
400 data->sample_palette =
false;
433 if (
data->show_cursor) {
437 if (
data->sample_palette) {
453 switch (event->
type) {
467 if (!
data->sample_palette) {
468 data->sample_palette =
true;
492 ot->name =
"Sample Color";
493 ot->idname =
"PAINT_OT_sample_color";
494 ot->description =
"Use the mouse to sample a color in the image";
509 ot->srna,
"location", 2,
nullptr, 0, INT_MAX,
"Location",
"", 0, 16384);
512 RNA_def_boolean(
ot->srna,
"merged",
false,
"Sample Merged",
"Sample the output display color");
const float * BKE_brush_color_get(const Paint *paint, const Brush *brush)
void BKE_brush_color_set(Paint *paint, Brush *brush, const float color[3])
SpaceImage * CTX_wm_space_image(const bContext *C)
Depsgraph * CTX_data_ensure_evaluated_depsgraph(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
View3D * CTX_wm_view3d(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
CustomData interface, see also DNA_customdata_types.h.
bool CustomData_has_layer(const CustomData *data, eCustomDataType type)
const char * CustomData_get_active_layer_name(const CustomData *data, eCustomDataType type)
int BKE_image_get_tile_from_pos(Image *ima, const float uv[2], float r_uv[2], float r_ofs[2])
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void BKE_imageuser_default(ImageUser *iuser)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
General operations, lookup, etc. for materials.
void BKE_texpaint_slot_refresh_cache(Scene *scene, Material *ma, const Object *ob)
Material * BKE_object_material_get(Object *ob, short act)
General operations, lookup, etc. for blender objects.
Mesh * BKE_object_get_evaluated_mesh(const Object *object_eval)
PaletteColor * BKE_palette_color_add(Palette *palette)
Paint * BKE_paint_get_active_from_context(const bContext *C)
Palette * BKE_palette_add(Main *bmain, const char *name)
Brush * BKE_paint_brush(Paint *paint)
void BKE_palette_color_set(PaletteColor *color, const float rgb[3])
Palette * BKE_paint_palette(Paint *paint)
void BKE_paint_palette_set(Paint *paint, Palette *palette)
PaintMode BKE_paintmode_get_active_from_context(const bContext *C)
void BKE_report(ReportList *reports, eReportType type, const char *message)
int BLI_bvhtree_ray_cast(const BVHTree *tree, const float co[3], const float dir[3], float radius, BVHTreeRayHit *hit, BVHTree_RayCastCallback callback, void *userdata)
int BLI_listbase_count(const ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE void straight_to_premul_v4(float color[4])
MINLINE void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
#define SNPRINTF_UTF8(dst, format,...)
T * DEG_get_evaluated(const Depsgraph *depsgraph, T *id)
Object is a sort of wrapper for general info.
#define IMAGEPAINT_MODE_MATERIAL
@ PAINT_CANVAS_SOURCE_MATERIAL
bool ED_space_image_color_sample(SpaceImage *sima, ARegion *region, const int mval[2], float r_col[3], bool *r_is_data)
void ED_workspace_status_text(bContext *C, const char *str)
ViewContext ED_view3d_viewcontext_init(bContext *C, Depsgraph *depsgraph)
bool ED_view3d_win_to_segment_clipped(const Depsgraph *depsgraph, const ARegion *region, const View3D *v3d, const float mval[2], float r_ray_start[3], float r_ray_end[3], bool do_clip_planes)
void IMB_colormanagement_colorspace_to_scene_linear_v3(float pixel[3], const ColorSpace *colorspace)
void IMB_colormanagement_display_to_scene_linear_v3(float pixel[3], const ColorManagedDisplay *display, const ColorManagedDisplaySpace display_space=DISPLAY_SPACE_DRAW)
const ColorManagedDisplay * IMB_colormanagement_display_get_named(const char *name)
@ IMB_COLORMANAGE_IS_DATA
blender::ocio::Display ColorManagedDisplay
@ OPTYPE_DEPENDS_ON_CURSOR
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMVert * v
BPy_StructRNA * depsgraph
constexpr bool is_empty() const
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, AttrType data_type, const void *default_value=nullptr) const
GAttributeReader lookup(const StringRef attribute_id) const
ccl_device_inline float interp(const float a, const float b, const float t)
float3 compute_bary_coord_in_triangle(Span< float3 > vert_positions, Span< int > corner_verts, const int3 &corner_tri, const float3 &position)
T sample_corner_attribute_with_bary_coords(const float3 &bary_weights, const int3 &corner_tri, const Span< T > corner_attribute)
bool grease_pencil_painting_poll(bContext *C)
uchar4 interpolate_nearest_wrap_byte(const ImBuf *in, float u, float v)
uchar4 interpolate_bilinear_wrap_byte(const ImBuf *in, float u, float v)
float4 interpolate_nearest_wrap_fl(const ImBuf *in, float u, float v)
float4 interpolate_bilinear_wrap_fl(const ImBuf *in, float u, float v)
T clamp(const T &a, const T &min, const T &max)
MatBase< T, NumCol, NumRow > normalize(const MatBase< T, NumCol, NumRow > &a)
VecBase< T, 3 > transform_point(const CartesianBasis &basis, const VecBase< T, 3 > &v)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
VecBase< float, 3 > float3
bool image_paint_poll_ignore_tool(bContext *C)
bool vertex_paint_poll_ignore_tool(bContext *C)
static blender::float2 imapaint_pick_uv(const Mesh *mesh_eval, Scene *scene, Object *ob_eval, const int tri_index, const blender::float3 &bary_coord)
static int imapaint_pick_face(ViewContext *vc, const int mval[2], int *r_tri_index, int *r_face_index, blender::float3 *r_bary_coord, const Mesh &mesh)
static wmOperatorStatus sample_color_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void PAINT_OT_sample_color(wmOperatorType *ot)
static void sample_color_update_header(SampleColorData *data, bContext *C)
static wmOperatorStatus sample_color_exec(bContext *C, wmOperator *op)
static void paint_sample_color(bContext *C, ARegion *region, int x, int y, bool texpaint_proj, bool use_palette)
static bool sample_color_poll(bContext *C)
static wmOperatorStatus sample_color_modal(bContext *C, wmOperator *op, const wmEvent *event)
void RNA_int_set_array(PointerRNA *ptr, const char *name, const int *values)
void RNA_int_get_array(PointerRNA *ptr, const char *name, int *values)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PropertyRNA * RNA_def_int_vector(StructOrFunctionRNA *cont_, const char *identifier, const int len, const int *default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
const ColorSpace * colorspace
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer
struct TexPaintSlot * texpaintslot
struct ToolSettings * toolsettings
ColorManagedDisplaySettings display_settings
BVHTree_RayCastCallback raycast_callback
struct ReportList * reports
void WM_cursor_modal_set(wmWindow *win, int val)
void WM_cursor_modal_restore(wmWindow *win)
void WM_redraw_windows(bContext *C)
void WM_paint_cursor_tag_redraw(wmWindow *win, ARegion *)
bool WM_window_pixels_read_sample(bContext *C, wmWindow *win, const int pos[2], float r_col[3])
int WM_userdef_event_type_from_keymap_type(int kmitype)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)