Blender  V2.93
usd_writer_mesh.h
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2019 Blender Foundation.
17  * All rights reserved.
18  */
19 #pragma once
20 
21 #include "usd_writer_abstract.h"
22 
23 #include <pxr/usd/usdGeom/mesh.h>
24 
25 namespace blender::io::usd {
26 
27 struct USDMeshData;
28 
29 /* Writer for USD geometry. Does not assume the object is a mesh object. */
31  public:
33 
34  protected:
35  virtual bool is_supported(const HierarchyContext *context) const override;
36  virtual void do_write(HierarchyContext &context) override;
37 
38  virtual Mesh *get_export_mesh(Object *object_eval, bool &r_needsfree) = 0;
39  virtual void free_export_mesh(Mesh *mesh);
40 
41  private:
42  /* Mapping from material slot number to array of face indices with that material. */
43  typedef std::map<short, pxr::VtIntArray> MaterialFaceGroups;
44 
45  void write_mesh(HierarchyContext &context, Mesh *mesh);
46  void get_geometry_data(const Mesh *mesh, struct USDMeshData &usd_mesh_data);
47  void assign_materials(const HierarchyContext &context,
48  pxr::UsdGeomMesh usd_mesh,
49  const MaterialFaceGroups &usd_face_groups);
50  void write_uv_maps(const Mesh *mesh, pxr::UsdGeomMesh usd_mesh);
51  void write_normals(const Mesh *mesh, pxr::UsdGeomMesh usd_mesh);
52  void write_surface_velocity(Object *object, const Mesh *mesh, pxr::UsdGeomMesh usd_mesh);
53 };
54 
56  public:
58 
59  protected:
60  virtual Mesh *get_export_mesh(Object *object_eval, bool &r_needsfree) override;
61 };
62 
63 } // namespace blender::io::usd
USDGenericMeshWriter(const USDExporterContext &ctx)
virtual void do_write(HierarchyContext &context) override
virtual bool is_supported(const HierarchyContext *context) const override
virtual Mesh * get_export_mesh(Object *object_eval, bool &r_needsfree)=0
virtual void free_export_mesh(Mesh *mesh)
USDMeshWriter(const USDExporterContext &ctx)
virtual Mesh * get_export_mesh(Object *object_eval, bool &r_needsfree) override
struct SELECTID_Context context
Definition: select_engine.c:47