41 std::vector<gl::Polygon>& polygons, |
41 std::vector<gl::Polygon>& polygons, |
42 GetPolygonsContext* context |
42 GetPolygonsContext* context |
43 ) const |
43 ) const |
44 { |
44 { |
45 Model* dependency = this->resolve(context->modelId, context->documents); |
45 Model* dependency = this->resolve(context->modelId, context->documents); |
46 PolygonCache* referencedModelPolygonBuilder = nullptr; |
46 PolygonCache* cache = nullptr; |
47 if (dependency != nullptr) |
47 if (dependency != nullptr) |
48 { |
48 { |
49 const auto dependencyModelId = context->documents->findIdForModel(dependency); |
49 const auto dependencyModelId = context->documents->findIdForModel(dependency); |
50 if (dependencyModelId.has_value()) |
50 if (dependencyModelId.has_value()) |
51 { |
51 { |
52 referencedModelPolygonBuilder = context->documents->getPolygonCacheForModel(dependencyModelId.value()); |
52 cache = context->documents->getPolygonCacheForModel(dependencyModelId.value()); |
53 } |
53 } |
54 } |
54 } |
55 if (referencedModelPolygonBuilder != nullptr) |
55 if (cache != nullptr) |
56 { |
56 { |
57 const bool needInverting = glm::determinant(this->transformation) < 0; |
57 const bool needInverting = glm::determinant(this->transformation) < 0; |
58 const std::vector<gl::Polygon> modelPolygons = referencedModelPolygonBuilder->getPolygons(context->documents); |
58 const std::vector<gl::Polygon> modelPolygons = getCachedPolygons( |
|
59 cache, |
|
60 dependency, |
|
61 context->documents); |
59 polygons.reserve(polygons.size() + modelPolygons.size()); |
62 polygons.reserve(polygons.size() + modelPolygons.size()); |
60 for (gl::Polygon polygon : modelPolygons) |
63 for (gl::Polygon polygon : modelPolygons) |
61 { |
64 { |
62 for (unsigned int i = 0; i < polygon.numPolygonVertices(); i += 1) |
65 for (unsigned int i = 0; i < polygon.numPolygonVertices(); i += 1) |
63 { |
66 { |