33 std::string object_name_;
35 const Mesh *export_mesh_;
37 Mesh *owned_export_mesh_ =
nullptr;
48 float3x3 world_and_axes_normal_transform_;
49 bool mirrored_transform_;
67 int *face_smooth_groups_ =
nullptr;
93 return mirrored_transform_;
123 return world_and_axes_transform_;
131 return mesh_corner_verts_.
slice(mesh_faces_[face_index]);
150 return corner_to_uv_index_.
as_span().slice(mesh_faces_[face_index]);
161 return normal_coords_;
170 if (corner_to_normal_index_.
is_empty()) {
173 const IndexRange face = mesh_faces_[face_index];
174 return corner_to_normal_index_.
as_span().slice(face);
206 return i < 0 || i >= face_order_.
size() ? i : face_order_[i];
216 void set_mesh(
Mesh *mesh);
221 void triangulate_mesh_eval();
225 void set_world_axes_transform(
const Object &obj_eval,
Object is a sort of wrapper for general info.
Span< T > as_span() const
constexpr Span slice(int64_t start, int64_t size) const
const char * get_face_deform_group_name(int16_t def_group_index) const
int16_t get_face_deform_group_index(int face_index, MutableSpan< float > group_weights) const
bool is_ith_face_smooth(int face_index) const
int tot_deform_groups() const
int16_t tot_materials() const
void calc_smooth_groups(bool use_bitflags)
StringRef get_object_mesh_name() const
Span< int > get_face_uv_indices(const int face_index) const
bool is_mirrored_transform() const
int remap_face_index(int i) const
int tot_uv_vertices() const
Array< const Material * > materials
Span< float3 > get_normal_coords() const
void store_uv_coords_and_indices()
const float4x4 & get_world_axes_transform() const
void store_normal_coords_and_indices()
StringRef get_object_name() const
const Span< float2 > get_uv_coords() const
Span< int > get_face_normal_indices(const int face_index) const
Span< int > calc_face_vert_indices(const int face_index) const
OBJMesh(Depsgraph *depsgraph, const OBJExportParams &export_params, Object *mesh_object)
int ith_smooth_group(int face_index) const
const Mesh * get_mesh() const
const Depsgraph * depsgraph