Blender  V3.3
view3d_header.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2004-2008 Blender Foundation. All rights reserved. */
3 
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string.h>
11 
12 #include "DNA_gpencil_types.h"
13 #include "DNA_object_types.h"
14 #include "DNA_scene_types.h"
15 
16 #include "BLI_math_base.h"
17 #include "BLI_utildefines.h"
18 
19 #include "BLT_translation.h"
20 
21 #include "BKE_context.h"
22 #include "BKE_editmesh.h"
23 
24 #include "DEG_depsgraph.h"
25 
26 #include "RNA_access.h"
27 #include "RNA_prototypes.h"
28 
29 #include "WM_api.h"
30 #include "WM_types.h"
31 
32 #include "ED_mesh.h"
33 #include "ED_undo.h"
34 
35 #include "UI_interface.h"
36 #include "UI_resources.h"
37 
38 #include "view3d_intern.h"
39 
40 #define B_SEL_VERT 110
41 #define B_SEL_EDGE 111
42 #define B_SEL_FACE 112
43 
44 /* -------------------------------------------------------------------- */
49 {
50  View3D *v3d = CTX_wm_view3d(C);
51 
52  if (v3d) {
56  }
57  else {
62  }
63 
64  return OPERATOR_FINISHED;
65 }
66 
68 {
69  /* identifiers */
70  ot->name = "Flip MatCap";
71  ot->description = "Flip MatCap";
72  ot->idname = "VIEW3D_OT_toggle_matcap_flip";
73 
74  /* api callbacks */
76 }
77 
80 /* -------------------------------------------------------------------- */
85 {
86  Object *obedit = CTX_data_edit_object(C);
87  if (!obedit || obedit->type != OB_MESH) {
88  return;
89  }
90 
92  uiLayout *row = uiLayoutRow(layout, true);
93 
94  PointerRNA op_ptr;
95  wmOperatorType *ot = WM_operatortype_find("MESH_OT_select_mode", true);
96  uiItemFullO_ptr(row,
97  ot,
98  "",
99  ICON_VERTEXSEL,
100  NULL,
103  &op_ptr);
104  RNA_enum_set(&op_ptr, "type", SCE_SELECT_VERTEX);
105  uiItemFullO_ptr(row,
106  ot,
107  "",
108  ICON_EDGESEL,
109  NULL,
112  &op_ptr);
113  RNA_enum_set(&op_ptr, "type", SCE_SELECT_EDGE);
114  uiItemFullO_ptr(row,
115  ot,
116  "",
117  ICON_FACESEL,
118  NULL,
121  &op_ptr);
122  RNA_enum_set(&op_ptr, "type", SCE_SELECT_FACE);
123 }
124 
125 static void uiTemplatePaintModeSelection(uiLayout *layout, struct bContext *C)
126 {
127  ViewLayer *view_layer = CTX_data_view_layer(C);
128  Object *ob = OBACT(view_layer);
129 
130  /* Gizmos aren't used in paint modes */
132  /* masks aren't used for sculpt and particle painting */
133  PointerRNA meshptr;
134 
135  RNA_pointer_create(ob->data, &RNA_Mesh, ob->data, &meshptr);
136  if (ob->mode & OB_MODE_TEXTURE_PAINT) {
137  uiItemR(layout, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
138  }
139  else {
140  uiLayout *row = uiLayoutRow(layout, true);
141  uiItemR(row, &meshptr, "use_paint_mask", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
142  uiItemR(row, &meshptr, "use_paint_mask_vertex", UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
143  }
144  }
145 }
146 
148 {
149  ViewLayer *view_layer = CTX_data_view_layer(C);
150  Object *ob = OBACT(view_layer);
151  Object *obedit = CTX_data_edit_object(C);
153 
154  bool is_paint = (ob && !(gpd && (gpd->flag & GP_DATA_STROKE_EDITMODE)) &&
155  ELEM(ob->mode,
160 
162  if ((obedit == NULL) && is_paint) {
164  }
165 }
166 
struct ScrArea * CTX_wm_area(const bContext *C)
Definition: context.c:738
struct Scene * CTX_data_scene(const bContext *C)
Definition: context.c:1090
struct Object * CTX_data_edit_object(const bContext *C)
Definition: context.c:1370
struct ViewLayer * CTX_data_view_layer(const bContext *C)
Definition: context.c:1100
struct bGPdata * CTX_data_gpencil_data(const bContext *C)
Definition: context.c:1445
struct View3D * CTX_wm_view3d(const bContext *C)
Definition: context.c:784
struct Main * CTX_data_main(const bContext *C)
Definition: context.c:1074
BMEditMesh * BKE_editmesh_from_object(struct Object *ob)
Return the BMEditMesh for a given object.
Definition: editmesh.c:58
#define UNUSED(x)
#define ELEM(...)
void DEG_id_tag_update(struct ID *id, int flag)
@ ID_RECALC_COPY_ON_WRITE
Definition: DNA_ID.h:834
@ GP_DATA_STROKE_EDITMODE
@ OB_MODE_PARTICLE_EDIT
@ OB_MODE_WEIGHT_PAINT
@ OB_MODE_SCULPT
@ OB_MODE_TEXTURE_PAINT
@ OB_MODE_VERTEX_PAINT
Object is a sort of wrapper for general info.
@ OB_MESH
#define SCE_SELECT_FACE
#define OBACT(_view_layer)
#define SCE_SELECT_VERTEX
#define SCE_SELECT_EDGE
@ V3D_SHADING_MATCAP_FLIP_X
@ OPERATOR_FINISHED
void ED_view3d_shade_update(struct Main *bmain, struct View3D *v3d, struct ScrArea *area)
Definition: space_view3d.c:223
#define C
Definition: RandGen.cpp:25
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiItemFullO_ptr(uiLayout *layout, struct wmOperatorType *ot, const char *name, int icon, struct IDProperty *properties, wmOperatorCallContext context, int flag, struct PointerRNA *r_opptr)
@ UI_ITEM_O_DEPRESS
@ UI_ITEM_R_ICON_ONLY
void uiItemR(uiLayout *layout, struct PointerRNA *ptr, const char *propname, int flag, const char *name, int icon)
#define ND_RENDER_OPTIONS
Definition: WM_types.h:383
#define NC_SCENE
Definition: WM_types.h:328
@ WM_OP_INVOKE_DEFAULT
Definition: WM_types.h:201
#define ND_SPACE_VIEW3D
Definition: WM_types.h:471
#define NC_SPACE
Definition: WM_types.h:342
Scene scene
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
Definition: rna_access.c:136
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
Definition: rna_access.c:5015
short selectmode
Definition: BKE_editmesh.h:52
void * data
View3DShading shading
struct SceneDisplay display
View3DShading shading
const char * name
Definition: WM_types.h:888
const char * idname
Definition: WM_types.h:890
const char * description
Definition: WM_types.h:893
int(* exec)(struct bContext *, struct wmOperator *) ATTR_WARN_UNUSED_RESULT
Definition: WM_types.h:903
static int toggle_matcap_flip(bContext *C, wmOperator *UNUSED(op))
Definition: view3d_header.c:48
void uiTemplateHeader3D_mode(uiLayout *layout, struct bContext *C)
void uiTemplateEditModeSelection(uiLayout *layout, struct bContext *C)
Definition: view3d_header.c:84
void VIEW3D_OT_toggle_matcap_flip(wmOperatorType *ot)
Definition: view3d_header.c:67
static void uiTemplatePaintModeSelection(uiLayout *layout, struct bContext *C)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmOperatorType * ot
Definition: wm_files.c:3479
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)