#include <vtkMath.h>
#include <vtkPlane.h>
#include <vtkImplicitBoolean.h>
+#include <vtkImplicitFunctionCollection.h>
#include "utilities.h"
}
-SMESH_ActorDef::SMESH_ActorDef(){
- if(MYDEBUG) MESSAGE("SMESH_ActorDef");
+SMESH_ActorDef::SMESH_ActorDef()
+{
+ if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
myTimeStamp = vtkTimeStamp::New();
my2DActor = SMESH_DeviceActor::New();
my2DActor->SetUserMatrix(aMatrix);
- my2DActor->SetStoreMapping(true);
my2DActor->PickableOff();
my2DActor->SetProperty(mySurfaceProp);
my2DActor->SetBackfaceProperty(myBackSurfaceProp);
my3DActor = SMESH_DeviceActor::New();
my3DActor->SetUserMatrix(aMatrix);
- my3DActor->SetStoreMapping(true);
my3DActor->PickableOff();
my3DActor->SetProperty(mySurfaceProp);
my3DActor->SetBackfaceProperty(myBackSurfaceProp);
my1DActor = SMESH_DeviceActor::New();
my1DActor->SetUserMatrix(aMatrix);
- my1DActor->SetStoreMapping(true);
my1DActor->PickableOff();
my1DActor->SetHighlited(true);
my1DActor->SetProperty(myEdgeProp);
my1DExtActor = SMESH_DeviceActor::New();
my1DExtActor->SetUserMatrix(aMatrix);
- my1DExtActor->SetStoreMapping(true);
my1DExtActor->PickableOff();
my1DExtActor->SetHighlited(true);
my1DExtActor->SetVisibility(false);
myNodeActor = SMESH_DeviceActor::New();
myNodeActor->SetUserMatrix(aMatrix);
- myNodeActor->SetStoreMapping(true);
+ myNodeActor->SetStoreClippingMapping(true);
myNodeActor->PickableOff();
myNodeActor->SetVisibility(false);
myNodeActor->SetProperty(myNodeProp);
myBaseActor = SMESH_DeviceActor::New();
myBaseActor->SetUserMatrix(aMatrix);
- myBaseActor->SetStoreMapping(true);
+ myBaseActor->SetStoreGemetryMapping(true);
myBaseActor->GetProperty()->SetOpacity(0.0);
myPickableActor = myBaseActor;
-
+
myHighlightProp = vtkProperty::New();
myHighlightProp->SetAmbient(1.0);
myHighlightProp->SetDiffuse(0.0);
myHighlitableActor = SMESH_DeviceActor::New();
myHighlitableActor->SetUserMatrix(aMatrix);
- myHighlitableActor->SetStoreMapping(false);
myHighlitableActor->PickableOff();
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
- myNodeHighlitableActor = SMESH_DeviceActor::New();
- myNodeHighlitableActor->SetUserMatrix(aMatrix);
- myNodeHighlitableActor->SetStoreMapping(false);
- myNodeHighlitableActor->PickableOff();
- myNodeHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint);
- aFilter = myNodeHighlitableActor->GetExtractUnstructuredGrid();
- aFilter->SetModeOfExtraction(SALOME_ExtractUnstructuredGrid::ePoints);
-
-
SetShrinkFactor(SMESH::GetFloat("SMESH:SettingsShrinkCoeff", 75)/100.);
myName = "";
}
-SMESH_ActorDef::~SMESH_ActorDef(){
- if(MYDEBUG) MESSAGE("~SMESH_ActorDef");
+SMESH_ActorDef::~SMESH_ActorDef()
+{
+ if(MYDEBUG) MESSAGE("~SMESH_ActorDef - "<<this);
myScalarBarActor->Delete();
myLookupTable->Delete();
myBaseActor->Delete();
myHighlitableActor->Delete();
- myNodeHighlitableActor->Delete();
-
//Deleting of pints numbering pipeline
//---------------------------------------
}
-void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled){
+void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled)
+{
vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints();
if(myIsCellsLabeled){
}
-void SMESH_ActorDef::SetControlMode(eControl theMode){
+void
+SMESH_ActorDef::
+SetControlMode(eControl theMode)
+{
+ SetControlMode(theMode,true);
+}
+
+
+void
+SMESH_ActorDef::
+SetControlMode(eControl theMode,
+ bool theCheckEntityMode)
+{
myControlMode = eNone;
+ theCheckEntityMode &= QAD_CONFIG->getSetting("SMESH:DispayEntity") == "true";
my1DActor->GetMapper()->SetScalarVisibility(false);
my2DActor->GetMapper()->SetScalarVisibility(false);
switch(myControlMode){
case eFreeEdges:
case eFreeBorders:
- my1DExtActor->SetExtControlMode(aFunctor,myControlActor);
+ my1DExtActor->SetExtControlMode(aFunctor);
break;
case eLength2D:
- my1DExtActor->SetExtControlMode(aFunctor,myControlActor,myScalarBarActor,myLookupTable);
- break;
case eMultiConnection2D:
- my1DExtActor->SetExtControlMode(aFunctor,myControlActor,myScalarBarActor,myLookupTable);
+ my1DExtActor->SetExtControlMode(aFunctor,myScalarBarActor,myLookupTable);
break;
default:
myControlActor->SetControlMode(aFunctor,myScalarBarActor,myLookupTable);
}
}
- if(QAD_CONFIG->getSetting("SMESH:DispayEntity") == "true"){
+ if(theCheckEntityMode){
if(myControlActor == my1DActor)
- myEntityMode = eEdges;
- else if(myControlActor == my2DActor)
- myEntityMode = eFaces;
- else if(myControlActor == my3DActor)
- myEntityMode = eVolumes;
+ SetEntityMode(eEdges);
+ else if(myControlActor == my2DActor){
+ switch(myControlMode){
+ case eLength2D:
+ case eFreeEdges:
+ case eMultiConnection2D:
+ //SetEntityMode(eEdges);
+ SetEntityMode(eFaces);
+ break;
+ default:
+ SetEntityMode(eFaces);
+ }
+ }else if(myControlActor == my3DActor)
+ SetEntityMode(eVolumes);
}
- }else if(QAD_CONFIG->getSetting("SMESH:DispayEntity") == "true"){
+ }else if(theCheckEntityMode){
myEntityMode = eAllEntity;
}
theRenderer->AddActor(my1DExtActor);
theRenderer->AddActor(myHighlitableActor);
- theRenderer->AddActor(myNodeHighlitableActor);
theRenderer->AddActor2D(myScalarBarActor);
theRenderer->RemoveActor(myBaseActor);
theRenderer->RemoveActor(myHighlitableActor);
- theRenderer->RemoveActor(myNodeHighlitableActor);
theRenderer->RemoveActor(my1DActor);
theRenderer->RemoveActor(my1DExtActor);
setName(theName);
myVisualObj = theVisualObj;
- myNodeActor->myVisualObj = myVisualObj;
- myBaseActor->myVisualObj = myVisualObj;
-
- myHighlitableActor->myVisualObj = myVisualObj;
- myNodeHighlitableActor->myVisualObj = myVisualObj;
-
- my1DActor->myVisualObj = myVisualObj;
- my1DExtActor->myVisualObj = myVisualObj;
-
- my2DActor->myVisualObj = myVisualObj;
- my3DActor->myVisualObj = myVisualObj;
-
myVisualObj->Update(theIsClear);
myNodeActor->Init(myVisualObj,myImplicitBoolean);
myBaseActor->Init(myVisualObj,myImplicitBoolean);
myHighlitableActor->Init(myVisualObj,myImplicitBoolean);
- myNodeHighlitableActor->Init(myVisualObj,myImplicitBoolean);
my1DActor->Init(myVisualObj,myImplicitBoolean);
my1DExtActor->Init(myVisualObj,myImplicitBoolean);
myBaseActor->SetTransform(theTransform);
myHighlitableActor->SetTransform(theTransform);
- myNodeHighlitableActor->SetTransform(theTransform);
my1DActor->SetTransform(theTransform);
my1DExtActor->SetTransform(theTransform);
my1DExtActor->VisibilityOn();
break;
case eLength2D:
- my1DExtActor->VisibilityOn();
case eMultiConnection2D:
my1DExtActor->VisibilityOn();
default:
if(myRepresentation != ePoint)
myPickableActor->VisibilityOn();
+ else {
+ myNodeActor->VisibilityOn();
+ }
- if(myEntityMode & eEdges)
+ if(myEntityMode & eEdges){
my1DActor->VisibilityOn();
+ }
- if(myEntityMode & eFaces)
+ if(myEntityMode & eFaces){
my2DActor->VisibilityOn();
+ }
- if(myEntityMode & eVolumes)
+ if(myEntityMode & eVolumes){
my3DActor->VisibilityOn();
+ }
- if(myIsPointsLabeled)
+ if(myIsPointsLabeled){
myPointLabels->VisibilityOn();
+ myNodeActor->VisibilityOn();
+ }
if(myIsCellsLabeled)
myCellsLabels->VisibilityOn();
void SMESH_ActorDef::SetEntityMode(unsigned int theMode){
- if(!myVisualObj->GetNbEntities(SMDSAbs_Edge))
+ myEntityState = eAllEntity;
+
+ if(!myVisualObj->GetNbEntities(SMDSAbs_Edge)){
+ myEntityState &= ~eEdges;
theMode &= ~eEdges;
+ }
- if(!myVisualObj->GetNbEntities(SMDSAbs_Face))
+ if(!myVisualObj->GetNbEntities(SMDSAbs_Face)){
+ myEntityState &= ~eFaces;
theMode &= ~eFaces;
+ }
- if(!myVisualObj->GetNbEntities(SMDSAbs_Volume))
+ if(!myVisualObj->GetNbEntities(SMDSAbs_Volume)){
+ myEntityState &= ~eVolumes;
theMode &= ~eVolumes;
+ }
+
+ if(!theMode){
+ if(myVisualObj->GetNbEntities(SMDSAbs_Edge))
+ theMode |= eEdges;
+
+ if(myVisualObj->GetNbEntities(SMDSAbs_Face))
+ theMode |= eFaces;
+
+ if(myVisualObj->GetNbEntities(SMDSAbs_Volume))
+ theMode |= eVolumes;
+ }
- if(!theMode)
- return;
+ myBaseActor->myGeomFilter->SetInside(myEntityMode != myEntityState);
myEntityMode = theMode;
+ SALOME_ExtractUnstructuredGrid* aFilter = NULL;
+ aFilter = myBaseActor->GetExtractUnstructuredGrid();
+ aFilter->ClearRegisteredCellsWithType();
+ aFilter->SetModeOfChanging(SALOME_ExtractUnstructuredGrid::eAdding);
+
+ if(myEntityMode & eEdges){
+ if (MYDEBUG) MESSAGE("EDGES");
+ aFilter->RegisterCellsWithType(VTK_LINE);
+ }
+
+ if(myEntityMode & eFaces){
+ if (MYDEBUG) MESSAGE("FACES");
+ aFilter->RegisterCellsWithType(VTK_TRIANGLE);
+ aFilter->RegisterCellsWithType(VTK_POLYGON);
+ aFilter->RegisterCellsWithType(VTK_QUAD);
+ }
+ if(myEntityMode & eVolumes){
+ if (MYDEBUG) MESSAGE("VOLUMES");
+ aFilter->RegisterCellsWithType(VTK_TETRA);
+ aFilter->RegisterCellsWithType(VTK_VOXEL);
+ aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
+ aFilter->RegisterCellsWithType(VTK_WEDGE);
+ aFilter->RegisterCellsWithType(VTK_PYRAMID);
+ aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
+ }
+ aFilter->Update();
+ if (MYDEBUG) MESSAGE(aFilter->GetOutput()->GetNumberOfCells());
SetVisibility(GetVisibility(),false);
}
vtkProperty *aProp = NULL, *aBackProp = NULL;
SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::EReperesent(-1);
switch(myRepresentation){
- case ePoint:
+ case ePoint:
myPickableActor = myNodeActor;
myNodeActor->SetVisibility(true);
-
+
aProp = aBackProp = myNodeProp;
aReperesent = SMESH_DeviceActor::ePoint;
break;
if(myIsPointsVisible)
myPickableActor = myNodeActor;
-
if(GetPointRepresentation())
myNodeActor->SetVisibility(true);
myHighlitableActor->SetVisibility(false);
myHighlitableActor->SetHighlited(false);
- myNodeHighlitableActor->SetVisibility(false);
- myNodeHighlitableActor->SetHighlited(false);
-
if(myIsHighlighted){
myHighlitableActor->SetProperty(myHighlightProp);
}else if(myIsPreselected){
myHighlitableActor->SetProperty(myPreselectProp);
}
- bool isVisible = GetVisibility();
+ bool anIsVisible = GetVisibility();
if(myIsHighlighted || myIsPreselected){
if(GetUnstructuredGrid()->GetNumberOfCells()){
+ myHighlitableActor->SetHighlited(anIsVisible);
+ myHighlitableActor->SetVisibility(anIsVisible);
+ myHighlitableActor->GetExtractUnstructuredGrid()->
+ SetModeOfExtraction(SALOME_ExtractUnstructuredGrid::eCells);
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
- myHighlitableActor->SetVisibility(isVisible);
- myHighlitableActor->SetHighlited(isVisible);
- }
- if(myRepresentation == ePoint || GetPointRepresentation()){
- myNodeHighlitableActor->SetProperty(myHighlitableActor->GetProperty());
- myNodeHighlitableActor->SetVisibility(isVisible);
- myNodeHighlitableActor->SetHighlited(isVisible);
+ }else if(myRepresentation == ePoint || GetPointRepresentation()){
+ myHighlitableActor->SetHighlited(anIsVisible);
+ myHighlitableActor->SetVisibility(anIsVisible);
+ myHighlitableActor->GetExtractUnstructuredGrid()->
+ SetModeOfExtraction(SALOME_ExtractUnstructuredGrid::ePoints);
+ myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint);
}
}
}
if(MYDEBUG) MESSAGE("SMESH_ActorDef::Update");
if(GetControlMode() != eNone) {
- SetControlMode(GetControlMode());
+ unsigned long aTime = myTimeStamp->GetMTime();
+ unsigned long anObjTime = myVisualObj->GetUnstructuredGrid()->GetMTime();
+ if (anObjTime > aTime)
+ SetControlMode(GetControlMode(),false);
}
if(myIsPointsLabeled){
SetPointsLabeled(myIsPointsLabeled);
if(myIsCellsLabeled){
SetCellsLabeled(myIsCellsLabeled);
}
+ SetEntityMode(GetEntityMode());
SetVisibility(GetVisibility());
myTimeStamp->Modified();
return myVisualObj->GetElemDimension( theObjId );
}
+bool
+SMESH_ActorDef::
+IsImplicitFunctionUsed() const
+{
+ return myBaseActor->IsImplicitFunctionUsed();
+}
+
+void
+SMESH_ActorDef::
+SetImplicitFunctionUsed(bool theIsImplicitFunctionUsed)
+{
+ myNodeActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+ myBaseActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+
+ myHighlitableActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+
+ my1DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+ my1DExtActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+
+ my2DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+ my3DActor->SetImplicitFunctionUsed(theIsImplicitFunctionUsed);
+}
+
+vtkIdType
+SMESH_ActorDef::
+AddClippingPlane(vtkPlane* thePlane)
+{
+ if(thePlane){
+ myImplicitBoolean->GetFunction()->AddItem(thePlane);
+ myCippingPlaneCont.push_back(thePlane);
+ if(!IsImplicitFunctionUsed())
+ SetImplicitFunctionUsed(true);
+ }
+ return myCippingPlaneCont.size();
+}
+
+void
+SMESH_ActorDef::
+RemoveAllClippingPlanes()
+{
+ myImplicitBoolean->GetFunction()->RemoveAllItems();
+ myImplicitBoolean->GetFunction()->Modified(); // VTK bug
+ myCippingPlaneCont.clear();
+ SetImplicitFunctionUsed(false);
+}
-vtkImplicitBoolean* SMESH_ActorDef::GetPlaneContainer(){
- return myImplicitBoolean;
+vtkIdType
+SMESH_ActorDef::
+GetNumberOfClippingPlanes()
+{
+ return myCippingPlaneCont.size();
+}
+
+vtkPlane*
+SMESH_ActorDef::
+GetClippingPlane(vtkIdType theID)
+{
+ if(theID >= myCippingPlaneCont.size())
+ return NULL;
+ return myCippingPlaneCont[theID].Get();
}