Changeset View
Changeset View
Standalone View
Standalone View
source/blender/blenkernel/intern/curves_geometry.cc
| Show First 20 Lines • Show All 196 Lines • ▼ Show 20 Lines | if (data == nullptr) { | ||||
| return {}; | return {}; | ||||
| } | } | ||||
| return {data, size}; | return {data, size}; | ||||
| } | } | ||||
| template<typename T> | template<typename T> | ||||
| static MutableSpan<T> get_mutable_attribute(CurvesGeometry &curves, | static MutableSpan<T> get_mutable_attribute(CurvesGeometry &curves, | ||||
| const AttributeDomain domain, | const AttributeDomain domain, | ||||
| const StringRefNull name) | const StringRefNull name, | ||||
| const T default_value = T()) | |||||
| { | { | ||||
| const int size = domain_size(curves, domain); | const int size = domain_size(curves, domain); | ||||
| const CustomDataType type = cpp_type_to_custom_data_type(CPPType::get<T>()); | const CustomDataType type = cpp_type_to_custom_data_type(CPPType::get<T>()); | ||||
| CustomData &custom_data = domain_custom_data(curves, domain); | CustomData &custom_data = domain_custom_data(curves, domain); | ||||
| T *data = (T *)CustomData_duplicate_referenced_layer_named( | T *data = (T *)CustomData_duplicate_referenced_layer_named( | ||||
| &custom_data, type, name.c_str(), size); | &custom_data, type, name.c_str(), size); | ||||
| if (data != nullptr) { | if (data != nullptr) { | ||||
| return {data, size}; | return {data, size}; | ||||
| } | } | ||||
| data = (T *)CustomData_add_layer_named( | data = (T *)CustomData_add_layer_named( | ||||
| &custom_data, type, CD_CALLOC, nullptr, size, name.c_str()); | &custom_data, type, CD_CALLOC, nullptr, size, name.c_str()); | ||||
| return {data, size}; | MutableSpan<T> span = {data, size}; | ||||
| if (span.first() != default_value) { | |||||
| span.fill(default_value); | |||||
| } | |||||
| return span; | |||||
| } | } | ||||
| VArray<int8_t> CurvesGeometry::curve_types() const | VArray<int8_t> CurvesGeometry::curve_types() const | ||||
| { | { | ||||
| return get_varray_attribute<int8_t>( | return get_varray_attribute<int8_t>( | ||||
| *this, ATTR_DOMAIN_CURVE, ATTR_CURVE_TYPE, CURVE_TYPE_CATMULL_ROM); | *this, ATTR_DOMAIN_CURVE, ATTR_CURVE_TYPE, CURVE_TYPE_CATMULL_ROM); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| VArray<bool> CurvesGeometry::cyclic() const | VArray<bool> CurvesGeometry::cyclic() const | ||||
| { | { | ||||
| return get_varray_attribute<bool>(*this, ATTR_DOMAIN_CURVE, ATTR_CYCLIC, false); | return get_varray_attribute<bool>(*this, ATTR_DOMAIN_CURVE, ATTR_CYCLIC, false); | ||||
| } | } | ||||
| MutableSpan<bool> CurvesGeometry::cyclic_for_write() | MutableSpan<bool> CurvesGeometry::cyclic_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<bool>(*this, ATTR_DOMAIN_CURVE, ATTR_CYCLIC); | return get_mutable_attribute<bool>(*this, ATTR_DOMAIN_CURVE, ATTR_CYCLIC, false); | ||||
| } | } | ||||
| VArray<int> CurvesGeometry::resolution() const | VArray<int> CurvesGeometry::resolution() const | ||||
| { | { | ||||
| return get_varray_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_RESOLUTION, 12); | return get_varray_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_RESOLUTION, 12); | ||||
| } | } | ||||
| MutableSpan<int> CurvesGeometry::resolution_for_write() | MutableSpan<int> CurvesGeometry::resolution_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_RESOLUTION); | return get_mutable_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_RESOLUTION, 12); | ||||
| } | } | ||||
| VArray<int8_t> CurvesGeometry::handle_types_left() const | VArray<int8_t> CurvesGeometry::handle_types_left() const | ||||
| { | { | ||||
| return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_LEFT, 0); | return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_LEFT, 0); | ||||
| } | } | ||||
| MutableSpan<int8_t> CurvesGeometry::handle_types_left_for_write() | MutableSpan<int8_t> CurvesGeometry::handle_types_left_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_LEFT); | return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_LEFT, 0); | ||||
| } | } | ||||
| VArray<int8_t> CurvesGeometry::handle_types_right() const | VArray<int8_t> CurvesGeometry::handle_types_right() const | ||||
| { | { | ||||
| return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_RIGHT, 0); | return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_RIGHT, 0); | ||||
| } | } | ||||
| MutableSpan<int8_t> CurvesGeometry::handle_types_right_for_write() | MutableSpan<int8_t> CurvesGeometry::handle_types_right_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_RIGHT); | return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_TYPE_RIGHT, 0); | ||||
| } | } | ||||
| Span<float3> CurvesGeometry::handle_positions_left() const | Span<float3> CurvesGeometry::handle_positions_left() const | ||||
| { | { | ||||
| return get_span_attribute<float3>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_POSITION_LEFT); | return get_span_attribute<float3>(*this, ATTR_DOMAIN_POINT, ATTR_HANDLE_POSITION_LEFT); | ||||
| } | } | ||||
| MutableSpan<float3> CurvesGeometry::handle_positions_left_for_write() | MutableSpan<float3> CurvesGeometry::handle_positions_left_for_write() | ||||
| { | { | ||||
| Show All 10 Lines | |||||
| } | } | ||||
| VArray<int8_t> CurvesGeometry::nurbs_orders() const | VArray<int8_t> CurvesGeometry::nurbs_orders() const | ||||
| { | { | ||||
| return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_ORDER, 4); | return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_ORDER, 4); | ||||
| } | } | ||||
| MutableSpan<int8_t> CurvesGeometry::nurbs_orders_for_write() | MutableSpan<int8_t> CurvesGeometry::nurbs_orders_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_ORDER); | return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_ORDER, 4); | ||||
| } | } | ||||
| Span<float> CurvesGeometry::nurbs_weights() const | Span<float> CurvesGeometry::nurbs_weights() const | ||||
| { | { | ||||
| return get_span_attribute<float>(*this, ATTR_DOMAIN_POINT, ATTR_NURBS_WEIGHT); | return get_span_attribute<float>(*this, ATTR_DOMAIN_POINT, ATTR_NURBS_WEIGHT); | ||||
| } | } | ||||
| MutableSpan<float> CurvesGeometry::nurbs_weights_for_write() | MutableSpan<float> CurvesGeometry::nurbs_weights_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<float>(*this, ATTR_DOMAIN_POINT, ATTR_NURBS_WEIGHT); | return get_mutable_attribute<float>(*this, ATTR_DOMAIN_POINT, ATTR_NURBS_WEIGHT); | ||||
| } | } | ||||
| VArray<int8_t> CurvesGeometry::nurbs_knots_modes() const | VArray<int8_t> CurvesGeometry::nurbs_knots_modes() const | ||||
| { | { | ||||
| return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_KNOTS_MODE, 0); | return get_varray_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_KNOTS_MODE, 0); | ||||
| } | } | ||||
| MutableSpan<int8_t> CurvesGeometry::nurbs_knots_modes_for_write() | MutableSpan<int8_t> CurvesGeometry::nurbs_knots_modes_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_KNOTS_MODE); | return get_mutable_attribute<int8_t>(*this, ATTR_DOMAIN_CURVE, ATTR_NURBS_KNOTS_MODE, 0); | ||||
| } | } | ||||
| VArray<int> CurvesGeometry::surface_triangle_indices() const | VArray<int> CurvesGeometry::surface_triangle_indices() const | ||||
| { | { | ||||
| return get_varray_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_SURFACE_TRIANGLE_INDEX, -1); | return get_varray_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_SURFACE_TRIANGLE_INDEX, -1); | ||||
| } | } | ||||
| MutableSpan<int> CurvesGeometry::surface_triangle_indices_for_write() | MutableSpan<int> CurvesGeometry::surface_triangle_indices_for_write() | ||||
| { | { | ||||
| return get_mutable_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_SURFACE_TRIANGLE_INDEX); | return get_mutable_attribute<int>(*this, ATTR_DOMAIN_CURVE, ATTR_SURFACE_TRIANGLE_INDEX, -1); | ||||
| } | } | ||||
| Span<float2> CurvesGeometry::surface_triangle_coords() const | Span<float2> CurvesGeometry::surface_triangle_coords() const | ||||
| { | { | ||||
| return get_span_attribute<float2>(*this, ATTR_DOMAIN_CURVE, ATTR_SURFACE_TRIANGLE_COORDINATE); | return get_span_attribute<float2>(*this, ATTR_DOMAIN_CURVE, ATTR_SURFACE_TRIANGLE_COORDINATE); | ||||
| } | } | ||||
| MutableSpan<float2> CurvesGeometry::surface_triangle_coords_for_write() | MutableSpan<float2> CurvesGeometry::surface_triangle_coords_for_write() | ||||
| ▲ Show 20 Lines • Show All 808 Lines • Show Last 20 Lines | |||||