[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