66 std::optional<Library *> ,
89 curves->geometry.wrap().~CurvesGeometry();
100 for (
int i = 0; i < curves->totcol; i++) {
114 curves->geometry.wrap().blend_write_prepare();
121 curves->geometry.wrap().blend_write(*writer, curves->id, write_data);
133 curves->
geometry.wrap().blend_read(*reader);
185 return reinterpret_cast<Curves *
>(
211 for (; md; md = md->
next) {
235 GeometrySet geometry_set = GeometrySet::from_curves(curves, GeometryOwnershipType::ReadOnly);
248 if (curves_eval ==
nullptr) {
249 curves_eval = curves_new_nomain(0, 0);
255 object->runtime->geometry_set_eval =
new GeometrySet(std::move(geometry_set));
265 if (curves->batch_cache) {
272 if (curves->batch_cache) {
285 curves.
resize(points_num, curves_num);
294 curves.fill_curve_types(type);
301 curves_id->
geometry.wrap() = std::move(curves);
326 if (surface_ob !=
nullptr) {
374 data.data = new_sharing_info->data.data();
void BKE_animdata_free(ID *id, bool do_id_user)
Low-level operations for curves.
@ IDTYPE_FLAGS_APPEND_IS_REUSABLE
ID * BKE_id_copy_ex(Main *bmain, const ID *id, ID **new_id_p, int flag)
void * BKE_id_new(Main *bmain, short type, const char *name)
void * BKE_id_new_nomain(short type, const char *name)
void BKE_id_blend_write(BlendWriter *writer, ID *id)
#define BKE_LIB_FOREACHID_PROCESS_IDSUPER(data_, id_super_, cb_flag_)
void BKE_modifiers_clear_errors(Object *ob)
bool BKE_modifier_is_enabled(const Scene *scene, ModifierData *md, int required_mode)
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
ModifierData * BKE_modifiers_get_virtual_modifierlist(const Object *ob, VirtualModifierData *data)
General operations, lookup, etc. for blender objects.
bool BKE_object_is_in_editmode(const Object *ob)
void BKE_object_eval_assign_data(Object *object, ID *data, bool is_owned)
void BKE_object_free_derived_caches(Object *ob)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define MEMCMP_STRUCT_AFTER_IS_ZERO(struct_var, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
#define BLO_write_id_struct(writer, struct_name, id_address, id)
void BLO_read_string(BlendDataReader *reader, char **ptr_p)
void BLO_write_string(BlendWriter *writer, const char *data_ptr)
void BLO_read_pointer_array(BlendDataReader *reader, int array_size, void **ptr_p)
void BLO_write_pointer_array(BlendWriter *writer, uint num, const void *data_ptr)
#define BLT_I18NCONTEXT_ID_CURVES
eEvaluationMode DEG_get_mode(const Depsgraph *graph)
Object * DEG_get_original_object(Object *object)
#define DNA_struct_default_get(struct_name)
Object is a sort of wrapper for general info.
Read Guarded memory(de)allocation.
void BKE_curves_data_update(Depsgraph *depsgraph, Scene *scene, Object *object)
void BKE_curves_batch_cache_dirty_tag(Curves *curves, int mode)
void * BKE_curves_add(Main *bmain, const char *name)
static void curves_copy_data(Main *, std::optional< Library * >, ID *id_dst, const ID *id_src, const int)
bool BKE_curves_attribute_required(const Curves *, const char *name)
static void curves_blend_read_data(BlendDataReader *reader, ID *id)
static const char * ATTR_POSITION
static void curves_init_data(ID *id)
static void curves_foreach_id(ID *id, LibraryForeachIDData *data)
void(* BKE_curves_batch_cache_free_cb)(Curves *curves)
void BKE_curves_batch_cache_free(Curves *curves)
Curves * BKE_curves_copy_for_eval(const Curves *curves_src)
static void curves_evaluate_modifiers(Depsgraph *depsgraph, Scene *scene, Object *object, blender::bke::GeometrySet &geometry_set)
static void curves_blend_write(BlendWriter *writer, ID *id, const void *id_address)
void(* BKE_curves_batch_cache_dirty_tag_cb)(Curves *curves, int mode)
static void curves_free_data(ID *id)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
ImplicitSharingPtr sharing_info
constexpr void copy_from(Span< T > values) const
constexpr T & last(const int64_t n=0) const
const Curves & curves_id_orig
std::optional< MutableSpan< float3 > > positions_for_write()
ImplicitSharingPtrAndData positions_data
std::optional< Span< float3 > > positions() const
std::optional< Array< float3x3 > > deform_mats
void resize(int points_num, int curves_num)
MutableSpan< int > offsets_for_write()
std::unique_ptr< CurvesEditHints > curves_edit_hints_
int add_with_destination(GField field, GVMutableArray dst)
const Depsgraph * depsgraph
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
void *(* MEM_dupallocN)(const void *vmemh)
void curves_copy_parameters(const Curves &src, Curves &dst)
Curves * curves_new_nomain_single(int points_num, CurveType type)
Curves * curves_new_nomain(int points_num, int curves_num)
void curves_normals_point_domain_calc(const CurvesGeometry &curves, MutableSpan< float3 > normals)
MatBase< T, NumCol, NumRow > transpose(const MatBase< T, NumRow, NumCol > &mat)
CartesianBasis invert(const CartesianBasis &basis)
int attributes_active_index_legacy
struct ModifierData * next
void(* modify_geometry_set)(ModifierData *md, const ModifierEvalContext *ctx, blender::bke::GeometrySet *geometry_set)
GeometryComponent & get_component_for_write(GeometryComponent::Type component_type)
const Curves * get_curves() const