Blender
V3.3
|
#include <BKE_geometry_set.hh>
Public Types | |
using | AttributeForeachCallback = blender::FunctionRef< void(const blender::bke::AttributeIDRef &attribute_id, const blender::bke::AttributeMetaData &meta_data, const GeometryComponent &component)> |
using | ForeachSubGeometryCallback = blender::FunctionRef< void(GeometrySet &geometry_set)> |
Public Member Functions | |
template<typename Component > | |
Component & | get_component_for_write () |
template<typename Component > | |
const Component * | get_component_for_read () const |
template<typename Component > | |
bool | has () const |
template<typename Component > | |
void | remove () |
Friends | |
std::ostream & | operator<< (std::ostream &stream, const GeometrySet &geometry_set) |
A geometry set is a container for multiple kinds of geometry. It does not own geometry directly itself, instead geometry is owned by multiple #GeometryComponents, and the geometry set increases the user count of each component, so they avoid losing the data. This means individual components might be shared between multiple geometries and other code. Shared components are copied automatically when write access is requested.
The components usually do not store data directly, but keep a reference to a data structure defined elsewhere. There is at most one component of each type:
Copying a geometry set is a relatively cheap operation, because it does not copy the referenced geometry components, so GeometrySet can often be passed or moved by value.
Definition at line 116 of file BKE_geometry_set.hh.
using GeometrySet::AttributeForeachCallback = blender::FunctionRef<void(const blender::bke::AttributeIDRef &attribute_id, const blender::bke::AttributeMetaData &meta_data, const GeometryComponent &component)> |
Definition at line 203 of file BKE_geometry_set.hh.
using GeometrySet::ForeachSubGeometryCallback = blender::FunctionRef<void(GeometrySet &geometry_set)> |
Definition at line 221 of file BKE_geometry_set.hh.
|
default |
The methods are defaulted here so that they are not instantiated in every translation unit.
|
default |
|
default |
|
default |
void GeometrySet::add | ( | const GeometryComponent & | component | ) |
Definition at line 194 of file geometry_set.cc.
References BLI_assert, and component().
Referenced by blender::nodes::node_geo_join_geometry_cc::join_component_type(), blender::nodes::node_geo_separate_components_cc::node_geo_exec(), and blender::geometry::realize_instances().
void GeometrySet::attribute_foreach | ( | blender::Span< GeometryComponentType > | component_types, |
bool | include_instances, | ||
AttributeForeachCallback | callback | ||
) | const |
Definition at line 489 of file geometry_set.cc.
References attribute_foreach(), callback, component(), InstancesComponent::foreach_referenced_geometry(), get_component_for_read(), has(), and has_instances().
Referenced by attribute_foreach(), gather_attributes_for_propagation(), and blender::nodes::geometry_nodes_eval_log::GeometryValueLog::GeometryValueLog().
void GeometrySet::clear | ( | ) |
Remove all geometry components from the geometry set.
Definition at line 246 of file geometry_set.cc.
Referenced by compute_geometry(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_instances(), and modifyGeometry().
bool GeometrySet::compute_boundbox_without_instances | ( | blender::float3 * | r_min, |
blender::float3 * | r_max | ||
) | const |
Definition at line 212 of file geometry_set.cc.
References BKE_mesh_wrapper_minmax(), BKE_pointcloud_minmax(), BKE_volume_min_max(), curves, get_curves_for_read(), get_mesh_for_read(), get_pointcloud_for_read(), get_volume_for_read(), max, mesh, min, blender::bounds::min_max(), and blender::bke::image::partial_update::wrap().
Referenced by BKE_object_boundbox_calc_from_evaluated_geometry(), BKE_pointcloud_boundbox_get(), and blender::nodes::node_geo_bounding_box_cc::node_geo_exec().
|
static |
Create a new geometry set that only contains the given curves.
Definition at line 389 of file geometry_set.cc.
References component(), curves, and get_component_for_write().
Referenced by BKE_curves_data_update(), blender::nodes::node_geo_string_to_curves_cc::create_curve_instances(), blender::nodes::node_geo_curve_primitive_arc_cc::node_geo_exec(), blender::nodes::node_geo_curve_primitive_bezier_segment_cc::node_geo_exec(), blender::nodes::node_geo_curve_primitive_circle_cc::node_geo_exec(), blender::nodes::node_geo_curve_primitive_line_cc::node_geo_exec(), blender::nodes::node_geo_curve_primitive_quadratic_bezier_cc::node_geo_exec(), blender::nodes::node_geo_curve_primitive_quadrilateral_cc::node_geo_exec(), blender::nodes::node_geo_curve_primitive_spiral_cc::node_geo_exec(), and blender::nodes::node_geo_curve_primitive_star_cc::node_geo_exec().
|
static |
Create a new geometry set that only contains the given mesh.
Definition at line 358 of file geometry_set.cc.
References component(), get_component_for_write(), and mesh.
Referenced by modifyMesh(), blender::nodes::node_geo_boolean_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_circle_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_cone_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_cube_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_cylinder_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_grid_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_ico_sphere_cc::node_geo_exec(), blender::nodes::node_geo_mesh_primitive_line_cc::node_geo_exec(), and blender::nodes::node_geo_mesh_primitive_uv_sphere_cc::node_geo_exec().
|
static |
Create a new geometry set that only contains the given point cloud.
Definition at line 378 of file geometry_set.cc.
References component(), and get_component_for_write().
Referenced by BKE_pointcloud_data_update(), and blender::nodes::node_geo_points_cc::node_geo_exec().
|
static |
Create a new geometry set that only contains the given volume.
Definition at line 368 of file geometry_set.cc.
References component(), and get_component_for_write().
void GeometrySet::ensure_owns_direct_data | ( | ) |
Make sure that the geometry can be cached. This does not ensure ownership of object/collection instances. This is necessary because sometimes components only have read-only or editing access to their data, which might be freed later if this geometry set outlasts the data.
Definition at line 253 of file geometry_set.cc.
References GeometryComponent::ensure_owns_direct_data(), and get_component_for_write().
Referenced by blender::nodes::node_geo_transfer_attribute_cc::IndexTransferFunction::IndexTransferFunction(), blender::nodes::node_geo_transfer_attribute_cc::NearestInterpolatedTransferFunction::NearestInterpolatedTransferFunction(), blender::nodes::node_geo_transfer_attribute_cc::NearestTransferFunction::NearestTransferFunction(), blender::nodes::node_geo_proximity_cc::node_geo_exec(), and blender::nodes::node_geo_raycast_cc::RaycastFunction::RaycastFunction().
void GeometrySet::gather_attributes_for_propagation | ( | blender::Span< GeometryComponentType > | component_types, |
GeometryComponentType | dst_component_type, | ||
bool | include_instances, | ||
blender::Map< blender::bke::AttributeIDRef, blender::bke::AttributeKind > & | r_attributes | ||
) | const |
Definition at line 517 of file geometry_set.cc.
References blender::Map< Key, Value, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::add_or_modify(), ATTR_DOMAIN_INSTANCE, ATTR_DOMAIN_POINT, blender::bke::attribute_data_type_highest_complexity(), blender::bke::attribute_domain_highest_priority(), attribute_foreach(), component(), GeometryComponent::create(), blender::bke::AttributeMetaData::data_type, blender::bke::AttributeMetaData::domain, GEO_COMPONENT_TYPE_INSTANCES, if(), and blender::bke::AttributeIDRef::should_be_kept().
Referenced by blender::nodes::node_geo_dual_mesh_cc::calc_dual_mesh(), blender::nodes::node_geo_instances_to_points_cc::convert_instances_to_points(), blender::nodes::node_geo_delete_geometry_cc::do_mesh_separation(), blender::nodes::node_geo_duplicate_elements_cc::gather_attributes_without_id(), blender::geometry::gather_generic_curve_attributes_to_propagate(), blender::geometry::gather_generic_mesh_attributes_to_propagate(), blender::geometry::gather_generic_pointcloud_attributes_to_propagate(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::nodes::node_geo_instance_on_points_cc::node_geo_exec(), blender::nodes::node_geo_distribute_points_on_faces_cc::point_distribution_calculate(), and blender::nodes::node_geo_delete_geometry_cc::separate_point_cloud_selection().
blender::Vector< GeometryComponentType > GeometrySet::gather_component_types | ( | bool | include_instances, |
bool | ignore_empty | ||
) | const |
Definition at line 592 of file geometry_set.cc.
References gather_component_types_recursive(), and types.
Referenced by blender::nodes::GeoNodeExecParams::check_input_geometry_set(), and blender::nodes::node_geo_duplicate_elements_cc::duplicate_points().
|
inline |
Definition at line 148 of file BKE_geometry_set.hh.
References BLI_STATIC_ASSERT.
Referenced by attribute_foreach().
const GeometryComponent * GeometrySet::get_component_for_read | ( | GeometryComponentType | component_type | ) | const |
Get the component of the given type. Might return null if the component does not exist yet.
Definition at line 153 of file geometry_set.cc.
Referenced by blender::nodes::node_geo_transfer_attribute_cc::NearestInterpolatedTransferFunction::call(), blender::nodes::node_geo_transfer_attribute_cc::component_is_available(), compute_attributes_to_store(), blender::nodes::node_geo_instances_to_points_cc::convert_instances_to_points(), blender::ed::spreadsheet::data_source_from_geometry(), blender::nodes::node_geo_delete_geometry_cc::delete_curves_selection(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_curves(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_edges(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_instances(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_curve(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_mesh(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_pointcloud(), blender::nodes::node_geo_transfer_attribute_cc::find_source_component(), gather_component_types_recursive(), blender::geometry::gather_curves_to_realize(), blender::geometry::gather_meshes_to_realize(), blender::geometry::gather_pointclouds_to_realize(), blender::bke::geometry_set_collect_recursive(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::bke::crazyspace::get_evaluated_curves_deformation(), make_duplis_geometry_set_impl(), blender::nodes::node_geo_attribute_domain_size_cc::node_geo_exec(), blender::nodes::node_geo_curve_fillet_cc::node_geo_exec(), blender::nodes::node_geo_curve_resample_cc::node_geo_exec(), blender::nodes::node_geo_curve_reverse_cc::node_geo_exec(), blender::nodes::node_geo_curve_set_handle_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_spline_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_subdivide_cc::node_geo_exec(), blender::nodes::node_geo_dual_mesh_cc::node_geo_exec(), blender::nodes::node_geo_edge_paths_to_curves_cc::node_geo_exec(), blender::nodes::node_geo_edge_split_cc::node_geo_exec(), blender::nodes::node_geo_instance_on_points_cc::node_geo_exec(), blender::nodes::node_geo_merge_by_distance_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec(), blender::nodes::node_geo_remove_attribute_cc::node_geo_exec(), blender::nodes::node_geo_separate_components_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_handles_cc::node_geo_exec(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), object_convert_exec(), blender::nodes::node_geo_distribute_points_on_faces_cc::point_distribution_calculate(), blender::nodes::node_geo_delete_geometry_cc::separate_mesh_selection(), and blender::nodes::node_geo_delete_geometry_cc::separate_point_cloud_selection().
|
inline |
Definition at line 138 of file BKE_geometry_set.hh.
References BLI_STATIC_ASSERT.
Referenced by ensure_owns_direct_data().
GeometryComponent & GeometrySet::get_component_for_write | ( | GeometryComponentType | component_type | ) |
This method can only be used when the geometry set is mutable. It returns a mutable geometry component of the given type.
Definition at line 127 of file geometry_set.cc.
References GeometryComponent::create().
Referenced by BKE_curves_data_update(), create_with_curves(), create_with_mesh(), create_with_pointcloud(), create_with_volume(), blender::nodes::node_geo_delete_geometry_cc::delete_curves_selection(), blender::nodes::node_geo_delete_geometry_cc::delete_selected_instances(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_instances(), InstancesComponent::ensure_geometry_instances(), blender::geometry::execute_realize_curve_tasks(), blender::geometry::execute_realize_mesh_tasks(), blender::geometry::execute_realize_pointcloud_tasks(), gather_mutable_geometry_sets(), blender::nodes::node_geo_curve_trim_cc::geometry_set_curve_trim(), blender::nodes::node_geo_mesh_subdivide_cc::geometry_set_mesh_subdivide(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::nodes::node_geo_join_geometry_cc::join_component_type(), mesh_build_data(), modifier_apply_obdata(), modifier_modify_mesh_and_geometry_set(), modifyMesh(), blender::nodes::node_geo_attribute_capture_cc::node_geo_exec(), blender::nodes::node_geo_collection_info_cc::node_geo_exec(), blender::nodes::node_geo_curve_set_handle_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_points_cc::node_geo_exec(), blender::nodes::node_geo_extrude_mesh_cc::node_geo_exec(), blender::nodes::node_geo_flip_faces_cc::node_geo_exec(), blender::nodes::node_geo_instance_on_points_cc::node_geo_exec(), blender::nodes::node_geo_object_info_cc::node_geo_exec(), blender::nodes::node_geo_points_cc::node_geo_exec(), blender::nodes::node_geo_remove_attribute_cc::node_geo_exec(), blender::nodes::node_geo_rotate_instances_cc::node_geo_exec(), blender::nodes::node_geo_scale_elements_cc::node_geo_exec(), blender::nodes::node_geo_scale_instances_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_handles_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_radius_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_tilt_cc::node_geo_exec(), blender::nodes::node_geo_set_id_cc::node_geo_exec(), blender::nodes::node_geo_set_material_index_cc::node_geo_exec(), blender::nodes::node_geo_set_point_radius_cc::node_geo_exec(), blender::nodes::node_geo_set_position_cc::node_geo_exec(), blender::nodes::node_geo_set_shade_smooth_cc::node_geo_exec(), blender::nodes::node_geo_set_spline_cyclic_cc::node_geo_exec(), blender::nodes::node_geo_set_spline_resolution_cc::node_geo_exec(), blender::nodes::node_geo_store_named_attribute_cc::node_geo_exec(), blender::nodes::node_geo_string_to_curves_cc::node_geo_exec(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), blender::nodes::node_geo_translate_instances_cc::node_geo_exec(), blender::nodes::node_geo_triangulate_cc::node_geo_exec(), blender::bke::object_get_evaluated_geometry_set(), blender::nodes::node_geo_distribute_points_on_faces_cc::point_distribution_calculate(), GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(), blender::ed::spreadsheet::spreadsheet_get_display_geometry_set(), store_computed_output_attributes(), take_pointcloud_ownership_from_geometry_set(), take_volume_ownership_from_geometry_set(), blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
Vector< const GeometryComponent * > GeometrySet::get_components_for_read | ( | ) | const |
Get all geometry components in this geometry set for read-only access.
Definition at line 201 of file geometry_set.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append().
Referenced by BKE_object_has_geometry_set_instances(), gather_component_types_recursive(), blender::geometry::gather_realize_tasks_recursive(), and blender::nodes::node_geo_attribute_statistic_cc::node_geo_exec().
const blender::bke::CurvesEditHints * GeometrySet::get_curve_edit_hints_for_read | ( | ) | const |
Returns read-only curve edit hints or null.
Definition at line 309 of file geometry_set.cc.
References component().
Referenced by blender::nodes::GeoNodeExecParams::check_output_geometry_set().
blender::bke::CurvesEditHints * GeometrySet::get_curve_edit_hints_for_write | ( | ) |
Returns mutable curve edit hints or null.
Definition at line 479 of file geometry_set.cc.
References component().
Referenced by blender::nodes::node_geo_deform_curves_on_surface_cc::node_geo_exec(), blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
const Curves * GeometrySet::get_curves_for_read | ( | ) | const |
Returns a read-only curves data-block or null.
Definition at line 303 of file geometry_set.cc.
References component().
Referenced by BKE_curves_data_update(), BKE_displist_make_curveTypes(), blender::nodes::node_geo_curve_sample_cc::SampleCurveFunction::call(), compute_boundbox_without_instances(), blender::nodes::node_geo_curve_fill_cc::curve_fill_calculate(), blender::geometry::gather_curves_to_realize(), blender::nodes::node_geo_curve_to_mesh_cc::geometry_set_curve_to_mesh(), blender::nodes::node_geo_curve_trim_cc::geometry_set_curve_trim(), blender::nodes::node_geo_curve_length_cc::node_geo_exec(), blender::nodes::node_geo_curve_sample_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_points_cc::node_geo_exec(), GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(), and replace_curves().
Curves * GeometrySet::get_curves_for_write | ( | ) |
Returns a mutable curves data-block or null. No ownership is transferred.
Definition at line 473 of file geometry_set.cc.
References component().
Referenced by modifier_apply_obdata(), blender::nodes::node_geo_curve_reverse_cc::node_geo_exec(), blender::nodes::node_geo_curve_spline_type_cc::node_geo_exec(), blender::nodes::node_geo_deform_curves_on_surface_cc::node_geo_exec(), blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
const Mesh * GeometrySet::get_mesh_for_read | ( | ) | const |
Returns a read-only mesh or null.
Definition at line 279 of file geometry_set.cc.
References component().
Referenced by blender::ed::spreadsheet::GeometryDataSource::apply_selection_filter(), BKE_object_get_evaluated_mesh_no_subsurf(), blender::nodes::node_geo_proximity_cc::ProximityFunction::call(), blender::nodes::node_geo_raycast_cc::RaycastFunction::call(), blender::nodes::node_geo_transfer_attribute_cc::NearestTransferFunction::call(), compute_boundbox_without_instances(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_mesh(), blender::geometry::gather_meshes_to_realize(), blender::nodes::node_geo_mesh_subdivide_cc::geometry_set_mesh_subdivide(), make_duplis_geometry_set_impl(), modifyGeometry(), blender::nodes::node_geo_boolean_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec(), blender::nodes::node_geo_raycast_cc::node_geo_exec(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), blender::nodes::node_geo_transfer_attribute_cc::node_geo_exec(), blender::nodes::node_geo_triangulate_cc::node_geo_exec(), and replace_mesh().
Mesh * GeometrySet::get_mesh_for_write | ( | ) |
Returns a mutable mesh or null. No ownership is transferred.
Definition at line 455 of file geometry_set.cc.
References component().
Referenced by curve_calc_modifiers_post(), modifyGeometry(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
const PointCloud * GeometrySet::get_pointcloud_for_read | ( | ) | const |
Returns a read-only point cloud of null.
Definition at line 291 of file geometry_set.cc.
References component().
Referenced by blender::nodes::node_geo_proximity_cc::ProximityFunction::call(), blender::nodes::node_geo_transfer_attribute_cc::NearestTransferFunction::call(), compute_boundbox_without_instances(), blender::geometry::gather_pointclouds_to_realize(), make_duplis_geometry_set_impl(), and replace_pointcloud().
PointCloud * GeometrySet::get_pointcloud_for_write | ( | ) |
Returns a mutable point cloud or null. No ownership is transferred.
Definition at line 461 of file geometry_set.cc.
References component().
Referenced by blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
const Volume * GeometrySet::get_volume_for_read | ( | ) | const |
Returns a read-only volume or null.
Definition at line 297 of file geometry_set.cc.
References component().
Referenced by compute_boundbox_without_instances(), make_duplis_geometry_set_impl(), and replace_volume().
Volume * GeometrySet::get_volume_for_write | ( | ) |
Returns a mutable volume or null. No ownership is transferred.
Definition at line 467 of file geometry_set.cc.
References component().
Referenced by modifyGeometrySet(), blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
|
inline |
Definition at line 155 of file BKE_geometry_set.hh.
References BLI_STATIC_ASSERT.
Referenced by attribute_foreach().
bool GeometrySet::has | ( | const GeometryComponentType | component_type | ) | const |
Definition at line 159 of file geometry_set.cc.
Referenced by blender::nodes::node_geo_transfer_attribute_cc::component_is_available(), compute_attributes_to_store(), blender::ed::spreadsheet::data_source_from_geometry(), modifier_modify_mesh_and_geometry_set(), blender::nodes::node_geo_attribute_capture_cc::node_geo_exec(), blender::nodes::node_geo_instance_on_points_cc::node_geo_exec(), blender::nodes::node_geo_remove_attribute_cc::node_geo_exec(), blender::nodes::node_geo_separate_components_cc::node_geo_exec(), blender::nodes::node_geo_set_id_cc::node_geo_exec(), blender::nodes::node_geo_set_position_cc::node_geo_exec(), blender::nodes::node_geo_store_named_attribute_cc::node_geo_exec(), GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(), blender::geometry::remove_id_attribute_from_instances(), take_pointcloud_ownership_from_geometry_set(), and take_volume_ownership_from_geometry_set().
bool GeometrySet::has_curves | ( | ) | const |
Returns true when the geometry set has a curves component that has a curves data-block.
Definition at line 334 of file geometry_set.cc.
References component().
Referenced by BKE_displist_make_curveTypes(), blender::nodes::node_geo_curve_sample_cc::SampleCurveFunction::call(), blender::nodes::node_geo_curve_fill_cc::curve_fill_calculate(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_curves(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points(), blender::nodes::node_geo_curve_trim_cc::geometry_set_curve_trim(), is_empty(), modifier_apply_obdata(), blender::nodes::node_geo_curve_fillet_cc::node_geo_exec(), blender::nodes::node_geo_curve_length_cc::node_geo_exec(), blender::nodes::node_geo_curve_reverse_cc::node_geo_exec(), blender::nodes::node_geo_curve_sample_cc::node_geo_exec(), blender::nodes::node_geo_curve_set_handle_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_spline_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_subdivide_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_mesh_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_points_cc::node_geo_exec(), blender::nodes::node_geo_deform_curves_on_surface_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_handles_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_radius_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_tilt_cc::node_geo_exec(), blender::nodes::node_geo_set_spline_cyclic_cc::node_geo_exec(), blender::nodes::node_geo_transfer_attribute_cc::node_geo_exec(), object_convert_exec(), and blender::nodes::separate_geometry().
bool GeometrySet::has_instances | ( | ) | const |
Returns true when the geometry set has an instances component that has at least one instance.
Definition at line 322 of file geometry_set.cc.
References component().
Referenced by attribute_foreach(), blender::nodes::GeoNodeExecParams::check_input_geometry_set(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_instances(), InstancesComponent::ensure_geometry_instances(), gather_mutable_geometry_sets(), blender::bke::geometry_set_collect_recursive(), is_empty(), blender::nodes::node_geo_attribute_capture_cc::node_geo_exec(), blender::nodes::node_geo_instances_to_points_cc::node_geo_exec(), blender::nodes::node_geo_rotate_instances_cc::node_geo_exec(), blender::nodes::node_geo_scale_instances_cc::node_geo_exec(), blender::nodes::node_geo_store_named_attribute_cc::node_geo_exec(), blender::nodes::node_geo_translate_instances_cc::node_geo_exec(), blender::geometry::realize_instances(), blender::nodes::separate_geometry(), blender::nodes::transform_geometry_set(), and blender::nodes::translate_geometry_set().
bool GeometrySet::has_mesh | ( | ) | const |
Returns true when the geometry set has a mesh component that has a mesh.
Definition at line 285 of file geometry_set.cc.
References component().
Referenced by blender::nodes::node_geo_proximity_cc::ProximityFunction::call(), blender::nodes::node_geo_raycast_cc::RaycastFunction::call(), curve_calc_modifiers_post(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_edges(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points(), evaluate_surface_object(), blender::nodes::node_geo_mesh_subdivide_cc::geometry_set_mesh_subdivide(), is_empty(), modifyGeometry(), blender::nodes::node_geo_dual_mesh_cc::node_geo_exec(), blender::nodes::node_geo_edge_paths_to_curves_cc::node_geo_exec(), blender::nodes::node_geo_edge_split_cc::node_geo_exec(), blender::nodes::node_geo_extrude_mesh_cc::node_geo_exec(), blender::nodes::node_geo_flip_faces_cc::node_geo_exec(), blender::nodes::node_geo_merge_by_distance_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_volume_cc::node_geo_exec(), blender::nodes::node_geo_proximity_cc::node_geo_exec(), blender::nodes::node_geo_raycast_cc::node_geo_exec(), blender::nodes::node_geo_scale_elements_cc::node_geo_exec(), blender::nodes::node_geo_set_material_index_cc::node_geo_exec(), blender::nodes::node_geo_set_shade_smooth_cc::node_geo_exec(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), blender::nodes::node_geo_transfer_attribute_cc::node_geo_exec(), blender::nodes::node_geo_triangulate_cc::node_geo_exec(), blender::bke::object_get_evaluated_geometry_set(), blender::nodes::node_geo_distribute_points_on_faces_cc::point_distribution_calculate(), and blender::nodes::separate_geometry().
bool GeometrySet::has_pointcloud | ( | ) | const |
Returns true when the geometry set has a point cloud component that has a point cloud.
Definition at line 316 of file geometry_set.cc.
References component().
Referenced by blender::nodes::node_geo_proximity_cc::ProximityFunction::call(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points(), is_empty(), blender::nodes::node_geo_merge_by_distance_cc::node_geo_exec(), blender::nodes::node_geo_proximity_cc::node_geo_exec(), blender::nodes::node_geo_set_point_radius_cc::node_geo_exec(), blender::nodes::node_geo_transfer_attribute_cc::node_geo_exec(), and blender::nodes::separate_geometry().
bool GeometrySet::has_realized_data | ( | ) | const |
Returns true when the geometry set has any data that is not an instance.
Definition at line 340 of file geometry_set.cc.
References GEO_COMPONENT_TYPE_INSTANCES.
Referenced by blender::nodes::GeoNodeExecParams::check_input_geometry_set(), and blender::nodes::separate_geometry().
bool GeometrySet::has_volume | ( | ) | const |
Returns true when the geometry set has a volume component that has a volume.
Definition at line 328 of file geometry_set.cc.
References component().
Referenced by is_empty().
bool GeometrySet::is_empty | ( | ) | const |
Return true if the geometry set has any component that isn't empty.
Definition at line 352 of file geometry_set.cc.
References has_curves(), has_instances(), has_mesh(), has_pointcloud(), and has_volume().
Referenced by blender::nodes::node_geo_duplicate_elements_cc::node_geo_exec(), blender::nodes::node_geo_raycast_cc::node_geo_exec(), and blender::nodes::node_geo_transfer_attribute_cc::node_geo_exec().
void GeometrySet::keep_only | ( | const blender::Span< GeometryComponentType > | component_types | ) |
Remove all geometry components with types that are not in the provided list.
Definition at line 169 of file geometry_set.cc.
References blender::Span< T >::contains().
Referenced by keep_only_during_modify(), blender::nodes::node_geo_edge_paths_to_curves_cc::node_geo_exec(), and blender::nodes::node_geo_instances_to_points_cc::node_geo_exec().
void GeometrySet::keep_only_during_modify | ( | const blender::Span< GeometryComponentType > | component_types | ) |
Keeps the provided geometry types, but also instances and edit data. Instances must not be removed while using modify_geometry_sets.
Definition at line 180 of file geometry_set.cc.
References blender::Vector< T, InlineBufferCapacity, Allocator >::append_non_duplicates(), GEO_COMPONENT_TYPE_EDIT, GEO_COMPONENT_TYPE_INSTANCES, and keep_only().
Referenced by blender::nodes::node_geo_duplicate_elements_cc::duplicate_curves(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::nodes::node_geo_bounding_box_cc::node_geo_exec(), blender::nodes::node_geo_convex_hull_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_mesh_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_points_cc::node_geo_exec(), blender::nodes::node_geo_distribute_points_on_faces_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec(), blender::nodes::node_geo_volume_to_mesh_cc::node_geo_exec(), and remove_geometry_during_modify().
void GeometrySet::modify_geometry_sets | ( | ForeachSubGeometryCallback | callback | ) |
Modify every (recursive) instance separately. This is often more efficient than realizing all instances just to change the same thing on all of them.
Definition at line 620 of file geometry_set.cc.
References callback, blender::Vector< T, InlineBufferCapacity, Allocator >::first(), gather_mutable_geometry_sets(), blender::threading::parallel_for_each(), and blender::Vector< T, InlineBufferCapacity, Allocator >::size().
Referenced by blender::nodes::node_geo_attribute_capture_cc::node_geo_exec(), blender::nodes::node_geo_bounding_box_cc::node_geo_exec(), blender::nodes::node_geo_convex_hull_cc::node_geo_exec(), blender::nodes::node_geo_curve_fill_cc::node_geo_exec(), blender::nodes::node_geo_curve_fillet_cc::node_geo_exec(), blender::nodes::node_geo_curve_resample_cc::node_geo_exec(), blender::nodes::node_geo_curve_reverse_cc::node_geo_exec(), blender::nodes::node_geo_curve_set_handle_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_spline_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_subdivide_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_mesh_cc::node_geo_exec(), blender::nodes::node_geo_delete_geometry_cc::node_geo_exec(), blender::nodes::node_geo_distribute_points_on_faces_cc::node_geo_exec(), blender::nodes::node_geo_dual_mesh_cc::node_geo_exec(), blender::nodes::node_geo_duplicate_elements_cc::node_geo_exec(), blender::nodes::node_geo_edge_paths_to_curves_cc::node_geo_exec(), blender::nodes::node_geo_edge_split_cc::node_geo_exec(), blender::nodes::node_geo_extrude_mesh_cc::node_geo_exec(), blender::nodes::node_geo_flip_faces_cc::node_geo_exec(), blender::nodes::node_geo_instance_on_points_cc::node_geo_exec(), blender::nodes::node_geo_material_replace_cc::node_geo_exec(), blender::nodes::node_geo_mesh_subdivide_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_points_cc::node_geo_exec(), blender::nodes::node_geo_mesh_to_volume_cc::node_geo_exec(), blender::nodes::node_geo_points_to_vertices_cc::node_geo_exec(), blender::nodes::node_geo_points_to_volume_cc::node_geo_exec(), blender::nodes::node_geo_remove_attribute_cc::node_geo_exec(), blender::nodes::node_geo_scale_elements_cc::node_geo_exec(), blender::nodes::node_geo_separate_geometry_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_radius_cc::node_geo_exec(), blender::nodes::node_geo_set_curve_tilt_cc::node_geo_exec(), blender::nodes::node_geo_set_material_index_cc::node_geo_exec(), blender::nodes::node_geo_set_point_radius_cc::node_geo_exec(), blender::nodes::node_geo_set_shade_smooth_cc::node_geo_exec(), blender::nodes::node_geo_set_spline_cyclic_cc::node_geo_exec(), blender::nodes::node_geo_set_spline_resolution_cc::node_geo_exec(), blender::nodes::node_geo_store_named_attribute_cc::node_geo_exec(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), blender::nodes::node_geo_triangulate_cc::node_geo_exec(), blender::nodes::node_geo_volume_to_mesh_cc::node_geo_exec(), and blender::geometry::remove_id_attribute_from_instances().
|
default |
|
default |
bool GeometrySet::owns_direct_data | ( | ) | const |
Definition at line 267 of file geometry_set.cc.
|
inline |
Definition at line 162 of file BKE_geometry_set.hh.
References BLI_STATIC_ASSERT.
void GeometrySet::remove | ( | const GeometryComponentType | component_type | ) |
Definition at line 164 of file geometry_set.cc.
Referenced by blender::nodes::node_geo_delete_geometry_cc::delete_curves_selection(), blender::nodes::node_geo_delete_geometry_cc::delete_selected_instances(), take_pointcloud_ownership_from_geometry_set(), and take_volume_ownership_from_geometry_set().
void GeometrySet::remove_geometry_during_modify | ( | ) |
Definition at line 189 of file geometry_set.cc.
References keep_only_during_modify().
Referenced by blender::nodes::node_geo_duplicate_elements_cc::duplicate_curves(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_edges(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::nodes::node_geo_bounding_box_cc::node_geo_exec(), blender::nodes::node_geo_curve_to_points_cc::node_geo_exec(), blender::nodes::node_geo_instance_on_points_cc::node_geo_exec(), and blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec().
void GeometrySet::replace_curves | ( | Curves * | curves, |
GeometryOwnershipType | ownership = GeometryOwnershipType::Owned |
||
) |
Clear the existing curves data-block and replace it with the given one.
Definition at line 413 of file geometry_set.cc.
References component(), curves, and get_curves_for_read().
Referenced by curve_calc_modifiers_post(), blender::nodes::node_geo_curve_fill_cc::curve_fill_calculate(), blender::nodes::node_geo_curve_fillet_cc::node_geo_exec(), blender::nodes::node_geo_curve_resample_cc::node_geo_exec(), blender::nodes::node_geo_curve_spline_type_cc::node_geo_exec(), blender::nodes::node_geo_curve_subdivide_cc::node_geo_exec(), blender::nodes::node_geo_edge_paths_to_curves_cc::node_geo_exec(), and blender::nodes::node_geo_mesh_to_curve_cc::node_geo_exec().
void GeometrySet::replace_mesh | ( | Mesh * | mesh, |
GeometryOwnershipType | ownership = GeometryOwnershipType::Owned |
||
) |
Clear the existing mesh and replace it with the given one.
Definition at line 399 of file geometry_set.cc.
References component(), get_mesh_for_read(), and mesh.
Referenced by blender::bke::add_final_mesh_as_geometry_component(), curve_calc_modifiers_post(), blender::nodes::node_geo_curve_fill_cc::curve_fill_calculate(), blender::nodes::node_geo_delete_geometry_cc::do_mesh_separation(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_faces(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_mesh(), evaluate_surface_object(), blender::nodes::node_geo_curve_to_mesh_cc::geometry_set_curve_to_mesh(), blender::nodes::node_geo_points_to_vertices_cc::geometry_set_points_to_vertices(), blender::nodes::node_geo_bounding_box_cc::node_geo_exec(), blender::nodes::node_geo_convex_hull_cc::node_geo_exec(), blender::nodes::node_geo_edge_split_cc::node_geo_exec(), blender::nodes::node_geo_merge_by_distance_cc::node_geo_exec(), blender::nodes::node_geo_subdivision_surface_cc::node_geo_exec(), blender::nodes::node_geo_triangulate_cc::node_geo_exec(), and blender::nodes::node_geo_volume_to_mesh_cc::node_geo_exec().
void GeometrySet::replace_pointcloud | ( | PointCloud * | pointcloud, |
GeometryOwnershipType | ownership = GeometryOwnershipType::Owned |
||
) |
Clear the existing point cloud and replace with the given one.
Definition at line 427 of file geometry_set.cc.
References component(), and get_pointcloud_for_read().
Referenced by blender::nodes::node_geo_instances_to_points_cc::convert_instances_to_points(), blender::nodes::node_geo_duplicate_elements_cc::duplicate_points_pointcloud(), blender::nodes::node_geo_mesh_to_points_cc::geometry_set_mesh_to_points(), blender::nodes::node_geo_curve_to_points_cc::node_geo_exec(), blender::nodes::node_geo_merge_by_distance_cc::node_geo_exec(), blender::nodes::node_geo_distribute_points_on_faces_cc::point_distribution_calculate(), and blender::nodes::node_geo_delete_geometry_cc::separate_point_cloud_selection().
void GeometrySet::replace_volume | ( | Volume * | volume, |
GeometryOwnershipType | ownership = GeometryOwnershipType::Owned |
||
) |
Clear the existing volume and replace with the given one.
Definition at line 441 of file geometry_set.cc.
References component(), and get_volume_for_read().
Referenced by BKE_volume_data_update(), and modifyGeometrySet().
|
friend |
Definition at line 239 of file geometry_set.cc.