Fix for issue 0019935: EDF 793 SMESH: Drawing of a line on a non-planar surface. To draw only connectivity lines.

This commit is contained in:
akl 2008-08-01 08:14:33 +00:00
parent aadd73166e
commit 003b5a3e76
4 changed files with 20 additions and 7 deletions

View File

@ -167,6 +167,7 @@ SMESH_ActorDef::SMESH_ActorDef()
aFilter->RegisterCellsWithType(VTK_PYRAMID); aFilter->RegisterCellsWithType(VTK_PYRAMID);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA); aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON); aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
//Definition 1D divice of the actor //Definition 1D divice of the actor
@ -1054,6 +1055,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode){
aFilter->RegisterCellsWithType(VTK_PYRAMID); aFilter->RegisterCellsWithType(VTK_PYRAMID);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA); aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON); aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON);
aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE);
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
} }
aFilter->Update(); aFilter->Update();

View File

@ -112,7 +112,10 @@ static inline vtkIdType getCellType( const SMDSAbs_ElementType theType,
else if ( theNbNodes == 20 ) { else if ( theNbNodes == 20 ) {
return VTK_QUADRATIC_HEXAHEDRON; return VTK_QUADRATIC_HEXAHEDRON;
} }
else if ( theNbNodes==13 || theNbNodes==15 ) { else if ( theNbNodes == 15 ) {
return VTK_QUADRATIC_WEDGE;
}
else if ( theNbNodes==13 ) {
return VTK_CONVEX_POINT_SET; return VTK_CONVEX_POINT_SET;
} }
else return VTK_EMPTY_CELL; else return VTK_EMPTY_CELL;
@ -404,7 +407,8 @@ void SMESH_VisualObjDef::buildElemPrs()
for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]); for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]);
} }
else if (aNbNodes == 15) { else if (aNbNodes == 15) {
static int anIds[] = {0,2,1,3,5,4,8,7,6,11,10,9,12,14,13}; //static int anIds[] = {0,2,1,3,5,4,8,7,6,11,10,9,12,14,13};
static int anIds[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]); for (int k = 0; k < aNbNodes; k++) aConnectivities.push_back(anIds[k]);
//for (int k = 0; k < aNbNodes; k++) { //for (int k = 0; k < aNbNodes; k++) {
// int nn = aConnectivities[k]; // int nn = aConnectivities[k];

View File

@ -222,8 +222,8 @@ namespace SMESH
aType = VTK_CONVEX_POINT_SET; aType = VTK_CONVEX_POINT_SET;
break; break;
case QUAD_PENTAHEDRON: case QUAD_PENTAHEDRON:
//aType = VTK_QUADRATIC_WEDGE; // NOT SUPPORTED IN VTK4.2 aType = VTK_QUADRATIC_WEDGE;
aType = VTK_CONVEX_POINT_SET; //aType = VTK_CONVEX_POINT_SET;
break; break;
case QUAD_HEXAHEDRON: case QUAD_HEXAHEDRON:
aType = VTK_QUADRATIC_HEXAHEDRON; aType = VTK_QUADRATIC_HEXAHEDRON;
@ -238,10 +238,14 @@ namespace SMESH
} }
else { else {
// VTK cell connectivity opposites the MED one for volumic elements // VTK cell connectivity opposites the MED one for volumic elements
if( aType != VTK_QUADRATIC_WEDGE) {
if ( theIds.size() > 8 ? !theReverse : theReverse ) { if ( theIds.size() > 8 ? !theReverse : theReverse ) {
ReverseConnectivity( theIds, theType ); ReverseConnectivity( theIds, theType );
} }
} }
else if(theReverse)
ReverseConnectivity( theIds, theType );
}
myGrid->Reset(); myGrid->Reset();
vtkIdList *anIds = vtkIdList::New(); vtkIdList *anIds = vtkIdList::New();

View File

@ -136,7 +136,10 @@ vtkIdType getCellType( const SMDSAbs_ElementType theType,
else if ( theNbNodes == 20 ) { else if ( theNbNodes == 20 ) {
return VTK_QUADRATIC_HEXAHEDRON; return VTK_QUADRATIC_HEXAHEDRON;
} }
else if ( theNbNodes==13 || theNbNodes==15 ) { else if ( theNbNodes==15 ) {
return VTK_QUADRATIC_WEDGE;
}
else if ( theNbNodes==13 ) {
return VTK_CONVEX_POINT_SET; return VTK_CONVEX_POINT_SET;
} }
else return VTK_EMPTY_CELL; else return VTK_EMPTY_CELL;