X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FOBJECT%2FGEOM_Actor.cxx;h=e1ff415418bc65d33122661f1d44c6921443ed0b;hb=2c83fef4e1ee8420d83d00f655d7a62220cb7bdd;hp=e29c665cbd465c69308d824bf5810aa1d031f2ff;hpb=d761aab4a92c178a7101653fd38e5c39e17b1615;p=modules%2Fgeom.git diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index e29c665cb..e1ff41541 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -17,7 +17,7 @@ // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // // @@ -26,7 +26,6 @@ // Module : GEOM // $Header$ -using namespace std; /*! \class GEOM_Actor GEOM_Actor.h \brief This class allows to display an OpenCASCADE CAD model in a VTK viewer. @@ -34,10 +33,25 @@ using namespace std; #include "GEOM_Actor.h" +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include + // OpenCASCADE Includes #include "GEOM_OCCReader.h" #include +using namespace std; + //------------------------------------------------------------- // Main methods //------------------------------------------------------------- @@ -73,9 +87,10 @@ GEOM_Actor::GEOM_Actor() this->myName = ""; this->HighlightProperty = NULL; - this->ishighlighted = false; + this->myIsHighlighted = false; this->subshape = false; + this->myIsInfinite = false; } GEOM_Actor::~GEOM_Actor() @@ -98,7 +113,7 @@ void GEOM_Actor::ShallowCopy(vtkProp *prop) GEOM_Actor *f = GEOM_Actor::SafeDownCast(prop); if ( f != NULL ) { - this->setInputShape(f->getTopo(),f->getDeflection(),f->getDisplayMode()); + this->setInputShape(f->getTopo(),f->getDeflection(),f->getDisplayMode(),f->isVector()); this->setName( f->getName() ); if ( f->hasIO() ) this->setIO( f->getIO() ); @@ -140,9 +155,12 @@ void GEOM_Actor::setDeflection(double adef) { deflection = adef; } -void GEOM_Actor::setInputShape(const TopoDS_Shape& aShape,double adef,int imode) { +void GEOM_Actor::setInputShape(const TopoDS_Shape& aShape, double adef, + int imode, bool isVector) +{ myShape = aShape; deflection = adef; + myIsVector = isVector; setDisplayMode(imode); } @@ -171,15 +189,16 @@ void GEOM_Actor::SetShadingProperty(vtkProperty* Prop) { // Mapper creating function //------------------------------------------------------------- void GEOM_Actor::CreateMapper(int theMode) { + this->myIsInfinite = (bool)myShape.Infinite(); if(myShape.ShapeType() == TopAbs_VERTEX) { gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(myShape)); this->SetPosition(aPnt.X(),aPnt.Y(),aPnt.Z()); } GEOM_OCCReader* aread = GEOM_OCCReader::New(); - aread->setTopo(myShape); + aread->setTopo(myShape, myIsVector); aread->setDisplayMode(theMode); aread->GetOutput()->ReleaseDataFlagOn(); - + vtkPolyDataMapper* aMapper = vtkPolyDataMapper::New(); if (theMode == 0) { aMapper->SetInput(aread->GetOutput()); @@ -219,8 +238,10 @@ void GEOM_Actor::Render(vtkRenderer *ren, vtkMapper *Mapper) this->Property->SetSpecularColor(0.99,0.98,0.83); } - if(!ishighlighted) { - if(myDisplayMode >= 1) { + if(!myIsHighlighted) { + if ( myIsPreselected ) + this->Property = PreviewProperty; + else if(myDisplayMode >= 1) { // SHADING this->Property = ShadingProperty; } @@ -228,8 +249,6 @@ void GEOM_Actor::Render(vtkRenderer *ren, vtkMapper *Mapper) this->Property = WireframeProperty; } - if ( ispreselected ) - this->Property = PreviewProperty; } this->Property->Render(this, ren); @@ -259,10 +278,10 @@ void GEOM_Actor::Render(vtkRenderer *ren, vtkMapper *Mapper) if(myShape.ShapeType() == TopAbs_VERTEX) { if(ren){ //The parameter determine size of vertex actor relate to diagonal of RendererWindow - static float delta = 0.01; - float X1 = -1, Y1 = -1, Z1 = 0; + static vtkFloatingPointType delta = 0.01; + vtkFloatingPointType X1 = -1, Y1 = -1, Z1 = 0; ren->ViewToWorld(X1,Y1,Z1); - float X2 = +1, Y2 = +1, Z2 = 0; + vtkFloatingPointType X2 = +1, Y2 = +1, Z2 = 0; ren->ViewToWorld(X2,Y2,Z2); Z2 = sqrt((X2-X1)*(X2-X1) + (Y2-Y1)*(Y2-Y1) + (Z2-Z1)*(Z2-Z1)); this->SetScale(Z2*delta); @@ -274,7 +293,8 @@ void GEOM_Actor::Render(vtkRenderer *ren, vtkMapper *Mapper) aMatrix->Delete(); } else this->Device->Render(ren, this->Mapper); - this->EstimatedRenderTime = WireframeMapper->GetTimeToDraw(); + if(WireframeMapper!=NULL) this->EstimatedRenderTime = WireframeMapper->GetTimeToDraw(); + else if(ShadingMapper!=NULL) this->EstimatedRenderTime = ShadingMapper->GetTimeToDraw(); } // SubShape @@ -291,40 +311,40 @@ void GEOM_Actor::SubShapeOff() // Opacity methods //------------------------------------------------------------- -void GEOM_Actor::SetOpacity(float opa) +void GEOM_Actor::SetOpacity(vtkFloatingPointType opa) { //HighlightProperty->SetOpacity(opa); SALOME_Actor::SetOpacity(opa); ShadingProperty->SetOpacity(opa); } -float GEOM_Actor::GetOpacity() { +vtkFloatingPointType GEOM_Actor::GetOpacity() { return ShadingProperty->GetOpacity(); } //------------------------------------------------------------- // Color methods //------------------------------------------------------------- -void GEOM_Actor::SetColor(float r,float g,float b) { +void GEOM_Actor::SetColor(vtkFloatingPointType r,vtkFloatingPointType g,vtkFloatingPointType b) { ShadingProperty->SetColor(r,g,b); } -void GEOM_Actor::GetColor(float& r,float& g,float& b) { - float color[3]; - ShadingProperty->GetColor(color); - r = color[0]; - g = color[1]; - b = color[2]; +void GEOM_Actor::GetColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFloatingPointType& b) { + vtkFloatingPointType color[3]; + ShadingProperty->GetColor(color); + r = color[0]; + g = color[1]; + b = color[2]; } //------------------------------------------------------------- // Highlight methods //------------------------------------------------------------- -void GEOM_Actor::highlight(Standard_Boolean highlight) { +void GEOM_Actor::highlight(bool highlight) { - if(highlight && !ishighlighted) { - ishighlighted=true; + if(highlight && !myIsHighlighted) { + myIsHighlighted=true; // build highlight property is necessary if(HighlightProperty==NULL) { HighlightProperty = vtkProperty::New(); @@ -341,8 +361,8 @@ void GEOM_Actor::highlight(Standard_Boolean highlight) { } else if (!highlight) { - if(ishighlighted) { - ishighlighted=false; + if(myIsHighlighted) { + myIsHighlighted=false; if(myDisplayMode==1) { //unhilight in shading this->Property = ShadingProperty; @@ -355,11 +375,6 @@ void GEOM_Actor::highlight(Standard_Boolean highlight) { } } -bool GEOM_Actor::hasHighlight() -{ - return true; -} - void GEOM_Actor::SetHighlightProperty(vtkProperty* Prop) { this->HighlightProperty = Prop; }