1 #include "xr_build_err.h"
2 #include "xr_file_system.h"
3
4 using namespace xray_re;
5
6 #if 0
7 err_invalid - N ����� ������
8 err_tjunction - N ������
9 err_multiedge - N ��� ������
10
11 ECF_ZERO_AREA
12 ECF_ZERO_UV_AREA
13 ECF_LONG_EDGE
14 ECF_T_JUNCTION
15 #endif
16
17 enum {
18 ERR_CHUNK_TJUNCTION = 0,
19 ERR_CHUNK_MULTIEDGE = 1, // also long edges
20 ERR_CHUNK_INVALID = 2,
21 };
22
xr_build_err()23 xr_build_err::xr_build_err()
24 {
25 m_invalid = new xr_memory_writer;
26 }
27
~xr_build_err()28 xr_build_err::~xr_build_err()
29 {
30 delete m_invalid;
31 }
32
empty() const33 bool xr_build_err::empty() const
34 {
35 return m_invalid->tell() == 0;
36 }
37
zero_area_face(const fvector3 & p0,const fvector3 & p1,const fvector3 & p2)38 void xr_build_err::zero_area_face(const fvector3& p0, const fvector3& p1, const fvector3& p2)
39 {
40 m_invalid->w_fvector3(p0);
41 m_invalid->w_fvector3(p1);
42 m_invalid->w_fvector3(p2);
43 }
44
zero_uv_area_face(const fvector3 & p0,const fvector3 & p1,const fvector3 & p2)45 void xr_build_err::zero_uv_area_face(const fvector3& p0, const fvector3& p1, const fvector3& p2)
46 {
47 m_invalid->w_fvector3(p0);
48 m_invalid->w_fvector3(p1);
49 m_invalid->w_fvector3(p2);
50 }
51
save(xr_writer & w) const52 void xr_build_err::save(xr_writer& w) const
53 {
54 w.open_chunk(ERR_CHUNK_TJUNCTION);
55 w.w_u32(0);
56 w.close_chunk();
57
58 w.open_chunk(ERR_CHUNK_MULTIEDGE);
59 w.w_u32(0);
60 w.close_chunk();
61
62 size_t size = m_invalid->tell();
63 w.open_chunk(ERR_CHUNK_INVALID);
64 w.w_size_u32(size/(3*sizeof(fvector3)));
65 if (size)
66 w.w_raw(m_invalid->data(), size);
67 w.close_chunk();
68 }
69
save(const char * path,const char * name) const70 bool xr_build_err::save(const char* path, const char* name) const
71 {
72 xr_file_system& fs = xr_file_system::instance();
73 xr_writer* w = fs.w_open(path, name);
74 if (w == 0)
75 return false;
76 save(*w);
77 fs.w_close(w);
78 return true;
79 }
80