src/linetypes/subfilereference.cpp

Thu, 05 Mar 2020 15:58:35 +0200

author
Teemu Piippo <teemu@hecknology.net>
date
Thu, 05 Mar 2020 15:58:35 +0200
changeset 67
612213a168da
parent 35
98906a94732f
child 81
62373840e33a
permissions
-rw-r--r--

grid autorotation

3
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
1 #include "subfilereference.h"
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
2 #include "documentmanager.h"
26
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
3 #include "invert.h"
3
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
4
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
5 ldraw::SubfileReference::SubfileReference(const glm::mat4& transformation,
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
6 const QString& referenceName,
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
7 const Color color) :
13
6e838748867b renamings
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
8 ColoredObject{color},
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
9 transformation{transformation},
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
10 referenceName{referenceName}
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
11 {
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
12 }
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
13
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
14 QVariant ldraw::SubfileReference::getProperty(Property property) const
3
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
15 {
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
16 switch (property)
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
17 {
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
18 case Property::Transformation:
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
19 return QVariant::fromValue(this->transformation);
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
20 case Property::ReferenceName:
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
21 return this->referenceName;
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
22 default:
13
6e838748867b renamings
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
23 return ColoredObject::getProperty(property);
3
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
24 }
55a55a9ec2c2 Added lots of code
Teemu Piippo <teemu@hecknology.net>
parents:
diff changeset
25 }
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
26
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
27 auto ldraw::SubfileReference::setProperty(
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
28 Property property,
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
29 const QVariant& value)
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
30 -> SetPropertyResult
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
31 {
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
32 switch (property)
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
33 {
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
34 case Property::Transformation:
33
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
35 this->transformation = value.value<glm::mat4>();
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
36 return SetPropertyResult::Success;
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
37 case Property::ReferenceName:
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
38 this->referenceName = value.toString();
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
39 return SetPropertyResult::Success;
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
40 default:
13
6e838748867b renamings
Teemu Piippo <teemu@hecknology.net>
parents: 8
diff changeset
41 return ColoredObject::setProperty(property, value);
8
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
42 }
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
43 }
44679e468ba9 major update with many things
Teemu Piippo <teemu@hecknology.net>
parents: 6
diff changeset
44
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
45 QString ldraw::SubfileReference::textRepresentation() const
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
46 {
33
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
47 return referenceName + " " + utility::vertexToStringParens(this->position());
6
73e448b2943d language support
Teemu Piippo <teemu@hecknology.net>
parents: 3
diff changeset
48 }
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
49
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
50 void ldraw::SubfileReference::getPolygons(
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
51 std::vector<gl::Polygon>& polygons,
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
52 GetPolygonsContext* context) const
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
53 {
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
54 Model* model = this->resolve(context->documents);
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
55 if (model != nullptr)
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
56 {
33
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
57 const bool needInverting = glm::determinant(this->transformation) < 0;
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
58 const std::vector<gl::Polygon> modelPolygons = model->getPolygons(context->documents);
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
59 polygons.reserve(polygons.size() + modelPolygons.size());
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
60 for (gl::Polygon polygon : modelPolygons)
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
61 {
23
3387a84ddaba fixed a pile of nonsense that caused subfiles to go haywire
Teemu Piippo <teemu@hecknology.net>
parents: 21
diff changeset
62 for (unsigned int i = 0; i < polygon.numPolygonVertices(); i += 1)
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
63 {
33
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
64 glm::vec4 vertex {polygon.vertices[i], 1};
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
65 vertex = this->transformation * vertex;
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
66 polygon.vertices[i] = vertex;
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
67 }
26
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
68 if (needInverting != this->isInverted)
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
69 {
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
70 gl::invert(polygon);
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
71 }
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
72 if (polygon.color == ldraw::mainColor)
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
73 {
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
74 polygon.color = this->colorIndex;
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
75 }
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
76 polygon.id = this->id;
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
77 polygons.push_back(polygon);
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
78 }
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
79 }
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
80 }
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
81
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
82 glm::vec3 ldraw::SubfileReference::position() const
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
83 {
33
4c41bfe2ec6e replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents: 26
diff changeset
84 return {this->transformation[3][0], this->transformation[3][1], this->transformation[3][2]};
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
85 }
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
86
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
87 void ldraw::SubfileReference::invert()
26
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
88 {
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
89 this->isInverted = not this->isInverted;
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
90 }
3a9e761e4faa at least VAOs work now
Teemu Piippo <teemu@hecknology.net>
parents: 23
diff changeset
91
35
98906a94732f renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents: 33
diff changeset
92 Model* ldraw::SubfileReference::resolve(DocumentManager* documents) const
21
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
93 {
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
94 return documents->findModelByName(this->referenceName);
Teemu Piippo <teemu@hecknology.net>
parents: 18
diff changeset
95 }

mercurial