Various fixes for tests

This commit is contained in:
Hans Goudey 2022-12-07 10:25:33 -06:00
parent c12d613b12
commit d3e76745a6
13 changed files with 35 additions and 19 deletions

View File

@ -538,8 +538,6 @@ static int customdata_compare(
int ptot = m1->totpoly;
for (j = 0; j < ptot; j++, p1++, p2++) {
int k;
if (p1->totloop != p2->totloop) {
return MESHCMP_POLYMISMATCH;
}

View File

@ -126,7 +126,7 @@ static void make_edges_mdata_extend(Mesh &mesh)
for (i = 0, mp = polys.data(); i < mesh.totpoly; i++, mp++) {
int corner_i = mp->loopstart;
int corner_i_prev = mp->loopstart;
int corner_i_prev = mp->loopstart + (mp->totloop - 1);
int j;
for (j = 0; j < mp->totloop; j++, corner_i++) {
/* lookup hashed edge index */

View File

@ -598,7 +598,7 @@ Mesh *BKE_mesh_merge_verts(Mesh *mesh,
/* Update loop indices and copy customdata. */
for (i = 0; i < result->totloop; i++) {
/* Edge remapping has already be done in main loop handling part above. */
BLI_assert(newv[new_ml->v] != -1);
BLI_assert(newv[corner_verts[i]] != -1);
corner_verts[i] = newv[corner_verts[i]];
CustomData_copy_data(&mesh->ldata, &result->ldata, oldl[i], i, 1);

View File

@ -1250,7 +1250,6 @@ static void loop_split_worker_do(LoopSplitTaskDataCommon *common_data,
LoopSplitTaskData *data,
BLI_Stack *edge_vectors)
{
BLI_assert(data->ml_curr);
if (data->e2l_prev) {
BLI_assert((edge_vectors == nullptr) || BLI_stack_is_empty(edge_vectors));
data->edge_vectors = edge_vectors;

View File

@ -325,8 +325,6 @@ bool BKE_mesh_runtime_is_valid(Mesh *me_eval)
MutableSpan<float3> positions = me_eval->positions_for_write();
MutableSpan<MEdge> edges = me_eval->edges_for_write();
MutableSpan<MPoly> polys = me_eval->polys_for_write();
MutableSpan<int> corner_verts = me_eval->corner_verts_for_write();
MutableSpan<int> corner_edges = me_eval->corner_edges_for_write();
is_valid &= BKE_mesh_validate_all_customdata(
&me_eval->vdata,
@ -350,8 +348,9 @@ bool BKE_mesh_runtime_is_valid(Mesh *me_eval)
edges.size(),
static_cast<MFace *>(CustomData_get_layer(&me_eval->fdata, CD_MFACE)),
me_eval->totface,
loops.data(),
loops.size(),
me_eval->corner_verts_for_write().data(),
me_eval->corner_edges_for_write().data(),
me_eval->totloop,
polys.data(),
polys.size(),
me_eval->deform_verts_for_write().data(),

View File

@ -615,11 +615,11 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
const int vert_i = corner_verts[sp->loopstart + j];
if (vert_i >= totvert) {
/* Invalid vert idx. */
PRINT_ERR("\tLoop %d has invalid vert reference (%d)", sp->loopstart + j, vert_i);
PRINT_ERR("\tLoop %u has invalid vert reference (%d)", sp->loopstart + j, vert_i);
sp->invalid = true;
}
else if (BLI_BITMAP_TEST(vert_tag, vert_i)) {
PRINT_ERR("\tPoly %d has duplicated vert reference at corner (%d)", i, j);
PRINT_ERR("\tPoly %u has duplicated vert reference at corner (%u)", i, j);
sp->invalid = true;
}
else {
@ -634,7 +634,7 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
/* Test all poly's loops. */
for (j = 0; j < mp->totloop; j++) {
const int corner_i = sp->loopstart = j;
const int corner_i = sp->loopstart + j;
const int vert_i = corner_verts[corner_i];
const int edge_i = corner_edges[corner_i];
v1 = vert_i;
@ -656,13 +656,13 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
int prev_e = edge_i;
corner_edges[corner_i] = POINTER_AS_INT(BLI_edgehash_lookup(edge_hash, v1, v2));
fix_flag.loops_edge = true;
PRINT_ERR("\tLoop %u has invalid edge reference (%d), fixed using edge %d",
PRINT_ERR("\tLoop %d has invalid edge reference (%d), fixed using edge %d",
corner_i,
prev_e,
corner_edges[corner_i]);
}
else {
PRINT_ERR("\tLoop %u has invalid edge reference (%u)", corner_i, edge_i);
PRINT_ERR("\tLoop %d has invalid edge reference (%d)", corner_i, edge_i);
sp->invalid = true;
}
}

View File

@ -254,7 +254,7 @@ static void snap_object_data_mesh_get(SnapObjectContext *sctx,
BKE_bvhtree_from_mesh_get(
r_treedata, me_eval, use_hide ? BVHTREE_FROM_LOOPTRI_NO_HIDDEN : BVHTREE_FROM_LOOPTRI, 4);
BLI_assert(r_treedata->positions == positions.data());
BLI_assert(reinterpret_cast<const float3 *>(r_treedata->positions) == positions.data());
BLI_assert(r_treedata->corner_verts == corner_verts.data());
BLI_assert(!polys.data() || r_treedata->looptri);
BLI_assert(!r_treedata->tree || r_treedata->looptri);

View File

@ -833,6 +833,8 @@ static OrderedAttributes gather_generic_mesh_attributes_to_propagate(
in_geometry_set.gather_attributes_for_propagation(
src_component_types, GEO_COMPONENT_TYPE_MESH, true, attributes_to_propagate);
attributes_to_propagate.remove("position");
attributes_to_propagate.remove(".corner_vert");
attributes_to_propagate.remove(".corner_edge");
attributes_to_propagate.remove("normal");
attributes_to_propagate.remove("shade_smooth");
r_create_id = attributes_to_propagate.pop_try("id").has_value();
@ -953,7 +955,7 @@ static void execute_realize_mesh_task(const RealizeInstancesOptions &options,
const IndexRange dst_vert_range(task.start_indices.vertex, src_positions.size());
const IndexRange dst_edge_range(task.start_indices.edge, src_edges.size());
const IndexRange dst_poly_range(task.start_indices.poly, src_polys.size());
const IndexRange dst_corner_range(task.start_indices.corner, all_dst_corner_verts.size());
const IndexRange dst_corner_range(task.start_indices.corner, src_corner_verts.size());
MutableSpan<float3> dst_positions = all_dst_positions.slice(dst_vert_range);
MutableSpan<MEdge> dst_edges = all_dst_edges.slice(dst_edge_range);

View File

@ -215,7 +215,7 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
MPoly &mp_dst = dst_polys[i_dst];
mp_dst = mp_src;
mp_dst.totloop = new_loop_starts[i_dst];
mp_dst.loopstart = new_loop_starts[i_dst];
MutableSpan<int> dst_poly_verts = dst_corner_verts.slice(mp_dst.loopstart, size);
MutableSpan<int> dst_poly_edges = dst_corner_edges.slice(mp_dst.loopstart, size);
@ -249,7 +249,7 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
MPoly &mp_dst = dst_polys[i_dst];
mp_dst = mp_src;
mp_dst.totloop = new_loop_starts[i_dst];
mp_dst.loopstart = new_loop_starts[i_dst];
MutableSpan<int> dst_poly_verts = dst_corner_verts.slice(mp_dst.loopstart, size);
MutableSpan<int> dst_poly_edges = dst_corner_edges.slice(mp_dst.loopstart, size);
@ -281,7 +281,7 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
MPoly &mp_dst = dst_polys[i_dst];
mp_dst = mp_src;
mp_dst.totloop = new_loop_starts[i_dst];
mp_dst.loopstart = new_loop_starts[i_dst];
MutableSpan<int> dst_poly_verts = dst_corner_verts.slice(mp_dst.loopstart, size);
MutableSpan<int> dst_poly_edges = dst_corner_edges.slice(mp_dst.loopstart, size);
@ -821,6 +821,8 @@ static void do_mesh_separation(GeometrySet &geometry_set,
Map<AttributeIDRef, AttributeKind> attributes;
geometry_set.gather_attributes_for_propagation(
{GEO_COMPONENT_TYPE_MESH}, GEO_COMPONENT_TYPE_MESH, false, attributes);
attributes.remove(".corner_vert");
attributes.remove(".corner_edge");
switch (mode) {
case GEO_NODE_DELETE_GEOMETRY_MODE_ALL: {

View File

@ -139,6 +139,8 @@ static void transfer_attributes(
* Remove anonymous attributes that don't need to be propagated.*/
Set<AttributeIDRef> attribute_ids = src_attributes.all_ids();
attribute_ids.remove("position");
attribute_ids.remove(".corner_vert");
attribute_ids.remove(".corner_edge");
attribute_ids.remove_if([](const AttributeIDRef &id) { return !id.should_be_kept(); });
for (const AttributeIDRef &id : attribute_ids) {

View File

@ -408,6 +408,8 @@ static void copy_face_attributes_without_id(GeometrySet &geometry_set,
{
Map<AttributeIDRef, AttributeKind> attributes = gather_attributes_without_id(
geometry_set, GEO_COMPONENT_TYPE_MESH);
attributes.remove(".corner_vert");
attributes.remove(".corner_edge");
for (const Map<AttributeIDRef, AttributeKind>::Item entry : attributes.items()) {
const AttributeIDRef attribute_id = entry.key;

View File

@ -234,6 +234,9 @@ static void extrude_mesh_vertices(Mesh &mesh,
if (!ELEM(meta_data.domain, ATTR_DOMAIN_POINT, ATTR_DOMAIN_EDGE)) {
return true;
}
if (id.is_named() && ELEM(id.name(), ".corner_vert", ".corner_edge")) {
return true;
}
if (meta_data.data_type == CD_PROP_STRING) {
return true;
}
@ -491,6 +494,9 @@ static void extrude_mesh_edges(Mesh &mesh,
if (meta_data.data_type == CD_PROP_STRING) {
return true;
}
if (id.is_named() && ELEM(id.name(), ".corner_vert", ".corner_edge")) {
return true;
}
GSpanAttributeWriter attribute = attributes.lookup_or_add_for_write_span(
id, meta_data.domain, meta_data.data_type);
if (!attribute) {
@ -883,6 +889,9 @@ static void extrude_mesh_face_regions(Mesh &mesh,
if (meta_data.data_type == CD_PROP_STRING) {
return true;
}
if (id.is_named() && ELEM(id.name(), ".corner_vert", ".corner_edge")) {
return true;
}
GSpanAttributeWriter attribute = attributes.lookup_or_add_for_write_span(
id, meta_data.domain, meta_data.data_type);
if (!attribute) {

View File

@ -51,6 +51,9 @@ static void mesh_flip_faces(Mesh &mesh, const Field<bool> &selection_field)
if (meta_data.data_type == CD_PROP_STRING) {
return true;
}
if (attribute_id.is_named() && ELEM(attribute_id.name(), ".corner_vert", ".corner_edge")) {
return true;
}
if (meta_data.domain == ATTR_DOMAIN_CORNER) {
GSpanAttributeWriter attribute = attributes.lookup_or_add_for_write_span(
attribute_id, ATTR_DOMAIN_CORNER, meta_data.data_type);