[Bf-blender-cvs] [54c28e5bfb6] master: Merge branch 'blender-v2.92-release'

2021-01-16 Thread Campbell Barton
Commit: 54c28e5bfb6bb023e7fa352c6dda740a16159b2a
Author: Campbell Barton
Date:   Sun Jan 17 18:30:10 2021 +1100
Branches: master
https://developer.blender.org/rB54c28e5bfb6bb023e7fa352c6dda740a16159b2a

Merge branch 'blender-v2.92-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [14bb9f09ab9] master: Merge branch 'blender-v2.92-release'

2021-01-16 Thread Campbell Barton
Commit: 14bb9f09ab985e44745f271608848c35babc62bc
Author: Campbell Barton
Date:   Sun Jan 17 18:30:14 2021 +1100
Branches: master
https://developer.blender.org/rB14bb9f09ab985e44745f271608848c35babc62bc

Merge branch 'blender-v2.92-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ca476a638c8] blender-v2.92-release: RNA: report an error when the name property is set twice

2021-01-16 Thread Campbell Barton
Commit: ca476a638c89634c17a025eff184a81e92d13f50
Author: Campbell Barton
Date:   Sun Jan 17 18:21:27 2021 +1100
Branches: blender-v2.92-release
https://developer.blender.org/rBca476a638c89634c17a025eff184a81e92d13f50

RNA: report an error when the name property is set twice

This helps avoid copy-paste errors which have happened a few times,
no functional changes.

===

M   source/blender/makesrna/intern/rna_attribute.c
M   source/blender/makesrna/intern/rna_define.c
M   source/blender/makesrna/intern/rna_render.c

===

diff --git a/source/blender/makesrna/intern/rna_attribute.c 
b/source/blender/makesrna/intern/rna_attribute.c
index 0d973e8e94e..7cd6e375a82 100644
--- a/source/blender/makesrna/intern/rna_attribute.c
+++ b/source/blender/makesrna/intern/rna_attribute.c
@@ -566,7 +566,6 @@ static void rna_def_attribute(BlenderRNA *brna)
   RNA_def_struct_path_func(srna, "rna_Attribute_path");
 
   prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
-  RNA_def_struct_name_property(srna, prop);
   RNA_def_property_string_funcs(prop, NULL, NULL, "rna_Attribute_name_set");
   RNA_def_property_editable_func(prop, "rna_Attribute_name_editable");
   RNA_def_property_ui_text(prop, "Name", "Name of the Attribute");
diff --git a/source/blender/makesrna/intern/rna_define.c 
b/source/blender/makesrna/intern/rna_define.c
index 44045dc5d2c..cec6a50d170 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -1125,6 +1125,11 @@ void RNA_def_struct_name_property(struct StructRNA 
*srna, struct PropertyRNA *pr
 CLOG_ERROR(&LOG, "\"%s.%s\", must be a string property.", 
srna->identifier, prop->identifier);
 DefRNA.error = true;
   }
+  else if (srna->nameproperty != NULL) {
+CLOG_ERROR(
+&LOG, "\"%s.%s\", name property is already set.", srna->identifier, 
prop->identifier);
+DefRNA.error = true;
+  }
   else {
 srna->nameproperty = prop;
   }
diff --git a/source/blender/makesrna/intern/rna_render.c 
b/source/blender/makesrna/intern/rna_render.c
index 93459b63492..3126f3e11f4 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -1081,7 +1081,6 @@ static void rna_def_render_pass(BlenderRNA *brna)
   prop = RNA_def_property(srna, "fullname", PROP_STRING, PROP_NONE);
   RNA_def_property_string_sdna(prop, NULL, "fullname");
   RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-  RNA_def_struct_name_property(srna, prop);
 
   prop = RNA_def_property(srna, "name", PROP_STRING, PROP_NONE);
   RNA_def_property_string_sdna(prop, NULL, "name");

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [66a87fc9f47] blender-v2.92-release: Fix workspace tool name property

2021-01-16 Thread Campbell Barton
Commit: 66a87fc9f47217d203b8aaa4e837d25737d0307a
Author: Campbell Barton
Date:   Sun Jan 17 18:14:56 2021 +1100
Branches: blender-v2.92-release
https://developer.blender.org/rB66a87fc9f47217d203b8aaa4e837d25737d0307a

Fix workspace tool name property

The fallback tool was used as the tool name.

Regression in a8ce9a143abbb51eae28e5d0cae1fb310bd0c24c

===

M   source/blender/makesrna/intern/rna_workspace.c

===

diff --git a/source/blender/makesrna/intern/rna_workspace.c 
b/source/blender/makesrna/intern/rna_workspace.c
index 4a4ac758daf..6b52a38c2da 100644
--- a/source/blender/makesrna/intern/rna_workspace.c
+++ b/source/blender/makesrna/intern/rna_workspace.c
@@ -272,7 +272,6 @@ static void rna_def_workspace_tool(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "idname_fallback", PROP_STRING, PROP_NONE);
   RNA_def_property_ui_text(prop, "Identifier Fallback", "");
-  RNA_def_struct_name_property(srna, prop);
 
   prop = RNA_def_property(srna, "index", PROP_INT, PROP_NONE);
   RNA_def_property_clear_flag(prop, PROP_EDITABLE);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7a0d5e0c9e3] sculpt-dev: Sculpt Expand: Expand from face set boundary

2021-01-16 Thread Pablo Dobarro
Commit: 7a0d5e0c9e3131b2aff091bacc0b04bbc7342c87
Author: Pablo Dobarro
Date:   Sat Jan 16 21:05:16 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB7a0d5e0c9e3131b2aff091bacc0b04bbc7342c87

Sculpt Expand: Expand from face set boundary

===

M   source/blender/editors/sculpt_paint/sculpt_expand.c
M   source/blender/editors/sculpt_paint/sculpt_intern.h

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c 
b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 524f0a8e6b4..18f0ca7c17c 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -95,7 +95,9 @@ static EnumPropertyItem 
prop_sculpt_expand_falloff_type_items[] = {
 {SCULPT_EXPAND_FALLOFF_TOPOLOGY, "TOPOLOGY", 0, "Topology", ""},
 {SCULPT_EXPAND_FALLOFF_NORMALS, "NORMALS", 0, "Normals", ""},
 {SCULPT_EXPAND_FALLOFF_SPHERICAL, "SPHERICAL", 0, "Spherical", ""},
-{SCULPT_EXPAND_FALLOFF_BOUNDARY_TOPOLOGY, "BOUNDARY_TOPOLOGY`", 0, 
"Boundary Topology", ""},
+{SCULPT_EXPAND_FALLOFF_BOUNDARY_TOPOLOGY, "BOUNDARY_TOPOLOGY", 0, 
"Boundary Topology", ""},
+{SCULPT_EXPAND_FALLOFF_BOUNDARY_FACE_SET, "BOUNDARY_FACE_SET", 0, 
"Boundary Face Set", ""},
+{SCULPT_EXPAND_FALLOFF_ACTIVE_FACE_SET, "ACTIVE_FACE_SET", 0, "Active Face 
Set", ""},
 {0, NULL, 0, NULL, NULL},
 };
 
@@ -106,6 +108,55 @@ static EnumPropertyItem 
prop_sculpt_expand_target_type_items[] = {
 {0, NULL, 0, NULL, NULL},
 };
 
+static bool sculpt_expand_state_get(SculptSession *ss, ExpandCache 
*expand_cache, const int i)
+{
+
+  bool enabled = false;
+
+  if (expand_cache->snap) {
+const int face_set = SCULPT_vertex_face_set_get(ss, i);
+enabled = BLI_gset_haskey(expand_cache->snap_enabled_face_sets, 
POINTER_FROM_INT(face_set));
+  }
+  else {
+enabled = expand_cache->falloff_factor[i] <= expand_cache->active_factor;
+  }
+
+  if (expand_cache->invert) {
+enabled = !enabled;
+  }
+  return enabled;
+}
+
+static bool sculpt_expand_face_state_get(SculptSession *ss, ExpandCache 
*expand_cache, const int f)
+{
+  bool enabled = false;
+  if (expand_cache->snap_enabled_face_sets) {
+const int face_set = ss->face_sets[f];
+enabled = BLI_gset_haskey(expand_cache->snap_enabled_face_sets, 
POINTER_FROM_INT(face_set));
+  }
+  else {
+enabled = expand_cache->face_falloff_factor[f] <= 
expand_cache->active_factor;
+  }
+  if (expand_cache->invert) {
+enabled = !enabled;
+  }
+  return enabled;
+}
+
+static float sculpt_expand_gradient_falloff_get(ExpandCache *expand_cache, 
const int i)
+{
+  if (!expand_cache->falloff_gradient) {
+return 1.0f;
+  }
+
+  if (expand_cache->invert) {
+return (expand_cache->falloff_factor[i] - expand_cache->active_factor) /
+   (expand_cache->max_falloff_factor - expand_cache->active_factor);
+  }
+
+  return 1.0f - (expand_cache->falloff_factor[i] / 
expand_cache->active_factor);
+}
+
 static float *sculpt_expand_geodesic_falloff_create(Sculpt *sd, Object *ob, 
const int vertex)
 {
   return SCULPT_geodesic_from_vertex_and_symm(sd, ob, vertex, FLT_MAX);
@@ -367,6 +418,137 @@ static void 
sculpt_expand_mesh_face_falloff_from_vertex_falloff(Mesh *mesh,
   }
 }
 
+static BLI_bitmap *sculpt_expand_bitmap_from_enabled(SculptSession *ss, 
ExpandCache *expand_cache)
+{
+  const int totvert = SCULPT_vertex_count_get(ss);
+  BLI_bitmap *enabled_vertices = BLI_BITMAP_NEW(totvert, "enabled vertices");
+  for (int i = 0; i < totvert; i++) {
+const bool enabled = sculpt_expand_state_get(ss, expand_cache, i);
+BLI_BITMAP_SET(enabled_vertices, i, enabled);
+  }
+  return enabled_vertices;
+}
+
+static void sculpt_expand_from_state_boundary(Object *ob, ExpandCache 
*expand_cache, BLI_bitmap *enabled_vertices) {
+  SculptSession *ss = ob->sculpt;
+  GSet *initial_vertices = BLI_gset_int_new("initial_vertices");
+
+  const int totvert = SCULPT_vertex_count_get(ss);
+
+  SculptFloodFill flood;
+  SCULPT_floodfill_init(ss, &flood);
+
+  for (int i = 0; i < totvert; i++) {
+SculptVertexNeighborIter ni;
+if (!BLI_BITMAP_TEST(enabled_vertices, i)) {
+  continue;
+}
+
+bool is_expand_boundary = false;
+SCULPT_VERTEX_NEIGHBORS_ITER_BEGIN (ss, i, ni) {
+  if (!BLI_BITMAP_TEST(enabled_vertices, ni.index)) {
+is_expand_boundary = true;
+  }
+}
+SCULPT_VERTEX_NEIGHBORS_ITER_END(ni);
+if (is_expand_boundary) {
+  BLI_gset_add(initial_vertices, POINTER_FROM_INT(i));
+  SCULPT_floodfill_add_initial(&flood, i);
+}
+  }
+
+  MEM_SAFE_FREE(expand_cache->falloff_factor);
+  MEM_SAFE_FREE(expand_cache->face_falloff_factor);
+
+  float *dists = MEM_calloc_arrayN(sizeof(float), totvert, "topology dist");
+  ExpandFloodFillData fdata;
+  fdata.dists = dists;
+
+  SCULPT_floodfill_execute(ss, &flood, mask_expand_topology_floodfil

[Bf-blender-cvs] [3d311fdaf1d] sculpt-dev: Sculpt Expand: Expand from active

2021-01-16 Thread Pablo Dobarro
Commit: 3d311fdaf1d1be6ce97c6bb746194bfc7b410195
Author: Pablo Dobarro
Date:   Sat Jan 16 21:21:16 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB3d311fdaf1d1be6ce97c6bb746194bfc7b410195

Sculpt Expand: Expand from active

===

M   source/blender/editors/sculpt_paint/sculpt_expand.c

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c 
b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 18f0ca7c17c..f5ea384c66a 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -137,9 +137,17 @@ static bool sculpt_expand_face_state_get(SculptSession 
*ss, ExpandCache *expand_
   else {
 enabled = expand_cache->face_falloff_factor[f] <= 
expand_cache->active_factor;
   }
+
   if (expand_cache->invert) {
 enabled = !enabled;
   }
+
+  if (expand_cache->falloff_factor_type == 
SCULPT_EXPAND_FALLOFF_ACTIVE_FACE_SET) {
+  if (ss->face_sets[f] == expand_cache->initial_active_face_set) {
+  enabled = false;
+  }
+  }
+
   return enabled;
 }
 
@@ -429,7 +437,10 @@ static BLI_bitmap 
*sculpt_expand_bitmap_from_enabled(SculptSession *ss, ExpandCa
   return enabled_vertices;
 }
 
-static void sculpt_expand_from_state_boundary(Object *ob, ExpandCache 
*expand_cache, BLI_bitmap *enabled_vertices) {
+static void sculpt_expand_from_state_boundary(Object *ob,
+  ExpandCache *expand_cache,
+  BLI_bitmap *enabled_vertices)
+{
   SculptSession *ss = ob->sculpt;
   GSet *initial_vertices = BLI_gset_int_new("initial_vertices");
 
@@ -469,45 +480,56 @@ static void sculpt_expand_from_state_boundary(Object *ob, 
ExpandCache *expand_ca
 
   expand_cache->falloff_factor = SCULPT_geodesic_distances_create(ob, 
initial_vertices, FLT_MAX);
 
-
   BLI_gset_free(initial_vertices, NULL);
-
 }
 
-static void sculpt_expand_finitialize_from_face_set_boundary(Object *ob, 
ExpandCache *expand_cache, const int active_face_set)
+static void sculpt_expand_finitialize_from_face_set_boundary(Object *ob,
+ ExpandCache 
*expand_cache,
+ const int 
active_face_set,
+ const bool 
internal_falloff)
 {
   SculptSession *ss = ob->sculpt;
   const int totvert = SCULPT_vertex_count_get(ss);
 
   BLI_bitmap *enabled_vertices = BLI_BITMAP_NEW(totvert, "enabled vertices");
   for (int i = 0; i < totvert; i++) {
-  if (!SCULPT_vertex_has_unique_face_set(ss, i)) {
-  continue;
-  }
-  if (!SCULPT_vertex_has_face_set(ss, i, active_face_set)) {
-  continue;
-  }
-  BLI_BITMAP_ENABLE(enabled_vertices, i);
+if (!SCULPT_vertex_has_unique_face_set(ss, i)) {
+  continue;
+}
+if (!SCULPT_vertex_has_face_set(ss, i, active_face_set)) {
+  continue;
+}
+BLI_BITMAP_ENABLE(enabled_vertices, i);
   }
 
   sculpt_expand_from_state_boundary(ob, expand_cache, enabled_vertices);
   MEM_freeN(enabled_vertices);
 
-  for (int i = 0; i < totvert; i++) {
+  if (internal_falloff) {
+for (int i = 0; i < totvert; i++) {
   if (!SCULPT_vertex_has_face_set(ss, i, active_face_set)) {
-  continue;
+continue;
   }
-  expand_cache->falloff_factor[i] *= -1;
-  }
+  expand_cache->falloff_factor[i] *= -1.0f;
+}
 
-  float min_factor = FLT_MAX;
-  for (int i = 0; i < totvert; i++) {
+float min_factor = FLT_MAX;
+for (int i = 0; i < totvert; i++) {
   min_factor = min_ff(expand_cache->falloff_factor[i], min_factor);
-  }
+}
 
-  const float increase_factor = fabsf(min_factor);
-  for (int i = 0; i < totvert; i++) {
+const float increase_factor = fabsf(min_factor);
+for (int i = 0; i < totvert; i++) {
   expand_cache->falloff_factor[i] += increase_factor;
+}
+  }
+  else {
+for (int i = 0; i < totvert; i++) {
+  if (!SCULPT_vertex_has_face_set(ss, i, active_face_set)) {
+continue;
+  }
+  expand_cache->falloff_factor[i] = 0.0f;
+}
   }
 }
 
@@ -577,7 +599,12 @@ static void 
sculpt_expand_falloff_factors_from_vertex_and_symm_create(
   expand_cache->falloff_factor = 
sculpt_expand_boundary_topology_falloff_create(
   sd, ob, vertex);
 case SCULPT_EXPAND_FALLOFF_BOUNDARY_FACE_SET:
-  sculpt_expand_finitialize_from_face_set_boundary(ob, expand_cache, 
expand_cache->initial_active_face_set);
+  sculpt_expand_finitialize_from_face_set_boundary(
+  ob, expand_cache, expand_cache->initial_active_face_set, true);
+  break;
+case SCULPT_EXPAND_FALLOFF_ACTIVE_FACE_SET:
+  sculpt_expand_finitialize_from_face_set_boundary(
+  ob, expand_cache, expand_cache->initial_active_face_set, 

[Bf-blender-cvs] [e2fb2315fd4] sculpt-dev: Cleanup: Clang Format

2021-01-16 Thread Pablo Dobarro
Commit: e2fb2315fd438f0d821eb033918172e1654cae4c
Author: Pablo Dobarro
Date:   Sat Jan 16 20:41:33 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rBe2fb2315fd438f0d821eb033918172e1654cae4c

Cleanup: Clang Format

===

M   source/blender/editors/sculpt_paint/sculpt_expand.c

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c 
b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 3473ebf10d5..524f0a8e6b4 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -1068,10 +1068,9 @@ static int sculpt_expand_modal(bContext *C, wmOperator 
*UNUSED(op), const wmEven
   return OPERATOR_RUNNING_MODAL;
 }
 
-
-
-
-static void sculpt_expand_delete_face_set_id(Mesh *mesh, MeshElemMap *pmap, 
int *face_sets, const int totface, const int delete_id) {
+static void sculpt_expand_delete_face_set_id(
+Mesh *mesh, MeshElemMap *pmap, int *face_sets, const int totface, const 
int delete_id)
+{
 
   BLI_LINKSTACK_DECLARE(queue, int);
   BLI_LINKSTACK_DECLARE(queue_next, int);
@@ -1080,18 +1079,17 @@ static void sculpt_expand_delete_face_set_id(Mesh 
*mesh, MeshElemMap *pmap, int
   BLI_LINKSTACK_INIT(queue_next);
 
   for (int i = 0; i < totface; i++) {
-  if (face_sets[i] == delete_id) {
-  BLI_LINKSTACK_PUSH(queue, i);
-  }
+if (face_sets[i] == delete_id) {
+  BLI_LINKSTACK_PUSH(queue, i);
+}
   }
 
-
   while (BLI_LINKSTACK_SIZE(queue)) {
 int f_index;
 while (f_index = BLI_LINKSTACK_POP(queue)) {
 
-int other_id = delete_id;
-const MPoly *c_poly = &mesh->mpoly[f_index];
+  int other_id = delete_id;
+  const MPoly *c_poly = &mesh->mpoly[f_index];
   for (int l = 0; l < c_poly->totloop; l++) {
 const MLoop *c_loop = &mesh->mloop[c_poly->loopstart + l];
 const MeshElemMap *vert_map = &pmap[c_loop->v];
@@ -1099,7 +1097,7 @@ static void sculpt_expand_delete_face_set_id(Mesh *mesh, 
MeshElemMap *pmap, int
 
   const int neighbor_face_index = vert_map->indices[i];
   if (face_sets[neighbor_face_index] != delete_id) {
-  other_id = face_sets[neighbor_face_index];
+other_id = face_sets[neighbor_face_index];
   }
 }
   }
@@ -1108,7 +1106,7 @@ static void sculpt_expand_delete_face_set_id(Mesh *mesh, 
MeshElemMap *pmap, int
 face_sets[f_index] = other_id;
   }
   else {
-  BLI_LINKSTACK_PUSH(queue_next, f_index);
+BLI_LINKSTACK_PUSH(queue_next, f_index);
   }
 }
 
@@ -1119,7 +1117,6 @@ static void sculpt_expand_delete_face_set_id(Mesh *mesh, 
MeshElemMap *pmap, int
   BLI_LINKSTACK_FREE(queue_next);
 }
 
-
 static void sculpt_expand_cache_initial_config_set(Sculpt *sd,
Object *ob,
ExpandCache *expand_cache,
@@ -1177,13 +1174,14 @@ static int sculpt_expand_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
   /* Store initial state. */
   sculpt_expand_initial_state_store(ob, ss->expand_cache);
 
-
   if (ss->expand_cache->modify_active) {
-  sculpt_expand_delete_face_set_id(ob->data, ss->pmap, 
ss->expand_cache->initial_face_sets, ss->totfaces, 
ss->expand_cache->next_face_set);
+sculpt_expand_delete_face_set_id(ob->data,
+ ss->pmap,
+ ss->expand_cache->initial_face_sets,
+ ss->totfaces,
+ ss->expand_cache->next_face_set);
   }
 
-
-
   /* Initialize the factors. */
   eSculptExpandFalloffType falloff_type = SCULPT_EXPAND_FALLOFF_GEODESICS;
   if (SCULPT_vertex_is_boundary(ss, ss->expand_cache->initial_active_vertex)) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [fc1fc95b79c] sculpt-dev: Sculpt Expand: Modify Active Face Set

2021-01-16 Thread Pablo Dobarro
Commit: fc1fc95b79c98e7a656c58ad815bc4f689a6534a
Author: Pablo Dobarro
Date:   Sat Jan 16 20:41:10 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rBfc1fc95b79c98e7a656c58ad815bc4f689a6534a

Sculpt Expand: Modify Active Face Set

===

M   source/blender/editors/sculpt_paint/sculpt_expand.c
M   source/blender/editors/sculpt_paint/sculpt_intern.h

===

diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c 
b/source/blender/editors/sculpt_paint/sculpt_expand.c
index d460ca5c02e..3473ebf10d5 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -24,6 +24,7 @@
 #include "MEM_guardedalloc.h"
 
 #include "BLI_blenlib.h"
+#include "BLI_linklist_stack.h"
 #include "BLI_math.h"
 #include "BLI_task.h"
 
@@ -39,6 +40,7 @@
 #include "BKE_colortools.h"
 #include "BKE_context.h"
 #include "BKE_mesh.h"
+#include "BKE_mesh_mapping.h"
 #include "BKE_multires.h"
 #include "BKE_node.h"
 #include "BKE_object.h"
@@ -887,7 +889,12 @@ static void 
sculpt_expand_set_initial_components_for_mouse(bContext *C,
   copy_v2_v2(ss->expand_cache->initial_mouse, mouse);
   expand_cache->initial_active_vertex = initial_vertex;
   expand_cache->initial_active_face_set = SCULPT_active_face_set_get(ss);
-  expand_cache->next_face_set = 
ED_sculpt_face_sets_find_next_available_id(ob->data);
+  if (expand_cache->modify_active) {
+expand_cache->next_face_set = SCULPT_active_face_set_get(ss);
+  }
+  else {
+expand_cache->next_face_set = 
ED_sculpt_face_sets_find_next_available_id(ob->data);
+  }
 }
 
 static void sculpt_expand_move_propagation_origin(bContext *C,
@@ -1061,6 +1068,58 @@ static int sculpt_expand_modal(bContext *C, wmOperator 
*UNUSED(op), const wmEven
   return OPERATOR_RUNNING_MODAL;
 }
 
+
+
+
+static void sculpt_expand_delete_face_set_id(Mesh *mesh, MeshElemMap *pmap, 
int *face_sets, const int totface, const int delete_id) {
+
+  BLI_LINKSTACK_DECLARE(queue, int);
+  BLI_LINKSTACK_DECLARE(queue_next, int);
+
+  BLI_LINKSTACK_INIT(queue);
+  BLI_LINKSTACK_INIT(queue_next);
+
+  for (int i = 0; i < totface; i++) {
+  if (face_sets[i] == delete_id) {
+  BLI_LINKSTACK_PUSH(queue, i);
+  }
+  }
+
+
+  while (BLI_LINKSTACK_SIZE(queue)) {
+int f_index;
+while (f_index = BLI_LINKSTACK_POP(queue)) {
+
+int other_id = delete_id;
+const MPoly *c_poly = &mesh->mpoly[f_index];
+  for (int l = 0; l < c_poly->totloop; l++) {
+const MLoop *c_loop = &mesh->mloop[c_poly->loopstart + l];
+const MeshElemMap *vert_map = &pmap[c_loop->v];
+for (int i = 0; i < vert_map->count; i++) {
+
+  const int neighbor_face_index = vert_map->indices[i];
+  if (face_sets[neighbor_face_index] != delete_id) {
+  other_id = face_sets[neighbor_face_index];
+  }
+}
+  }
+
+  if (other_id != delete_id) {
+face_sets[f_index] = other_id;
+  }
+  else {
+  BLI_LINKSTACK_PUSH(queue_next, f_index);
+  }
+}
+
+BLI_LINKSTACK_SWAP(queue, queue_next);
+  }
+
+  BLI_LINKSTACK_FREE(queue);
+  BLI_LINKSTACK_FREE(queue_next);
+}
+
+
 static void sculpt_expand_cache_initial_config_set(Sculpt *sd,
Object *ob,
ExpandCache *expand_cache,
@@ -1071,6 +1130,8 @@ static void sculpt_expand_cache_initial_config_set(Sculpt 
*sd,
   expand_cache->preserve = RNA_boolean_get(op->ptr, "use_mask_preserve");
   expand_cache->falloff_gradient = RNA_boolean_get(op->ptr, 
"use_falloff_gradient");
   expand_cache->target = RNA_enum_get(op->ptr, "target");
+  expand_cache->modify_active = RNA_boolean_get(op->ptr, "use_modify_active");
+  expand_cache->expand_from_active = RNA_boolean_get(op->ptr, 
"use_expand_from_active");
 
   SculptSession *ss = ob->sculpt;
   Brush *brush = BKE_paint_brush(&sd->paint);
@@ -1116,6 +1177,13 @@ static int sculpt_expand_invoke(bContext *C, wmOperator 
*op, const wmEvent *even
   /* Store initial state. */
   sculpt_expand_initial_state_store(ob, ss->expand_cache);
 
+
+  if (ss->expand_cache->modify_active) {
+  sculpt_expand_delete_face_set_id(ob->data, ss->pmap, 
ss->expand_cache->initial_face_sets, ss->totfaces, 
ss->expand_cache->next_face_set);
+  }
+
+
+
   /* Initialize the factors. */
   eSculptExpandFalloffType falloff_type = SCULPT_EXPAND_FALLOFF_GEODESICS;
   if (SCULPT_vertex_is_boundary(ss, ss->expand_cache->initial_active_vertex)) {
@@ -1213,4 +1281,10 @@ void SCULPT_OT_expand(wmOperatorType *ot)
  "Preserve the previous mask");
   ot->prop = RNA_def_boolean(
   ot->srna, "use_falloff_gradient", false, "Falloff Gradient", "Expand 
Using a Falloff");
+
+  ot->prop = RNA_def_boolean(
+  ot->srna, "use_modify_active", true, "Modify Acti

[Bf-blender-cvs] [05703d630ef] sculpt-dev: Sculpt Expand: face set selection snapping

2021-01-16 Thread Pablo Dobarro
Commit: 05703d630efa06b58f00a806d5c6dd4f03849199
Author: Pablo Dobarro
Date:   Sat Jan 16 20:11:37 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB05703d630efa06b58f00a806d5c6dd4f03849199

Sculpt Expand: face set selection snapping

===

M   release/scripts/presets/keyconfig/keymap_data/blender_default.py
M   source/blender/editors/sculpt_paint/sculpt_expand.c
M   source/blender/editors/sculpt_paint/sculpt_intern.h

===

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py 
b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 74303aec546..79d5c9b301b 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5540,6 +5540,7 @@ def km_sculpt_expand_modal(_params):
 ("FALLOFF_GEODESICS", {"type": 'ONE', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
 ("FALLOFF_TOPOLOGY", {"type": 'TWO', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
 ("FALLOFF_SPHERICAL", {"type": 'THREE', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
+("SNAP_TOGGLE", {"type": 'Z', "value": 'ANY', "any": True, "repeat" : 
False}, None),
 ])
 return keymap
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c 
b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 0ab8b22b184..d460ca5c02e 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -85,6 +85,7 @@ enum {
   SCULPT_EXPAND_MODAL_FALLOFF_GEODESICS,
   SCULPT_EXPAND_MODAL_FALLOFF_TOPOLOGY,
   SCULPT_EXPAND_MODAL_FALLOFF_SPHERICAL,
+  SCULPT_EXPAND_MODAL_SNAP_TOGGLE,
 };
 
 static EnumPropertyItem prop_sculpt_expand_falloff_type_items[] = {
@@ -407,6 +408,9 @@ static void 
sculpt_expand_falloff_factors_from_vertex_and_symm_create(
 
 static void sculpt_expand_cache_free(ExpandCache *expand_cache)
 {
+  if (expand_cache->snap_enabled_face_sets) {
+BLI_gset_free(expand_cache->snap_enabled_face_sets, NULL);
+  }
   MEM_SAFE_FREE(expand_cache->nodes);
   MEM_SAFE_FREE(expand_cache->falloff_factor);
   MEM_SAFE_FREE(expand_cache->face_falloff_factor);
@@ -461,18 +465,35 @@ static void sculpt_expand_cancel(bContext *C, wmOperator 
*op)
   ED_workspace_status_text(C, NULL);
 }
 
-static bool sculpt_expand_state_get(ExpandCache *expand_cache, const int i)
+static bool sculpt_expand_state_get(SculptSession *ss, ExpandCache 
*expand_cache, const int i)
 {
-  bool enabled = expand_cache->falloff_factor[i] <= 
expand_cache->active_factor;
+
+  bool enabled = false;
+
+  if (expand_cache->snap) {
+const int face_set = SCULPT_vertex_face_set_get(ss, i);
+enabled = BLI_gset_haskey(expand_cache->snap_enabled_face_sets, 
POINTER_FROM_INT(face_set));
+  }
+  else {
+enabled = expand_cache->falloff_factor[i] <= expand_cache->active_factor;
+  }
+
   if (expand_cache->invert) {
 enabled = !enabled;
   }
   return enabled;
 }
 
-static bool sculpt_expand_face_state_get(ExpandCache *expand_cache, const int 
f)
+static bool sculpt_expand_face_state_get(SculptSession *ss, ExpandCache 
*expand_cache, const int f)
 {
-  bool enabled = expand_cache->face_falloff_factor[f] <= 
expand_cache->active_factor;
+  bool enabled = false;
+  if (expand_cache->snap_enabled_face_sets) {
+const int face_set = ss->face_sets[f];
+enabled = BLI_gset_haskey(expand_cache->snap_enabled_face_sets, 
POINTER_FROM_INT(face_set));
+  }
+  else {
+enabled = expand_cache->face_falloff_factor[f] <= 
expand_cache->active_factor;
+  }
   if (expand_cache->invert) {
 enabled = !enabled;
   }
@@ -508,7 +529,7 @@ static void sculpt_expand_mask_update_task_cb(void 
*__restrict userdata,
   BKE_pbvh_vertex_iter_begin(ss->pbvh, node, vd, PBVH_ITER_ALL)
   {
 const float initial_mask = *vd.mask;
-const bool enabled = sculpt_expand_state_get(expand_cache, vd.index);
+const bool enabled = sculpt_expand_state_get(ss, expand_cache, vd.index);
 
 float new_mask;
 
@@ -551,7 +572,7 @@ static void sculpt_expand_face_sets_update_task_cb(void 
*__restrict userdata,
   PBVHVertexIter vd;
   BKE_pbvh_vertex_iter_begin(ss->pbvh, node, vd, PBVH_ITER_ALL)
   {
-const bool enabled = sculpt_expand_state_get(expand_cache, vd.index);
+const bool enabled = sculpt_expand_state_get(ss, expand_cache, vd.index);
 
 if (!enabled) {
   continue;
@@ -577,7 +598,7 @@ static void sculpt_expand_face_sets_update(SculptSession 
*ss, ExpandCache *expan
 {
   const int totface = ss->totfaces;
   for (int f = 0; f < totface; f++) {
-const bool enabled = sculpt_expand_face_state_get(expand_cache, f);
+const bool enabled = sculpt_expand_face_state_get(ss, expand_cache, f);
 if (!enabled) {
   continue;
 }
@@ -611,7 +632,7 @@ static void sculpt_expand

[Bf-blender-cvs] [65c358851dc] sculpt-dev: Sculpt Expand: Recursivity, move and falloff switching

2021-01-16 Thread Pablo Dobarro
Commit: 65c358851dc9ff2a72053b3218059d5940111410
Author: Pablo Dobarro
Date:   Sat Jan 16 18:38:05 2021 +0100
Branches: sculpt-dev
https://developer.blender.org/rB65c358851dc9ff2a72053b3218059d5940111410

Sculpt Expand: Recursivity, move and falloff switching

===

M   release/scripts/presets/keyconfig/keymap_data/blender_default.py
M   source/blender/editors/sculpt_paint/sculpt_expand.c
M   source/blender/editors/sculpt_paint/sculpt_intern.h

===

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py 
b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 8d9f1876980..74303aec546 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5533,8 +5533,13 @@ def km_sculpt_expand_modal(_params):
 ("CANCEL", {"type": 'RIGHTMOUSE', "value": 'PRESS', "any": True}, 
None),
 ("CONFIRM", {"type": 'LEFTMOUSE', "value": 'PRESS', "any": True}, 
None),
 ("INVERT", {"type": 'F', "value": 'PRESS', "any": True, "repeat" : 
False}, None),
-("MASK_PRESERVE", {"type": 'P', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
+("PRESERVE", {"type": 'E', "value": 'PRESS', "any": True, "repeat" : 
False}, None),
 ("GRADIENT", {"type": 'G', "value": 'PRESS', "any": True, "repeat" : 
False}, None),
+("RECURSION_STEP", {"type": 'R', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
+("MOVE_TOGGLE", {"type": 'SPACE', "value": 'ANY', "any": True, 
"repeat" : False}, None),
+("FALLOFF_GEODESICS", {"type": 'ONE', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
+("FALLOFF_TOPOLOGY", {"type": 'TWO', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
+("FALLOFF_SPHERICAL", {"type": 'THREE', "value": 'PRESS', "any": True, 
"repeat" : False}, None),
 ])
 return keymap
 
diff --git a/source/blender/editors/sculpt_paint/sculpt_expand.c 
b/source/blender/editors/sculpt_paint/sculpt_expand.c
index 95d87b92c20..0ab8b22b184 100644
--- a/source/blender/editors/sculpt_paint/sculpt_expand.c
+++ b/source/blender/editors/sculpt_paint/sculpt_expand.c
@@ -77,9 +77,14 @@ enum {
   SCULPT_EXPAND_MODAL_CONFIRM = 1,
   SCULPT_EXPAND_MODAL_CANCEL,
   SCULPT_EXPAND_MODAL_INVERT,
-  SCULPT_EXPAND_MODAL_MASK_PRESERVE_TOGGLE,
+  SCULPT_EXPAND_MODAL_PRESERVE_TOGGLE,
   SCULPT_EXPAND_MODAL_GRADIENT_TOGGLE,
   SCULPT_EXPAND_MODAL_FALLOFF_CYCLE,
+  SCULPT_EXPAND_MODAL_RECURSION_STEP,
+  SCULPT_EXPAND_MODAL_MOVE_TOGGLE,
+  SCULPT_EXPAND_MODAL_FALLOFF_GEODESICS,
+  SCULPT_EXPAND_MODAL_FALLOFF_TOPOLOGY,
+  SCULPT_EXPAND_MODAL_FALLOFF_SPHERICAL,
 };
 
 static EnumPropertyItem prop_sculpt_expand_falloff_type_items[] = {
@@ -115,7 +120,7 @@ static bool mask_expand_topology_floodfill_cb(
 {
   ExpandFloodFillData *data = userdata;
   if (!is_duplicate) {
-const int to_it = data->dists[from_v] + 1;
+const float to_it = data->dists[from_v] + 1.0f;
 data->dists[to_v] = to_it;
   }
   else {
@@ -128,7 +133,7 @@ static float *sculpt_expand_topology_falloff_create(Sculpt 
*sd, Object *ob, cons
 {
   SculptSession *ss = ob->sculpt;
   const int totvert = SCULPT_vertex_count_get(ss);
-  float *dists = MEM_malloc_arrayN(sizeof(float), totvert, "spherical dist");
+  float *dists = MEM_calloc_arrayN(sizeof(float), totvert, "topology dist");
 
   SculptFloodFill flood;
   SCULPT_floodfill_init(ss, &flood);
@@ -366,11 +371,6 @@ static void 
sculpt_expand_falloff_factors_from_vertex_and_symm_create(
 const int vertex,
 eSculptExpandFalloffType falloff_type)
 {
-  if (expand_cache->falloff_factor && expand_cache->falloff_factor_type == 
falloff_type) {
-/* Falloffs are already initialize with the current falloff type, nothing 
to do. */
-return;
-  }
-
   if (expand_cache->falloff_factor) {
 MEM_freeN(expand_cache->falloff_factor);
   }
@@ -519,7 +519,7 @@ static void sculpt_expand_mask_update_task_cb(void 
*__restrict userdata,
   new_mask = 0.0f;
 }
 
-if (expand_cache->mask_preserve) {
+if (expand_cache->preserve) {
   new_mask = max_ff(new_mask, expand_cache->initial_mask[vd.index]);
 }
 
@@ -581,7 +581,7 @@ static void sculpt_expand_face_sets_update(SculptSession 
*ss, ExpandCache *expan
 if (!enabled) {
   continue;
 }
-if (expand_cache->falloff_gradient) {
+if (expand_cache->preserve) {
   ss->face_sets[f] += expand_cache->next_face_set;
 }
 else {
@@ -754,11 +754,10 @@ static void sculpt_expand_update_for_vertex(bContext *C, 
Object *ob, const int v
 
 static int sculpt_expand_target_vertex_update_and_get(bContext *C,
   Object *ob,
-  const wmEvent *event)
+ 

[Bf-blender-cvs] [1e8ed36a907] master: Merge branch 'blender-v2.92-release'

2021-01-16 Thread Hans Goudey
Commit: 1e8ed36a907c140f235ee312c1a66141f42060d3
Author: Hans Goudey
Date:   Sat Jan 16 13:11:33 2021 -0600
Branches: master
https://developer.blender.org/rB1e8ed36a907c140f235ee312c1a66141f42060d3

Merge branch 'blender-v2.92-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6fb7d0f5592] blender-v2.92-release: Fix T84713: Geometry nodes reroute sockets have incorrect type

2021-01-16 Thread Wannes Malfait
Commit: 6fb7d0f5592793196c8100ef6cdbdf99ed695952
Author: Wannes Malfait
Date:   Sat Jan 16 13:09:19 2021 -0600
Branches: blender-v2.92-release
https://developer.blender.org/rB6fb7d0f5592793196c8100ef6cdbdf99ed695952

Fix T84713: Geometry nodes reroute sockets have incorrect type

This implements the node tree update function, which is needed so that the
reroutes get updated to the correct type. It is based on the same code in
the shader and compositor node trees.

Differential Revision: https://developer.blender.org/D10123

===

M   source/blender/nodes/geometry/node_geometry_tree.cc

===

diff --git a/source/blender/nodes/geometry/node_geometry_tree.cc 
b/source/blender/nodes/geometry/node_geometry_tree.cc
index da77e8896fb..87178c52ab9 100644
--- a/source/blender/nodes/geometry/node_geometry_tree.cc
+++ b/source/blender/nodes/geometry/node_geometry_tree.cc
@@ -32,6 +32,8 @@
 
 #include "RNA_access.h"
 
+#include "node_common.h"
+
 bNodeTreeType *ntreeType_Geometry;
 
 static void geometry_node_tree_get_from_context(const bContext *C,
@@ -63,6 +65,12 @@ static void geometry_node_tree_get_from_context(const 
bContext *C,
   }
 }
 
+static void geometry_node_tree_update(bNodeTree *ntree)
+{
+  /* Needed to give correct types to reroutes. */
+  ntree_update_reroute_nodes(ntree);
+}
+
 void register_node_tree_type_geo(void)
 {
   bNodeTreeType *tt = ntreeType_Geometry = static_cast(
@@ -73,7 +81,7 @@ void register_node_tree_type_geo(void)
   tt->ui_icon = 0; /* defined in drawnode.c */
   strcpy(tt->ui_description, N_("Geometry nodes"));
   tt->rna_ext.srna = &RNA_GeometryNodeTree;
-
+  tt->update = geometry_node_tree_update;
   tt->get_from_context = geometry_node_tree_get_from_context;
 
   ntreeTypeAdd(tt);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4e8c78245d3] master: GPencil: Hide layer if the scale is zero

2021-01-16 Thread Antonio Vazquez
Commit: 4e8c78245d3ec5e83be3cee00898be589ec0b24c
Author: Antonio Vazquez
Date:   Sat Jan 16 19:36:00 2021 +0100
Branches: master
https://developer.blender.org/rB4e8c78245d3ec5e83be3cee00898be589ec0b24c

GPencil: Hide layer if the scale is zero

When scale a layer to zero must be hidden.

===

M   source/blender/blenkernel/intern/gpencil.c

===

diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index 83b20e602c3..453960fbd61 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -2575,6 +2575,11 @@ void BKE_gpencil_visible_stroke_iter(ViewLayer 
*view_layer,
   continue;
 }
 
+/* If scale to 0 the layer must be invisible. */
+if (is_zero_v3(gpl->scale)) {
+  continue;
+}
+
 /* Hide the layer if it's defined a view layer filter. This is used to
  * generate renders, putting only selected GP layers for each View Layer.
  * This is used only in final render and never in Viewport. */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2c323dc875b] greasepencil-object: Merge branch 'master' into greasepencil-object

2021-01-16 Thread Antonio Vazquez
Commit: 2c323dc875b712d1208d53112f62754c1d8ae7bd
Author: Antonio Vazquez
Date:   Sat Jan 16 17:01:03 2021 +0100
Branches: greasepencil-object
https://developer.blender.org/rB2c323dc875b712d1208d53112f62754c1d8ae7bd

Merge branch 'master' into greasepencil-object

 Conflicts:
source/blender/editors/include/ED_gpencil.h

===



===

diff --cc source/blender/editors/include/ED_gpencil.h
index 7b324ae9554,acaa6495ba9..1e6cd18193e
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@@ -147,12 -147,9 +147,12 @@@ bool ED_gpencil_has_keyframe_v3d(struc
  
  bool ED_gpencil_stroke_can_use_direct(const struct ScrArea *area, const 
struct bGPDstroke *gps);
  bool ED_gpencil_stroke_can_use(const struct bContext *C, const struct 
bGPDstroke *gps);
- bool ED_gpencil_stroke_color_use(struct Object *ob,
-  const struct bGPDlayer *gpl,
-  const struct bGPDstroke *gps);
+ bool ED_gpencil_stroke_material_editable(struct Object *ob,
+  const struct bGPDlayer *gpl,
+  const struct bGPDstroke *gps);
 +bool ED_gpencil_stroke_material_visible(struct Object *ob,
 +const struct bGPDlayer *gpl,
 +const struct bGPDstroke *gps);
  
  /* --- Grease Pencil Operators - */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [24cdffde555] master: GPencil: Cleanup - Rename ED_gpencil_stroke_color_use to ED_gpencil_stroke_material_editable

2021-01-16 Thread Antonio Vazquez
Commit: 24cdffde555bac873904d2fbfe9d57fc0feb8a54
Author: Antonio Vazquez
Date:   Sat Jan 16 16:44:49 2021 +0100
Branches: master
https://developer.blender.org/rB24cdffde555bac873904d2fbfe9d57fc0feb8a54

GPencil: Cleanup - Rename ED_gpencil_stroke_color_use to 
ED_gpencil_stroke_material_editable

===

M   source/blender/editors/gpencil/gpencil_data.c
M   source/blender/editors/gpencil/gpencil_edit.c
M   source/blender/editors/gpencil/gpencil_intern.h
M   source/blender/editors/gpencil/gpencil_interpolate.c
M   source/blender/editors/gpencil/gpencil_paint.c
M   source/blender/editors/gpencil/gpencil_sculpt_paint.c
M   source/blender/editors/gpencil/gpencil_select.c
M   source/blender/editors/gpencil/gpencil_utils.c
M   source/blender/editors/gpencil/gpencil_vertex_ops.c
M   source/blender/editors/gpencil/gpencil_vertex_paint.c
M   source/blender/editors/gpencil/gpencil_weight_paint.c
M   source/blender/editors/include/ED_gpencil.h
M   source/blender/editors/screen/screen_context.c
M   source/blender/editors/transform/transform_convert_gpencil.c

===

diff --git a/source/blender/editors/gpencil/gpencil_data.c 
b/source/blender/editors/gpencil/gpencil_data.c
index 7eac4af0cba..8f24ce0ddd8 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -1560,7 +1560,7 @@ static int gpencil_stroke_arrange_exec(bContext *C, 
wmOperator *op)
   continue;
 }
 /* check if the color is editable */
-if (ED_gpencil_stroke_color_use(ob, gpl, gps) == false) {
+if (ED_gpencil_stroke_material_editable(ob, gpl, gps) == false) {
   continue;
 }
 /* some stroke is already at front*/
@@ -1725,7 +1725,7 @@ static int gpencil_stroke_change_color_exec(bContext *C, 
wmOperator *op)
   continue;
 }
 /* check if the color is editable */
-if (ED_gpencil_stroke_color_use(ob, gpl, gps) == false) {
+if (ED_gpencil_stroke_material_editable(ob, gpl, gps) == false) {
   continue;
 }
 
@@ -3388,7 +3388,7 @@ static int gpencil_material_select_exec(bContext *C, 
wmOperator *op)
 continue;
   }
   /* check if the color is editable */
-  if (ED_gpencil_stroke_color_use(ob, gpl, gps) == false) {
+  if (ED_gpencil_stroke_material_editable(ob, gpl, gps) == false) {
 continue;
   }
 
diff --git a/source/blender/editors/gpencil/gpencil_edit.c 
b/source/blender/editors/gpencil/gpencil_edit.c
index 9628790f27e..b5269bbfacf 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -1867,7 +1867,7 @@ static int gpencil_move_to_layer_exec(bContext *C, 
wmOperator *op)
   }
 
   /* Check if the color is editable. */
-  if (ED_gpencil_stroke_color_use(ob, gpl, gps) == false) {
+  if (ED_gpencil_stroke_material_editable(ob, gpl, gps) == false) {
 continue;
   }
 
@@ -2610,7 +2610,7 @@ static int gpencil_delete_selected_points(bContext *C)
 continue;
   }
   /* check if the color is editable */
-  if (ED_gpencil_stroke_color_use(ob, gpl, gps) == false) {
+  if (ED_gpencil_stroke_material_editable(ob, gpl, gps) == false) {
 continue;
   }
 
@@ -2808,7 +2808,7 @@ static int gpencil_snap_to_grid(bContext *C, wmOperator 
*UNUSED(op))
   continue;
 }
 /* check if the color is editable */
-if (ED_gpencil_stroke_color_use(obact, gpl, gps) == false) {
+if (ED_gpencil_stroke_material_editable(obact, gpl, gps) == false) {
   continue;
 }
 
@@ -2946,7 +2946,7 @@ static int gpencil_snap_to_cursor(bContext *C, wmOperator 
*op)
 continue;
   }
   /* check if the color is editable */
-  if (ED_gpencil_stroke_color_use(obact, gpl, gps) == false) {
+  if (ED_gpencil_stroke_material_editable(obact, gpl, gps) == false) {
 continue;
   }
   /* only continue if this stroke is selected (editable doesn't 
guarantee this)... */
@@ -3050,7 +3050,7 @@ static bool gpencil_stroke_points_centroid(Depsgraph 
*depsgraph,
   continue;
 }
 /* check if the color is editable */
-if (ED_gpencil_stroke_color_use(obact, gpl, gps) == false) {
+if (ED_gpencil_stroke_material_editable(obact, gpl, gps) == false) {
   continue;
 }
 /* only continue if this stroke is selected (editable doesn't 
guarantee this)... */
@@ -3565,7 +3565,7 @@ static int gpencil_stroke_join_exec(bContext *C, 
wmOperator *op)
   continue;
 }
 /* check if the color is editable. */
-if (ED_gp

[Bf-blender-cvs] [f5ec29023dc] master: GPencil: Fix initial value for fill factor after last changes

2021-01-16 Thread Antonio Vazquez
Commit: f5ec29023dcad11a7b4ced3d52d69d21b443ce02
Author: Antonio Vazquez
Date:   Sat Jan 16 16:36:49 2021 +0100
Branches: master
https://developer.blender.org/rBf5ec29023dcad11a7b4ced3d52d69d21b443ce02

GPencil: Fix initial value for fill factor after last changes

The value has changed due a previous commit and the minimum value cannot be 0.

===

M   source/blender/blenloader/intern/versioning_290.c

===

diff --git a/source/blender/blenloader/intern/versioning_290.c 
b/source/blender/blenloader/intern/versioning_290.c
index 40481505e1c..24683351bfd 100644
--- a/source/blender/blenloader/intern/versioning_290.c
+++ b/source/blender/blenloader/intern/versioning_290.c
@@ -1595,5 +1595,11 @@ void blo_do_versions_290(FileData *fd, Library 
*UNUSED(lib), Main *bmain)
 }
   }
 }
+/* Fix Fill factor for grease pencil fill brushes. */
+LISTBASE_FOREACH (Brush *, brush, &bmain->brushes) {
+  if ((brush->gpencil_settings) && (brush->gpencil_settings->fill_factor 
== 0.0f)) {
+brush->gpencil_settings->fill_factor = 1.0f;
+  }
+}
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [236577f8f37] greasepencil-object: GPencil: Fix errors after merge

2021-01-16 Thread Antonio Vazquez
Commit: 236577f8f376950c9274da51d130dc1d59cec329
Author: Antonio Vazquez
Date:   Sat Jan 16 16:11:48 2021 +0100
Branches: greasepencil-object
https://developer.blender.org/rB236577f8f376950c9274da51d130dc1d59cec329

GPencil: Fix errors after merge

===

M   source/blender/io/gpencil/intern/gpencil_io_base.cc
M   source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
M   source/blender/io/gpencil/intern/gpencil_io_export_svg.cc

===

diff --git a/source/blender/io/gpencil/intern/gpencil_io_base.cc 
b/source/blender/io/gpencil/intern/gpencil_io_base.cc
index 588ee22847a..fbd300697bb 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_base.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_base.cc
@@ -368,7 +368,7 @@ struct bGPDlayer *GpencilIO::gpl_current_get(void)
 void GpencilIO::gpl_current_set(struct bGPDlayer *gpl)
 {
   gpl_cur_ = gpl;
-  BKE_gpencil_parent_matrix_get(depsgraph_, params_.ob, gpl, diff_mat_);
+  BKE_gpencil_layer_transform_matrix_get(depsgraph_, params_.ob, gpl, 
diff_mat_);
 }
 
 struct bGPDframe *GpencilIO::gpf_current_get(void)
@@ -464,7 +464,7 @@ void GpencilIO::selected_objects_boundbox_set(void)
   if (gpl->flag & GP_LAYER_HIDE) {
 continue;
   }
-  BKE_gpencil_parent_matrix_get(depsgraph_, ob_eval, gpl, diff_mat_);
+  BKE_gpencil_layer_transform_matrix_get(depsgraph_, ob_eval, gpl, 
diff_mat_);
 
   bGPDframe *gpf = gpl->actframe;
   if (gpf == nullptr) {
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc 
b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
index 5e8e076dcf7..db2b139bc51 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
@@ -177,7 +177,7 @@ void GpencilExporterPDF::export_gpencil_layers(void)
   }
   gpf_current_set(gpf);
 
-  BKE_gpencil_parent_matrix_get(depsgraph_, ob, gpl, diff_mat_);
+  BKE_gpencil_layer_transform_matrix_get(depsgraph_, ob, gpl, diff_mat_);
   LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
 if (gps->totpoints == 0) {
   continue;
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc 
b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
index a860b35d693..ae22f85a4ef 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
@@ -206,7 +206,7 @@ void GpencilExporterSVG::export_gpencil_layers(void)
   pugi::xml_node gpl_node = ob_node.append_child("g");
   gpl_node.append_attribute("id").set_value(gpl->info);
 
-  BKE_gpencil_parent_matrix_get(depsgraph_, ob, gpl, diff_mat_);
+  BKE_gpencil_layer_transform_matrix_get(depsgraph_, ob, gpl, diff_mat_);
 
   LISTBASE_FOREACH (bGPDstroke *, gps, &gpf->strokes) {
 if (gps->totpoints == 0) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [1df7b6a2f42] greasepencil-object: Merge branch 'master' into greasepencil-object

2021-01-16 Thread Antonio Vazquez
Commit: 1df7b6a2f424915381ceba5c36ff5588aca5bd56
Author: Antonio Vazquez
Date:   Sat Jan 16 16:06:03 2021 +0100
Branches: greasepencil-object
https://developer.blender.org/rB1df7b6a2f424915381ceba5c36ff5588aca5bd56

Merge branch 'master' into greasepencil-object

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e02d84eb3be] master: GPencil: Add new parameteres to transform layers

2021-01-16 Thread Antonio Vazquez
Commit: e02d84eb3bea710aa4a658629813bd7e4c67ce4c
Author: Antonio Vazquez
Date:   Sat Jan 16 15:33:38 2021 +0100
Branches: master
https://developer.blender.org/rBe02d84eb3bea710aa4a658629813bd7e4c67ce4c

GPencil: Add new parameteres to transform layers

When using grease pencil for drawing Storyboards, it's very common to require a 
transform of the layers. This transform can be done using the offset modifier, 
but in some cases, the scene requires a lot of modifiers and makes the file 
hard to work.

This new feature adds a transforms Location, Rotation and Scale at Layer level, 
and allows to transform the layer without using a modifier, keeping the scene 
more clean.

{F9480695}

This feature was suggested by @pepeland after receiving feedback from several 
artists.

Also, done some code cleanup and rename some functions to get a better naming.

Maniphest Tasks: T83660

Differential Revision: https://developer.blender.org/D9761

===

M   release/scripts/startup/bl_ui/properties_grease_pencil_common.py
M   source/blender/blenkernel/BKE_gpencil.h
M   source/blender/blenkernel/intern/gpencil.c
M   source/blender/blenkernel/intern/gpencil_modifier.c
M   source/blender/blenkernel/intern/object_update.c
M   source/blender/blenloader/intern/versioning_290.c
M   source/blender/draw/engines/overlay/overlay_gpencil.c
M   source/blender/draw/intern/draw_cache_impl_gpencil.c
M   source/blender/editors/gpencil/gpencil_convert.c
M   source/blender/editors/gpencil/gpencil_data.c
M   source/blender/editors/gpencil/gpencil_edit.c
M   source/blender/editors/gpencil/gpencil_fill.c
M   source/blender/editors/gpencil/gpencil_intern.h
M   source/blender/editors/gpencil/gpencil_paint.c
M   source/blender/editors/gpencil/gpencil_primitive.c
M   source/blender/editors/gpencil/gpencil_sculpt_paint.c
M   source/blender/editors/gpencil/gpencil_utils.c
M   source/blender/editors/gpencil/gpencil_vertex_paint.c
M   source/blender/editors/gpencil/gpencil_weight_paint.c
M   source/blender/editors/include/ED_gpencil.h
M   source/blender/editors/object/object_transform.c
M   source/blender/editors/transform/transform_convert_gpencil.c
M   source/blender/editors/transform/transform_gizmo_3d.c
M   source/blender/makesdna/DNA_gpencil_types.h
M   source/blender/makesrna/intern/rna_gpencil.c

===

diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py 
b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 8b404c4a306..fecc09da539 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -759,6 +759,16 @@ class GreasePencilLayerAdjustmentsPanel:
 col = layout.row(align=True)
 col.prop(gpl, "lock_material")
 
+# Transforms
+row = layout.row(align=True)
+row.prop(gpl, "location")
+
+row = layout.row(align=True)
+row.prop(gpl, "rotation")
+
+row = layout.row(align=True)
+row.prop(gpl, "scale")
+
 
 class GPENCIL_UL_masks(UIList):
 def draw_item(self, _context, layout, _data, item, icon, _active_data, 
_active_propname, _index):
diff --git a/source/blender/blenkernel/BKE_gpencil.h 
b/source/blender/blenkernel/BKE_gpencil.h
index df5711f5120..8903abee432 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -280,12 +280,12 @@ void BKE_gpencil_frame_original_pointers_update(const 
struct bGPDframe *gpf_orig
 const struct bGPDframe 
*gpf_eval);
 void BKE_gpencil_update_orig_pointers(const struct Object *ob_orig, const 
struct Object *ob_eval);
 
-void BKE_gpencil_parent_matrix_get(const struct Depsgraph *depsgraph,
-   struct Object *obact,
-   struct bGPDlayer *gpl,
-   float diff_mat[4][4]);
+void BKE_gpencil_layer_transform_matrix_get(const struct Depsgraph *depsgraph,
+struct Object *obact,
+struct bGPDlayer *gpl,
+float diff_mat[4][4]);
 
-void BKE_gpencil_update_layer_parent(const struct Depsgraph *depsgraph, struct 
Object *ob);
+void BKE_gpencil_update_layer_transforms(const struct Depsgraph *depsgraph, 
struct Object *ob);
 
 int BKE_gpencil_material_find_index_by_name_prefix(struct Object *ob, const 
char *name_prefix);
 
diff --git a/source/blender/blenkernel/intern/gpencil.c 
b/source/blender/blenkernel/intern/gpencil.c
index c7ca82c92fc..83b20e602c3 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -95,6 +95,32 @@ static void grease

[Bf-blender-cvs] [0a44c4b5942] master: Merge branch 'blender-v2.92-release'

2021-01-16 Thread Jacques Lucke
Commit: 0a44c4b5942e9bcad2269bd4a1339bac462728e0
Author: Jacques Lucke
Date:   Sat Jan 16 15:26:43 2021 +0100
Branches: master
https://developer.blender.org/rB0a44c4b5942e9bcad2269bd4a1339bac462728e0

Merge branch 'blender-v2.92-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [1e193a0b564] blender-v2.92-release: Fix T84757: feedback loop with when modifying vertex group with nodes

2021-01-16 Thread Jacques Lucke
Commit: 1e193a0b564c72c006203a1e349269e4bb004d0e
Author: Jacques Lucke
Date:   Sat Jan 16 15:24:22 2021 +0100
Branches: blender-v2.92-release
https://developer.blender.org/rB1e193a0b564c72c006203a1e349269e4bb004d0e

Fix T84757: feedback loop with when modifying vertex group with nodes

The issue was that the mesh shared its vertex weights with the
original mesh (to reduce memory consumption). The solution is
to make a local copy of the vertex weights in this case.

===

M   source/blender/blenkernel/intern/attribute_access.cc

===

diff --git a/source/blender/blenkernel/intern/attribute_access.cc 
b/source/blender/blenkernel/intern/attribute_access.cc
index a7939beae90..2e1094364fd 100644
--- a/source/blender/blenkernel/intern/attribute_access.cc
+++ b/source/blender/blenkernel/intern/attribute_access.cc
@@ -1191,6 +1191,11 @@ WriteAttributePtr 
MeshComponent::attribute_try_get_for_write(const StringRef att
 if (mesh_->dvert == nullptr) {
   BKE_object_defgroup_data_create(&mesh_->id);
 }
+else {
+  /* Copy the data layer if it is shared with some other mesh. */
+  mesh_->dvert = (MDeformVert *)CustomData_duplicate_referenced_layer(
+  &mesh_->vdata, CD_MDEFORMVERT, mesh_->totvert);
+}
 return std::make_unique(
 mesh_->dvert, mesh_->totvert, vertex_group_index);
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [fbd9cff2adb] greasepencil-object: GPencil: Filter hidden materials when export to SVG or PDF

2021-01-16 Thread Antonio Vazquez
Commit: fbd9cff2adb8a90e569fd6e2dc6064c247196745
Author: Antonio Vazquez
Date:   Sat Jan 16 13:04:09 2021 +0100
Branches: greasepencil-object
https://developer.blender.org/rBfbd9cff2adb8a90e569fd6e2dc6064c247196745

GPencil: Filter hidden materials when export to SVG or PDF

===

M   source/blender/editors/gpencil/gpencil_utils.c
M   source/blender/editors/include/ED_gpencil.h
M   source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
M   source/blender/io/gpencil/intern/gpencil_io_export_svg.cc

===

diff --git a/source/blender/editors/gpencil/gpencil_utils.c 
b/source/blender/editors/gpencil/gpencil_utils.c
index 9bc6661c2e0..501d0b1ff4d 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -596,6 +596,21 @@ bool ED_gpencil_stroke_color_use(Object *ob, const 
bGPDlayer *gpl, const bGPDstr
   return true;
 }
 
+/* Check whether given stroke is visible for the current material. */
+bool ED_gpencil_stroke_material_visible(Object *ob, const bGPDlayer *gpl, 
const bGPDstroke *gps)
+{
+  /* check if the color is editable */
+  MaterialGPencilStyle *gp_style = BKE_gpencil_material_settings(ob, 
gps->mat_nr + 1);
+
+  if (gp_style != NULL) {
+if (gp_style->flag & GP_MATERIAL_HIDE) {
+  return false;
+}
+  }
+
+  return true;
+}
+
 /*  */
 /* Space Conversion */
 
diff --git a/source/blender/editors/include/ED_gpencil.h 
b/source/blender/editors/include/ED_gpencil.h
index 19cec4c0f62..41d739dc091 100644
--- a/source/blender/editors/include/ED_gpencil.h
+++ b/source/blender/editors/include/ED_gpencil.h
@@ -150,6 +150,9 @@ bool ED_gpencil_stroke_can_use(const struct bContext *C, 
const struct bGPDstroke
 bool ED_gpencil_stroke_color_use(struct Object *ob,
  const struct bGPDlayer *gpl,
  const struct bGPDstroke *gps);
+bool ED_gpencil_stroke_material_visible(struct Object *ob,
+const struct bGPDlayer *gpl,
+const struct bGPDstroke *gps);
 
 /* --- Grease Pencil Operators - */
 
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc 
b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
index 36b5f91a4cc..5e8e076dcf7 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_pdf.cc
@@ -182,6 +182,9 @@ void GpencilExporterPDF::export_gpencil_layers(void)
 if (gps->totpoints == 0) {
   continue;
 }
+if (!ED_gpencil_stroke_material_visible(ob, gpl, gps)) {
+  continue;
+}
 /* Duplicate the stroke to apply any layer thickness change. */
 bGPDstroke *gps_duplicate = BKE_gpencil_stroke_duplicate(gps, true, 
false);
 
diff --git a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc 
b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
index 31f4bf1e033..a860b35d693 100644
--- a/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
+++ b/source/blender/io/gpencil/intern/gpencil_io_export_svg.cc
@@ -212,6 +212,10 @@ void GpencilExporterSVG::export_gpencil_layers(void)
 if (gps->totpoints == 0) {
   continue;
 }
+if (!ED_gpencil_stroke_material_visible(ob, gpl, gps)) {
+  continue;
+}
+
 /* Duplicate the stroke to apply any layer thickness change. */
 bGPDstroke *gps_duplicate = BKE_gpencil_stroke_duplicate(gps, true, 
false);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [79dd9fedb24] master: Fix T84758: Revert "LibOverride: Also consider regular embedded IDs as virtual overrides."

2021-01-16 Thread Bastien Montagne
Commit: 79dd9fedb242c34646df1af951b8d810ec30c787
Author: Bastien Montagne
Date:   Sat Jan 16 10:28:47 2021 +0100
Branches: master
https://developer.blender.org/rB79dd9fedb242c34646df1af951b8d810ec30c787

Fix T84758: Revert "LibOverride: Also consider regular embedded IDs as virtual 
overrides."

This made Blender considers all materials to be overridden.

This reverts commit 2aa7bc06e7a6adb196e552fca3289ed7b7a18f3f.

===

M   source/blender/makesdna/DNA_ID.h

===

diff --git a/source/blender/makesdna/DNA_ID.h b/source/blender/makesdna/DNA_ID.h
index 840b9e23edf..263ce2203e9 100644
--- a/source/blender/makesdna/DNA_ID.h
+++ b/source/blender/makesdna/DNA_ID.h
@@ -515,7 +515,7 @@ typedef enum ID_Type {
((const ID *)(_id))->override_library->reference != NULL)
 
 #define ID_IS_OVERRIDE_LIBRARY_VIRTUAL(_id) \
-  const ID *)(_id))->flag & (LIB_EMBEDDED_DATA_LIB_OVERRIDE | 
LIB_EMBEDDED_DATA)) != 0)
+  const ID *)(_id))->flag & LIB_EMBEDDED_DATA_LIB_OVERRIDE) != 0)
 
 #define ID_IS_OVERRIDE_LIBRARY(_id) \
   (ID_IS_OVERRIDE_LIBRARY_REAL(_id) || ID_IS_OVERRIDE_LIBRARY_VIRTUAL(_id))

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs