Blender V4.3
abc_reader_mesh.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4#pragma once
5
10#include "BLI_span.hh"
11
12#include "abc_reader_object.h"
13
14#include <Alembic/AbcGeom/IPolyMesh.h>
15#include <Alembic/AbcGeom/ISubD.h>
16
17struct Mesh;
18
19namespace blender::io::alembic {
20
21class AbcMeshReader final : public AbcObjectReader {
22 Alembic::AbcGeom::IPolyMeshSchema m_schema;
23
24 public:
25 AbcMeshReader(const Alembic::Abc::IObject &object, ImportSettings &settings);
26
27 bool valid() const override;
28 bool accepts_object_type(const Alembic::AbcCoreAbstract::ObjectHeader &alembic_header,
29 const Object *const ob,
30 const char **r_err_str) const override;
31 void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) override;
32
33 struct Mesh *read_mesh(struct Mesh *existing_mesh,
34 const Alembic::Abc::ISampleSelector &sample_sel,
35 int read_flag,
36 const char *velocity_name,
37 float velocity_scale,
38 const char **r_err_str);
39
40 void read_geometry(bke::GeometrySet &geometry_set,
41 const Alembic::Abc::ISampleSelector &sample_sel,
42 int read_flag,
43 const char *velocity_name,
44 float velocity_scale,
45 const char **r_err_str) override;
46
47 bool topology_changed(const Mesh *existing_mesh,
48 const Alembic::Abc::ISampleSelector &sample_sel) override;
49
50 private:
51 void readFaceSetsSample(Main *bmain,
52 Mesh *mesh,
53 const Alembic::AbcGeom::ISampleSelector &sample_sel);
54
55 void assign_facesets_to_material_indices(const Alembic::Abc::ISampleSelector &sample_sel,
56 MutableSpan<int> material_indices,
57 std::map<std::string, int> &r_mat_map);
58};
59
60class AbcSubDReader final : public AbcObjectReader {
61 Alembic::AbcGeom::ISubDSchema m_schema;
62
63 public:
64 AbcSubDReader(const Alembic::Abc::IObject &object, ImportSettings &settings);
65
66 bool valid() const override;
67 bool accepts_object_type(const Alembic::AbcCoreAbstract::ObjectHeader &alembic_header,
68 const Object *const ob,
69 const char **r_err_str) const override;
70 void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) override;
71
72 void read_geometry(bke::GeometrySet &geometry_set,
73 const Alembic::Abc::ISampleSelector &sample_sel,
74 int read_flag,
75 const char *velocity_name,
76 const float velocity_scale,
77 const char **r_err_str) override;
78
79 private:
80 struct Mesh *read_mesh(struct Mesh *existing_mesh,
81 const Alembic::Abc::ISampleSelector &sample_sel,
82 int read_flag,
83 const char *velocity_name,
84 const float velocity_scale,
85 const char **r_err_str);
86};
87
88void read_mverts(Mesh &mesh,
89 const Alembic::AbcGeom::P3fArraySamplePtr positions,
90 const Alembic::AbcGeom::N3fArraySamplePtr normals);
91
92} // namespace blender::io::alembic
struct Mesh * read_mesh(struct Mesh *existing_mesh, const Alembic::Abc::ISampleSelector &sample_sel, int read_flag, const char *velocity_name, float velocity_scale, const char **r_err_str)
void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) override
bool accepts_object_type(const Alembic::AbcCoreAbstract::ObjectHeader &alembic_header, const Object *const ob, const char **r_err_str) const override
void read_geometry(bke::GeometrySet &geometry_set, const Alembic::Abc::ISampleSelector &sample_sel, int read_flag, const char *velocity_name, float velocity_scale, const char **r_err_str) override
bool topology_changed(const Mesh *existing_mesh, const Alembic::Abc::ISampleSelector &sample_sel) override
AbcMeshReader(const Alembic::Abc::IObject &object, ImportSettings &settings)
bool accepts_object_type(const Alembic::AbcCoreAbstract::ObjectHeader &alembic_header, const Object *const ob, const char **r_err_str) const override
void readObjectData(Main *bmain, const Alembic::Abc::ISampleSelector &sample_sel) override
void read_geometry(bke::GeometrySet &geometry_set, const Alembic::Abc::ISampleSelector &sample_sel, int read_flag, const char *velocity_name, const float velocity_scale, const char **r_err_str) override
AbcSubDReader(const Alembic::Abc::IObject &object, ImportSettings &settings)
static void read_mverts(CDStreamConfig &config, const AbcMeshData &mesh_data)