SceneNode* addNode(int shape) { // Original solid Mesh* m = Manager->getMesh(shape); int id; if (AvailableIds.empty()) { id = ID++; } else { id = AvailableIds.top(); AvailableIds.pop(); } CurrentID = id; SceneNode* n = new SceneNode(id, shape, m, Shader, TextureId); n->createBufferObjects(); n->_position = glm::vec3(0.125, 0.125, 0.125); // X reflection solid SceneNode* nX = new SceneNode(n, ReflectionX); nX->_toRevert = true; nX->createBufferObjects(); // Z reflection solid SceneNode* nZ = new SceneNode(n, ReflectionZ); nZ->_toRevert = true; nZ->createBufferObjects(); // Origin reflection solid SceneNode* nO = new SceneNode(n, ReflectionO); nO->createBufferObjects(); n->addCopy(nX); n->addCopy(nZ); n->addCopy(nO); DrawingZone->addNode(n); switch (SymMode) { case SymmetryMode::NONE: nX->_canDraw = false; nZ->_canDraw = false; nO->_canDraw = false; break; case SymmetryMode::XAXIS: nZ->_canDraw = false; nO->_canDraw = false; break; case SymmetryMode::ZAXIS: nX->_canDraw = false; nO->_canDraw = false; break; case SymmetryMode::XZAXIS: break; case SymmetryMode::O: nX->_canDraw = false; nZ->_canDraw = false; break; } return n; }