diff options
Diffstat (limited to 'source/blender/nodes/geometry/node_geometry_util.hh')
-rw-r--r-- | source/blender/nodes/geometry/node_geometry_util.hh | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/source/blender/nodes/geometry/node_geometry_util.hh b/source/blender/nodes/geometry/node_geometry_util.hh index efb7efaf1cc..adcf47f57fe 100644 --- a/source/blender/nodes/geometry/node_geometry_util.hh +++ b/source/blender/nodes/geometry/node_geometry_util.hh @@ -20,8 +20,12 @@ #include "NOD_socket_declarations.hh" #include "NOD_socket_declarations_geometry.hh" +#include "RNA_access.h" + #include "node_util.h" +struct BVHTreeFromMesh; + void geo_node_type_base(struct bNodeType *ntype, int type, const char *name, short nclass); bool geo_node_poll_default(struct bNodeType *ntype, struct bNodeTree *ntree, @@ -34,7 +38,8 @@ void transform_mesh(Mesh &mesh, const float3 rotation, const float3 scale); -void transform_geometry_set(GeometrySet &geometry, +void transform_geometry_set(GeoNodeExecParams ¶ms, + GeometrySet &geometry, const float4x4 &transform, const Depsgraph &depsgraph); @@ -75,7 +80,34 @@ void separate_geometry(GeometrySet &geometry_set, const Field<bool> &selection_field, bool &r_is_error); +void get_closest_in_bvhtree(BVHTreeFromMesh &tree_data, + const VArray<float3> &positions, + const IndexMask mask, + const MutableSpan<int> r_indices, + const MutableSpan<float> r_distances_sq, + const MutableSpan<float3> r_positions); + +int apply_offset_in_cyclic_range(IndexRange range, int start_index, int offset); + std::optional<eCustomDataType> node_data_type_to_custom_data_type(eNodeSocketDatatype type); std::optional<eCustomDataType> node_socket_to_custom_data_type(const bNodeSocket &socket); +class FieldAtIndexInput final : public bke::GeometryFieldInput { + private: + Field<int> index_field_; + GField value_field_; + eAttrDomain value_field_domain_; + + public: + FieldAtIndexInput(Field<int> index_field, GField value_field, eAttrDomain value_field_domain); + + GVArray get_varray_for_context(const bke::GeometryFieldContext &context, + const IndexMask mask) const final; + + std::optional<eAttrDomain> preferred_domain(const GeometryComponent & /*component*/) const final + { + return value_field_domain_; + } +}; + } // namespace blender::nodes |