X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_AddQuadraticElementDlg.cxx;h=e3175273c6b11c7f63216ba46d22ad15e3a74294;hb=ccde869e079e5502930d8b04f2b229ee500779cb;hp=95aa3f8e978b59137fb6b9f04af2d6b2ed548ddd;hpb=ddd20dd94358856385f639219bbdfbd1e14239d7;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx b/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx index 95aa3f8e9..e3175273c 100644 --- a/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx +++ b/src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx @@ -34,6 +34,7 @@ #include #include +#include #include // SALOME GUI includes @@ -63,6 +64,7 @@ #include #include #include +#include #include #include @@ -153,7 +155,11 @@ namespace SMESH vtkUnstructuredGrid* myGrid; //vtkProperty* myBackProp, *myProp; - vtkFloatingPointType myRGB[3], myBackRGB[3]; + //vtkFloatingPointType myRGB[3], myBackRGB[3]; + + SALOME_Actor* myFaceOrientation; + vtkPolyDataMapper* myFaceOrientationDataMapper; + SMESH_FaceOrientationFilter* myFaceOrientationFilter; public: TElementSimulation (SalomeApp_Application* theApplication) @@ -176,18 +182,39 @@ namespace SMESH myPreviewActor->SetMapper(myMapper); vtkProperty* myProp = vtkProperty::New(); - GetColor( "SMESH", "fill_color", myRGB[0], myRGB[1], myRGB[2], QColor( 0, 170, 255 ) ); - myProp->SetColor( myRGB[0], myRGB[1], myRGB[2] ); + vtkFloatingPointType aRGB[3], aBackRGB[3]; + GetColor( "SMESH", "fill_color", aRGB[0], aRGB[1], aRGB[2], QColor( 0, 170, 255 ) ); + myProp->SetColor( aRGB[0], aRGB[1], aRGB[2] ); myPreviewActor->SetProperty( myProp ); myProp->Delete(); vtkProperty* myBackProp = vtkProperty::New(); - GetColor( "SMESH", "backface_color", myBackRGB[0], myBackRGB[1], myBackRGB[2], QColor( 0, 0, 255 ) ); - myBackProp->SetColor( myBackRGB[0], myBackRGB[1], myBackRGB[2] ); + GetColor( "SMESH", "backface_color", aBackRGB[0], aBackRGB[1], aBackRGB[2], QColor( 0, 0, 255 ) ); + myBackProp->SetColor( aBackRGB[0], aBackRGB[1], aBackRGB[2] ); myPreviewActor->SetBackfaceProperty( myBackProp ); myBackProp->Delete(); myVTKViewWindow->AddActor(myPreviewActor); + + // Orientation of faces + myFaceOrientationFilter = SMESH_FaceOrientationFilter::New(); + myFaceOrientationFilter->SetInput(myGrid); + + myFaceOrientationDataMapper = vtkPolyDataMapper::New(); + myFaceOrientationDataMapper->SetInput(myFaceOrientationFilter->GetOutput()); + + myFaceOrientation = SALOME_Actor::New(); + myFaceOrientation->PickableOff(); + myFaceOrientation->VisibilityOff(); + myFaceOrientation->SetMapper(myFaceOrientationDataMapper); + + vtkProperty* anOrientationProp = vtkProperty::New(); + GetColor( "SMESH", "orientation_color", aRGB[0], aRGB[1], aRGB[2], QColor( 255, 255, 255 ) ); + anOrientationProp->SetColor( aRGB[0], aRGB[1], aRGB[2] ); + myFaceOrientation->SetProperty( anOrientationProp ); + anOrientationProp->Delete(); + + myVTKViewWindow->AddActor(myFaceOrientation); } typedef std::vector TVTKIds; @@ -222,8 +249,8 @@ namespace SMESH aType = VTK_CONVEX_POINT_SET; break; case QUAD_PENTAHEDRON: - //aType = VTK_QUADRATIC_WEDGE; // NOT SUPPORTED IN VTK4.2 - aType = VTK_CONVEX_POINT_SET; + aType = VTK_QUADRATIC_WEDGE; + //aType = VTK_CONVEX_POINT_SET; break; case QUAD_HEXAHEDRON: aType = VTK_QUADRATIC_HEXAHEDRON; @@ -238,9 +265,13 @@ namespace SMESH } else { // VTK cell connectivity opposites the MED one for volumic elements - if ( theIds.size() > 8 ? !theReverse : theReverse ) { - ReverseConnectivity( theIds, theType ); + if( aType != VTK_QUADRATIC_WEDGE) { + if ( theIds.size() > 8 ? !theReverse : theReverse ) { + ReverseConnectivity( theIds, theType ); + } } + else if(theReverse) + ReverseConnectivity( theIds, theType ); } myGrid->Reset(); @@ -258,7 +289,7 @@ namespace SMESH myPreviewActor->GetMapper()->Update(); myPreviewActor->SetRepresentation( theMode ); - SetVisibility(true); + SetVisibility(true, theActor->GetFacesOriented()); // restore normal orientation if ( aType == VTK_CONVEX_POINT_SET ) { @@ -269,9 +300,10 @@ namespace SMESH } - void SetVisibility (bool theVisibility) + void SetVisibility (bool theVisibility, bool theShowOrientation = false) { myPreviewActor->SetVisibility(theVisibility); + myFaceOrientation->SetVisibility(theShowOrientation); RepaintCurrentView(); } @@ -280,12 +312,19 @@ namespace SMESH { if (FindVtkViewWindow(myApplication->activeViewManager(), myViewWindow)) { myVTKViewWindow->RemoveActor(myPreviewActor); + myVTKViewWindow->RemoveActor(myFaceOrientation); } myPreviewActor->Delete(); + myFaceOrientation->Delete(); myMapper->RemoveAllInputs(); myMapper->Delete(); + myFaceOrientationFilter->Delete(); + + myFaceOrientationDataMapper->RemoveAllInputs(); + myFaceOrientationDataMapper->Delete(); + myGrid->Delete(); // myProp->Delete();