//////////////////////////////////////////////////////////////////////////////// // MESH_SFFace.inl // //////////////////////////////////////////////////////////////////////////////// namespace X3DTK { namespace MESH { template const typename SFTemplateFace::MFEdge &SFTemplateFace::getEdges() const { return _edges; } template typename SFTemplateFace::MFVertex SFTemplateFace::getVertices() const { MFVertex vertices; for (typename MFEdge::const_iterator e = _edges.begin(); e != _edges.end(); ++e) vertices.push_back((*e)->getFromVertex()); return vertices; } template FData &SFTemplateFace::data() { return _data; } template const FData &SFTemplateFace::data() const { return _data; } #ifdef TEMPLATE_SPECIALIZATION_SUPPORTED template template F &SFTemplateFace::getData() { return _data.template get(); } template template F &SFTemplateFace::ogetData() { return _data.template get(); } #endif template SFTemplateFace::SFTemplateFace(unsigned int i) : BaseSFFace(i) { } template SFTemplateFace::~SFTemplateFace() { } template void SFTemplateFace::addEdge(SFTemplateEdge *edge) { _edges.push_back(edge); } template void SFTemplateFace::reverse() { // reversing for each edge of the face. for (typename MFEdge::iterator it = _edges.begin(); it != _edges.end(); ++it) (*it)->reverse(this); // reversing the list of edges of the face. MFEdge tmp; for (typename MFEdge::reverse_iterator it = _edges.rbegin(); it != _edges.rend(); ++it) { tmp.push_back((*it)->getSymetric()); } _edges.clear(); _edges = tmp; } template std::ostream& operator<<(std::ostream& o, const SFTemplateFace &f) { o << "( "; const typename SFTemplateFace::MFEdge &edges = f.getEdges(); if (!edges.empty()) { typename SFTemplateFace::MFEdge::const_iterator itEnd = edges.end(); --itEnd; for (typename SFTemplateFace::MFEdge::const_iterator it = edges.begin(); it != itEnd; ++it) o << (*it)->getFromVertex()->getIndex() << ", "; o << (*itEnd)->getFromVertex()->getIndex(); } o << " )"; return o; } } }