Alembic import: port DerivedMesh → Mesh
[blender.git] / source / blender / alembic / intern / abc_points.cc
index 6f52ccec4a7d830e3589471a414b3c770ba414f7..c0d10ea46457786a269563e528683bd0df98a423 100644 (file)
@@ -173,15 +173,9 @@ bool AbcPointsReader::accepts_object_type(const Alembic::AbcCoreAbstract::Object
 void AbcPointsReader::readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel)
 {
        Mesh *mesh = BKE_mesh_add(bmain, m_data_name.c_str());
+       Mesh *read_mesh = this->read_mesh(mesh, sample_sel, 0, NULL);
 
-       DerivedMesh *dm = CDDM_from_mesh(mesh);
-       DerivedMesh *ndm = this->read_derivedmesh(dm, sample_sel, 0, NULL);
-
-       if (ndm != dm) {
-               dm->release(dm);
-       }
-
-       DM_to_mesh(ndm, mesh, m_object, CD_MASK_MESH, true);
+       BKE_mesh_nomain_to_mesh(read_mesh, mesh, m_object, CD_MASK_MESH, true);
 
        if (m_settings->validate_meshes) {
                BKE_mesh_validate(mesh, false, false);
@@ -218,23 +212,23 @@ void read_points_sample(const IPointsSchema &schema,
        read_mverts(config.mvert, positions, vnormals);
 }
 
-DerivedMesh *AbcPointsReader::read_derivedmesh(DerivedMesh *dm,
-                                               const ISampleSelector &sample_sel,
-                                               int /*read_flag*/,
-                                               const char ** /*err_str*/)
+struct Mesh *AbcPointsReader::read_mesh(struct Mesh *existing_mesh,
+                                        const ISampleSelector &sample_sel,
+                                        int /*read_flag*/,
+                                        const char ** /*err_str*/)
 {
        const IPointsSchema::Sample sample = m_schema.getValue(sample_sel);
 
        const P3fArraySamplePtr &positions = sample.getPositions();
 
-       DerivedMesh *new_dm = NULL;
+       Mesh *new_mesh = NULL;
 
-       if (dm->getNumVerts(dm) != positions->size()) {
-               new_dm = CDDM_new(positions->size(), 0, 0, 0, 0);
+       if (existing_mesh->totvert != positions->size()) {
+               new_mesh = BKE_mesh_new_nomain(positions->size(), 0, 0, 0, 0);
        }
 
-       CDStreamConfig config = get_config(new_dm ? new_dm : dm);
+       CDStreamConfig config = get_config(new_mesh ? new_mesh : existing_mesh);
        read_points_sample(m_schema, sample_sel, config);
 
-       return new_dm ? new_dm : dm;
+       return new_mesh ? new_mesh : existing_mesh;
 }