-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathswMesh.cpp
80 lines (68 loc) · 1.97 KB
/
swMesh.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <QFile>
#include <QGLWidget>
#include "swMesh.h"
swMesh::swMesh() : vertCount(0), verts(NULL), edgeCount(0), edges(NULL) {
type = SW_MESH;
}
swMesh::swMesh(QString file) : vertCount(0), verts(NULL), edgeCount(0), edges(NULL) {
type = SW_MESH;
QFile stream(file);
stream.open(QFile::ReadOnly);
swObject::read(&stream);
stream.close();
}
swMesh::swMesh(swStream* stream) : vertCount(0), verts(NULL), edgeCount(0), edges(NULL) {
type = SW_MESH;
read(stream);
}
swMesh::swMesh(const swMesh& orig) : vertCount(0), verts(NULL), edgeCount(0), edges(NULL) {
type = SW_MESH;
*this = orig;
}
swMesh::~swMesh() {
clear();
}
void swMesh::clear() {
if(verts)
delete verts;
if(edges)
delete edges;
}
swMesh& swMesh::operator=(const swMesh& orig) {
if(this != &orig) {
clear();
vertCount = orig.vertCount;
edgeCount = orig.edgeCount;
verts = new double[vertCount * 3];
memcpy(verts, orig.verts, sizeof(double) * vertCount * 3);
edges = new int[edgeCount * 2];
memcpy(edges, orig.edges, sizeof(int) * edgeCount * 2);
}
return *this;
}
void swMesh::read(swStream* stream) {
clear();
stream->readInt(vertCount);
verts = new double[vertCount * 3];
stream->read((char*)verts, vertCount * sizeof(double) * 3);
stream->readInt(edgeCount);
edges = new int[edgeCount * 2];
stream->read((char*)edges, edgeCount * sizeof(int) * 2);
}
void swMesh::write(swStream* stream) {
stream->writeInt(vertCount);
stream->write((char*)verts, vertCount * sizeof(double) * 3);
stream->writeInt(edgeCount);
stream->write((char*)edges, edgeCount * sizeof(int) * 2);
}
void swMesh::draw() {
glPushMatrix();
transform();
glBegin(GL_LINES);
for(int i = 0; i < edgeCount; i++) {
glVertex2dv(&verts[edges[i * 2] * 3]);
glVertex2dv(&verts[edges[i * 2 + 1] * 3]);
}
glEnd();
glPopMatrix();
}