X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FOBJECT%2FSMESH_Actor.cxx;h=ed1ca8594a94a75fd5aec6b011cebbe7c1f84851;hp=ee5c77ac222fcedac398d4a46e4a3342dbbfd5c8;hb=1821a9c35f90be93d3d55b1e1db9114902eaf6f8;hpb=bd8f1aee7c78f7d2eb82bd4fec5e08c9e3d280ce diff --git a/src/OBJECT/SMESH_Actor.cxx b/src/OBJECT/SMESH_Actor.cxx index ee5c77ac2..ed1ca8594 100644 --- a/src/OBJECT/SMESH_Actor.cxx +++ b/src/OBJECT/SMESH_Actor.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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 @@ -75,14 +75,10 @@ #include #include +#include #include #include -#include -#if !defined(VTK_XVERSION) -#define VTK_XVERSION (VTK_MAJOR_VERSION<<16)+(VTK_MINOR_VERSION<<8)+(VTK_BUILD_VERSION) -#endif - #include "utilities.h" #ifdef _DEBUG_ @@ -230,6 +226,7 @@ SMESH_ActorDef::SMESH_ActorDef() aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); + aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); my2DExtProp = vtkProperty::New(); my2DExtProp->DeepCopy(mySurfaceProp); @@ -252,6 +249,7 @@ SMESH_ActorDef::SMESH_ActorDef() aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); + aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); my3DActor = SMESH_CellLabelActor::New(); my3DActor->SetStoreGemetryMapping(true); @@ -378,7 +376,6 @@ SMESH_ActorDef::SMESH_ActorDef() my0DActor->SetProperty(my0DProp); my0DActor->SetRepresentation(SMESH_DeviceActor::eSurface); aFilter = my0DActor->GetExtractUnstructuredGrid(); - //aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints); aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); aFilter->RegisterCellsWithType(VTK_VERTEX); @@ -397,6 +394,7 @@ SMESH_ActorDef::SMESH_ActorDef() myBallActor->SetVisibility(false); myBallActor->SetProperty(myBallProp); myBallActor->SetRepresentation(SMESH_DeviceActor::eSurface); + myBallActor->SetBallEnabled(true); aFilter = myBallActor->GetExtractUnstructuredGrid(); aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding); aFilter->RegisterCellsWithType(VTK_POLY_VERTEX); @@ -477,11 +475,6 @@ SMESH_ActorDef::SMESH_ActorDef() myHighlightProp->SetLineWidth(aLineWidth); myHighlightProp->SetRepresentation(1); - myBallHighlightProp = vtkProperty::New(); - myBallHighlightProp->DeepCopy(myHighlightProp); - myBallHighlightProp->SetPointSize(aBallElemSize); - - myOutLineProp = vtkProperty::New(); myOutLineProp->SetAmbient(1.0); myOutLineProp->SetDiffuse(0.0); @@ -501,10 +494,6 @@ SMESH_ActorDef::SMESH_ActorDef() myPreselectProp->SetLineWidth(aLineWidth); myPreselectProp->SetRepresentation(1); - myBallPreselectProp = vtkProperty::New(); - myBallPreselectProp->DeepCopy(myPreselectProp); - myBallPreselectProp->SetPointSize(aBallElemSize); - myHighlitableActor = SMESH_DeviceActor::New(); myHighlitableActor->SetUserMatrix(aMatrix); myHighlitableActor->PickableOff(); @@ -546,6 +535,8 @@ SMESH_ActorDef::SMESH_ActorDef() myImplicitBoolean = vtkImplicitBoolean::New(); myImplicitBoolean->SetOperationTypeToIntersection(); + myPlaneCollection = vtkPlaneCollection::New(); + //Quadratic 2D elements representation //----------------------------------------------------------------------------- int aQuadratic2DMode = mgr->integerValue( "SMESH", "quadratic_mode", 0); @@ -605,9 +596,6 @@ SMESH_ActorDef::~SMESH_ActorDef() myOutLineProp->Delete(); myPreselectProp->Delete(); - myBallHighlightProp->Delete(); - myBallPreselectProp->Delete(); - myHighlitableActor->Delete(); my2DExtProp->Delete(); @@ -634,6 +622,7 @@ SMESH_ActorDef::~SMESH_ActorDef() //my0DExtActor->Delete(); myImplicitBoolean->Delete(); + myPlaneCollection->Delete(); #ifndef DISABLE_PLOT2DVIEWER if(my2dHistogram) { @@ -681,8 +670,6 @@ void SMESH_ActorDef::SetCellsFontProperties( SMESH::LabelFont theFamily, int the { if(my3DActor) { my3DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b ); - SetRepresentation( GetRepresentation() ); - myTimeStamp->Modified(); } if(my2DActor) { my2DActor->SetFontProperties( theFamily, theSize, theBold, theItalic, theShadow, r, g, b ); @@ -1097,8 +1084,6 @@ SetControlMode(eControl theMode, void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){ - //myHighlightActor->AddToRender(theRenderer); - theRenderer->AddActor(myBaseActor); theRenderer->AddActor(myNodeExtActor); theRenderer->AddActor(my1DExtActor); @@ -1111,7 +1096,6 @@ void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){ my1DActor ->AddToRender(theRenderer); my0DActor ->AddToRender(theRenderer); myBallActor ->AddToRender(theRenderer); - //theRenderer->AddActor(my0DExtActor); theRenderer->AddActor(myHighlitableActor); @@ -1160,6 +1144,9 @@ bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj, myVisualObj = theVisualObj; myVisualObj->Update(theIsClear); + SMESH_SVTKActor::SafeDownCast(myHighlightActor)->SetVisualObject(myVisualObj); + SMESH_SVTKActor::SafeDownCast(myPreHighlightActor)->SetVisualObject(myVisualObj); + myNodeActor->Init(myVisualObj,myImplicitBoolean); myBaseActor->Init(myVisualObj,myImplicitBoolean); @@ -1326,7 +1313,7 @@ void SMESH_ActorDef::SetShrinkFactor(double theValue){ Modified(); } -void SMESH_ActorDef::SetShrink(){ +void SMESH_ActorDef::SetShrink() { if(!myIsShrinkable) return; myBaseActor->SetShrink(); @@ -1562,7 +1549,6 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) if (myEntityMode & eBallElem) { aFilter->RegisterCellsWithType(VTK_POLY_VERTEX); - aHightFilter->RegisterCellsWithType(VTK_POLY_VERTEX); } if (myEntityMode & eEdges) { @@ -1582,6 +1568,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) aFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); aFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); + aFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); aHightFilter->RegisterCellsWithType(VTK_TRIANGLE); aHightFilter->RegisterCellsWithType(VTK_POLYGON); @@ -1589,6 +1576,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_TRIANGLE); aHightFilter->RegisterCellsWithType(VTK_QUADRATIC_QUAD); aHightFilter->RegisterCellsWithType(VTK_BIQUADRATIC_QUAD); + aHightFilter->RegisterCellsWithType(VTK_BIQUADRATIC_TRIANGLE); } if (myEntityMode & eVolumes) { @@ -1602,6 +1590,7 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode) aFilter->RegisterCellsWithType(VTK_QUADRATIC_TETRA); aFilter->RegisterCellsWithType(VTK_QUADRATIC_HEXAHEDRON); aFilter->RegisterCellsWithType(VTK_TRIQUADRATIC_HEXAHEDRON); + aFilter->RegisterCellsWithType(VTK_QUADRATIC_PYRAMID); aFilter->RegisterCellsWithType(VTK_QUADRATIC_WEDGE); aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET); //#ifdef VTK_HAVE_POLYHEDRON @@ -1639,9 +1628,9 @@ void SMESH_ActorDef::SetRepresentation (int theMode) if (theMode < 0) { myRepresentation = eSurface; - if (!aNbFaces && !aNbVolumes && aNbEdges) { + if (!aNbFaces && !aNbVolumes && !aNbBalls && aNbEdges) { myRepresentation = eEdge; - } else if (!aNbFaces && !aNbVolumes && !aNbEdges) { + } else if (!aNbFaces && !aNbVolumes && !aNbEdges && !aNbBalls) { myRepresentation = ePoint; } } else { @@ -1711,17 +1700,13 @@ void SMESH_ActorDef::SetRepresentation (int theMode) my3DActor->SetBackfaceProperty(aPropVR); my3DActor->SetRepresentation(aReperesent); - //my0DExtActor->SetVisibility(false); + my1DExtActor->SetVisibility(false); my2DExtActor->SetVisibility(false); my3DExtActor->SetVisibility(false); - // ??? - //my0DActor->SetProperty(aProp); - //my0DActor->SetBackfaceProperty(aBackProp); my0DActor->SetRepresentation(aReperesent); myBallActor->SetRepresentation(aReperesent); - //my0DExtActor->SetRepresentation(aReperesent); switch(myControlMode){ case eLength: @@ -1771,7 +1756,6 @@ bool SMESH_ActorDef::GetPointRepresentation(){ void SMESH_ActorDef::UpdateHighlight(){ myHighlitableActor->SetHighlited(false); myHighlitableActor->SetVisibility(false); - bool anIsVisible = GetVisibility(); switch(myRepresentation){ @@ -1780,12 +1764,9 @@ void SMESH_ActorDef::UpdateHighlight(){ { if(myIsHighlighted) { myHighlitableActor->SetProperty(myHighlightProp); - myBallActor->SetProperty(myBallHighlightProp); }else if(myIsPreselected){ myHighlitableActor->SetProperty(myPreselectProp); - myBallActor->SetProperty(myBallPreselectProp); } else if(anIsVisible){ - myBallActor->SetProperty(myBallProp); (myRepresentation == eSurface) ? myHighlitableActor->SetProperty(myOutLineProp) : myHighlitableActor->SetProperty(myEdgeProp); } @@ -2043,7 +2024,6 @@ void SMESH_ActorDef::GetBallColor(double& r,double& g,double& b){ void SMESH_ActorDef::SetHighlightColor(double r,double g,double b){ myHighlightProp->SetColor(r,g,b); - myBallHighlightProp->SetColor(r,g,b); Modified(); } @@ -2053,7 +2033,6 @@ void SMESH_ActorDef::GetHighlightColor(double& r,double& g,double& b){ void SMESH_ActorDef::SetPreHighlightColor(double r,double g,double b){ myPreselectProp->SetColor(r,g,b); - myBallPreselectProp->SetColor(r,g,b); Modified(); } @@ -2112,8 +2091,7 @@ double SMESH_ActorDef::Get0DSize(){ void SMESH_ActorDef::SetBallSize(double theVal){ myBallProp->SetPointSize(theVal); - myBallHighlightProp->SetPointSize(theVal); - myBallPreselectProp->SetPointSize(theVal); + if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myHighlightActor )) { aCustom->SetBallSize(theVal); } @@ -2176,10 +2154,70 @@ SMESH_ActorDef::AddClippingPlane(vtkPlane* thePlane) return myCippingPlaneCont.size(); } +void +SMESH_ActorDef::AddOpenGLClippingPlane(vtkPlane* thePlane) +{ + if(thePlane) + myPlaneCollection->AddItem( thePlane ); +} + +void +SMESH_ActorDef::SetOpenGLClippingPlane() +{ + // before use this method you must add clipping planes using method + // SMESH_ActorDef::AddOpenGLClippingPlane(vtkPlane* thePlane) + if( !myPlaneCollection->GetNumberOfItems() ) + return; + + // It is necessary to set plane collection for each mapper of actor + // and update current inputs of mapper + myNodeActor->SetPlaneCollection( myPlaneCollection ); + myNodeActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myBaseActor->SetPlaneCollection( myPlaneCollection ); + myBaseActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myHighlitableActor->SetPlaneCollection( myPlaneCollection ); + myHighlitableActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my1DActor->SetPlaneCollection( myPlaneCollection ); + my1DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my2DActor->SetPlaneCollection( myPlaneCollection ); + my2DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myNodeExtActor->SetPlaneCollection( myPlaneCollection ); + myNodeExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my0DActor->SetPlaneCollection( myPlaneCollection ); + my0DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + myBallActor->SetPlaneCollection( myPlaneCollection ); + myBallActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my1DExtActor->SetPlaneCollection( myPlaneCollection ); + my1DExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my2DExtActor->SetPlaneCollection( myPlaneCollection ); + my2DExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my3DActor->SetPlaneCollection( myPlaneCollection ); + my3DActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + my3DExtActor->SetPlaneCollection( myPlaneCollection ); + my3DExtActor->SetUnstructuredGrid(myVisualObj->GetUnstructuredGrid()); + + if(IsShrunk()) + SetShrink(); + else + Modified(); +} + void SMESH_ActorDef:: RemoveAllClippingPlanes() { + myPlaneCollection->RemoveAllItems(); myImplicitBoolean->GetFunction()->RemoveAllItems(); myImplicitBoolean->GetFunction()->Modified(); // VTK bug myCippingPlaneCont.clear();