[Bf-blender-cvs] [1cbe1a945b8] refactor-mesh-uv-map-generic: Many refactors to UV attribute retrieval
Hans Goudey
noreply at git.blender.org
Sat Aug 27 00:22:40 CEST 2022
Commit: 1cbe1a945b87d8d424a978eae66dd30166610500
Author: Hans Goudey
Date: Fri Aug 26 17:22:31 2022 -0500
Branches: refactor-mesh-uv-map-generic
https://developer.blender.org/rB1cbe1a945b87d8d424a978eae66dd30166610500
Many refactors to UV attribute retrieval
===================================================================
M source/blender/blenkernel/BKE_attribute.h
M source/blender/blenkernel/BKE_attribute.hh
M source/blender/blenkernel/BKE_customdata.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/bmesh.h
M source/blender/bmesh/intern/bmesh_interp.c
M source/blender/bmesh/intern/bmesh_interp.h
M source/blender/bmesh/intern/bmesh_query_uv.cc
M source/blender/bmesh/intern/bmesh_query_uv.h
M source/blender/draw/intern/mesh_extractors/extract_mesh.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh.hh
M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_edituv_data.cc
M source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_fdots_edituv_data.cc
M source/blender/editors/include/ED_mesh.h
M source/blender/editors/include/ED_uvedit.h
M source/blender/editors/mesh/editmesh_utils.c
M source/blender/editors/mesh/mesh_data.cc
M source/blender/editors/sculpt_paint/sculpt_uv.c
M source/blender/editors/transform/transform_convert_mesh_uv.c
M source/blender/editors/uvedit/uvedit_buttons.c
M source/blender/editors/uvedit/uvedit_intern.h
M source/blender/editors/uvedit/uvedit_islands.c
M source/blender/editors/uvedit/uvedit_ops.c
M source/blender/editors/uvedit/uvedit_path.c
M source/blender/editors/uvedit/uvedit_rip.c
M source/blender/editors/uvedit/uvedit_select.c
M source/blender/editors/uvedit/uvedit_smart_stitch.c
M source/blender/editors/uvedit/uvedit_unwrap_ops.c
M source/blender/makesrna/intern/rna_mesh.c
M source/blender/python/bmesh/bmesh_py_types_meshdata.c
===================================================================
diff --git a/source/blender/blenkernel/BKE_attribute.h b/source/blender/blenkernel/BKE_attribute.h
index f8ff5f9b96e..6d089bf0215 100644
--- a/source/blender/blenkernel/BKE_attribute.h
+++ b/source/blender/blenkernel/BKE_attribute.h
@@ -139,11 +139,6 @@ 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_ensure_uvmap_layers_index(struct Mesh *mesh,
- int index_of_uvmap,
- struct ReportList *reports,
- uint32_t needed_layer_flags);
-
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_attribute.hh b/source/blender/blenkernel/BKE_attribute.hh
index d29c60a7373..9b8636d3d08 100644
--- a/source/blender/blenkernel/BKE_attribute.hh
+++ b/source/blender/blenkernel/BKE_attribute.hh
@@ -750,6 +750,21 @@ class CustomDataAttributes {
AttributeAccessor mesh_attributes(const Mesh &mesh);
MutableAttributeAccessor mesh_attributes_for_write(Mesh &mesh);
+inline std::string get_uv_map_vert_selection_name(const StringRef uv_map_name)
+{
+ return std::string(".") + UV_VERTSEL_NAME + "." + uv_map_name;
+}
+
+inline std::string get_uv_map_edge_selection_name(const StringRef uv_map_name)
+{
+ return std::string(".") + UV_EDGESEL_NAME + "." + uv_map_name;
+}
+
+inline std::string get_uv_map_pin_name(const StringRef uv_map_name)
+{
+ return std::string(".") + UV_PINNED_NAME + "." + uv_map_name;
+}
+
AttributeAccessor pointcloud_attributes(const PointCloud &pointcloud);
MutableAttributeAccessor pointcloud_attributes_for_write(PointCloud &pointcloud);
diff --git a/source/blender/blenkernel/BKE_customdata.h b/source/blender/blenkernel/BKE_customdata.h
index 02fd92f5b2d..9a1df681222 100644
--- a/source/blender/blenkernel/BKE_customdata.h
+++ b/source/blender/blenkernel/BKE_customdata.h
@@ -32,6 +32,21 @@ struct CustomData_MeshMasks;
struct ID;
typedef uint64_t eCustomDataMask;
+#define UV_VERTSEL_NAME "vs"
+#define UV_EDGESEL_NAME "es"
+#define UV_PINNED_NAME "pn"
+
+/**
+ * UV map related customdata offsets into BMesh attribute blocks. See #BM_uv_map_get_offsets.
+ * Defined in #BKE_customdata.h to avoid including bmesh.h in many unrelated areas.
+ */
+typedef struct BMUVOffsets {
+ int uv;
+ int select_vert;
+ int select_edge;
+ int pin;
+} BMUVOffsets;
+
/* A data type large enough to hold 1 element from any custom-data layer type. */
typedef struct {
unsigned char data[64];
@@ -741,59 +756,6 @@ void CustomData_blend_write(BlendWriter *writer,
void CustomData_blend_read(struct BlendDataReader *reader, struct CustomData *data, int count);
-/**
- * UV map related customdata offsets for BMesh.
- */
-typedef struct UVMap_Offsets {
- int uv;
- int vertsel;
- int edgesel;
- int pinned;
-} UVMap_Offsets;
-
-/**
- * UV related CustomData pointers.
- * The data pointers point directly to the attributes arrays.
- */
-typedef struct UVMap_Data {
- float (*uv)[2];
- bool *vertsel;
- bool *edgesel;
- bool *pinned;
-} UVMap_Data;
-
-#define UV_VERTSEL_NAME "vs"
-#define UV_EDGESEL_NAME "es"
-#define UV_PINNED_NAME "pn"
-
-#ifdef __cplusplus
-
-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
-/**
- * Get a descriptor containing offsets for layers used for user interaction with the active UV map.
- */
-UVMap_Offsets CustomData_get_active_uvmap_offsets(struct BMesh *bm);
-UVMap_Data CustomData_get_uvmap_data_n(const struct CustomData *data, int n);
-
#ifndef NDEBUG
struct DynStr;
/** Use to inspect mesh data when debugging. */
diff --git a/source/blender/blenkernel/intern/attribute.cc b/source/blender/blenkernel/intern/attribute.cc
index c655be18fbd..e2662130a71 100644
--- a/source/blender/blenkernel/intern/attribute.cc
+++ b/source/blender/blenkernel/intern/attribute.cc
@@ -171,16 +171,16 @@ bool BKE_id_attribute_rename(ID *id,
if (layer->type == CD_PROP_FLOAT2) {
/* Rename UV sub-attributes. */
BKE_id_attribute_rename(id,
- uv_sublayer_name_vert_selection(layer->name).c_str(),
- uv_sublayer_name_vert_selection(result_name).c_str(),
+ get_uv_map_vert_selection_name(layer->name).c_str(),
+ get_uv_map_vert_selection_name(result_name).c_str(),
reports);
BKE_id_attribute_rename(id,
- uv_sublayer_name_edge_selection(layer->name).c_str(),
- uv_sublayer_name_edge_selection(result_name).c_str(),
+ get_uv_map_edge_selection_name(layer->name).c_str(),
+ get_uv_map_edge_selection_name(result_name).c_str(),
reports);
BKE_id_attribute_rename(id,
- uv_sublayer_name_pin(layer->name).c_str(),
- uv_sublayer_name_pin(result_name).c_str(),
+ get_uv_map_pin_name(layer->name).c_str(),
+ get_uv_map_pin_name(result_name).c_str(),
reports);
}
@@ -595,26 +595,6 @@ CustomDataLayer *BKE_id_attribute_from_index(ID *id,
return nullptr;
}
-static CustomDataLayer *attribute_from_layerindex(ID *id,
- const int lookup_index,
- const eAttrDomain domain,
- const eCustomDataMask layer_mask)
-{
- DomainInfo info[ATTR_DOMAIN_NUM];
- get_domains(id, info);
-
- CustomData *customdata = info[domain].customdata;
-
- BLI_assert(lookup_index >= 0);
- BLI_assert(lookup_index < customdata->totlayer);
-
- if (!(layer_mask & CD_TYPE_AS_MASK(customdata->layers[lookup_index].type))) {
- return nullptr;
- }
-
- return customdata->layers + lookup_index;
-}
-
/** Get list of domain types but with ATTR_DOMAIN_FACE and
* ATTR_DOMAIN_CORNER swapped.
*/
@@ -829,57 +809,3 @@ void BKE_id_attribute_copy_domains_temp(short id_type,
*((short *)r_id->name) = id_type;
}
-
-UVMap_Data BKE_id_attributes_ensure_uvmap_layers_index(Mesh *mesh,
- const int index_of_uvmap,
- ReportList *reports,
- uint32_t needed_layer_flags)
-{
- using namespace blender::bke;
- UVMap_Data data;
-
- const bool needvertsel = needed_layer_flags & MLOOPUV_VERTSEL;
- const bool neededgesel = needed_layer_flags & MLOOPUV_EDGESEL;
- const bool needpinned = needed_layer_flags & MLOOPUV_PINNED;
-
- CustomDataLayer *uvlayer = attribute_from_layerindex(
- &mesh->id, index_of_uvmap, ATTR_DOMAIN_CORNER, CD_MASK_PROP_FLOAT2);
-
- data.uv = static_cast<float(*)[2]>(uvlayer->data);
-
- std::string vertsel_name = uv_sublayer_name_vert_selection(uvlayer->name);
- std::string edgesel_name = uv_sublayer_name_edge_selection(uvlayer->name);
- std::string pinned_name = uv_sublayer_name_pin(uvlayer->name);
-
- CustomDataLayer *vertsel = BKE_id_attribute_find(
- &mesh->id, vertsel_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER);
- data.vertsel = vertsel ? static_cast<bool *>(vertsel->data) : nullptr;
-
- CustomDataLayer *edgesel = BKE_id_attribute_find(
- &mesh->id, edgesel_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER);
- data.edgesel = edgesel ? static_cast<bool *>(edgesel->data) : nullptr;
-
- CustomDataLayer *pin = BKE_id_attribute_find(
- &mesh->id, pinned_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER);
- data.pinned = pin ? static_cast<bool *>(pin->data) : nullptr;
-
- if (needvertsel && data.vertsel == nullptr) {
- CustomDataLayer *layer = BKE_id_attribute_new(
- &mesh->id, vertsel_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER, reports);
- data.vertsel = static_cast<bool *>(layer->data);
- }
-
- if (neededgesel && data.edgesel == nullptr) {
- CustomDataLayer *layer = BKE_id_attribute_new(
- &mesh->id, edgesel_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER, reports);
- data.edgesel = static_cast<bool *>(layer->data);
- }
-
- if (needpinned && data.pinned == nullptr) {
- CustomDataLayer *layer = BKE_id_attribute_new(
- &mesh->id, pinned_name.c_str(), CD_PROP_BOOL, ATTR_DOMAIN_CORNER, reports);
- data.pinned = static_cast<bool *>(layer->data);
- }
-
- return data;
-}
diff --git a/source/blender/blenkernel/intern/customdata.cc b/source/blender/blenkernel/intern/customdata.cc
index f3a12885d8a..ede6a02a151 100644
--- a/source/blender/blenkernel/intern/customdata.cc
+++ b/source/blender/blenkernel/intern/customdata.cc
@@ -3485,7 +3485,6 @@ bool CustomData_set_layer_name(CustomData *data, const int type, const int n, co
const char *CustomData_get_layer_name(const CustomData *data, const int type, const int n)
{
const int layer_index = CustomData_get_layer_index_n(data, type, n);
-
return (layer_index == -1) ? nullptr : data->layers[layer_index].name;
}
@@ -5312,64 +5311,6 @@ void CustomData_blend_read(BlendDataReader *reader, CustomData *data, const int
/** \} */
-/* -------------------------------------------------------------------- */
-/** \name Custom Data UVmap Handling
- * \{ */
-
-static UVMap_Data retrieve_uv_map_data(const CustomData &ldata, const int layer_index)
-{
- using namespace blender::bke;
- const StringRef name = ldata.layers[layer_index].name;
-
- const int vertsel = CustomData_get_named_layer_index(
- &ldata, CD_PROP_BOOL, uv_sublayer_name_vert_selection(name).c_str());
- co
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list