diff options
Diffstat (limited to 'source/blender/geometry/GEO_realize_instances.hh')
-rw-r--r-- | source/blender/geometry/GEO_realize_instances.hh | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/source/blender/geometry/GEO_realize_instances.hh b/source/blender/geometry/GEO_realize_instances.hh new file mode 100644 index 00000000000..ac16196667d --- /dev/null +++ b/source/blender/geometry/GEO_realize_instances.hh @@ -0,0 +1,52 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#pragma once + +#include "BKE_geometry_set.hh" + +namespace blender::geometry { + +struct RealizeInstancesOptions { + /** + * The default is to generate new ids for every element (when there was any id attribute in the + * input). This avoids having a geometry that contains the same id many times. + * When this is `true` the ids on the original geometries are kept unchanged and ids on instances + * are ignored. Ids are zero initialized when the original geometry did not have an id. + */ + bool keep_original_ids = false; + /** + * When `true` the output geometry will contain all the generic attributes that existed on + * instances. Otherwise, instance attributes are ignored. + */ + bool realize_instance_attributes = true; +}; + +/** + * Join all instances into a single geometry component for each geometry type. For example, all + * mesh instances (including the already realized mesh) are joined into a single mesh. The output + * geometry set does not contain any instances. If the input did not contain any instances, it is + * returned directly. + * + * The `id` attribute has special handling. If there is an id attribute on any component, the + * output will contain an `id` attribute as well. The output id is generated by mixing/hashing ids + * of instances and of the instanced geometry data. + */ +GeometrySet realize_instances(GeometrySet geometry_set, const RealizeInstancesOptions &options); + +GeometrySet realize_instances_legacy(GeometrySet geometry_set); + +} // namespace blender::geometry |