From 8bf379fa3080863c4bb1afc56f8cdbeb62967a35 Mon Sep 17 00:00:00 2001 From: rnv Date: Tue, 17 Feb 2009 13:32:53 +0000 Subject: [PATCH] Fix for IPAL19044 (4x REGRESS: vertex is not displayed in VTK and broken trihedron). --- src/OBJECT/GEOM_Actor.cxx | 39 ++++++++++++++++++++++----------- src/OBJECT/GEOM_Actor.h | 1 + src/OBJECT/GEOM_DeviceActor.cxx | 8 ++++--- src/OBJECT/GEOM_DeviceActor.h | 7 ++++-- src/OBJECT/GEOM_EdgeSource.h | 3 +++ src/OBJECT/GEOM_FaceSource.h | 1 + 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/src/OBJECT/GEOM_Actor.cxx b/src/OBJECT/GEOM_Actor.cxx index 4d4a55f28..0ecd5d37f 100644 --- a/src/OBJECT/GEOM_Actor.cxx +++ b/src/OBJECT/GEOM_Actor.cxx @@ -102,8 +102,8 @@ GEOM_Actor::GEOM_Actor(): myHighlightProp(vtkProperty::New()), myPreHighlightProp(vtkProperty::New()), - myShadingFaceProp(vtkProperty::New()) - + myShadingFaceProp(vtkProperty::New()), + isOnlyVertex(false) { #ifdef MYDEBUG MESSAGE (this<< " GEOM_Actor::GEOM_Actor"); @@ -119,6 +119,7 @@ GEOM_Actor::GEOM_Actor(): myHighlightProp->SetAmbientColor(1, 1, 1); myHighlightProp->SetDiffuseColor(1, 1, 1); myHighlightProp->SetSpecularColor(0.5, 0.5, 0.5); + myHighlightProp->SetPointSize(SALOME_POINT_SIZE); myHighlightActor->SetProperty(myHighlightProp.GetPointer()); this->myHighlightActor->SetInput(myAppendFilter->GetOutput(),false); @@ -314,8 +315,7 @@ SetVisibility(int theVisibility) myOneFaceEdgeActor->SetVisibility(theVisibility && myDisplayMode == (int)eWireframe && !myIsSelected); myIsolatedEdgeActor->SetVisibility(theVisibility && !myIsSelected); -// myVertexActor->SetVisibility(false);// must be added new mode points - myVertexActor->SetVisibility(theVisibility); + myVertexActor->SetVisibility(theVisibility && !myIsSelected); } @@ -387,8 +387,8 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape, mySharedEdgeSource->Clear(); myWireframeFaceSource->Clear(); myShadingFaceSource->Clear(); - - TopExp_Explorer aVertexExp (theShape,TopAbs_VERTEX); + + TopExp_Explorer aVertexExp (theShape,TopAbs_VERTEX); for (; aVertexExp.More(); aVertexExp.Next()) { const TopoDS_Vertex& aVertex = TopoDS::Vertex(aVertexExp.Current()); @@ -399,8 +399,20 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape, // look if edges are free or shared TopTools_IndexedDataMapOfShapeListOfShape anEdgeMap; TopExp::MapShapesAndAncestors(theShape,TopAbs_EDGE,TopAbs_FACE,anEdgeMap); - + SetShape(theShape,anEdgeMap,theIsVector); + isOnlyVertex = + myIsolatedEdgeSource->IsEmpty() && + myOneFaceEdgeSource->IsEmpty() && + mySharedEdgeSource->IsEmpty() && + myWireframeFaceSource->IsEmpty() && + myShadingFaceSource->IsEmpty(); + + + if((bool)myShape.Infinite() || isOnlyVertex ){ + myVertexActor->GetDeviceActor()->SetInfinitive(true); + myHighlightActor->GetDeviceActor()->SetInfinitive(true); + } } void GEOM_Actor::SetShape (const TopoDS_Shape& theShape, @@ -555,7 +567,7 @@ void GEOM_Actor::Render(vtkRenderer *ren, vtkMapper *theMapper) this->Device->SetBackfaceProperty(this->BackfaceProperty); } this->Device->SetProperty(this->Property); - if(myShape.ShapeType() == TopAbs_VERTEX) { + /* if(myShape.ShapeType() == TopAbs_VERTEX) { if(ren){ //The parameter determine size of vertex actor relate to diagonal of RendererWindow static vtkFloatingPointType delta = 0.01; @@ -570,9 +582,9 @@ void GEOM_Actor::Render(vtkRenderer *ren, vtkMapper *theMapper) this->GetMatrix(ren->GetActiveCamera(), aMatrix); this->Device->SetUserMatrix(aMatrix); this->Device->Render(ren,theMapper); - aMatrix->Delete(); - } else - this->Device->Render(ren, theMapper); + aMatrix->Delete(); + } else*/ + this->Device->Render(ren, theMapper); } void GEOM_Actor::ReleaseGraphicsResources(vtkWindow *) @@ -659,6 +671,7 @@ void GEOM_Actor::SetOpacity(vtkFloatingPointType opa) myShadingFaceProp->SetOpacity(opa); myHighlightProp->SetOpacity(opa); myPreHighlightProp->SetOpacity(opa); + myVertexActor->GetProperty()->SetOpacity(opa); } vtkFloatingPointType GEOM_Actor::GetOpacity() @@ -689,7 +702,7 @@ void GEOM_Actor::GetColor(vtkFloatingPointType& r,vtkFloatingPointType& g,vtkFlo bool GEOM_Actor::IsInfinitive() { - return (bool)(myShape.Infinite()); + return ((bool)myShape.Infinite() || isOnlyVertex); } /*! @@ -829,7 +842,7 @@ void GEOM_Actor::GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result) Rz[i] = (pos[i] - this->Position[i])/distance; } } - + vtkMath::Cross(vup,Rz,Rx); vtkMath::Normalize(Rx); vtkMath::Cross(Rz,Rx,Ry); diff --git a/src/OBJECT/GEOM_Actor.h b/src/OBJECT/GEOM_Actor.h index 1ef5ecbf3..619b30bcd 100644 --- a/src/OBJECT/GEOM_Actor.h +++ b/src/OBJECT/GEOM_Actor.h @@ -177,6 +177,7 @@ protected: private: TopoDS_Shape myShape; int myNbIsos[2]; + bool isOnlyVertex; float myDeflection; bool myIsRelative; diff --git a/src/OBJECT/GEOM_DeviceActor.cxx b/src/OBJECT/GEOM_DeviceActor.cxx index f6950c63f..51f1c45d8 100755 --- a/src/OBJECT/GEOM_DeviceActor.cxx +++ b/src/OBJECT/GEOM_DeviceActor.cxx @@ -29,8 +29,10 @@ #include #include #include - +#include #include + + vtkStandardNewMacro(GEOM_DeviceActor); @@ -38,7 +40,7 @@ GEOM_DeviceActor::GEOM_DeviceActor(): myStripper(vtkStripper::New(),true), myPolyDataMapper(vtkPolyDataMapper::New(),true), myPolyDataNormals(vtkPolyDataNormals::New(),true), - myActor(vtkActor::New(),true) + myActor(VTKViewer_Actor::New(),true) { myStripper->SetInput(myPolyDataNormals->GetOutput()); myPolyDataMapper->SetInput(myStripper->GetOutput()); @@ -101,4 +103,4 @@ GEOM_DeviceActor:: RemoveFromRender(vtkRenderer* theRenderer) { theRenderer->RemoveActor(myActor.GetPointer()); -} \ No newline at end of file +} diff --git a/src/OBJECT/GEOM_DeviceActor.h b/src/OBJECT/GEOM_DeviceActor.h index 84bbbe912..027637ac3 100755 --- a/src/OBJECT/GEOM_DeviceActor.h +++ b/src/OBJECT/GEOM_DeviceActor.h @@ -36,8 +36,9 @@ typedef GEOM_SmartPtr PStripper; class vtkPolyDataNormals; typedef GEOM_SmartPtr PPolyDataNormals; -class vtkActor; -typedef GEOM_SmartPtr PActor; +//class vtkActor; +class VTKViewer_Actor; +typedef GEOM_SmartPtr PActor; class vtkProperty; class vtkRenderer; @@ -61,6 +62,8 @@ public: void AddToRender(vtkRenderer* theRenderer); void RemoveFromRender(vtkRenderer* theRenderer); + + PActor GetDeviceActor() {return myActor;} protected: PPolyDataNormals myPolyDataNormals; diff --git a/src/OBJECT/GEOM_EdgeSource.h b/src/OBJECT/GEOM_EdgeSource.h index 8cb2e514d..8bcfa05b2 100755 --- a/src/OBJECT/GEOM_EdgeSource.h +++ b/src/OBJECT/GEOM_EdgeSource.h @@ -47,6 +47,9 @@ public: vtkPolyData* thePolyData, vtkPoints* thePts, bool theIsVector = false); + + bool IsEmpty(){return myEdgeSet.IsEmpty();} + protected: TEdgeSet myEdgeSet; diff --git a/src/OBJECT/GEOM_FaceSource.h b/src/OBJECT/GEOM_FaceSource.h index 6378a8eda..2acf56a9e 100755 --- a/src/OBJECT/GEOM_FaceSource.h +++ b/src/OBJECT/GEOM_FaceSource.h @@ -43,6 +43,7 @@ public: void AddFace(const TopoDS_Face& theFace); void Clear(){ myFaceSet.Clear();} + bool IsEmpty(){return myFaceSet.IsEmpty();} protected: TFaceSet myFaceSet; -- 2.30.2