Wed, 25 May 2022 17:47:06 +0300
simplify further
3 | 1 | #include "subfilereference.h" |
21 | 2 | #include "documentmanager.h" |
26 | 3 | #include "invert.h" |
150
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
4 | #include "polygoncache.h" |
3 | 5 | |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
6 | ldraw::SubfileReference::SubfileReference |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
7 | ( |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
8 | const glm::mat4& transformation, |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
9 | const QString& referenceName, |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
10 | const Color color |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
11 | ) : |
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
177
diff
changeset
|
12 | CompoundObject{transformation, color}, |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
13 | referenceName{referenceName} |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
14 | { |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
15 | } |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
16 | |
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset
|
17 | QVariant ldraw::SubfileReference::getProperty(Property property) const |
3 | 18 | { |
19 | switch (property) | |
20 | { | |
21 | case Property::ReferenceName: | |
22 | return this->referenceName; | |
23 | default: | |
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
177
diff
changeset
|
24 | return CompoundObject::getProperty(property); |
3 | 25 | } |
26 | } | |
6 | 27 | |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
28 | void ldraw::SubfileReference::setProperty(SetPropertyResult* result, const PropertyKeyValue& pair) |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
29 | { |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
30 | LDRAW_OBJECT_HANDLE_SET_PROPERTY(ReferenceName, {this->referenceName = value;}); |
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
177
diff
changeset
|
31 | ldraw::CompoundObject::setProperty(result, pair); |
8
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
32 | } |
44679e468ba9
major update with many things
Teemu Piippo <teemu@hecknology.net>
parents:
6
diff
changeset
|
33 | |
35
98906a94732f
renamed the linetypes namespace to ldraw namespace and added more structures to it
Teemu Piippo <teemu@hecknology.net>
parents:
33
diff
changeset
|
34 | QString ldraw::SubfileReference::textRepresentation() const |
6 | 35 | { |
141 | 36 | return this->referenceName + " " + utility::vertexToStringParens(this->position()); |
6 | 37 | } |
21 | 38 | |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
39 | void ldraw::SubfileReference::getPolygons |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
40 | ( |
21 | 41 | std::vector<gl::Polygon>& polygons, |
86
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
42 | GetPolygonsContext* context |
4bec0525ef1b
PolygonObjectEditor can now modify the object properly
Teemu Piippo <teemu@hecknology.net>
parents:
81
diff
changeset
|
43 | ) const |
21 | 44 | { |
150
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
45 | Model* dependency = this->resolve(context->modelId, context->documents); |
193 | 46 | PolygonCache* cache = nullptr; |
150
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
47 | if (dependency != nullptr) |
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
48 | { |
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
49 | const auto dependencyModelId = context->documents->findIdForModel(dependency); |
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
50 | if (dependencyModelId.has_value()) |
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
51 | { |
193 | 52 | cache = context->documents->getPolygonCacheForModel(dependencyModelId.value()); |
150
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
53 | } |
b6cbba6e29a1
extract polygon cache out of Model
Teemu Piippo <teemu@hecknology.net>
parents:
148
diff
changeset
|
54 | } |
193 | 55 | if (cache != nullptr) |
21 | 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; |
193 | 58 | const std::vector<gl::Polygon> modelPolygons = getCachedPolygons( |
59 | cache, | |
60 | dependency, | |
61 | context->documents); | |
21 | 62 | polygons.reserve(polygons.size() + modelPolygons.size()); |
63 | for (gl::Polygon polygon : modelPolygons) | |
64 | { | |
23
3387a84ddaba
fixed a pile of nonsense that caused subfiles to go haywire
Teemu Piippo <teemu@hecknology.net>
parents:
21
diff
changeset
|
65 | for (unsigned int i = 0; i < polygon.numPolygonVertices(); i += 1) |
21 | 66 | { |
33
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset
|
67 | glm::vec4 vertex {polygon.vertices[i], 1}; |
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset
|
68 | vertex = this->transformation * vertex; |
4c41bfe2ec6e
replaced matrix and vertex classes with glm
Teemu Piippo <teemu@hecknology.net>
parents:
26
diff
changeset
|
69 | polygon.vertices[i] = vertex; |
21 | 70 | } |
26 | 71 | if (needInverting != this->isInverted) |
72 | { | |
73 | gl::invert(polygon); | |
74 | } | |
139
72098474d362
Document and refactor colors.cpp and colors.h
Teemu Piippo <teemu@hecknology.net>
parents:
134
diff
changeset
|
75 | if (polygon.color == ldraw::MAIN_COLOR) |
21 | 76 | { |
77 | polygon.color = this->colorIndex; | |
78 | } | |
79 | polygon.id = this->id; | |
80 | polygons.push_back(polygon); | |
81 | } | |
82 | } | |
83 | } | |
84 | ||
148 | 85 | Model* ldraw::SubfileReference::resolve(const ModelId callingModelId, DocumentManager* documents) const |
21 | 86 | { |
148 | 87 | return documents->findDependencyByName(callingModelId, this->referenceName); |
21 | 88 | } |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
89 | |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
90 | ldraw::Object::Type ldraw::SubfileReference::typeIdentifier() const |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
91 | { |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
92 | return Type::SubfileReference; |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
93 | } |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
94 | |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
95 | QDataStream& ldraw::SubfileReference::serialize(QDataStream &stream) const |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
96 | { |
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
177
diff
changeset
|
97 | return CompoundObject::serialize(stream) << this->referenceName; |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
98 | } |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
99 | |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
100 | QDataStream& ldraw::SubfileReference::deserialize(QDataStream &stream) |
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
101 | { |
183
97b591813c8b
- Add editors for string and bool properties
Teemu Piippo <teemu@hecknology.net>
parents:
177
diff
changeset
|
102 | return CompoundObject::deserialize(stream) >> this->referenceName; |
132
488d0ba6070b
Begin work with serialization
Teemu Piippo <teemu@hecknology.net>
parents:
86
diff
changeset
|
103 | } |
141 | 104 | |
105 | QString ldraw::SubfileReference::toLDrawCode() const | |
106 | { | |
107 | QString result; | |
108 | if (this->isInverted) | |
109 | { | |
110 | result += "0 BFC INVERTNEXT\r\n"; | |
111 | } | |
112 | result += utility::format( | |
186 | 113 | "1 %1 %2 %3", |
141 | 114 | this->colorIndex.index, |
186 | 115 | this->transformToBareString(), |
141 | 116 | this->referenceName); |
117 | return result; | |
118 | } | |
158
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
150
diff
changeset
|
119 | |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
150
diff
changeset
|
120 | QString ldraw::SubfileReference::iconName() const |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
150
diff
changeset
|
121 | { |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
150
diff
changeset
|
122 | return ":/icons/linetype-subfile.png"; |
5bd755eaa5a8
Add icons from ionicons
Teemu Piippo <teemu@hecknology.net>
parents:
150
diff
changeset
|
123 | } |
177
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
124 | |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
125 | QString ldraw::SubfileReference::typeName() const |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
126 | { |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
127 | return QObject::tr("subfile reference"); |
f69d53c053df
Show type of object in the object editor
Teemu Piippo <teemu@hecknology.net>
parents:
158
diff
changeset
|
128 | } |