Changeset View
Changeset View
Standalone View
Standalone View
source/blender/alembic/intern/abc_mesh.cc
| Show First 20 Lines • Show All 555 Lines • ▼ Show 20 Lines | if (m_settings.triangulate) { | ||||
| const int ngon_method = m_settings.ngon_method; | const int ngon_method = m_settings.ngon_method; | ||||
| struct BMeshCreateParams bmcp = {false}; | struct BMeshCreateParams bmcp = {false}; | ||||
| struct BMeshFromMeshParams bmfmp = {true, false, false, 0}; | struct BMeshFromMeshParams bmfmp = {true, false, false, 0}; | ||||
| BMesh *bm = BKE_mesh_to_bmesh_ex(mesh, &bmcp, &bmfmp); | BMesh *bm = BKE_mesh_to_bmesh_ex(mesh, &bmcp, &bmfmp); | ||||
| BM_mesh_triangulate(bm, quad_method, ngon_method, 4, tag_only, NULL, NULL, NULL); | BM_mesh_triangulate(bm, quad_method, ngon_method, 4, tag_only, NULL, NULL, NULL); | ||||
| Mesh *result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL); | Mesh *result = BKE_mesh_from_bmesh_for_eval_nomain(bm, NULL, mesh); | ||||
| BM_mesh_free(bm); | BM_mesh_free(bm); | ||||
| if (r_needsfree) { | if (r_needsfree) { | ||||
| BKE_id_free(NULL, mesh); | BKE_id_free(NULL, mesh); | ||||
| } | } | ||||
| mesh = result; | mesh = result; | ||||
| r_needsfree = true; | r_needsfree = true; | ||||
| ▲ Show 20 Lines • Show All 614 Lines • ▼ Show 20 Lines | Mesh *AbcMeshReader::read_mesh(Mesh *existing_mesh, | ||||
| ImportSettings settings; | ImportSettings settings; | ||||
| settings.read_flag |= read_flag; | settings.read_flag |= read_flag; | ||||
| if (topology_changed(existing_mesh, sample_sel)) { | if (topology_changed(existing_mesh, sample_sel)) { | ||||
| new_mesh = BKE_mesh_new_nomain_from_template( | new_mesh = BKE_mesh_new_nomain_from_template( | ||||
| existing_mesh, positions->size(), 0, 0, face_indices->size(), face_counts->size()); | existing_mesh, positions->size(), 0, 0, face_indices->size(), face_counts->size()); | ||||
| settings.read_flag |= MOD_MESHSEQ_READ_ALL; | settings.read_flag |= MOD_MESHSEQ_READ_ALL; | ||||
| /* XXX fixme after 2.80; mesh->flag isn't copied by BKE_mesh_new_nomain_from_template() */ | |||||
| new_mesh->flag |= (existing_mesh->flag & ME_AUTOSMOOTH); | |||||
| } | } | ||||
| else { | else { | ||||
| /* If the face count changed (e.g. by triangulation), only read points. | /* If the face count changed (e.g. by triangulation), only read points. | ||||
| * This prevents crash from T49813. | * This prevents crash from T49813. | ||||
| * TODO(kevin): perhaps find a better way to do this? */ | * TODO(kevin): perhaps find a better way to do this? */ | ||||
| if (face_counts->size() != existing_mesh->totpoly || | if (face_counts->size() != existing_mesh->totpoly || | ||||
| face_indices->size() != existing_mesh->totloop) { | face_indices->size() != existing_mesh->totloop) { | ||||
| settings.read_flag = MOD_MESHSEQ_READ_VERT; | settings.read_flag = MOD_MESHSEQ_READ_VERT; | ||||
| ▲ Show 20 Lines • Show All 296 Lines • Show Last 20 Lines | |||||