X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMDS%2FSMDS_VtkFace.cxx;h=c0bf69cc766d0cde482af656c7624f613cd507ba;hb=a453a47beadb762d9cc59b50172d6ff2c5a70263;hp=80644c7e2ab6b2f9869d7755b043da4876fb52fc;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6;p=modules%2Fsmesh.git diff --git a/src/SMDS/SMDS_VtkFace.cxx b/src/SMDS/SMDS_VtkFace.cxx index 80644c7e2..c0bf69cc7 100644 --- a/src/SMDS/SMDS_VtkFace.cxx +++ b/src/SMDS/SMDS_VtkFace.cxx @@ -1,9 +1,9 @@ -// Copyright (C) 2010-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2010-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -64,6 +64,9 @@ void SMDS_VtkFace::init(const std::vector& nodeIds, SMDS_Mesh* mesh) case 9: aType = VTK_BIQUADRATIC_QUAD; break; + case 7: + aType = VTK_BIQUADRATIC_TRIANGLE; + break; default: aType = VTK_POLYGON; break; @@ -116,6 +119,7 @@ int SMDS_VtkFace::NbEdges() const { case VTK_TRIANGLE: case VTK_QUADRATIC_TRIANGLE: + case VTK_BIQUADRATIC_TRIANGLE: nbEdges = 3; break; case VTK_QUAD: @@ -157,6 +161,22 @@ SMDS_VtkFace::GetNode(const int ind) const return SMDS_Mesh::_meshList[myMeshId]->FindNodeVtk( pts[ ind ]); } +/*! + * \brief Check if a node belongs to the element + * \param node - the node to check + * \retval int - node index within the element, -1 if not found + */ +int SMDS_VtkFace::GetNodeIndex( const SMDS_MeshNode* node ) const +{ + vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); + vtkIdType npts, *pts; + grid->GetCellPoints( this->myVtkID, npts, pts ); + for ( vtkIdType i = 0; i < npts; ++i ) + if ( pts[i] == node->getVtkId() ) + return i; + return -1; +} + bool SMDS_VtkFace::IsQuadratic() const { vtkUnstructuredGrid* grid = SMDS_Mesh::_meshList[myMeshId]->getGrid(); @@ -167,6 +187,7 @@ bool SMDS_VtkFace::IsQuadratic() const case VTK_QUADRATIC_TRIANGLE: case VTK_QUADRATIC_QUAD: case VTK_BIQUADRATIC_QUAD: + case VTK_BIQUADRATIC_TRIANGLE: return true; break; default: @@ -189,6 +210,7 @@ bool SMDS_VtkFace::IsMediumNode(const SMDS_MeshNode* node) const switch (aVtkType) { case VTK_QUADRATIC_TRIANGLE: + case VTK_BIQUADRATIC_TRIANGLE: rankFirstMedium = 3; // medium nodes are of rank 3,4,5 break; case VTK_QUADRATIC_QUAD: @@ -245,13 +267,13 @@ SMDSAbs_GeometryType SMDS_VtkFace::GetGeomType() const switch ( aVtkType ) { case VTK_TRIANGLE: case VTK_QUADRATIC_TRIANGLE: - return SMDSGeom_TRIANGLE; + case VTK_BIQUADRATIC_TRIANGLE: return SMDSGeom_TRIANGLE; + case VTK_QUAD: case VTK_QUADRATIC_QUAD: - case VTK_BIQUADRATIC_QUAD: - return SMDSGeom_QUADRANGLE; - case VTK_POLYGON: - return SMDSGeom_POLYGON; + case VTK_BIQUADRATIC_QUAD: return SMDSGeom_QUADRANGLE; + + case VTK_POLYGON: return SMDSGeom_POLYGON; default:; } return SMDSGeom_NONE; @@ -277,14 +299,14 @@ SMDS_ElemIteratorPtr SMDS_VtkFace::elementsIterator(SMDSAbs_ElementType type) co } } -SMDS_ElemIteratorPtr SMDS_VtkFace::nodesIteratorToUNV() const +SMDS_NodeIteratorPtr SMDS_VtkFace::nodesIteratorToUNV() const { - return SMDS_ElemIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType())); + return SMDS_NodeIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType())); } -SMDS_ElemIteratorPtr SMDS_VtkFace::interlacedNodesElemIterator() const +SMDS_NodeIteratorPtr SMDS_VtkFace::interlacedNodesIterator() const { - return SMDS_ElemIteratorPtr(new SMDS_VtkCellIteratorToUNV(SMDS_Mesh::_meshList[myMeshId], myVtkID, GetEntityType())); + return nodesIteratorToUNV(); } //! change only the first node, used for temporary triangles in quadrangle to triangle adaptor