fix T48602: Changed The Collada validator to treat faces with < 3 verts as Warning and let the Mesh Validator take care of the cleanup
This commit is contained in:
parent
6d111a233c
commit
a47937454c
Notes:
blender-bot
2023-10-18 15:23:11 +02:00
Referenced by issue #48602, Broken imported Collada - at least one face with vertex count < 3
|
@ -271,38 +271,41 @@ bool MeshImporter::is_nice_mesh(COLLADAFW::Mesh *mesh) // checks if mesh has su
|
|||
COLLADAFW::MeshPrimitiveArray& prim_arr = mesh->getMeshPrimitives();
|
||||
|
||||
const std::string &name = bc_get_dae_name(mesh);
|
||||
int hole_count = 0;
|
||||
|
||||
for (unsigned i = 0; i < prim_arr.getCount(); i++) {
|
||||
|
||||
|
||||
COLLADAFW::MeshPrimitive *mp = prim_arr[i];
|
||||
COLLADAFW::MeshPrimitive::PrimitiveType type = mp->getPrimitiveType();
|
||||
|
||||
const char *type_str = bc_primTypeToStr(type);
|
||||
|
||||
|
||||
// OpenCollada passes POLYGONS type for <polylist>
|
||||
if (type == COLLADAFW::MeshPrimitive::POLYLIST || type == COLLADAFW::MeshPrimitive::POLYGONS) {
|
||||
|
||||
COLLADAFW::Polygons *mpvc = (COLLADAFW::Polygons *)mp;
|
||||
COLLADAFW::Polygons::VertexCountArray& vca = mpvc->getGroupedVerticesVertexCountArray();
|
||||
|
||||
|
||||
int hole_count = 0;
|
||||
int nonface_count = 0;
|
||||
|
||||
for (unsigned int j = 0; j < vca.getCount(); j++) {
|
||||
int count = vca[j];
|
||||
if (abs(count) < 3) {
|
||||
fprintf(stderr, "ERROR: Primitive %s in %s has at least one face with vertex count < 3\n",
|
||||
type_str, name.c_str());
|
||||
return false;
|
||||
nonface_count++;
|
||||
}
|
||||
if (count < 0)
|
||||
{
|
||||
|
||||
if (count < 0) {
|
||||
hole_count ++;
|
||||
}
|
||||
}
|
||||
|
||||
if (hole_count > 0)
|
||||
{
|
||||
if (hole_count > 0) {
|
||||
fprintf(stderr, "WARNING: Primitive %s in %s: %d holes not imported (unsupported)\n", type_str, name.c_str(), hole_count);
|
||||
}
|
||||
|
||||
if (nonface_count > 0) {
|
||||
fprintf(stderr, "WARNING: Primitive %s in %s: %d faces with vertex count < 3 (rejected)\n", type_str, name.c_str(), nonface_count);
|
||||
}
|
||||
}
|
||||
|
||||
else if (type == COLLADAFW::MeshPrimitive::LINES) {
|
||||
|
|
Loading…
Reference in New Issue