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