[Bf-blender-cvs] [7585f55a4ca] geometry-nodes: Merge branch 'master' into geometry-nodes

Jacques Lucke noreply at git.blender.org
Tue Nov 24 18:05:40 CET 2020


Commit: 7585f55a4ca900e87fd1de307e1e052a3afd59b6
Author: Jacques Lucke
Date:   Tue Nov 24 18:05:31 2020 +0100
Branches: geometry-nodes
https://developer.blender.org/rB7585f55a4ca900e87fd1de307e1e052a3afd59b6

Merge branch 'master' into geometry-nodes

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



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

diff --cc source/blender/depsgraph/intern/depsgraph_query_iter.cc
index 98986aae388,dd5c998466b..68d7fbee4f2
--- a/source/blender/depsgraph/intern/depsgraph_query_iter.cc
+++ b/source/blender/depsgraph/intern/depsgraph_query_iter.cc
@@@ -122,82 -121,9 +122,84 @@@ bool deg_object_hide_original(eEvaluati
    return false;
  }
  
 -bool deg_objects_dupli_iterator_next(BLI_Iterator *iter)
 +void deg_iterator_components_init(DEGObjectIterData *data, Object *object)
 +{
 +  data->geometry_component_owner = object;
 +  data->geometry_component_id = 0;
 +}
 +
 +/* Returns false when iterator is exhausted. */
 +bool deg_iterator_components_step(BLI_Iterator *iter)
  {
    DEGObjectIterData *data = (DEGObjectIterData *)iter->data;
 +  if (data->geometry_component_owner == nullptr) {
 +    return false;
 +  }
 +
 +  if (data->geometry_component_owner->type != OB_POINTCLOUD) {
 +    /* Only point clouds support multiple geometry components currently. */
 +    iter->current = data->geometry_component_owner;
 +    data->geometry_component_owner = nullptr;
 +    return true;
 +  }
 +
 +  GeometrySet *geometry_set = data->geometry_component_owner->runtime.geometry_set_eval;
 +  if (geometry_set == nullptr) {
 +    data->geometry_component_owner = nullptr;
 +    return false;
 +  }
 +
 +  if (data->geometry_component_id == 0) {
 +    data->geometry_component_id++;
 +
 +    /* The mesh component. */
 +    const Mesh *mesh = geometry_set->get_mesh_for_read();
 +    if (mesh != nullptr) {
 +      Object *temp_object = &data->temp_geometry_component_object;
 +      *temp_object = *data->geometry_component_owner;
 +      temp_object->type = OB_MESH;
 +      temp_object->data = (void *)mesh;
++      temp_object->runtime.select_id = data->geometry_component_owner->runtime.select_id;
 +      iter->current = temp_object;
 +      return true;
 +    }
 +  }
 +  if (data->geometry_component_id == 1) {
 +    data->geometry_component_id++;
 +
 +    /* The pointcloud component. */
 +    const PointCloud *pointcloud = geometry_set->get_pointcloud_for_read();
 +    if (pointcloud != nullptr) {
 +      Object *temp_object = &data->temp_geometry_component_object;
 +      *temp_object = *data->geometry_component_owner;
 +      temp_object->type = OB_POINTCLOUD;
 +      temp_object->data = (void *)pointcloud;
++      temp_object->runtime.select_id = data->geometry_component_owner->runtime.select_id;
 +      iter->current = temp_object;
 +      return true;
 +    }
 +  }
 +  data->geometry_component_owner = nullptr;
 +  return false;
 +}
 +
 +void deg_iterator_duplis_init(DEGObjectIterData *data, Object *object)
 +{
 +  if ((data->flag & DEG_ITER_OBJECT_FLAG_DUPLI) &&
 +      ((object->transflag & OB_DUPLI) || object->runtime.geometry_set_eval != nullptr)) {
 +    data->dupli_parent = object;
 +    data->dupli_list = object_duplilist(data->graph, data->scene, object);
 +    data->dupli_object_next = (DupliObject *)data->dupli_list->first;
 +  }
 +}
 +
 +/* Returns false when iterator is exhausted. */
 +bool deg_iterator_duplis_step(DEGObjectIterData *data)
 +{
 +  if (data->dupli_list == nullptr) {
 +    return false;
 +  }
 +
    while (data->dupli_object_next != nullptr) {
      DupliObject *dob = data->dupli_object_next;
      Object *obd = dob->ob;



More information about the Bf-blender-cvs mailing list