Refactoring mesh code, it has become clear that local cleanups and simplifications are limited by the need to keep a C public API for mesh functions. This change makes code more obvious and makes further refactoring much easier. - Add a new `BKE_mesh.hh` header for a C++ only mesh API - Introduce a new `blender::bke::mesh` namespace, documented here: https://wiki.blender.org/wiki/Source/Objects/Mesh#Namespaces - Move some functions to the new namespace, cleaning up their arguments - Move code to `Array` and `float3` where necessary to use the new API - Define existing inline mesh data access functions to the new header - Keep some C API functions where necessary because of RNA - Move all C++ files to use the new header, which includes the old one In the future it may make sense to split up `BKE_mesh.hh` more, but for now keeping the same name as the existing header keeps things simple. Pull Request: blender/blender#105416
84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup bke
|
|
*
|
|
* Evaluated mesh info printing function, to help track down differences output.
|
|
*
|
|
* Output from these functions can be evaluated as Python literals.
|
|
* See `bmesh_debug.c` for the equivalent #BMesh functionality.
|
|
*/
|
|
|
|
#ifndef NDEBUG
|
|
|
|
# include <cstdio>
|
|
|
|
# include "MEM_guardedalloc.h"
|
|
|
|
# include "DNA_mesh_types.h"
|
|
# include "DNA_meshdata_types.h"
|
|
# include "DNA_object_types.h"
|
|
|
|
# include "BLI_utildefines.h"
|
|
|
|
# include "BKE_customdata.h"
|
|
|
|
# include "BKE_mesh.hh"
|
|
|
|
# include "BLI_dynstr.h"
|
|
|
|
char *BKE_mesh_debug_info(const Mesh *me)
|
|
{
|
|
DynStr *dynstr = BLI_dynstr_new();
|
|
char *ret;
|
|
|
|
const char *indent8 = " ";
|
|
|
|
BLI_dynstr_append(dynstr, "{\n");
|
|
BLI_dynstr_appendf(dynstr, " 'ptr': '%p',\n", (void *)me);
|
|
BLI_dynstr_appendf(dynstr, " 'totvert': %d,\n", me->totvert);
|
|
BLI_dynstr_appendf(dynstr, " 'totedge': %d,\n", me->totedge);
|
|
BLI_dynstr_appendf(dynstr, " 'totface': %d,\n", me->totface);
|
|
BLI_dynstr_appendf(dynstr, " 'totpoly': %d,\n", me->totpoly);
|
|
|
|
BLI_dynstr_appendf(dynstr, " 'runtime.deformed_only': %d,\n", me->runtime->deformed_only);
|
|
BLI_dynstr_appendf(
|
|
dynstr, " 'runtime->is_original_bmesh': %d,\n", me->runtime->is_original_bmesh);
|
|
|
|
BLI_dynstr_append(dynstr, " 'vert_layers': (\n");
|
|
CustomData_debug_info_from_layers(&me->vdata, indent8, dynstr);
|
|
BLI_dynstr_append(dynstr, " ),\n");
|
|
|
|
BLI_dynstr_append(dynstr, " 'edge_layers': (\n");
|
|
CustomData_debug_info_from_layers(&me->edata, indent8, dynstr);
|
|
BLI_dynstr_append(dynstr, " ),\n");
|
|
|
|
BLI_dynstr_append(dynstr, " 'loop_layers': (\n");
|
|
CustomData_debug_info_from_layers(&me->ldata, indent8, dynstr);
|
|
BLI_dynstr_append(dynstr, " ),\n");
|
|
|
|
BLI_dynstr_append(dynstr, " 'poly_layers': (\n");
|
|
CustomData_debug_info_from_layers(&me->pdata, indent8, dynstr);
|
|
BLI_dynstr_append(dynstr, " ),\n");
|
|
|
|
BLI_dynstr_append(dynstr, " 'tessface_layers': (\n");
|
|
CustomData_debug_info_from_layers(&me->fdata, indent8, dynstr);
|
|
BLI_dynstr_append(dynstr, " ),\n");
|
|
|
|
BLI_dynstr_append(dynstr, "}\n");
|
|
|
|
ret = BLI_dynstr_get_cstring(dynstr);
|
|
BLI_dynstr_free(dynstr);
|
|
return ret;
|
|
}
|
|
|
|
void BKE_mesh_debug_print(const Mesh *me)
|
|
{
|
|
char *str = BKE_mesh_debug_info(me);
|
|
puts(str);
|
|
fflush(stdout);
|
|
MEM_freeN(str);
|
|
}
|
|
|
|
#endif /* NDEBUG */
|