Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGermano Cavalcante <germano.costa@ig.com.br>2020-05-01 00:39:05 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2020-05-01 15:32:22 +0300
commitae049a6c6ac545b2c9eadf759f40ad864f436ff1 (patch)
treea984407837d729019a6a9af2ac13e1f3d325c542 /source/blender/editors/transform/transform_constraints.c
parentaa72e3abf9644de3c0478692d7bb357d1c7297e2 (diff)
Improve proportional edit drawing
(This is a simplified version of D4786) The advantage of highlighting the points would be to indicate more clearly what is affected by the proportional edit. The default circle is not so informative and sometimes it is even off screen so the user loses the quick identification of the influence. (See T75482) The disadvantage of this design is that the points could end up hiding the mesh. The original patch added the option `draw_proportional_gradient`, but I prefer to avoid adding more options and more information to the interface. I'm not sure if the advantages outweigh the disadvantages. {F8504097} Reviewers: #user_interface, #modeling Subscribers:
Diffstat (limited to 'source/blender/editors/transform/transform_constraints.c')
-rw-r--r--source/blender/editors/transform/transform_constraints.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/source/blender/editors/transform/transform_constraints.c b/source/blender/editors/transform/transform_constraints.c
index 84b5387af86..7d7b9f7e8ce 100644
--- a/source/blender/editors/transform/transform_constraints.c
+++ b/source/blender/editors/transform/transform_constraints.c
@@ -822,6 +822,72 @@ void drawConstraint(TransInfo *t)
}
}
+static void drawPropVerts(TransInfo *t)
+{
+ if (ELEM(t->mode, TFM_EDGE_SLIDE, TFM_VERT_SLIDE)) {
+ return;
+ }
+
+ int vec_len;
+ if (t->spacetype == SPACE_VIEW3D) {
+ vec_len = 3;
+ }
+ else if (t->spacetype == SPACE_IMAGE) {
+ vec_len = 2;
+ }
+ else {
+ return;
+ }
+
+ const float vertex_size = UI_GetThemeValuef(TH_VERTEX_SIZE) * 1.666f;
+ float color[3];
+ UI_GetThemeColor3fv(TH_EDITMESH_ACTIVE, color);
+
+ GPUVertFormat *format = immVertexFormat();
+ uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, vec_len, GPU_FETCH_FLOAT);
+ uint col = GPU_vertformat_attr_add(format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ if (vec_len == 3) {
+ immBindBuiltinProgram(GPU_SHADER_3D_FLAT_COLOR);
+ }
+ else {
+ immBindBuiltinProgram(GPU_SHADER_2D_FLAT_COLOR);
+ }
+
+ GPU_point_size(vertex_size);
+ GPU_blend(true);
+
+ FOREACH_TRANS_DATA_CONTAINER (t, tc) {
+ if (tc->use_local_mat) {
+ GPU_matrix_push();
+ GPU_matrix_mul(tc->mat);
+ }
+
+ immBeginAtMost(GPU_PRIM_POINTS, tc->data_len);
+ for (int i = 0; i < tc->data_len; i++) {
+ TransData td = tc->data[i];
+ if (td.factor == 0.0) {
+ break;
+ }
+
+ immAttr4f(col, UNPACK3(color), td.factor * 0.5f);
+ if (vec_len == 3) {
+ immVertex3fv(pos, td.loc);
+ }
+ else {
+ immVertex2fv(pos, td.loc);
+ }
+ }
+ immEnd();
+
+ if (tc->use_local_mat) {
+ GPU_matrix_pop();
+ }
+ }
+
+ GPU_blend(false);
+ immUnbindProgram();
+}
+
/* called from drawview.c, as an extra per-window draw option */
void drawPropCircle(const struct bContext *C, TransInfo *t)
{
@@ -874,6 +940,8 @@ void drawPropCircle(const struct bContext *C, TransInfo *t)
immUnbindProgram();
+ drawPropVerts(t);
+
if (depth_test_enabled) {
GPU_depth_test(true);
}