namespace X3DTK { namespace MESH { template TemplateFacesDrawerStateVariables::TemplateFacesDrawerStateVariables() : StateVariables(), _selectionMode(false), _drawingSelected(false), _mode(IFS) { } template void TemplateFacesDrawerStateVariables::init() { GLfloat diffuse[] = {0.8f, 0.8f, 0.8f, 1.0f}; GLfloat ambient[] = {0.2f, 0.2f, 0.2f, 1.0f}; GLfloat emission[] = {0.0f, 0.0f, 0.0f, 1.0f}; GLfloat shininess = 0.0f; GLfloat specular[] = {0.0f, 0.0f, 0.0f, 1.0f}; glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); glMaterialfv(GL_FRONT, GL_EMISSION, emission); glMaterialfv(GL_FRONT, GL_SHININESS, &shininess); glMaterialfv(GL_FRONT, GL_SPECULAR, specular); _matrixStack.push_front(SFMatrix34f::identity); _matrixVector.clear(); _meshVector.clear(); } template void TemplateFacesDrawerStateVariables::initSelected() { GLfloat diffuse[] = {0.8f, 0.8f, 0.8f, 1.0f}; GLfloat ambient[] = {0.2f, 0.2f, 0.2f, 1.0f}; GLfloat emission[] = {0.0f, 0.0f, 0.0f, 1.0f}; GLfloat shininess = 0.0f; GLfloat specular[] = {0.0f, 0.0f, 0.0f, 1.0f}; glMaterialfv(GL_FRONT, GL_DIFFUSE, diffuse); glMaterialfv(GL_FRONT, GL_AMBIENT, ambient); glMaterialfv(GL_FRONT, GL_EMISSION, emission); glMaterialfv(GL_FRONT, GL_SHININESS, &shininess); glMaterialfv(GL_FRONT, GL_SPECULAR, specular); } template void TemplateFacesDrawerStateVariables::finish() { _matrixStack.pop_front(); if (_matrixStack.size() != 0) { cx3d << "TemplateFacesDrawerStateVariables::finish: Non empty matrix stack at the end of TemplateFacesDrawer traversal" << std::endl; _matrixStack.clear(); } } template void TemplateFacesDrawerStateVariables::pushMatrix(const SFMatrix34f &transformation) { _matrixStack.push_front(_matrixStack.front()*transformation); } template void TemplateFacesDrawerStateVariables::popMatrix() { _matrixStack.pop_front(); } template int TemplateFacesDrawerStateVariables::getCurrentMeshId() { return _matrixVector.size() - 1; } template void TemplateFacesDrawerStateVariables::storeMesh(TemplateMesh *mesh) { _matrixVector.push_back(_matrixStack.front()); _meshVector.push_back(mesh); } template TemplateMesh *TemplateFacesDrawerStateVariables::getMesh(int i) const { return _meshVector[i]; } template const SFMatrix34f &TemplateFacesDrawerStateVariables::getMatrix(int i) const { return _matrixVector[i]; } template void TemplateFacesDrawerStateVariables::buildGLNode(X3D::X3DNode *node) { GL::X3DNode *glNode = Singleton::getInstance()->build(node); _coupleMap[node] = glNode; } template void TemplateFacesDrawerStateVariables::renderGLNode(X3D::X3DNode *node) { Singleton::getInstance()->render(_coupleMap[node]); } template bool TemplateFacesDrawerStateVariables::getNode(X3D::X3DNode *node) { return (_coupleMap.find(node) != _coupleMap.end()); } template void TemplateFacesDrawerStateVariables::clearGLNodes() { MemReleaser *releaser = Singleton::getInstance(); for (std::map::iterator it = _coupleMap.begin(); it != _coupleMap.end(); ++it) releaser->release((*it).second); _coupleMap.clear(); } template void TemplateFacesDrawerStateVariables::setSelectionMode(bool selectionMode) { _selectionMode = selectionMode; } template bool TemplateFacesDrawerStateVariables::getSelectionMode() const { return _selectionMode; } template void TemplateFacesDrawerStateVariables::setDrawingSelected(bool drawingSelected) { _drawingSelected = drawingSelected; } template bool TemplateFacesDrawerStateVariables::getDrawingSelected() const { return _drawingSelected; } template void TemplateFacesDrawerStateVariables::setRenderingMode(FaceMode mode) { _mode = mode; } template FaceMode TemplateFacesDrawerStateVariables::getRenderingMode() const { return _mode; } template void TemplateFacesDrawerStateVariables::setSelectedNodes(const MFNode &selectedNodes) { _selectedNodes = selectedNodes; } template MFNode TemplateFacesDrawerStateVariables::getSelectedNodes() const { return _selectedNodes; } } }