[Bf-blender-cvs] [eabdf1dc827] refactor-mesh-uv-map-generic: Refactor reading and writing, other changes
Hans Goudey
noreply at git.blender.org
Fri Aug 26 04:34:49 CEST 2022
Commit: eabdf1dc82729283cfa162211f5f8e21037caf6c
Author: Hans Goudey
Date: Thu Aug 18 22:00:28 2022 -0400
Branches: refactor-mesh-uv-map-generic
https://developer.blender.org/rBeabdf1dc82729283cfa162211f5f8e21037caf6c
Refactor reading and writing, other changes
===================================================================
M source/blender/blenkernel/BKE_attribute.h
M source/blender/blenkernel/BKE_customdata.h
M source/blender/blenkernel/BKE_mesh_legacy_convert.h
M source/blender/blenkernel/intern/attribute.cc
M source/blender/blenkernel/intern/customdata.cc
M source/blender/blenkernel/intern/mesh.cc
M source/blender/blenkernel/intern/mesh_legacy_convert.cc
M source/blender/bmesh/intern/bmesh_interp.c
M source/blender/io/wavefront_obj/importer/obj_import_mesh.cc
M source/blender/makesrna/intern/rna_mesh.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_attribute.h b/source/blender/blenkernel/BKE_attribute.h
index 64019bb7a26..3e2598a6c05 100644
--- a/source/blender/blenkernel/BKE_attribute.h
+++ b/source/blender/blenkernel/BKE_attribute.h
@@ -20,6 +20,7 @@ struct CustomData;
struct CustomDataLayer;
struct ID;
struct ReportList;
+struct Mesh;
/** #Attribute.domain */
typedef enum eAttrDomain {
@@ -142,11 +143,11 @@ struct CustomDataLayer *BKE_id_attributes_color_find(const struct ID *id, const
bool BKE_id_attribute_calc_unique_name(struct ID *id, const char *name, char *outname);
-UVMap_Data BKE_id_attributes_create_uvmap_layers(struct ID *id,
+UVMap_Data BKE_id_attributes_create_uvmap_layers(struct Mesh *mesh,
char const *name,
struct ReportList *reports,
uint32_t needed_layer_flags);
-UVMap_Data BKE_id_attributes_ensure_uvmap_layers_index(struct ID *id,
+UVMap_Data BKE_id_attributes_ensure_uvmap_layers_index(struct Mesh *mesh,
int index_of_uvmap,
struct ReportList *reports,
uint32_t needed_layer_flags);
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index b1ec14534f5..f9868d614e5 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -769,7 +769,24 @@ typedef struct UVMap_Data {
#ifdef __cplusplus
-std::string UV_sublayer_name(char const *layername, char const *prefix);
+namespace blender::bke {
+
+inline std::string uv_sublayer_name_vert_selection(const StringRef uv_map_name)
+{
+ return std::string(".") + UV_VERTSEL_NAME + "." + uv_map_name;
+}
+
+inline std::string uv_sublayer_name_edge_selection(const StringRef uv_map_name)
+{
+ return std::string(".") + UV_EDGESEL_NAME + "." + uv_map_name;
+}
+
+inline std::string uv_sublayer_name_pin(const StringRef uv_map_name)
+{
+ return std::string(".") + UV_PINNED_NAME + "." + uv_map_name;
+}
+
+} // namespace blender::bke
#endif
/**
diff --git a/source/blender/blenkernel/BKE_mesh_legacy_convert.h b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
index 0eb94de7929..2d4664bf278 100644
--- a/source/blender/blenkernel/BKE_mesh_legacy_convert.h
+++ b/source/blender/blenkernel/BKE_mesh_legacy_convert.h
@@ -9,6 +9,12 @@
#include "BLI_utildefines.h"
+#ifdef __cplusplus
+# include "BLI_array.hh"
+# include "BLI_resource_scope.hh"
+# include "BLI_vector.hh"
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -17,7 +23,15 @@ struct CustomData;
struct Mesh;
struct MFace;
-void BKE_mesh_legacy_convert_uvs_to_struct(const Mesh *mesh);
+#ifdef __cplusplus
+}
+#endif
+
+#ifdef __cplusplus
+
+void BKE_mesh_legacy_convert_uvs_to_struct(const Mesh *mesh,
+ blender::ResourceScope &temp_mloopuv_for_convert,
+ blender::Vector<CustomDataLayer, 16> &layers_to_write);
void BKE_mesh_legacy_convert_uvs_to_generic(Mesh *mesh);
/**
@@ -30,6 +44,12 @@ void BKE_mesh_legacy_convert_hide_layers_to_flags(struct Mesh *mesh);
*/
void BKE_mesh_legacy_convert_flags_to_hide_layers(struct Mesh *mesh);
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/**
* Recreate #MFace Tessellation.
*
diff --git a/source/blender/blenkernel/intern/attribute.cc b/source/blender/blenkernel/intern/attribute.cc
index 1c1c9f11788..ebd335fc68a 100644
--- a/source/blender/blenkernel/intern/attribute.cc
+++ b/source/blender/blenkernel/intern/attribute.cc
@@ -145,6 +145,7 @@ bool BKE_id_attribute_rename(ID *id,
const char *new_name,
ReportList *reports)
{
+ using namespace blender::bke;
if (BKE_id_attribute_required(id, old_name)) {
BLI_assert_msg(0, "Required attribute name is not editable");
return false;
@@ -170,13 +171,13 @@ bool BKE_id_attribute_rename(ID *id,
if (layer->type == CD_PROP_FLOAT2) {
/* Scan for and rename uv sublayers layers. */
- std::string old_vertsel_layer_name = UV_sublayer_name(layer->name, UV_VERTSEL_NAME);
- std::string old_edgesel_layer_name = UV_sublayer_name(layer->name, UV_EDGESEL_NAME);
- std::string old_pinned_layer_name = UV_sublayer_name(layer->name, UV_PINNED_NAME);
+ std::string old_vertsel_layer_name = uv_sublayer_name_vert_selection(layer->name);
+ std::string old_edgesel_layer_name = uv_sublayer_name_edge_selection(layer->name);
+ std::string old_pinned_layer_name = uv_sublayer_name_pin(layer->name);
- std::string new_vertsel_layer_name = UV_sublayer_name(result_name, UV_VERTSEL_NAME);
- std::string new_edgesel_layer_name = UV_sublayer_name(result_name, UV_EDGESEL_NAME);
- std::string new_pinned_layer_name = UV_sublayer_name(result_name, UV_PINNED_NAME);
+ std::string new_vertsel_layer_name = uv_sublayer_name_vert_selection(result_name);
+ std::string new_edgesel_layer_name = uv_sublayer_name_edge_selection(result_name);
+ std::string new_pinned_layer_name = uv_sublayer_name_pin(result_name);
BKE_id_attribute_rename(
id, old_vertsel_layer_name.c_str(), new_vertsel_layer_name.c_str(), reports);
@@ -869,51 +870,55 @@ void BKE_id_attribute_copy_domains_temp(short id_type,
*((short *)r_id->name) = id_type;
}
-UVMap_Data BKE_id_attributes_create_uvmap_layers(ID *id,
+UVMap_Data BKE_id_attributes_create_uvmap_layers(Mesh *mesh,
char const *name,
ReportList *reports,
uint32_t needed_layer_flags)
{
+ using namespace blender::bke;
UVMap_Data data;
- bool needvertsel = needed_layer_flags & MLOOPUV_VERTSEL;
- bool neededgesel = needed_layer_flags & MLOOPUV_EDGESEL;
- bool needpinned = needed_layer_flags & MLOOPUV_PINNED;
-
CustomDataLayer *uvlayer = BKE_id_attribute_new(
- id, name, CD_PROP_FLOAT2, ATTR_DOMAIN_CORNER, reports);
+ &mesh->id, name, CD_PROP_FLOAT2, ATTR_DOMAIN_CORNER, reports);
data.uv = (float(*)[2])uvlayer->data;
data.uv_index = attribute_to_layerindex(
- id, uvlayer, ATTR_DOMAIN_MASK_CORNER, CD_MASK_PROP_FLOAT2);
+ &mesh->id, uvlayer, ATTR_DOMAIN_MASK_CORNER, CD_MASK_PROP_FLOAT2);
- std::string vertsel_name = UV_sublayer_name(uvlayer->name, UV_VERTSEL_NAME);
- std::string edgesel_name = UV_sublayer_name(uvlayer->name, UV_EDGESEL_NAME);
- std::string pinned_name = UV_sublayer_name(uvlayer->name, UV_PINNED_NAME);
+ /* TODO(@Baardaap): martijn still need to handle if one of the names is already taken. */
- //! martijn still need to handle if one of the sublayer names is already taken.
-
- if (needvertsel) {
+ if (needed_layer_flags & MLOOPUV_VERTSEL) {
CustomDataLayer *layer = BKE_id_attribute_new(
- id, vertsel_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER, reports);
- data.vertsel = (bool *)layer->data;
+ &mesh->id,
+ uv_sublayer_name_vert_selection(uvlayer->name).c_str(),
+ CD_PROP_BOOL,
+ ATTR_DOMAIN_CORNER,
+ reports);
+ data.vertsel = static_cast<bool *>(layer->data);
}
else {
data.vertsel = nullptr;
}
- if (neededgesel) {
+ if (needed_layer_flags & MLOOPUV_EDGESEL) {
CustomDataLayer *layer = BKE_id_attribute_new(
- id, edgesel_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER, reports);
- data.edgesel = (bool *)layer->data;
+ &mesh->id,
+ uv_sublayer_name_edge_selection(uvlayer->name).c_str(),
+ CD_PROP_BOOL,
+ ATTR_DOMAIN_CORNER,
+ reports);
+ data.edgesel = static_cast<bool *>(layer->data);
}
else {
data.edgesel = nullptr;
}
- if (needpinned) {
- CustomDataLayer *layer = BKE_id_attribute_new(
- id, pinned_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER, reports);
- data.pinned = (bool *)layer->data;
+ if (needed_layer_flags & MLOOPUV_PINNED) {
+ CustomDataLayer *layer = BKE_id_attribute_new(&mesh->id,
+ uv_sublayer_name_pin(uvlayer->name).c_str(),
+ CD_PROP_BOOL,
+ ATTR_DOMAIN_CORNER,
+ reports);
+ data.pinned = static_cast<bool *>(layer->data);
}
else {
data.pinned = nullptr;
@@ -922,11 +927,12 @@ UVMap_Data BKE_id_attributes_create_uvmap_layers(ID *id,
return data;
}
-UVMap_Data BKE_id_attributes_ensure_uvmap_layers_index(struct ID *id,
+UVMap_Data BKE_id_attributes_ensure_uvmap_layers_index(Mesh *mesh,
const int index_of_uvmap,
struct ReportList *reports,
uint32_t needed_layer_flags)
{
+ using namespace blender::bke;
UVMap_Data data;
const bool needvertsel = needed_layer_flags & MLOOPUV_VERTSEL;
@@ -934,43 +940,43 @@ UVMap_Data BKE_id_attributes_ensure_uvmap_layers_index(struct ID *id,
const bool needpinned = needed_layer_flags & MLOOPUV_PINNED;
CustomDataLayer *uvlayer = attribute_from_layerindex(
- id, index_of_uvmap, ATTR_DOMAIN_CORNER, CD_MASK_PROP_FLOAT2);
+ &mesh->id, index_of_uvmap, ATTR_DOMAIN_CORNER, CD_MASK_PROP_FLOAT2);
data.uv_index = attribute_to_layerindex(
- id, uvlayer, ATTR_DOMAIN_MASK_CORNER, CD_MASK_PROP_FLOAT2);
+ &mesh->id, uvlayer, ATTR_DOMAIN_MASK_CORNER, CD_MASK_PROP_FLOAT2);
data.uv = (float(*)[2])uvlayer->data;
- std::string vertsel_name = UV_sublayer_name(uvlayer->name, UV_VERTSEL_NAME);
- std::string edgesel_name = UV_sublayer_name(uvlayer->name, UV_EDGESEL_NAME);
- std::string pinned_name = UV_sublayer_name(uvlayer->name, UV_PINNED_NAME);
+ std::string vertsel_name = uv_sublayer_name_vert_selection(uvlayer->name);
+ std::string edgesel_name = uv_sublayer_name_edge_selection(uvlayer->name);
+ std::string p
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list