Cleanup: simplify wrapping CurvesGeometry in C++
This commit is contained in:
parent
fa9fc59b56
commit
2995165148
|
@ -128,17 +128,6 @@ class CurvesGeometry : public ::CurvesGeometry {
|
|||
CurvesGeometry &operator=(CurvesGeometry &&other);
|
||||
~CurvesGeometry();
|
||||
|
||||
static CurvesGeometry &wrap(::CurvesGeometry &dna_struct)
|
||||
{
|
||||
CurvesGeometry *geometry = reinterpret_cast<CurvesGeometry *>(&dna_struct);
|
||||
return *geometry;
|
||||
}
|
||||
static const CurvesGeometry &wrap(const ::CurvesGeometry &dna_struct)
|
||||
{
|
||||
const CurvesGeometry *geometry = reinterpret_cast<const CurvesGeometry *>(&dna_struct);
|
||||
return *geometry;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------
|
||||
* Accessors.
|
||||
*/
|
||||
|
@ -408,6 +397,8 @@ class CurvesGeometry : public ::CurvesGeometry {
|
|||
}
|
||||
};
|
||||
|
||||
static_assert(sizeof(blender::bke::CurvesGeometry) == sizeof(::CurvesGeometry));
|
||||
|
||||
/**
|
||||
* Used to propagate deformation data through modifier evaluation so that sculpt tools can work on
|
||||
* evaluated data.
|
||||
|
@ -966,3 +957,12 @@ struct CurvesSurfaceTransforms {
|
|||
};
|
||||
|
||||
} // namespace blender::bke
|
||||
|
||||
inline blender::bke::CurvesGeometry &CurvesGeometry::wrap()
|
||||
{
|
||||
return *reinterpret_cast<blender::bke::CurvesGeometry *>(this);
|
||||
}
|
||||
inline const blender::bke::CurvesGeometry &CurvesGeometry::wrap() const
|
||||
{
|
||||
return *reinterpret_cast<const blender::bke::CurvesGeometry *>(this);
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ static std::optional<blender::bke::MutableAttributeAccessor> get_attribute_acces
|
|||
}
|
||||
case ID_CV: {
|
||||
Curves &curves_id = reinterpret_cast<Curves &>(id);
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
return curves.attributes_for_write();
|
||||
}
|
||||
default: {
|
||||
|
|
|
@ -601,7 +601,7 @@ GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph,
|
|||
{
|
||||
BLI_assert(ob_orig.type == OB_CURVES);
|
||||
const Curves &curves_id_orig = *static_cast<const Curves *>(ob_orig.data);
|
||||
const CurvesGeometry &curves_orig = CurvesGeometry::wrap(curves_id_orig.geometry);
|
||||
const CurvesGeometry &curves_orig = curves_id_orig.geometry.wrap();
|
||||
const int points_num = curves_orig.points_num();
|
||||
|
||||
GeometryDeformation deformation;
|
||||
|
@ -643,7 +643,7 @@ GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph,
|
|||
if (curves_component_eval != nullptr) {
|
||||
const Curves *curves_id_eval = curves_component_eval->get_for_read();
|
||||
if (curves_id_eval != nullptr) {
|
||||
const CurvesGeometry &curves_eval = CurvesGeometry::wrap(curves_id_eval->geometry);
|
||||
const CurvesGeometry &curves_eval = curves_id_eval->geometry.wrap();
|
||||
if (curves_eval.points_num() == points_num) {
|
||||
deformation.positions = curves_eval.positions();
|
||||
}
|
||||
|
|
|
@ -82,7 +82,7 @@ Curves *curve_legacy_to_curves(const Curve &curve_legacy, const ListBase &nurbs_
|
|||
const Vector<const Nurb *> src_curves(nurbs_list);
|
||||
|
||||
Curves *curves_id = curves_new_nomain(0, src_curves.size());
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
MutableAttributeAccessor curves_attributes = curves.attributes_for_write();
|
||||
|
||||
MutableSpan<int8_t> types = curves.curve_types_for_write();
|
||||
|
|
|
@ -70,8 +70,8 @@ static void curves_copy_data(Main * /*bmain*/, ID *id_dst, const ID *id_src, con
|
|||
const Curves *curves_src = (const Curves *)id_src;
|
||||
curves_dst->mat = static_cast<Material **>(MEM_dupallocN(curves_src->mat));
|
||||
|
||||
const bke::CurvesGeometry &src = bke::CurvesGeometry::wrap(curves_src->geometry);
|
||||
bke::CurvesGeometry &dst = bke::CurvesGeometry::wrap(curves_dst->geometry);
|
||||
const bke::CurvesGeometry &src = curves_src->geometry.wrap();
|
||||
bke::CurvesGeometry &dst = curves_dst->geometry.wrap();
|
||||
|
||||
/* We need special handling here because the generic ID management code has already done a
|
||||
* shallow copy from the source to the destination, and because the copy-on-write functionality
|
||||
|
@ -103,7 +103,7 @@ static void curves_free_data(ID *id)
|
|||
Curves *curves = (Curves *)id;
|
||||
BKE_animdata_free(&curves->id, false);
|
||||
|
||||
blender::bke::CurvesGeometry::wrap(curves->geometry).~CurvesGeometry();
|
||||
curves->geometry.wrap().~CurvesGeometry();
|
||||
|
||||
BKE_curves_batch_cache_free(curves);
|
||||
|
||||
|
@ -174,7 +174,7 @@ static void curves_blend_read_data(BlendDataReader *reader, ID *id)
|
|||
curves->geometry.runtime = MEM_new<blender::bke::CurvesGeometryRuntime>(__func__);
|
||||
|
||||
/* Recalculate curve type count cache that isn't saved in files. */
|
||||
blender::bke::CurvesGeometry::wrap(curves->geometry).update_curve_types();
|
||||
curves->geometry.wrap().update_curve_types();
|
||||
|
||||
/* Materials */
|
||||
BLO_read_pointer_array(reader, (void **)&curves->mat);
|
||||
|
@ -247,8 +247,7 @@ BoundBox *BKE_curves_boundbox_get(Object *ob)
|
|||
if (ob->runtime.bb == nullptr) {
|
||||
ob->runtime.bb = MEM_cnew<BoundBox>(__func__);
|
||||
|
||||
const blender::bke::CurvesGeometry &curves = blender::bke::CurvesGeometry::wrap(
|
||||
curves_id->geometry);
|
||||
const blender::bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
float3 min(FLT_MAX);
|
||||
float3 max(-FLT_MAX);
|
||||
|
@ -372,7 +371,7 @@ Curves *curves_new_nomain(const int points_num, const int curves_num)
|
|||
BLI_assert(points_num >= 0);
|
||||
BLI_assert(curves_num >= 0);
|
||||
Curves *curves_id = static_cast<Curves *>(BKE_id_new_nomain(ID_CV, nullptr));
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.resize(points_num, curves_num);
|
||||
return curves_id;
|
||||
}
|
||||
|
@ -380,7 +379,7 @@ Curves *curves_new_nomain(const int points_num, const int curves_num)
|
|||
Curves *curves_new_nomain_single(const int points_num, const CurveType type)
|
||||
{
|
||||
Curves *curves_id = curves_new_nomain(points_num, 1);
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.offsets_for_write().last() = points_num;
|
||||
curves.fill_curve_types(type);
|
||||
return curves_id;
|
||||
|
@ -389,7 +388,7 @@ Curves *curves_new_nomain_single(const int points_num, const CurveType type)
|
|||
Curves *curves_new_nomain(CurvesGeometry curves)
|
||||
{
|
||||
Curves *curves_id = static_cast<Curves *>(BKE_id_new_nomain(ID_CV, nullptr));
|
||||
bke::CurvesGeometry::wrap(curves_id->geometry) = std::move(curves);
|
||||
curves_id->geometry.wrap() = std::move(curves);
|
||||
return curves_id;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ void GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(
|
|||
if (curves_id == nullptr) {
|
||||
return;
|
||||
}
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
const int points_num = curves.points_num();
|
||||
if (points_num != edit_component.curves_edit_hints_->curves_id_orig.geometry.point_num) {
|
||||
return;
|
||||
|
|
|
@ -55,7 +55,7 @@ GeometryFieldContext::GeometryFieldContext(const GeometryComponent &component,
|
|||
case GEO_COMPONENT_TYPE_CURVE: {
|
||||
const CurveComponent &curve_component = static_cast<const CurveComponent &>(component);
|
||||
const Curves *curves = curve_component.get_for_read();
|
||||
geometry_ = curves ? &CurvesGeometry::wrap(curves->geometry) : nullptr;
|
||||
geometry_ = curves ? &curves->geometry.wrap() : nullptr;
|
||||
break;
|
||||
}
|
||||
case GEO_COMPONENT_TYPE_POINT_CLOUD: {
|
||||
|
@ -560,8 +560,7 @@ std::optional<eAttrDomain> try_detect_field_domain(const GeometryComponent &comp
|
|||
}
|
||||
else if (const auto *curves_field_input = dynamic_cast<const CurvesFieldInput *>(
|
||||
&field_input)) {
|
||||
if (!handle_domain(
|
||||
curves_field_input->preferred_domain(CurvesGeometry::wrap(curves->geometry)))) {
|
||||
if (!handle_domain(curves_field_input->preferred_domain(curves->geometry.wrap()))) {
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -227,7 +227,7 @@ bool GeometrySet::compute_boundbox_without_instances(float3 *r_min, float3 *r_ma
|
|||
have_minmax |= BKE_volume_min_max(volume, *r_min, *r_max);
|
||||
}
|
||||
if (const Curves *curves_id = this->get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
have_minmax |= curves.bounds_min_max(*r_min, *r_max);
|
||||
}
|
||||
return have_minmax;
|
||||
|
|
|
@ -802,8 +802,7 @@ static Mesh *mesh_new_from_evaluated_curve_type_object(const Object *evaluated_o
|
|||
}
|
||||
if (const Curves *curves = get_evaluated_curves_from_object(evaluated_object)) {
|
||||
const blender::bke::AnonymousAttributePropagationInfo propagation_info;
|
||||
return blender::bke::curve_to_wire_mesh(blender::bke::CurvesGeometry::wrap(curves->geometry),
|
||||
propagation_info);
|
||||
return blender::bke::curve_to_wire_mesh(curves->geometry.wrap(), propagation_info);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ void OVERLAY_sculpt_curves_cache_init(OVERLAY_Data *vedata)
|
|||
static bool everything_selected(const Curves &curves_id)
|
||||
{
|
||||
using namespace blender;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
const VArray<bool> selection = curves.attributes().lookup_or_default<bool>(
|
||||
".selection", ATTR_DOMAIN_POINT, true);
|
||||
return selection.is_single() && selection.get_internal_single();
|
||||
|
|
|
@ -131,7 +131,7 @@ static void populate_cache_for_geometry(Object &object,
|
|||
}
|
||||
case OB_CURVES_LEGACY: {
|
||||
Curve *curve = static_cast<Curve *>(object.data);
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curve->curve_eval->geometry);
|
||||
const bke::CurvesGeometry &curves = curve->curve_eval->geometry.wrap();
|
||||
if (curves.attributes().contains(".viewer")) {
|
||||
GPUBatch *batch = DRW_cache_curve_edge_wire_viewer_attribute_get(&object);
|
||||
DRW_shgroup_uniform_float_copy(pd.viewer_attribute_curve_grp, "opacity", opacity);
|
||||
|
@ -141,7 +141,7 @@ static void populate_cache_for_geometry(Object &object,
|
|||
}
|
||||
case OB_CURVES: {
|
||||
Curves *curves_id = static_cast<Curves *>(object.data);
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
if (curves.attributes().contains(".viewer")) {
|
||||
bool is_point_domain;
|
||||
GPUVertBuf **texture = DRW_curves_texture_for_evaluated_attribute(
|
||||
|
|
|
@ -213,11 +213,10 @@ static CurveRenderData *curve_render_data_create(Curve *cu,
|
|||
|
||||
if (types & CU_DATATYPE_WIRE) {
|
||||
if (rdata->curve_eval != nullptr) {
|
||||
curve_eval_render_wire_verts_edges_len_get(
|
||||
blender::bke::CurvesGeometry::wrap(rdata->curve_eval->geometry),
|
||||
&rdata->wire.curve_len,
|
||||
&rdata->wire.vert_len,
|
||||
&rdata->wire.edge_len);
|
||||
curve_eval_render_wire_verts_edges_len_get(rdata->curve_eval->geometry.wrap(),
|
||||
&rdata->wire.curve_len,
|
||||
&rdata->wire.vert_len,
|
||||
&rdata->wire.edge_len);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -473,8 +472,7 @@ static void curve_create_curves_pos(CurveRenderData *rdata, GPUVertBuf *vbo_curv
|
|||
GPU_vertbuf_init_with_format(vbo_curves_pos, &format);
|
||||
GPU_vertbuf_data_alloc(vbo_curves_pos, vert_len);
|
||||
|
||||
const blender::bke::CurvesGeometry &curves = blender::bke::CurvesGeometry::wrap(
|
||||
rdata->curve_eval->geometry);
|
||||
const blender::bke::CurvesGeometry &curves = rdata->curve_eval->geometry.wrap();
|
||||
const Span<float3> positions = curves.evaluated_positions();
|
||||
GPU_vertbuf_attr_fill(vbo_curves_pos, attr_id.pos, positions.data());
|
||||
}
|
||||
|
@ -495,7 +493,7 @@ static void curve_create_attribute(CurveRenderData *rdata, GPUVertBuf *vbo_attr)
|
|||
GPU_vertbuf_init_with_format(vbo_attr, &format);
|
||||
GPU_vertbuf_data_alloc(vbo_attr, vert_len);
|
||||
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(rdata->curve_eval->geometry);
|
||||
const bke::CurvesGeometry &curves = rdata->curve_eval->geometry.wrap();
|
||||
curves.ensure_can_interpolate_to_evaluated();
|
||||
const VArraySpan<ColorGeometry4f> colors = curves.attributes().lookup<ColorGeometry4f>(
|
||||
".viewer", ATTR_DOMAIN_POINT);
|
||||
|
@ -519,7 +517,7 @@ static void curve_create_curves_lines(CurveRenderData *rdata, GPUIndexBuf *ibo_c
|
|||
GPUIndexBufBuilder elb;
|
||||
GPU_indexbuf_init_ex(&elb, GPU_PRIM_LINE_STRIP, index_len, vert_len);
|
||||
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(rdata->curve_eval->geometry);
|
||||
const bke::CurvesGeometry &curves = rdata->curve_eval->geometry.wrap();
|
||||
const OffsetIndices points_by_curve = curves.evaluated_points_by_curve();
|
||||
const VArray<bool> cyclic = curves.cyclic();
|
||||
|
||||
|
|
|
@ -237,7 +237,7 @@ static void curves_batch_cache_fill_segments_proc_pos(
|
|||
{
|
||||
using namespace blender;
|
||||
/* TODO: use hair radius layer if available. */
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
const OffsetIndices points_by_curve = curves.points_by_curve();
|
||||
const Span<float3> positions = curves.positions();
|
||||
|
||||
|
@ -305,7 +305,7 @@ static void curves_batch_cache_ensure_edit_points_pos(const Curves &curves_id,
|
|||
CurvesBatchCache &cache)
|
||||
{
|
||||
using namespace blender;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
static GPUVertFormat format_pos = {0};
|
||||
static uint pos;
|
||||
|
@ -324,7 +324,7 @@ static void curves_batch_cache_ensure_edit_points_data(const Curves &curves_id,
|
|||
CurvesBatchCache &cache)
|
||||
{
|
||||
using namespace blender;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
static GPUVertFormat format_data = {0};
|
||||
static uint color;
|
||||
|
@ -361,7 +361,7 @@ static void curves_batch_cache_ensure_edit_points_data(const Curves &curves_id,
|
|||
static void curves_batch_cache_ensure_edit_lines(const Curves &curves_id, CurvesBatchCache &cache)
|
||||
{
|
||||
using namespace blender;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
const int vert_len = curves.points_num();
|
||||
const int curve_len = curves.curves_num();
|
||||
|
@ -432,8 +432,7 @@ static void curves_batch_ensure_attribute(const Curves &curves,
|
|||
request.domain == ATTR_DOMAIN_POINT ? curves.geometry.point_num :
|
||||
curves.geometry.curve_num);
|
||||
|
||||
const bke::AttributeAccessor attributes =
|
||||
bke::CurvesGeometry::wrap(curves.geometry).attributes();
|
||||
const bke::AttributeAccessor attributes = curves.geometry.wrap().attributes();
|
||||
|
||||
/* TODO(@kevindietrich): float4 is used for scalar attributes as the implicit conversion done
|
||||
* by OpenGL to vec4 for a scalar `s` will produce a `vec4(s, 0, 0, 1)`. However, following
|
||||
|
@ -463,8 +462,7 @@ static void curves_batch_cache_fill_strands_data(const Curves &curves_id,
|
|||
GPUVertBufRaw &data_step,
|
||||
GPUVertBufRaw &seg_step)
|
||||
{
|
||||
const blender::bke::CurvesGeometry &curves = blender::bke::CurvesGeometry::wrap(
|
||||
curves_id.geometry);
|
||||
const blender::bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
const blender::OffsetIndices points_by_curve = curves.points_by_curve();
|
||||
|
||||
for (const int i : IndexRange(curves.curves_num())) {
|
||||
|
@ -694,8 +692,7 @@ static void request_attribute(Curves &curves, const char *name)
|
|||
|
||||
DRW_Attributes attributes{};
|
||||
|
||||
blender::bke::CurvesGeometry &curves_geometry = blender::bke::CurvesGeometry::wrap(
|
||||
curves.geometry);
|
||||
blender::bke::CurvesGeometry &curves_geometry = curves.geometry.wrap();
|
||||
std::optional<blender::bke::AttributeMetaData> meta_data =
|
||||
curves_geometry.attributes().lookup_meta_data(name);
|
||||
if (!meta_data) {
|
||||
|
|
|
@ -327,8 +327,7 @@ DRWShadingGroup *DRW_shgroup_curves_create_sub(Object *object,
|
|||
|
||||
/* Use the radius of the root and tip of the first curve for now. This is a workaround that we
|
||||
* use for now because we can't use a per-point radius yet. */
|
||||
const blender::bke::CurvesGeometry &curves = blender::bke::CurvesGeometry::wrap(
|
||||
curves_id.geometry);
|
||||
const blender::bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
if (curves.curves_num() >= 1) {
|
||||
blender::VArray<float> radii = curves.attributes().lookup_or_default(
|
||||
"radius", ATTR_DOMAIN_POINT, 0.005f);
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
float (*ED_curves_point_normals_array_create(const Curves *curves_id))[3]
|
||||
{
|
||||
using namespace blender;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
const int size = curves.points_num();
|
||||
|
||||
float3 *data = static_cast<float3 *>(MEM_malloc_arrayN(size, sizeof(float3), __func__));
|
||||
|
|
|
@ -238,7 +238,7 @@ static void try_convert_single_object(Object &curves_ob,
|
|||
return;
|
||||
}
|
||||
Curves &curves_id = *static_cast<Curves *>(curves_ob.data);
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
if (curves_id.surface == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ static int curves_convert_from_particle_system_exec(bContext *C, wmOperator * /*
|
|||
Object *ob_new = BKE_object_add(&bmain, &scene, &view_layer, OB_CURVES, psys_eval->name);
|
||||
Curves *curves_id = static_cast<Curves *>(ob_new->data);
|
||||
BKE_object_apply_mat4(ob_new, ob_from_orig->object_to_world, true, false);
|
||||
bke::CurvesGeometry::wrap(curves_id->geometry) = particles_to_curves(*ob_from_eval, *psys_eval);
|
||||
curves_id->geometry.wrap() = particles_to_curves(*ob_from_eval, *psys_eval);
|
||||
|
||||
DEG_relations_tag_update(&bmain);
|
||||
WM_main_add_notifier(NC_OBJECT | ND_DRAW, nullptr);
|
||||
|
@ -562,7 +562,7 @@ static void snap_curves_to_surface_exec_object(Object &curves_ob,
|
|||
bool *r_missing_uvs)
|
||||
{
|
||||
Curves &curves_id = *static_cast<Curves *>(curves_ob.data);
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
const Mesh &surface_mesh = *static_cast<const Mesh *>(surface_ob.data);
|
||||
const Span<float3> surface_positions = surface_mesh.vert_positions();
|
||||
|
@ -774,7 +774,7 @@ static int curves_set_selection_domain_exec(bContext *C, wmOperator *op)
|
|||
|
||||
curves_id->selection_domain = domain;
|
||||
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
bke::MutableAttributeAccessor attributes = curves.attributes_for_write();
|
||||
if (curves.points_num() == 0) {
|
||||
continue;
|
||||
|
@ -830,7 +830,7 @@ static void CURVES_OT_set_selection_domain(wmOperatorType *ot)
|
|||
static bool has_anything_selected(const Span<Curves *> curves_ids)
|
||||
{
|
||||
return std::any_of(curves_ids.begin(), curves_ids.end(), [](const Curves *curves_id) {
|
||||
return has_anything_selected(CurvesGeometry::wrap(curves_id->geometry));
|
||||
return has_anything_selected(curves_id->geometry.wrap());
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -846,9 +846,7 @@ static int select_all_exec(bContext *C, wmOperator *op)
|
|||
|
||||
for (Curves *curves_id : unique_curves) {
|
||||
/* (De)select all the curves. */
|
||||
select_all(CurvesGeometry::wrap(curves_id->geometry),
|
||||
eAttrDomain(curves_id->selection_domain),
|
||||
action);
|
||||
select_all(curves_id->geometry.wrap(), eAttrDomain(curves_id->selection_domain), action);
|
||||
|
||||
/* Use #ID_RECALC_GEOMETRY instead of #ID_RECALC_SELECT because it is handled as a generic
|
||||
* attribute for now. */
|
||||
|
@ -881,7 +879,7 @@ static int select_random_exec(bContext *C, wmOperator *op)
|
|||
const float probability = RNA_float_get(op->ptr, "probability");
|
||||
|
||||
for (Curves *curves_id : unique_curves) {
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
select_random(curves, eAttrDomain(curves_id->selection_domain), uint32_t(seed), probability);
|
||||
|
||||
/* Use #ID_RECALC_GEOMETRY instead of #ID_RECALC_SELECT because it is handled as a generic
|
||||
|
@ -952,7 +950,7 @@ static int select_end_exec(bContext *C, wmOperator *op)
|
|||
const int amount = RNA_int_get(op->ptr, "amount");
|
||||
|
||||
for (Curves *curves_id : unique_curves) {
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
select_ends(curves, eAttrDomain(curves_id->selection_domain), amount, end_points);
|
||||
|
||||
/* Use #ID_RECALC_GEOMETRY instead of #ID_RECALC_SELECT because it is handled as a generic
|
||||
|
|
|
@ -52,7 +52,7 @@ static IndexMask retrieve_selected_curves(const bke::CurvesGeometry &curves,
|
|||
|
||||
IndexMask retrieve_selected_curves(const Curves &curves_id, Vector<int64_t> &r_indices)
|
||||
{
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
return retrieve_selected_curves(curves, r_indices);
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ IndexMask retrieve_selected_points(const bke::CurvesGeometry &curves, Vector<int
|
|||
|
||||
IndexMask retrieve_selected_points(const Curves &curves_id, Vector<int64_t> &r_indices)
|
||||
{
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
return retrieve_selected_points(curves, r_indices);
|
||||
}
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ static bool step_encode(bContext *C, Main *bmain, UndoStep *us_p)
|
|||
StepObject &object = us->objects[i];
|
||||
|
||||
object.obedit_ref.ptr = ob;
|
||||
object.geometry = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
object.geometry = curves_id.geometry.wrap();
|
||||
}
|
||||
});
|
||||
MEM_SAFE_FREE(objects);
|
||||
|
@ -86,7 +86,7 @@ static void step_decode(
|
|||
Curves &curves_id = *static_cast<Curves *>(object.obedit_ref.ptr->data);
|
||||
|
||||
/* Overwrite the curves geometry. */
|
||||
bke::CurvesGeometry::wrap(curves_id.geometry) = object.geometry;
|
||||
curves_id.geometry.wrap() = object.geometry;
|
||||
|
||||
DEG_id_tag_update(&curves_id.id, ID_RECALC_GEOMETRY);
|
||||
}
|
||||
|
|
|
@ -2048,7 +2048,7 @@ static int object_curves_random_add_exec(bContext *C, wmOperator *op)
|
|||
Object *object = ED_object_add_type(C, OB_CURVES, nullptr, loc, rot, false, local_view_bits);
|
||||
|
||||
Curves *curves_id = static_cast<Curves *>(object->data);
|
||||
bke::CurvesGeometry::wrap(curves_id->geometry) = ed::curves::primitive_random_sphere(500, 8);
|
||||
curves_id->geometry.wrap() = ed::curves::primitive_random_sphere(500, 8);
|
||||
|
||||
return OPERATOR_FINISHED;
|
||||
}
|
||||
|
@ -3091,8 +3091,7 @@ static int object_convert_exec(bContext *C, wmOperator *op)
|
|||
newob->data = new_curves;
|
||||
newob->type = OB_CURVES;
|
||||
|
||||
blender::bke::CurvesGeometry::wrap(
|
||||
new_curves->geometry) = blender::bke::CurvesGeometry::wrap(curves_eval->geometry);
|
||||
new_curves->geometry.wrap() = curves_eval->geometry.wrap();
|
||||
BKE_object_material_from_eval_data(bmain, newob, &curves_eval->id);
|
||||
|
||||
BKE_object_free_derived_caches(newob);
|
||||
|
@ -3392,8 +3391,7 @@ static int object_convert_exec(bContext *C, wmOperator *op)
|
|||
else if (const Curves *curves_eval = geometry.get_curves_for_read()) {
|
||||
bke::AnonymousAttributePropagationInfo propagation_info;
|
||||
propagation_info.propagate_all = false;
|
||||
Mesh *mesh = bke::curve_to_wire_mesh(bke::CurvesGeometry::wrap(curves_eval->geometry),
|
||||
propagation_info);
|
||||
Mesh *mesh = bke::curve_to_wire_mesh(curves_eval->geometry.wrap(), propagation_info);
|
||||
BKE_mesh_nomain_to_mesh(mesh, new_mesh, newob);
|
||||
BKE_object_material_from_eval_data(bmain, newob, &curves_eval->id);
|
||||
}
|
||||
|
|
|
@ -1075,13 +1075,10 @@ static bool modifier_apply_obdata(
|
|||
Curves &curves_eval = *geometry_set.get_curves_for_write();
|
||||
|
||||
/* Anonymous attributes shouldn't be available on the applied geometry. */
|
||||
blender::bke::CurvesGeometry::wrap(curves_eval.geometry)
|
||||
.attributes_for_write()
|
||||
.remove_anonymous();
|
||||
curves_eval.geometry.wrap().attributes_for_write().remove_anonymous();
|
||||
|
||||
/* Copy the relevant information to the original. */
|
||||
blender::bke::CurvesGeometry::wrap(curves.geometry) = std::move(
|
||||
blender::bke::CurvesGeometry::wrap(curves_eval.geometry));
|
||||
curves.geometry.wrap() = std::move(curves_eval.geometry.wrap());
|
||||
Main *bmain = DEG_get_bmain(depsgraph);
|
||||
BKE_object_material_from_eval_data(bmain, ob, &curves_eval.id);
|
||||
}
|
||||
|
|
|
@ -944,8 +944,8 @@ static int apply_objects_internal(bContext *C,
|
|||
}
|
||||
else if (ob->type == OB_CURVES) {
|
||||
Curves &curves = *static_cast<Curves *>(ob->data);
|
||||
blender::bke::CurvesGeometry::wrap(curves.geometry).transform(mat);
|
||||
blender::bke::CurvesGeometry::wrap(curves.geometry).calculate_bezier_auto_handles();
|
||||
curves.geometry.wrap().transform(mat);
|
||||
curves.geometry.wrap().calculate_bezier_auto_handles();
|
||||
}
|
||||
else if (ob->type == OB_POINTCLOUD) {
|
||||
PointCloud &pointcloud = *static_cast<PointCloud *>(ob->data);
|
||||
|
@ -1674,7 +1674,7 @@ static int object_origin_set_exec(bContext *C, wmOperator *op)
|
|||
else if (ob->type == OB_CURVES) {
|
||||
using namespace blender;
|
||||
Curves &curves_id = *static_cast<Curves *>(ob->data);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
if (ELEM(centermode, ORIGIN_TO_CENTER_OF_MASS_SURFACE, ORIGIN_TO_CENTER_OF_MASS_VOLUME) ||
|
||||
!ELEM(around, V3D_AROUND_CENTER_BOUNDS, V3D_AROUND_CENTER_MEDIAN)) {
|
||||
BKE_report(
|
||||
|
|
|
@ -117,7 +117,7 @@ struct AddOperationExecutor {
|
|||
curves_ob_orig_ = CTX_data_active_object(&C);
|
||||
|
||||
curves_id_orig_ = static_cast<Curves *>(curves_ob_orig_->data);
|
||||
curves_orig_ = &CurvesGeometry::wrap(curves_id_orig_->geometry);
|
||||
curves_orig_ = &curves_id_orig_->geometry.wrap();
|
||||
|
||||
if (curves_id_orig_->surface == nullptr || curves_id_orig_->surface->type != OB_MESH) {
|
||||
report_missing_surface(stroke_extension.reports);
|
||||
|
|
|
@ -177,7 +177,7 @@ std::optional<CurvesBrush3D> sample_curves_3d_brush(const Depsgraph &depsgraph,
|
|||
const float brush_radius_re)
|
||||
{
|
||||
const Curves &curves_id = *static_cast<Curves *>(curves_object.data);
|
||||
const CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
const CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
Object *surface_object = curves_id.surface;
|
||||
Object *surface_object_eval = DEG_get_evaluated_object(&depsgraph, surface_object);
|
||||
|
||||
|
|
|
@ -117,7 +117,7 @@ struct CombOperationExecutor {
|
|||
|
||||
curves_ob_orig_ = CTX_data_active_object(&C);
|
||||
curves_id_orig_ = static_cast<Curves *>(curves_ob_orig_->data);
|
||||
curves_orig_ = &CurvesGeometry::wrap(curves_id_orig_->geometry);
|
||||
curves_orig_ = &curves_id_orig_->geometry.wrap();
|
||||
if (curves_orig_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -94,7 +94,7 @@ struct DeleteOperationExecutor {
|
|||
object_ = CTX_data_active_object(&C);
|
||||
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
|
||||
selected_curve_indices_.clear();
|
||||
curve_selection_ = curves::retrieve_selected_curves(*curves_id_, selected_curve_indices_);
|
||||
|
|
|
@ -102,7 +102,7 @@ struct DensityAddOperationExecutor {
|
|||
self_ = &self;
|
||||
curves_ob_orig_ = CTX_data_active_object(&C);
|
||||
curves_id_orig_ = static_cast<Curves *>(curves_ob_orig_->data);
|
||||
curves_orig_ = &CurvesGeometry::wrap(curves_id_orig_->geometry);
|
||||
curves_orig_ = &curves_id_orig_->geometry.wrap();
|
||||
|
||||
if (stroke_extension.is_first) {
|
||||
self_->original_curve_num_ = curves_orig_->curves_num();
|
||||
|
@ -540,7 +540,7 @@ struct DensitySubtractOperationExecutor {
|
|||
object_ = CTX_data_active_object(&C);
|
||||
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -834,7 +834,7 @@ static bool use_add_density_mode(const BrushStrokeMode brush_mode,
|
|||
if (surface_ob_eval == nullptr) {
|
||||
return true;
|
||||
}
|
||||
const CurvesGeometry &curves = CurvesGeometry::wrap(curves_id_orig.geometry);
|
||||
const CurvesGeometry &curves = curves_id_orig.geometry.wrap();
|
||||
if (curves.curves_num() <= 1) {
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -278,7 +278,7 @@ struct CurvesEffectOperationExecutor {
|
|||
object_ = CTX_data_active_object(&C);
|
||||
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -362,7 +362,7 @@ static int select_random_exec(bContext *C, wmOperator *op)
|
|||
const auto next_bool_random_value = [&]() { return rng.get_float() <= probability; };
|
||||
|
||||
for (Curves *curves_id : unique_curves) {
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
|
||||
CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
const bool was_anything_selected = curves::has_anything_selected(curves);
|
||||
|
||||
bke::SpanAttributeWriter<float> attribute = float_selection_ensure(*curves_id);
|
||||
|
@ -581,7 +581,7 @@ static int select_grow_update(bContext *C, wmOperator *op, const float mouse_dif
|
|||
|
||||
for (std::unique_ptr<GrowOperatorDataPerCurve> &curve_op_data : op_data.per_curve) {
|
||||
Curves &curves_id = *curve_op_data->curves_id;
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
const float distance = curve_op_data->pixel_to_distance_factor * mouse_diff_x;
|
||||
|
||||
bke::SpanAttributeWriter<float> selection = float_selection_ensure(curves_id);
|
||||
|
@ -629,7 +629,7 @@ static void select_grow_invoke_per_curve(const Curves &curves_id,
|
|||
const RegionView3D &rv3d,
|
||||
GrowOperatorDataPerCurve &curve_op_data)
|
||||
{
|
||||
const CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
const CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
const Span<float3> positions = curves.positions();
|
||||
|
||||
if (const bke::GAttributeReader original_selection = curves.attributes().lookup(".selection")) {
|
||||
|
@ -773,7 +773,7 @@ static int select_grow_modal(bContext *C, wmOperator *op, const wmEvent *event)
|
|||
/* Undo operator by resetting the selection to the original value. */
|
||||
for (std::unique_ptr<GrowOperatorDataPerCurve> &curve_op_data : op_data.per_curve) {
|
||||
Curves &curves_id = *curve_op_data->curves_id;
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
bke::MutableAttributeAccessor attributes = curves.attributes_for_write();
|
||||
|
||||
attributes.remove(".selection");
|
||||
|
|
|
@ -90,7 +90,7 @@ struct PinchOperationExecutor {
|
|||
|
||||
object_ = CTX_data_active_object(&C);
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ struct PuffOperationExecutor {
|
|||
|
||||
object_ = CTX_data_active_object(&C);
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace blender::ed::sculpt_paint {
|
|||
bke::SpanAttributeWriter<float> float_selection_ensure(Curves &curves_id)
|
||||
{
|
||||
/* TODO: Use a generic attribute conversion utility instead of this function. */
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
bke::MutableAttributeAccessor attributes = curves.attributes_for_write();
|
||||
|
||||
if (const auto meta_data = attributes.lookup_meta_data(".selection")) {
|
||||
|
|
|
@ -83,7 +83,7 @@ struct SelectionPaintOperationExecutor {
|
|||
object_ = CTX_data_active_object(&C);
|
||||
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -131,7 +131,7 @@ struct SlideOperationExecutor {
|
|||
|
||||
curves_ob_orig_ = CTX_data_active_object(&C);
|
||||
curves_id_orig_ = static_cast<Curves *>(curves_ob_orig_->data);
|
||||
curves_orig_ = &CurvesGeometry::wrap(curves_id_orig_->geometry);
|
||||
curves_orig_ = &curves_id_orig_->geometry.wrap();
|
||||
if (curves_id_orig_->surface == nullptr || curves_id_orig_->surface->type != OB_MESH) {
|
||||
report_missing_surface(stroke_extension.reports);
|
||||
return;
|
||||
|
|
|
@ -66,7 +66,7 @@ struct SmoothOperationExecutor {
|
|||
|
||||
object_ = CTX_data_active_object(&C);
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -118,7 +118,7 @@ struct SnakeHookOperatorExecutor {
|
|||
falloff_shape_ = static_cast<eBrushFalloffShape>(brush_->falloff_shape);
|
||||
|
||||
curves_id_ = static_cast<Curves *>(object_->data);
|
||||
curves_ = &CurvesGeometry::wrap(curves_id_->geometry);
|
||||
curves_ = &curves_id_->geometry.wrap();
|
||||
if (curves_->curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -33,7 +33,7 @@ static void createTransCurvesVerts(bContext * /*C*/, TransInfo *t)
|
|||
for (const int i : trans_data_contrainers.index_range()) {
|
||||
TransDataContainer &tc = trans_data_contrainers[i];
|
||||
Curves *curves_id = static_cast<Curves *>(tc.obedit->data);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
selection_per_object[i] = ed::curves::retrieve_selected_points(curves,
|
||||
selected_indices_per_object[i]);
|
||||
|
@ -51,7 +51,7 @@ static void createTransCurvesVerts(bContext * /*C*/, TransInfo *t)
|
|||
continue;
|
||||
}
|
||||
Curves *curves_id = static_cast<Curves *>(tc.obedit->data);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
IndexMask selected_indices = selection_per_object[i];
|
||||
|
||||
float mtx[3][3], smtx[3][3];
|
||||
|
@ -82,7 +82,7 @@ static void recalcData_curves(TransInfo *t)
|
|||
Span<TransDataContainer> trans_data_contrainers(t->data_container, t->data_container_len);
|
||||
for (const TransDataContainer &tc : trans_data_contrainers) {
|
||||
Curves *curves_id = static_cast<Curves *>(tc.obedit->data);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
curves.calculate_bezier_auto_handles();
|
||||
curves.tag_positions_changed();
|
||||
|
|
|
@ -1197,7 +1197,7 @@ static AllCurvesInfo preprocess_curves(const GeometrySet &geometry_set,
|
|||
for (const int curve_index : info.realize_info.index_range()) {
|
||||
RealizeCurveInfo &curve_info = info.realize_info[curve_index];
|
||||
const Curves *curves_id = info.order[curve_index];
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curve_info.curves = curves_id;
|
||||
|
||||
/* Access attributes. */
|
||||
|
@ -1258,7 +1258,7 @@ static void execute_realize_curve_task(const RealizeInstancesOptions &options,
|
|||
{
|
||||
const RealizeCurveInfo &curves_info = *task.curve_info;
|
||||
const Curves &curves_id = *curves_info.curves;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
const IndexRange dst_point_range{task.start_indices.point, curves.points_num()};
|
||||
const IndexRange dst_curve_range{task.start_indices.curve, curves.curves_num()};
|
||||
|
@ -1347,7 +1347,7 @@ static void execute_realize_curve_tasks(const RealizeInstancesOptions &options,
|
|||
|
||||
/* Allocate new curves data-block. */
|
||||
Curves *dst_curves_id = bke::curves_new_nomain(points_num, curves_num);
|
||||
bke::CurvesGeometry &dst_curves = bke::CurvesGeometry::wrap(dst_curves_id->geometry);
|
||||
bke::CurvesGeometry &dst_curves = dst_curves_id->geometry.wrap();
|
||||
dst_curves.offsets_for_write().last() = points_num;
|
||||
CurveComponent &dst_component = r_realized_geometry.get_component_for_write<CurveComponent>();
|
||||
dst_component.replace(dst_curves_id);
|
||||
|
|
|
@ -17,6 +17,7 @@ extern "C" {
|
|||
|
||||
#ifdef __cplusplus
|
||||
namespace blender::bke {
|
||||
class CurvesGeometry;
|
||||
class CurvesGeometryRuntime;
|
||||
} // namespace blender::bke
|
||||
using CurvesGeometryRuntimeHandle = blender::bke::CurvesGeometryRuntime;
|
||||
|
@ -134,6 +135,11 @@ typedef struct CurvesGeometry {
|
|||
* Runtime data for curves, stored as a pointer to allow defining this as a C++ class.
|
||||
*/
|
||||
CurvesGeometryRuntimeHandle *runtime;
|
||||
|
||||
#ifdef __cplusplus
|
||||
blender::bke::CurvesGeometry &wrap();
|
||||
const blender::bke::CurvesGeometry &wrap() const;
|
||||
#endif
|
||||
} CurvesGeometry;
|
||||
|
||||
/**
|
||||
|
|
|
@ -170,7 +170,7 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
|
|||
if (const Curves *curves_id = geometry_set.get_curves_for_read()) {
|
||||
count++;
|
||||
span_count++;
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
positions_span = curves.evaluated_positions();
|
||||
total_num += positions_span.size();
|
||||
}
|
||||
|
@ -205,7 +205,7 @@ static Mesh *compute_hull(const GeometrySet &geometry_set)
|
|||
}
|
||||
|
||||
if (const Curves *curves_id = geometry_set.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
Span<float3> array = curves.evaluated_positions();
|
||||
positions.as_mutable_span().slice(offset, array.size()).copy_from(array);
|
||||
offset += array.size();
|
||||
|
|
|
@ -116,7 +116,7 @@ static void curve_fill_calculate(GeometrySet &geometry_set, const GeometryNodeCu
|
|||
}
|
||||
|
||||
const Curves &curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
if (curves.curves_num() == 0) {
|
||||
geometry_set.replace_curves(nullptr);
|
||||
return;
|
||||
|
|
|
@ -76,7 +76,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
}
|
||||
|
||||
const Curves &curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
bke::CurvesFieldContext context{curves, ATTR_DOMAIN_POINT};
|
||||
fn::FieldEvaluator evaluator{context, curves.points_num()};
|
||||
evaluator.add(radius_field);
|
||||
|
|
|
@ -21,7 +21,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
}
|
||||
|
||||
const Curves &curves_id = *curve_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
const VArray<bool> cyclic = curves.cyclic();
|
||||
|
||||
curves.ensure_evaluated_lengths();
|
||||
|
|
|
@ -167,7 +167,7 @@ static Curves *create_arc_curve_from_points(const int resolution,
|
|||
{
|
||||
const int size = connect_center ? resolution + 1 : resolution;
|
||||
Curves *curves_id = bke::curves_new_nomain_single(size, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
const int stepcount = resolution - 1;
|
||||
const int centerpoint = resolution;
|
||||
|
@ -285,7 +285,7 @@ static Curves *create_arc_curve_from_radius(const int resolution,
|
|||
{
|
||||
const int size = connect_center ? resolution + 1 : resolution;
|
||||
Curves *curves_id = bke::curves_new_nomain_single(size, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
const int stepcount = resolution - 1;
|
||||
const int centerpoint = resolution;
|
||||
|
|
|
@ -63,7 +63,7 @@ static Curves *create_bezier_segment_curve(const float3 start,
|
|||
const GeometryNodeCurvePrimitiveBezierSegmentMode mode)
|
||||
{
|
||||
Curves *curves_id = bke::curves_new_nomain_single(2, CURVE_TYPE_BEZIER);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.resolution_for_write().fill(resolution);
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
|
|
@ -137,7 +137,7 @@ static Curves *create_point_circle_curve(
|
|||
}
|
||||
|
||||
Curves *curves_id = bke::curves_new_nomain_single(resolution, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.cyclic_for_write().first() = true;
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
@ -163,7 +163,7 @@ static Curves *create_point_circle_curve(
|
|||
static Curves *create_radius_circle_curve(const int resolution, const float radius)
|
||||
{
|
||||
Curves *curves_id = bke::curves_new_nomain_single(resolution, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.cyclic_for_write().first() = true;
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
|
|
@ -71,7 +71,7 @@ static void node_update(bNodeTree *ntree, bNode *node)
|
|||
static Curves *create_point_line_curve(const float3 start, const float3 end)
|
||||
{
|
||||
Curves *curves_id = bke::curves_new_nomain_single(2, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
curves.positions_for_write().first() = start;
|
||||
curves.positions_for_write().last() = end;
|
||||
|
@ -84,7 +84,7 @@ static Curves *create_direction_line_curve(const float3 start,
|
|||
const float length)
|
||||
{
|
||||
Curves *curves_id = bke::curves_new_nomain_single(2, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
curves.positions_for_write().first() = start;
|
||||
curves.positions_for_write().last() = math::normalize(direction) * length + start;
|
||||
|
|
|
@ -34,7 +34,7 @@ static Curves *create_quadratic_bezier_curve(const float3 p1,
|
|||
const int resolution)
|
||||
{
|
||||
Curves *curves_id = bke::curves_new_nomain_single(resolution + 1, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
||||
|
|
|
@ -216,7 +216,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
const GeometryNodeCurvePrimitiveQuadMode mode = (GeometryNodeCurvePrimitiveQuadMode)storage.mode;
|
||||
|
||||
Curves *curves_id = bke::curves_new_nomain_single(4, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.cyclic_for_write().first() = true;
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
|
|
@ -49,7 +49,7 @@ static Curves *create_spiral_curve(const float rotations,
|
|||
(direction ? 1.0f : -1.0f);
|
||||
|
||||
Curves *curves_id = bke::curves_new_nomain_single(totalpoints + 1, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
||||
|
|
|
@ -39,7 +39,7 @@ static Curves *create_star_curve(const float inner_radius,
|
|||
const int points)
|
||||
{
|
||||
Curves *curves_id = bke::curves_new_nomain_single(points * 2, CURVE_TYPE_POLY);
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
curves.cyclic_for_write().first() = true;
|
||||
|
||||
MutableSpan<float3> positions = curves.positions_for_write();
|
||||
|
|
|
@ -67,8 +67,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
Field<int> count = params.extract_input<Field<int>>("Count");
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry) {
|
||||
if (const Curves *src_curves_id = geometry.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(
|
||||
src_curves_id->geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id->geometry.wrap();
|
||||
bke::CurvesGeometry dst_curves = geometry::resample_to_count(
|
||||
src_curves, selection, count);
|
||||
Curves *dst_curves_id = bke::curves_new_nomain(std::move(dst_curves));
|
||||
|
@ -82,8 +81,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
Field<float> length = params.extract_input<Field<float>>("Length");
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry) {
|
||||
if (const Curves *src_curves_id = geometry.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(
|
||||
src_curves_id->geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id->geometry.wrap();
|
||||
bke::CurvesGeometry dst_curves = geometry::resample_to_length(
|
||||
src_curves, selection, length);
|
||||
Curves *dst_curves_id = bke::curves_new_nomain(std::move(dst_curves));
|
||||
|
@ -96,8 +94,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
case GEO_NODE_CURVE_RESAMPLE_EVALUATED:
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry) {
|
||||
if (const Curves *src_curves_id = geometry.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(
|
||||
src_curves_id->geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id->geometry.wrap();
|
||||
bke::CurvesGeometry dst_curves = geometry::resample_to_evaluated(src_curves, selection);
|
||||
Curves *dst_curves_id = bke::curves_new_nomain(std::move(dst_curves));
|
||||
bke::curves_copy_parameters(*src_curves_id, *dst_curves_id);
|
||||
|
|
|
@ -26,7 +26,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
return;
|
||||
}
|
||||
const Curves &src_curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(src_curves_id.geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id.geometry.wrap();
|
||||
|
||||
bke::CurvesFieldContext field_context{src_curves, ATTR_DOMAIN_CURVE};
|
||||
fn::FieldEvaluator selection_evaluator{field_context, src_curves.curves_num()};
|
||||
|
@ -38,7 +38,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
}
|
||||
|
||||
Curves &curves_id = *geometry_set.get_curves_for_write();
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
curves.reverse_curves(selection);
|
||||
});
|
||||
|
||||
|
|
|
@ -297,7 +297,7 @@ class SampleCurveFunction : public mf::MultiFunction {
|
|||
}
|
||||
|
||||
const Curves &curves_id = *geometry_set_.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
if (curves.points_num() == 0) {
|
||||
return return_default();
|
||||
}
|
||||
|
@ -428,7 +428,7 @@ class SampleCurveFunction : public mf::MultiFunction {
|
|||
void evaluate_source()
|
||||
{
|
||||
const Curves &curves_id = *geometry_set_.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
source_context_.emplace(bke::CurvesFieldContext{curves, ATTR_DOMAIN_POINT});
|
||||
source_evaluator_ = std::make_unique<FieldEvaluator>(*source_context_, curves.points_num());
|
||||
source_evaluator_->add(src_field_);
|
||||
|
@ -506,7 +506,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
}
|
||||
|
||||
const Curves &curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
if (curves.points_num() == 0) {
|
||||
params.set_default_remaining_outputs();
|
||||
return;
|
||||
|
|
|
@ -91,7 +91,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
has_curves = true;
|
||||
const AttributeAccessor attributes = curves.attributes();
|
||||
if (!attributes.contains("handle_type_left") || !attributes.contains("handle_type_right")) {
|
||||
|
|
|
@ -46,7 +46,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
return;
|
||||
}
|
||||
const Curves &src_curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(src_curves_id.geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id.geometry.wrap();
|
||||
if (src_curves.is_single_type(dst_type)) {
|
||||
return;
|
||||
}
|
||||
|
@ -62,7 +62,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
if (geometry::try_curves_conversion_in_place(
|
||||
selection, dst_type, [&]() -> bke::CurvesGeometry & {
|
||||
return bke::CurvesGeometry::wrap(geometry_set.get_curves_for_write()->geometry);
|
||||
return geometry_set.get_curves_for_write()->geometry.wrap();
|
||||
})) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -37,7 +37,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
}
|
||||
|
||||
const Curves &src_curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(src_curves_id.geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id.geometry.wrap();
|
||||
|
||||
bke::CurvesFieldContext field_context{src_curves, ATTR_DOMAIN_POINT};
|
||||
fn::FieldEvaluator evaluator{field_context, src_curves.points_num()};
|
||||
|
|
|
@ -34,15 +34,12 @@ static void geometry_set_curve_to_mesh(GeometrySet &geometry_set,
|
|||
GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(geometry_set);
|
||||
|
||||
if (profile_curves == nullptr) {
|
||||
Mesh *mesh = bke::curve_to_wire_mesh(bke::CurvesGeometry::wrap(curves.geometry),
|
||||
propagation_info);
|
||||
Mesh *mesh = bke::curve_to_wire_mesh(curves.geometry.wrap(), propagation_info);
|
||||
geometry_set.replace_mesh(mesh);
|
||||
}
|
||||
else {
|
||||
Mesh *mesh = bke::curve_to_mesh_sweep(bke::CurvesGeometry::wrap(curves.geometry),
|
||||
bke::CurvesGeometry::wrap(profile_curves->geometry),
|
||||
fill_caps,
|
||||
propagation_info);
|
||||
Mesh *mesh = bke::curve_to_mesh_sweep(
|
||||
curves.geometry.wrap(), profile_curves->geometry.wrap(), fill_caps, propagation_info);
|
||||
geometry_set.replace_mesh(mesh);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -129,8 +129,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
Field<int> count = params.extract_input<Field<int>>("Count");
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry) {
|
||||
if (const Curves *src_curves_id = geometry.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(
|
||||
src_curves_id->geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id->geometry.wrap();
|
||||
bke::CurvesGeometry dst_curves = geometry::resample_to_count(
|
||||
src_curves, fn::make_constant_field<bool>(true), count, resample_attributes);
|
||||
PointCloud *pointcloud = pointcloud_from_curves(std::move(dst_curves),
|
||||
|
@ -147,8 +146,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
Field<float> length = params.extract_input<Field<float>>("Length");
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry) {
|
||||
if (const Curves *src_curves_id = geometry.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(
|
||||
src_curves_id->geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id->geometry.wrap();
|
||||
bke::CurvesGeometry dst_curves = geometry::resample_to_length(
|
||||
src_curves, fn::make_constant_field<bool>(true), length, resample_attributes);
|
||||
PointCloud *pointcloud = pointcloud_from_curves(std::move(dst_curves),
|
||||
|
@ -164,8 +162,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
case GEO_NODE_CURVE_RESAMPLE_EVALUATED:
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry) {
|
||||
if (const Curves *src_curves_id = geometry.get_curves_for_read()) {
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(
|
||||
src_curves_id->geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id->geometry.wrap();
|
||||
bke::CurvesGeometry dst_curves = geometry::resample_to_evaluated(
|
||||
src_curves, fn::make_constant_field<bool>(true), resample_attributes);
|
||||
PointCloud *pointcloud = pointcloud_from_curves(std::move(dst_curves),
|
||||
|
|
|
@ -119,7 +119,7 @@ static void geometry_set_curve_trim(GeometrySet &geometry_set,
|
|||
return;
|
||||
}
|
||||
const Curves &src_curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(src_curves_id.geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id.geometry.wrap();
|
||||
if (src_curves.curves_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -278,7 +278,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
const AttributeAccessor mesh_attributes_orig = surface_mesh_orig->attributes();
|
||||
|
||||
Curves &curves_id = *curves_geometry.get_curves_for_write();
|
||||
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
|
||||
CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
if (!mesh_attributes_eval.contains(uv_map_name)) {
|
||||
pass_through_input();
|
||||
|
@ -383,7 +383,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
{},
|
||||
invalid_uv_count);
|
||||
/* Then also deform edit curve information for use in sculpt mode. */
|
||||
const CurvesGeometry &curves_orig = CurvesGeometry::wrap(edit_hints->curves_id_orig.geometry);
|
||||
const CurvesGeometry &curves_orig = edit_hints->curves_id_orig.geometry.wrap();
|
||||
const VArraySpan<float2> surface_uv_coords_orig = curves_orig.attributes().lookup_or_default(
|
||||
"surface_uv_coordinate", ATTR_DOMAIN_CURVE, float2(0));
|
||||
if (!surface_uv_coords_orig.is_empty()) {
|
||||
|
|
|
@ -293,7 +293,7 @@ static void delete_curves_selection(GeometrySet &geometry_set,
|
|||
const bke::AnonymousAttributePropagationInfo &propagation_info)
|
||||
{
|
||||
const Curves &src_curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(src_curves_id.geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id.geometry.wrap();
|
||||
|
||||
const int domain_size = src_curves.attributes().domain_size(selection_domain);
|
||||
bke::CurvesFieldContext field_context{src_curves, selection_domain};
|
||||
|
@ -311,7 +311,7 @@ static void delete_curves_selection(GeometrySet &geometry_set,
|
|||
|
||||
CurveComponent &component = geometry_set.get_component_for_write<CurveComponent>();
|
||||
Curves &curves_id = *component.get_for_write();
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
if (selection_domain == ATTR_DOMAIN_POINT) {
|
||||
curves.remove_points(selection, propagation_info);
|
||||
|
|
|
@ -330,7 +330,7 @@ static void duplicate_curves(GeometrySet &geometry_set,
|
|||
GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(geometry_set);
|
||||
|
||||
const Curves &curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
const bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
|
||||
bke::CurvesFieldContext field_context{curves, ATTR_DOMAIN_CURVE};
|
||||
FieldEvaluator evaluator{field_context, curves.curves_num()};
|
||||
|
@ -363,7 +363,7 @@ static void duplicate_curves(GeometrySet &geometry_set,
|
|||
|
||||
Curves *new_curves_id = bke::curves_new_nomain(dst_points_num, dst_curves_num);
|
||||
bke::curves_copy_parameters(curves_id, *new_curves_id);
|
||||
bke::CurvesGeometry &new_curves = bke::CurvesGeometry::wrap(new_curves_id->geometry);
|
||||
bke::CurvesGeometry &new_curves = new_curves_id->geometry.wrap();
|
||||
MutableSpan<int> all_dst_offsets = new_curves.offsets_for_write();
|
||||
|
||||
threading::parallel_for(selection.index_range(), 512, [&](IndexRange range) {
|
||||
|
@ -811,7 +811,7 @@ static void duplicate_points_curve(GeometrySet &geometry_set,
|
|||
const AnonymousAttributePropagationInfo &propagation_info)
|
||||
{
|
||||
const Curves &src_curves_id = *geometry_set.get_curves_for_read();
|
||||
const bke::CurvesGeometry &src_curves = bke::CurvesGeometry::wrap(src_curves_id.geometry);
|
||||
const bke::CurvesGeometry &src_curves = src_curves_id.geometry.wrap();
|
||||
if (src_curves.points_num() == 0) {
|
||||
return;
|
||||
}
|
||||
|
@ -833,7 +833,7 @@ static void duplicate_points_curve(GeometrySet &geometry_set,
|
|||
|
||||
Curves *new_curves_id = bke::curves_new_nomain(dst_num, dst_num);
|
||||
bke::curves_copy_parameters(src_curves_id, *new_curves_id);
|
||||
bke::CurvesGeometry &new_curves = bke::CurvesGeometry::wrap(new_curves_id->geometry);
|
||||
bke::CurvesGeometry &new_curves = new_curves_id->geometry.wrap();
|
||||
MutableSpan<int> new_curve_offsets = new_curves.offsets_for_write();
|
||||
for (const int i : new_curves.curves_range()) {
|
||||
new_curve_offsets[i] = i;
|
||||
|
|
|
@ -660,7 +660,7 @@ static GeometrySet generate_interpolated_curves(
|
|||
const AutoAnonymousAttributeID &index_attribute_id,
|
||||
const AutoAnonymousAttributeID &weight_attribute_id)
|
||||
{
|
||||
const bke::CurvesGeometry &guide_curves = bke::CurvesGeometry::wrap(guide_curves_id.geometry);
|
||||
const bke::CurvesGeometry &guide_curves = guide_curves_id.geometry.wrap();
|
||||
|
||||
const MultiValueMap<int, int> guides_by_group = separate_guides_by_group(guide_group_ids);
|
||||
const Map<int, int> points_per_curve_by_group = compute_points_per_curve_by_group(
|
||||
|
@ -692,7 +692,7 @@ static GeometrySet generate_interpolated_curves(
|
|||
all_neighbor_counts);
|
||||
|
||||
Curves *child_curves_id = bke::curves_new_nomain(0, num_child_curves);
|
||||
bke::CurvesGeometry &child_curves = bke::CurvesGeometry::wrap(child_curves_id->geometry);
|
||||
bke::CurvesGeometry &child_curves = child_curves_id->geometry.wrap();
|
||||
MutableSpan<int> children_curve_offsets = child_curves.offsets_for_write();
|
||||
|
||||
Array<bool> use_direct_interpolation_per_child(num_child_curves);
|
||||
|
@ -792,8 +792,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
const Curves &guide_curves_id = *guide_curves_geometry.get_curves_for_read();
|
||||
|
||||
bke::CurvesFieldContext curves_context{bke::CurvesGeometry::wrap(guide_curves_id.geometry),
|
||||
ATTR_DOMAIN_CURVE};
|
||||
bke::CurvesFieldContext curves_context{guide_curves_id.geometry.wrap(), ATTR_DOMAIN_CURVE};
|
||||
fn::FieldEvaluator curves_evaluator{curves_context, guide_curves_id.geometry.curve_num};
|
||||
curves_evaluator.add(guides_up_field);
|
||||
curves_evaluator.add(guide_group_field);
|
||||
|
|
|
@ -144,7 +144,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
has_curves = true;
|
||||
const AttributeAccessor attributes = curves.attributes();
|
||||
if (!attributes.contains("handle_left") || !attributes.contains("handle_right")) {
|
||||
|
|
|
@ -48,7 +48,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
set_normal_mode(curves, mode, selection_field);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -46,7 +46,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
set_radius(bke::CurvesGeometry::wrap(curves_id->geometry), selection_field, radii_field);
|
||||
set_radius(curves_id->geometry.wrap(), selection_field, radii_field);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
set_tilt(bke::CurvesGeometry::wrap(curves_id->geometry), selection_field, tilt_field);
|
||||
set_tilt(curves_id->geometry.wrap(), selection_field, tilt_field);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ static void set_computed_position_and_offset(GeometryComponent &component,
|
|||
if (attributes.contains("handle_right") && attributes.contains("handle_left")) {
|
||||
CurveComponent &curve_component = static_cast<CurveComponent &>(component);
|
||||
Curves &curves_id = *curve_component.get_for_write();
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id.geometry);
|
||||
bke::CurvesGeometry &curves = curves_id.geometry.wrap();
|
||||
SpanAttributeWriter<float3> handle_right_attribute =
|
||||
attributes.lookup_or_add_for_write_span<float3>("handle_right", ATTR_DOMAIN_POINT);
|
||||
SpanAttributeWriter<float3> handle_left_attribute =
|
||||
|
|
|
@ -42,7 +42,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
set_cyclic(bke::CurvesGeometry::wrap(curves_id->geometry), selection_field, cyclic_field);
|
||||
set_cyclic(curves_id->geometry.wrap(), selection_field, cyclic_field);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ static void node_geo_exec(GeoNodeExecParams params)
|
|||
|
||||
geometry_set.modify_geometry_sets([&](GeometrySet &geometry_set) {
|
||||
if (Curves *curves_id = geometry_set.get_curves_for_write()) {
|
||||
set_resolution(bke::CurvesGeometry::wrap(curves_id->geometry), selection, resolution);
|
||||
set_resolution(curves_id->geometry.wrap(), selection, resolution);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -301,7 +301,7 @@ static Map<int, int> create_curve_instances(GeoNodeExecParams ¶ms,
|
|||
continue;
|
||||
}
|
||||
|
||||
bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
|
||||
bke::CurvesGeometry &curves = curves_id->geometry.wrap();
|
||||
BKE_nurbList_free(&cu.nurb);
|
||||
|
||||
float4x4 size_matrix = float4x4::identity();
|
||||
|
|
|
@ -194,7 +194,7 @@ static void translate_geometry_set(GeoNodeExecParams ¶ms,
|
|||
const Depsgraph &depsgraph)
|
||||
{
|
||||
if (Curves *curves = geometry.get_curves_for_write()) {
|
||||
bke::CurvesGeometry::wrap(curves->geometry).translate(translation);
|
||||
curves->geometry.wrap().translate(translation);
|
||||
}
|
||||
if (Mesh *mesh = geometry.get_mesh_for_write()) {
|
||||
translate_mesh(*mesh, translation);
|
||||
|
@ -219,7 +219,7 @@ void transform_geometry_set(GeoNodeExecParams ¶ms,
|
|||
const Depsgraph &depsgraph)
|
||||
{
|
||||
if (Curves *curves = geometry.get_curves_for_write()) {
|
||||
bke::CurvesGeometry::wrap(curves->geometry).transform(transform);
|
||||
curves->geometry.wrap().transform(transform);
|
||||
}
|
||||
if (Mesh *mesh = geometry.get_mesh_for_write()) {
|
||||
transform_mesh(*mesh, transform);
|
||||
|
|
Loading…
Reference in New Issue