ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libgender/txtprt_import.C
Revision: 1.2
Committed: Sun Oct 3 02:38:33 2004 UTC (19 years, 8 months ago) by root
Content type: text/plain
Branch: MAIN
Changes since 1.1: +3 -3 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 #include <iostream>
2 #include <fstream>
3 #include <string>
4 #include <vector>
5 #include "txtprt_import.h"
6 #include "entity.h"
7
8 using namespace std;
9
10 // FIXME: In case of failed loading a memory leak can happen
11
12 entity* txtprt_parser::read (string filename) {
13 double tmpn;
14 string tmps;
15 int i;
16
17 entity *e = new entity;
18 entity_container *ec = new entity_container;
19 e->set (ec);
20 e->sec.x = e->sec.y = e->sec.z = 0;
21
22 ifs.open (filename.c_str(), ifstream::in);
23 while (ifs.good ()) {
24 char c[1024];
25 ifs.getline (c, 1024);
26 line_data += (string) c + "\n";
27 }
28 cout << "GOT" << line_data << endl;
29 ifs.close();
30
31 match_section ('O', tmps);
32 match_section ('M', tmps);
33 match_section ('V', tmpn);
34 if (tmpn <= 0)
35 throw txtprt_i_exception ("No Vertices?!");
36
37 vector<vertex2d> verts;
38 for (i = 0; i < tmpn; i++) {
39 double x, y, z;
40 match_number (x);
41 match_space ();
42 match_number (y);
43 match_space ();
44 match_number (z);
45 match_nl ();
46 verts.push_back (vertex2d (colour (1, 1, 1), point (x, y, z), vec3 (0, 0, 1)));
47 // FIXME: propably vertex coloUrs ?
48 }
49 match_section ('N', tmpn);
50 if (tmpn > verts.size()) { throw txtprt_i_exception ("Too many vertex normals!!"); }
51 for (i = 0; i < tmpn; i++) {
52 double x, y, z;
53 match_number (x);
54 match_space ();
55 match_number (y);
56 match_space ();
57 match_number (z);
58 match_nl ();
59 verts[i].n = vec3 (x, y, z);
60 }
61 char tmpc;
62 match_asection (tmpc, tmpn);
63 if (tmpc == 'U') {
64 for (i = 0; i < tmpn; i++) {
65 double u, v;
66 match_number (u);
67 match_space ();
68 match_number (v);
69 match_nl ();
70 verts[i].t = texc (u,v);
71 }
72 match_section ('A', tmpn);
73 }
74 for (i = 0; i < tmpn; i++) {
75 double a, b, c;
76 match_number (a);
77 if (verts.size () < a)
78 throw txtprt_i_exception ("Vertex a out of range!");
79 match_space ();
80 match_number (b);
81 if (verts.size () < b)
82 throw txtprt_i_exception ("Vertex b out of range!");
83 match_space ();
84 match_number (c);
85 if (verts.size () < c)
86 throw txtprt_i_exception ("Vertex c out of range!");
87 match_nl ();
88 entity_triangles *tri = new entity_triangles;
89 tri->push_back (verts[(int)a]);
90 tri->push_back (verts[(int)b]);
91 tri->push_back (verts[(int)c]);
92 ec->add (tri);
93 }
94 return e;
95 }