Commit: db651bde5a36c22ca2bf45068640948533b1ed30
Author: Bastien Montagne
Date:   Thu Dec 25 16:52:07 2014 +0100
Branches: mesh-transfer-data
https://developer.blender.org/rBdb651bde5a36c22ca2bf45068640948533b1ed30

Merge branch 'master' into mesh-transfer-data

Conflicts:
        source/blender/makesrna/intern/rna_modifier.c

===================================================================



===================================================================

diff --cc source/blender/blenkernel/CMakeLists.txt
index 60cd9a6,5850b16..31e28f9
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@@ -279,9 -275,15 +279,16 @@@ set(SR
        tracking_private.h
        intern/CCGSubSurf.h
        intern/pbvh_intern.h
 +      intern/data_transfer_intern.h
  )
  
+ if(WITH_BINRELOC)
+       list(APPEND INC_SYS
+               ${BINRELOC_INCLUDE_DIRS}
+       )
+       add_definitions(-DWITH_BINRELOC)
+ endif()
+ 
  add_definitions(${GL_DEFINITIONS})
  
  if(WIN32)
diff --cc source/blender/makesrna/intern/rna_modifier.c
index e4d735f,cc7c978..d9af220
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@@ -719,265 -605,40 +720,300 @@@ static int rna_LaplacianDeformModifier_
        return ((lmd->flag & MOD_LAPLACIANDEFORM_BIND) && (lmd->cache_system != 
NULL));
  }
  
++
+ /* NOTE: Curve and array modifiers requires curve path to be evaluated,
+  * dependency graph will make sure that curve eval would create such a path,
+  * but if curve was already evaluated we might miss path.
+  *
+  * So what we do here is: if path was not calculated for target curve we
+  * tag it for update.
+  */
+ 
+ static void rna_CurveModifier_dependency_update(Main *bmain, Scene *scene, 
PointerRNA *ptr)
+ {
+       CurveModifierData *cmd = (CurveModifierData *)ptr->data;
+       rna_Modifier_update(bmain, scene, ptr);
+       DAG_relations_tag_update(bmain);
+       if (cmd->object != NULL) {
+               Curve *curve = cmd->object->data;
+               if ((curve->flag & CU_PATH) == 0) {
+                       DAG_id_tag_update(&curve->id, OB_RECALC_DATA);
+               }
+       }
+ }
+ 
+ static void rna_ArrayModifier_dependency_update(Main *bmain, Scene *scene, 
PointerRNA *ptr)
+ {
+       ArrayModifierData *amd = (ArrayModifierData *)ptr->data;
+       rna_Modifier_update(bmain, scene, ptr);
+       DAG_relations_tag_update(bmain);
+       if (amd->curve_ob != NULL) {
+               Curve *curve = amd->curve_ob->data;
+               if ((curve->flag & CU_PATH) == 0) {
+                       DAG_id_tag_update(&curve->id, OB_RECALC_DATA);
+               }
+       }
+ }
+ 
++
 +static void rna_DataTransferModifier_use_data_update(Main *bmain, Scene 
*scene, PointerRNA *ptr)
 +{
 +      DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +
 +      if (!(dtmd->flags & MOD_DATATRANSFER_USE_VERT)) {
 +              dtmd->data_types &= ~DT_TYPE_VERT_ALL;
 +      }
 +      if (!(dtmd->flags & MOD_DATATRANSFER_USE_EDGE)) {
 +              dtmd->data_types &= ~DT_TYPE_EDGE_ALL;
 +      }
 +      if (!(dtmd->flags & MOD_DATATRANSFER_USE_LOOP)) {
 +              dtmd->data_types &= ~DT_TYPE_LOOP_ALL;
 +      }
 +      if (!(dtmd->flags & MOD_DATATRANSFER_USE_POLY)) {
 +              dtmd->data_types &= ~DT_TYPE_POLY_ALL;
 +      }
 +
 +      rna_Modifier_update(bmain, scene, ptr);
 +}
 +
 +static void rna_DataTransferModifier_data_types_update(Main *bmain, Scene 
*scene, PointerRNA *ptr)
 +{
 +      DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +      const int item_types = 
BKE_object_data_transfer_get_dttypes_item_types(dtmd->data_types);
 +
 +      if (item_types & ME_VERT) {
 +              dtmd->flags |= MOD_DATATRANSFER_USE_VERT;
 +      }
 +      if (item_types & ME_EDGE) {
 +              dtmd->flags |= MOD_DATATRANSFER_USE_EDGE;
 +      }
 +      if (item_types & ME_LOOP) {
 +              dtmd->flags |= MOD_DATATRANSFER_USE_LOOP;
 +      }
 +      if (item_types & ME_POLY) {
 +              dtmd->flags |= MOD_DATATRANSFER_USE_POLY;
 +      }
 +
 +      rna_Modifier_update(bmain, scene, ptr);
 +}
 +
 +static EnumPropertyItem 
*rna_DataTransferModifier_layers_select_src_itemf(bContext *C, PointerRNA *ptr, 
PropertyRNA *prop, bool *r_free)
 +{
 +      DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +      EnumPropertyItem *item = NULL, tmp_item = {0};
 +      int totitem = 0;
 +
 +      if (!C) {  /* needed for docs and i18n tools */
 +              return DT_layers_select_src_items;
 +      }
 +
 +      /* No active here! */
 +      RNA_enum_items_add_value(&item, &totitem, DT_layers_select_src_items, 
DT_LAYERS_ALL_SRC);
 +
 +      if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_src")) {
 +              Object *ob_src = dtmd->ob_source;
 +
 +#if 0  /* XXX Don't think we want this in modifier version... */
 +              if (BKE_object_pose_armature_get(ob_src)) {
 +                      RNA_enum_items_add_value(&item, &totitem, 
DT_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_SELECT);
 +                      RNA_enum_items_add_value(&item, &totitem, 
DT_layers_select_src_items, DT_LAYERS_VGROUP_SRC_BONE_DEFORM);
 +              }
 +#endif
 +
 +              if (ob_src) {
 +                      bDeformGroup *dg;
 +                      int i;
 +
 +                      RNA_enum_item_add_separator(&item, &totitem);
 +
 +                      for (i = 0, dg = ob_src->defbase.first; dg; i++, dg = 
dg->next) {
 +                              tmp_item.value = i;
 +                              tmp_item.identifier = tmp_item.name = dg->name;
 +                              RNA_enum_item_add(&item, &totitem, &tmp_item);
 +                      }
 +              }
 +      }
 +      else if (STREQ(RNA_property_identifier(prop), 
"layers_shapekey_select_src")) {
 +              /* TODO */
 +      }
 +      else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_src")) {
 +              Object *ob_src = dtmd->ob_source;
 +
 +              if (ob_src) {
 +                      DerivedMesh *dm_src;
 +                      CustomData *pdata;
 +                      int num_data, i;
 +
 +                      /* XXX Is this OK? */
 +                      dm_src = mesh_get_derived_final(dtmd->modifier.scene, 
ob_src, CD_MASK_BAREMESH | CD_MTEXPOLY);
 +                      pdata = dm_src->getPolyDataLayout(dm_src);
 +                      num_data = CustomData_number_of_layers(pdata, 
CD_MTEXPOLY);
 +
 +                      RNA_enum_item_add_separator(&item, &totitem);
 +
 +                      for (i = 0; i < num_data; i++) {
 +                              tmp_item.value = i;
 +                              tmp_item.identifier = tmp_item.name = 
CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
 +                              RNA_enum_item_add(&item, &totitem, &tmp_item);
 +                      }
 +              }
 +      }
 +      else if (STREQ(RNA_property_identifier(prop), 
"layers_vcol_select_src")) {
 +              Object *ob_src = dtmd->ob_source;
 +
 +              if (ob_src) {
 +                      DerivedMesh *dm_src;
 +                      CustomData *ldata;
 +                      int num_data, i;
 +
 +                      /* XXX Is this OK? */
 +                      dm_src = mesh_get_derived_final(dtmd->modifier.scene, 
ob_src, CD_MASK_BAREMESH | CD_MLOOPCOL);
 +                      ldata = dm_src->getLoopDataLayout(dm_src);
 +                      num_data = CustomData_number_of_layers(ldata, 
CD_MLOOPCOL);
 +
 +                      RNA_enum_item_add_separator(&item, &totitem);
 +
 +                      for (i = 0; i < num_data; i++) {
 +                              tmp_item.value = i;
 +                              tmp_item.identifier = tmp_item.name = 
CustomData_get_layer_name(ldata, CD_MLOOPCOL, i);
 +                              RNA_enum_item_add(&item, &totitem, &tmp_item);
 +                      }
 +              }
 +      }
 +
 +      RNA_enum_item_end(&item, &totitem);
 +      *r_free = true;
 +
 +      return item;
 +}
 +
 +static EnumPropertyItem 
*rna_DataTransferModifier_layers_select_dst_itemf(bContext *C, PointerRNA *ptr, 
PropertyRNA *prop, bool *r_free)
 +{
 +      DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +      EnumPropertyItem *item = NULL, tmp_item = {0};
 +      int totitem = 0;
 +
 +      if (!C) {  /* needed for docs and i18n tools */
 +              return DT_layers_select_dst_items;
 +      }
 +
 +      /* No active here! */
 +      RNA_enum_items_add_value(&item, &totitem, DT_layers_select_dst_items, 
DT_LAYERS_NAME_DST);
 +      RNA_enum_items_add_value(&item, &totitem, DT_layers_select_dst_items, 
DT_LAYERS_INDEX_DST);
 +
 +      if (STREQ(RNA_property_identifier(prop), "layers_vgroup_select_dst")) {
 +              /* Only list destination layers if we have a single source! */
 +              if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_MDEFORMVERT] >= 
0) {
 +                      Object *ob_dst = CTX_data_active_object(C); /* XXX Is 
this OK? */
 +
 +                      if (ob_dst) {
 +                              bDeformGroup *dg;
 +                              int i;
 +
 +                              RNA_enum_item_add_separator(&item, &totitem);
 +
 +                              for (i = 0, dg = ob_dst->defbase.first; dg; 
i++, dg = dg->next) {
 +                                      tmp_item.value = i;
 +                                      tmp_item.identifier = tmp_item.name = 
dg->name;
 +                                      RNA_enum_item_add(&item, &totitem, 
&tmp_item);
 +                              }
 +                      }
 +              }
 +      }
 +      else if (STREQ(RNA_property_identifier(prop), 
"layers_shapekey_select_dst")) {
 +              /* TODO */
 +      }
 +      else if (STREQ(RNA_property_identifier(prop), "layers_uv_select_dst")) {
 +              /* Only list destination layers if we have a single source! */
 +              if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_UV] >= 0) {
 +                      Object *ob_dst = CTX_data_active_object(C); /* XXX Is 
this OK? */
 +
 +                      if (ob_dst && ob_dst->data) {
 +                              Mesh *me_dst;
 +                              CustomData *pdata;
 +                              int num_data, i;
 +
 +                              me_dst = ob_dst->data;
 +                              pdata = &me_dst->pdata;
 +                              num_data = CustomData_number_of_layers(pdata, 
CD_MTEXPOLY);
 +
 +                              RNA_enum_item_add_separator(&item, &totitem);
 +
 +                              for (i = 0; i < num_data; i++) {
 +                                      tmp_item.value = i;
 +                                      tmp_item.identifier = tmp_item.name = 
CustomData_get_layer_name(pdata, CD_MTEXPOLY, i);
 +                                      RNA_enum_item_add(&item, &totitem, 
&tmp_item);
 +                              }
 +                      }
 +              }
 +      }
 +      else if (STREQ(RNA_property_identifier(prop), 
"layers_vcol_select_dst")) {
 +              /* Only list destination layers if we have a single source! */
 +              if (dtmd->layers_select_src[DT_MULTILAYER_INDEX_VCOL] >= 0) {
 +                      Object *ob_dst = CTX_data_active_object(C); /* XXX Is 
this OK? */
 +
 +                      if (ob_dst && ob_dst->data) {
 +                              Mesh *me_dst;
 +                              CustomData *ldata;
 +                              int num_data, i;
 +
 +                              me_dst = ob_dst->data;
 +                              ldata = &me_dst->ldata;
 +                              num_data = CustomData_number_of_layers(ldata, 
CD_MLOOPCOL);
 +
 +                              RNA_enum_item_add_separator(&item, &totitem);
 +
 +                              for (i = 0; i < num_data; i++) {
 +                                      tmp_item.value = i;
 +                                      tmp_item.identifier = tmp_item.name = 
CustomData_get_layer_name(ldata, CD_MLOOPCOL, i);
 +                                      RNA_enum_item_add(&item, &totitem, 
&tmp_item);
 +                              }
 +                      }
 +              }
 +      }
 +
 +
 +      RNA_enum_item_end(&item, &totitem);
 +      *r_free = true;
 +
 +      return item;
 +}
 +
 +static EnumPropertyItem *rna_DataTransferModifier_mix_mode_itemf(bContext *C, 
PointerRNA *ptr, PropertyRNA *UNUSED(prop), bool *r_free)
 +{
 +      DataTransferModifierData *dtmd = (DataTransferModifierData *)ptr->data;
 +      EnumPropertyItem *item = NULL;
 +      int totitem = 0;
 +
 +      bool support_advanced_mixing, support_threshold;
 +
 +      if (!C) {  /* needed for docs and i18n tools */
 +              return DT_mix_mode_items;
 +      }
 +
 +      RNA_enum_items_add_value(&item, &totitem, DT_mix_mode_items, 
CDT_MIX_TRANSFER);
 +
 +      BKE_object_data_transfer_get_dttypes_capacity(dtmd->data_types, 
&support_advanced_mixing, &support_threshold);
 +
 +      if (support_advanced_mixing) {
 +              RNA_enum_items_add_value(&item, &totitem, DT_mix_mode_items, 
CDT_MIX_REPLACE_ABOVE_THRESHOLD);
 +              RNA_enum_items_add_value(&item, &totitem, DT_mix_mode_items, 
CDT_MIX_REPLACE_BELOW_THRESHOLD);
 +      }
 +
 +      if (support_advanced_mix

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to