2003-07-10 15:42:33 +06:00
|
|
|
// SMESH OBJECT : interactive object for SMESH visualization
|
|
|
|
//
|
|
|
|
// Copyright (C) 2003 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
|
|
|
|
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
|
|
|
|
//
|
|
|
|
// 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.
|
|
|
|
//
|
|
|
|
// This library is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
// Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
|
|
// 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
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// File : SMESH_Actor.cxx
|
|
|
|
// Author : Nicolas REJNERI
|
|
|
|
// Module : SMESH
|
2003-05-19 20:07:00 +06:00
|
|
|
// $Header$
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
#include "SMESH_ActorDef.h"
|
2004-12-01 15:48:31 +05:00
|
|
|
#include "SMESH_ActorUtils.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SMESH_DeviceActor.h"
|
2005-01-20 11:25:54 +05:00
|
|
|
#include "SMESH_ControlsDef.hxx"
|
2005-06-07 19:22:20 +06:00
|
|
|
#include <VTKViewer_ExtractUnstructuredGrid.h>
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-06-08 16:45:19 +06:00
|
|
|
#include "SUIT_Session.h"
|
|
|
|
#include "SUIT_ResourceMgr.h"
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <qstringlist.h>
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
#include <vtkTimeStamp.h>
|
2003-05-19 20:07:00 +06:00
|
|
|
#include <vtkObjectFactory.h>
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <vtkShrinkPolyData.h>
|
|
|
|
#include <vtkMergeFilter.h>
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
#include <vtkMatrix4x4.h>
|
|
|
|
#include <vtkUnstructuredGrid.h>
|
|
|
|
#include <vtkPointData.h>
|
|
|
|
#include <vtkCellData.h>
|
|
|
|
|
|
|
|
#include <vtkMapper.h>
|
|
|
|
#include <vtkRenderer.h>
|
|
|
|
|
|
|
|
#include <vtkCell.h>
|
|
|
|
#include <vtkIdList.h>
|
|
|
|
#include <vtkIntArray.h>
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <vtkActor2D.h>
|
2004-12-01 15:48:31 +05:00
|
|
|
#include <vtkProperty2D.h>
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <vtkPolyData.h>
|
|
|
|
#include <vtkMaskPoints.h>
|
|
|
|
#include <vtkCellCenters.h>
|
|
|
|
#include <vtkTextProperty.h>
|
|
|
|
#include <vtkLabeledDataMapper.h>
|
|
|
|
#include <vtkSelectVisiblePoints.h>
|
|
|
|
|
|
|
|
#include <vtkScalarBarActor.h>
|
|
|
|
#include <vtkLookupTable.h>
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
#include <vtkMath.h>
|
|
|
|
#include <vtkPlane.h>
|
|
|
|
#include <vtkImplicitBoolean.h>
|
2005-03-22 15:32:59 +05:00
|
|
|
#include <vtkImplicitFunctionCollection.h>
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
#include "utilities.h"
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#ifdef _DEBUG_
|
2005-06-07 19:22:20 +06:00
|
|
|
static int MYDEBUG = 1;
|
2004-06-18 14:34:31 +06:00
|
|
|
#else
|
|
|
|
static int MYDEBUG = 0;
|
|
|
|
#endif
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
static int aLineWidthInc = 2;
|
|
|
|
static int aPointSizeInc = 2;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
SMESH_ActorDef* SMESH_ActorDef::New(){
|
|
|
|
return new SMESH_ActorDef();
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj,
|
|
|
|
const char* theEntry,
|
|
|
|
const char* theName,
|
|
|
|
int theIsClear)
|
|
|
|
{
|
2005-01-20 11:25:54 +05:00
|
|
|
SMESH_ActorDef* anActor = SMESH_ActorDef::New();
|
2004-12-01 15:48:31 +05:00
|
|
|
if(!anActor->Init(theVisualObj,theEntry,theName,theIsClear)){
|
|
|
|
anActor->Delete();
|
|
|
|
anActor = NULL;
|
|
|
|
}
|
2005-07-25 10:36:37 +06:00
|
|
|
if( anActor )
|
|
|
|
anActor->UpdateScalarBar();
|
2004-06-18 14:34:31 +06:00
|
|
|
return anActor;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-11-12 16:40:21 +05:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
SMESH_ActorDef::SMESH_ActorDef()
|
|
|
|
{
|
|
|
|
if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
myTimeStamp = vtkTimeStamp::New();
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myIsPointsVisible = false;
|
|
|
|
|
|
|
|
myIsShrinkable = false;
|
|
|
|
myIsShrunk = false;
|
|
|
|
|
2005-06-27 17:29:58 +06:00
|
|
|
myControlsPrecision = (long)SMESH::GetFloat( "SMESH:controls_precision", -1 );
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2005-06-27 17:29:58 +06:00
|
|
|
float aPointSize = SMESH::GetFloat("SMESH:node_size",3);
|
|
|
|
float aLineWidth = SMESH::GetFloat("SMESH:element_width",1);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
vtkMatrix4x4 *aMatrix = vtkMatrix4x4::New();
|
2005-06-07 19:22:20 +06:00
|
|
|
VTKViewer_ExtractUnstructuredGrid* aFilter = NULL;
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
//Definition 2D and 3D divices of the actor
|
|
|
|
//-----------------------------------------
|
|
|
|
float anRGB[3] = {1,1,1};
|
|
|
|
mySurfaceProp = vtkProperty::New();
|
2005-06-27 17:29:58 +06:00
|
|
|
SMESH::GetColor( "SMESH", "fill_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
|
|
|
|
mySurfaceProp->SetColor( anRGB[0], anRGB[1], anRGB[2] );
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
myBackSurfaceProp = vtkProperty::New();
|
2005-06-27 17:29:58 +06:00
|
|
|
SMESH::GetColor( "SMESH", "backface_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 0, 255 ) );
|
|
|
|
myBackSurfaceProp->SetColor( anRGB[0], anRGB[1], anRGB[2] );
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
my2DActor = SMESH_DeviceActor::New();
|
|
|
|
my2DActor->SetUserMatrix(aMatrix);
|
|
|
|
my2DActor->PickableOff();
|
|
|
|
my2DActor->SetProperty(mySurfaceProp);
|
|
|
|
my2DActor->SetBackfaceProperty(myBackSurfaceProp);
|
|
|
|
my2DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
|
|
|
|
aFilter = my2DActor->GetExtractUnstructuredGrid();
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
2004-06-18 14:34:31 +06:00
|
|
|
aFilter->RegisterCellsWithType(VTK_TRIANGLE);
|
|
|
|
aFilter->RegisterCellsWithType(VTK_POLYGON);
|
|
|
|
aFilter->RegisterCellsWithType(VTK_QUAD);
|
|
|
|
|
|
|
|
my3DActor = SMESH_DeviceActor::New();
|
|
|
|
my3DActor->SetUserMatrix(aMatrix);
|
|
|
|
my3DActor->PickableOff();
|
|
|
|
my3DActor->SetProperty(mySurfaceProp);
|
|
|
|
my3DActor->SetBackfaceProperty(myBackSurfaceProp);
|
|
|
|
my3DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
|
|
|
|
aFilter = my3DActor->GetExtractUnstructuredGrid();
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
2004-06-18 14:34:31 +06:00
|
|
|
aFilter->RegisterCellsWithType(VTK_TETRA);
|
|
|
|
aFilter->RegisterCellsWithType(VTK_VOXEL);
|
|
|
|
aFilter->RegisterCellsWithType(VTK_HEXAHEDRON);
|
|
|
|
aFilter->RegisterCellsWithType(VTK_WEDGE);
|
|
|
|
aFilter->RegisterCellsWithType(VTK_PYRAMID);
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->RegisterCellsWithType(VTK_CONVEX_POINT_SET);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
//Definition 1D divice of the actor
|
|
|
|
//---------------------------------
|
|
|
|
myEdgeProp = vtkProperty::New();
|
|
|
|
myEdgeProp->SetAmbient(1.0);
|
|
|
|
myEdgeProp->SetDiffuse(0.0);
|
|
|
|
myEdgeProp->SetSpecular(0.0);
|
2005-06-27 17:29:58 +06:00
|
|
|
SMESH::GetColor( "SMESH", "outline_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 170, 255 ) );
|
2004-06-18 14:34:31 +06:00
|
|
|
myEdgeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
|
|
|
|
myEdgeProp->SetLineWidth(aLineWidth);
|
|
|
|
|
|
|
|
my1DActor = SMESH_DeviceActor::New();
|
|
|
|
my1DActor->SetUserMatrix(aMatrix);
|
|
|
|
my1DActor->PickableOff();
|
2004-12-01 15:48:31 +05:00
|
|
|
my1DActor->SetHighlited(true);
|
2004-06-18 14:34:31 +06:00
|
|
|
my1DActor->SetProperty(myEdgeProp);
|
|
|
|
my1DActor->SetRepresentation(SMESH_DeviceActor::eSurface);
|
|
|
|
aFilter = my1DActor->GetExtractUnstructuredGrid();
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
2004-06-18 14:34:31 +06:00
|
|
|
aFilter->RegisterCellsWithType(VTK_LINE);
|
|
|
|
|
|
|
|
my1DProp = vtkProperty::New();
|
|
|
|
my1DProp->DeepCopy(myEdgeProp);
|
2004-12-01 15:48:31 +05:00
|
|
|
my1DProp->SetLineWidth(aLineWidth + aLineWidthInc);
|
2004-06-18 14:34:31 +06:00
|
|
|
my1DProp->SetPointSize(aPointSize);
|
|
|
|
|
|
|
|
my1DExtProp = vtkProperty::New();
|
|
|
|
my1DExtProp->DeepCopy(myEdgeProp);
|
|
|
|
anRGB[0] = 1 - anRGB[0];
|
|
|
|
anRGB[1] = 1 - anRGB[1];
|
|
|
|
anRGB[2] = 1 - anRGB[2];
|
|
|
|
my1DExtProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
|
2004-12-01 15:48:31 +05:00
|
|
|
my1DExtProp->SetLineWidth(aLineWidth + aLineWidthInc);
|
|
|
|
my1DExtProp->SetPointSize(aPointSize + aPointSizeInc);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
my1DExtActor = SMESH_DeviceActor::New();
|
|
|
|
my1DExtActor->SetUserMatrix(aMatrix);
|
|
|
|
my1DExtActor->PickableOff();
|
2004-12-01 15:48:31 +05:00
|
|
|
my1DExtActor->SetHighlited(true);
|
2004-06-18 14:34:31 +06:00
|
|
|
my1DExtActor->SetVisibility(false);
|
|
|
|
my1DExtActor->SetProperty(my1DExtProp);
|
|
|
|
my1DExtActor->SetRepresentation(SMESH_DeviceActor::eInsideframe);
|
|
|
|
aFilter = my1DExtActor->GetExtractUnstructuredGrid();
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
2004-06-18 14:34:31 +06:00
|
|
|
aFilter->RegisterCellsWithType(VTK_LINE);
|
|
|
|
|
|
|
|
|
|
|
|
//Definition 0D divice of the actor
|
|
|
|
//---------------------------------
|
|
|
|
myNodeProp = vtkProperty::New();
|
2005-06-27 17:29:58 +06:00
|
|
|
SMESH::GetColor( "SMESH", "node_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 0, 0 ) );
|
2004-06-18 14:34:31 +06:00
|
|
|
myNodeProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
|
|
|
|
myNodeProp->SetPointSize(aPointSize);
|
|
|
|
|
|
|
|
myNodeActor = SMESH_DeviceActor::New();
|
|
|
|
myNodeActor->SetUserMatrix(aMatrix);
|
2005-03-30 20:06:25 +06:00
|
|
|
myNodeActor->SetStoreClippingMapping(true);
|
2004-06-18 14:34:31 +06:00
|
|
|
myNodeActor->PickableOff();
|
|
|
|
myNodeActor->SetVisibility(false);
|
|
|
|
myNodeActor->SetProperty(myNodeProp);
|
|
|
|
myNodeActor->SetRepresentation(SMESH_DeviceActor::ePoint);
|
|
|
|
aFilter = myNodeActor->GetExtractUnstructuredGrid();
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
|
|
|
|
//Definition of Pickable and Highlitable engines
|
|
|
|
//----------------------------------------------
|
|
|
|
|
|
|
|
myBaseActor = SMESH_DeviceActor::New();
|
|
|
|
myBaseActor->SetUserMatrix(aMatrix);
|
2005-03-30 20:06:25 +06:00
|
|
|
myBaseActor->SetStoreGemetryMapping(true);
|
2004-06-18 14:34:31 +06:00
|
|
|
myBaseActor->GetProperty()->SetOpacity(0.0);
|
|
|
|
|
|
|
|
myPickableActor = myBaseActor;
|
2005-03-22 15:32:59 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlightProp = vtkProperty::New();
|
|
|
|
myHighlightProp->SetAmbient(1.0);
|
|
|
|
myHighlightProp->SetDiffuse(0.0);
|
|
|
|
myHighlightProp->SetSpecular(0.0);
|
2005-06-27 17:29:58 +06:00
|
|
|
SMESH::GetColor( "SMESH", "selection_object_color", anRGB[0], anRGB[1], anRGB[2], QColor( 255, 255, 255 ) );
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlightProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
|
|
|
|
myHighlightProp->SetPointSize(aPointSize);
|
|
|
|
myHighlightProp->SetRepresentation(1);
|
|
|
|
|
|
|
|
myPreselectProp = vtkProperty::New();
|
|
|
|
myPreselectProp->SetAmbient(1.0);
|
|
|
|
myPreselectProp->SetDiffuse(0.0);
|
|
|
|
myPreselectProp->SetSpecular(0.0);
|
2005-06-27 17:29:58 +06:00
|
|
|
SMESH::GetColor( "SMESH", "highlight_color", anRGB[0], anRGB[1], anRGB[2], QColor( 0, 255, 255 ) );
|
2004-06-18 14:34:31 +06:00
|
|
|
myPreselectProp->SetColor(anRGB[0],anRGB[1],anRGB[2]);
|
|
|
|
myPreselectProp->SetPointSize(aPointSize);
|
|
|
|
myPreselectProp->SetRepresentation(1);
|
|
|
|
|
|
|
|
myHighlitableActor = SMESH_DeviceActor::New();
|
|
|
|
myHighlitableActor->SetUserMatrix(aMatrix);
|
|
|
|
myHighlitableActor->PickableOff();
|
|
|
|
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
|
|
|
|
|
2005-06-27 17:29:58 +06:00
|
|
|
SetShrinkFactor( SMESH::GetFloat( "SMESH", "shrink_coeff", 0.75 ) );
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
myName = "";
|
2004-06-18 14:34:31 +06:00
|
|
|
myIO = NULL;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
myControlMode = eNone;
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
//Definition of myScalarBarActor
|
|
|
|
//------------------------------
|
|
|
|
myLookupTable = vtkLookupTable::New();
|
|
|
|
//Fix for Bug PAL5195 - SMESH764:
|
|
|
|
//Controls - Aspect Ratio: incorrect colors of the best and worst values
|
|
|
|
myLookupTable->SetHueRange(0.667,0.0);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myScalarBarActor = vtkScalarBarActor::New();
|
|
|
|
myScalarBarActor->SetVisibility(false);
|
|
|
|
myScalarBarActor->SetLookupTable(myLookupTable);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2005-06-08 16:45:19 +06:00
|
|
|
SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
|
|
|
|
if( !mgr )
|
|
|
|
return;
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
//Definition of points numbering pipeline
|
|
|
|
//---------------------------------------
|
|
|
|
myPointsNumDataSet = vtkUnstructuredGrid::New();
|
|
|
|
|
|
|
|
myPtsMaskPoints = vtkMaskPoints::New();
|
|
|
|
myPtsMaskPoints->SetInput(myPointsNumDataSet);
|
|
|
|
myPtsMaskPoints->SetOnRatio(1);
|
2005-06-07 19:22:20 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myPtsSelectVisiblePoints = vtkSelectVisiblePoints::New();
|
|
|
|
myPtsSelectVisiblePoints->SetInput(myPtsMaskPoints->GetOutput());
|
|
|
|
myPtsSelectVisiblePoints->SelectInvisibleOff();
|
|
|
|
myPtsSelectVisiblePoints->SetTolerance(0.1);
|
|
|
|
|
|
|
|
myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
|
|
|
|
myPtsLabeledDataMapper->SetInput(myPtsSelectVisiblePoints->GetOutput());
|
|
|
|
myPtsLabeledDataMapper->SetLabelFormat("%g");
|
|
|
|
myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
|
|
|
|
|
|
|
|
vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
|
|
|
|
aPtsTextProp->SetFontFamilyToTimes();
|
|
|
|
static int aPointsFontSize = 10;
|
|
|
|
aPtsTextProp->SetFontSize(aPointsFontSize);
|
|
|
|
aPtsTextProp->SetBold(1);
|
|
|
|
aPtsTextProp->SetItalic(0);
|
|
|
|
aPtsTextProp->SetShadow(0);
|
|
|
|
myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
|
|
|
|
aPtsTextProp->Delete();
|
2005-01-20 11:25:54 +05:00
|
|
|
|
|
|
|
myEntityMode = eAllEntity;
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myIsPointsLabeled = false;
|
|
|
|
|
|
|
|
myPointLabels = vtkActor2D::New();
|
|
|
|
myPointLabels->SetMapper(myPtsLabeledDataMapper);
|
|
|
|
myPointLabels->GetProperty()->SetColor(1,1,1);
|
|
|
|
myPointLabels->SetVisibility(myIsPointsLabeled);
|
|
|
|
|
|
|
|
|
|
|
|
//Definition of cells numbering pipeline
|
|
|
|
//---------------------------------------
|
|
|
|
myCellsNumDataSet = vtkUnstructuredGrid::New();
|
|
|
|
|
|
|
|
myCellCenters = vtkCellCenters::New();
|
|
|
|
myCellCenters->SetInput(myCellsNumDataSet);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myClsMaskPoints = vtkMaskPoints::New();
|
|
|
|
myClsMaskPoints->SetInput(myCellCenters->GetOutput());
|
|
|
|
myClsMaskPoints->SetOnRatio(1);
|
|
|
|
|
|
|
|
myClsSelectVisiblePoints = vtkSelectVisiblePoints::New();
|
|
|
|
myClsSelectVisiblePoints->SetInput(myClsMaskPoints->GetOutput());
|
|
|
|
myClsSelectVisiblePoints->SelectInvisibleOff();
|
|
|
|
myClsSelectVisiblePoints->SetTolerance(0.1);
|
|
|
|
|
|
|
|
myClsLabeledDataMapper = vtkLabeledDataMapper::New();
|
|
|
|
myClsLabeledDataMapper->SetInput(myClsSelectVisiblePoints->GetOutput());
|
|
|
|
myClsLabeledDataMapper->SetLabelFormat("%g");
|
|
|
|
myClsLabeledDataMapper->SetLabelModeToLabelScalars();
|
|
|
|
|
|
|
|
vtkTextProperty* aClsTextProp = vtkTextProperty::New();
|
|
|
|
aClsTextProp->SetFontFamilyToTimes();
|
|
|
|
static int aCellsFontSize = 12;
|
|
|
|
aClsTextProp->SetFontSize(aCellsFontSize);
|
|
|
|
aClsTextProp->SetBold(1);
|
|
|
|
aClsTextProp->SetItalic(0);
|
|
|
|
aClsTextProp->SetShadow(0);
|
|
|
|
myClsLabeledDataMapper->SetLabelTextProperty(aClsTextProp);
|
|
|
|
aClsTextProp->Delete();
|
|
|
|
|
|
|
|
myIsCellsLabeled = false;
|
|
|
|
|
|
|
|
myCellsLabels = vtkActor2D::New();
|
|
|
|
myCellsLabels->SetMapper(myClsLabeledDataMapper);
|
|
|
|
myCellsLabels->GetProperty()->SetColor(0,1,0);
|
|
|
|
myCellsLabels->SetVisibility(myIsCellsLabeled);
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
// Clipping planes
|
|
|
|
myImplicitBoolean = vtkImplicitBoolean::New();
|
|
|
|
myImplicitBoolean->SetOperationTypeToIntersection();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
SMESH_ActorDef::~SMESH_ActorDef()
|
|
|
|
{
|
|
|
|
if(MYDEBUG) MESSAGE("~SMESH_ActorDef - "<<this);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
myScalarBarActor->Delete();
|
|
|
|
myLookupTable->Delete();
|
|
|
|
|
|
|
|
mySurfaceProp->Delete();
|
|
|
|
myBackSurfaceProp->Delete();
|
|
|
|
|
|
|
|
myEdgeProp->Delete();
|
|
|
|
myHighlightProp->Delete();
|
|
|
|
myPreselectProp->Delete();
|
|
|
|
|
|
|
|
myNodeProp->Delete();
|
|
|
|
|
|
|
|
my1DProp->Delete();
|
|
|
|
my1DActor->Delete();
|
|
|
|
|
|
|
|
my1DExtProp->Delete();
|
|
|
|
my1DExtActor->Delete();
|
|
|
|
|
|
|
|
my2DActor->Delete();
|
|
|
|
my3DActor->Delete();
|
|
|
|
|
|
|
|
myNodeActor->Delete();
|
|
|
|
myBaseActor->Delete();
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlitableActor->Delete();
|
|
|
|
|
|
|
|
//Deleting of pints numbering pipeline
|
|
|
|
//---------------------------------------
|
|
|
|
myPointsNumDataSet->Delete();
|
|
|
|
|
|
|
|
myPtsLabeledDataMapper->RemoveAllInputs();
|
|
|
|
myPtsLabeledDataMapper->Delete();
|
|
|
|
|
|
|
|
myPtsSelectVisiblePoints->UnRegisterAllOutputs();
|
|
|
|
myPtsSelectVisiblePoints->Delete();
|
|
|
|
|
|
|
|
myPtsMaskPoints->UnRegisterAllOutputs();
|
|
|
|
myPtsMaskPoints->Delete();
|
|
|
|
|
|
|
|
myPointLabels->Delete();
|
|
|
|
|
|
|
|
|
|
|
|
//Deleting of cells numbering pipeline
|
|
|
|
//---------------------------------------
|
|
|
|
myCellsNumDataSet->Delete();
|
|
|
|
|
|
|
|
myClsLabeledDataMapper->RemoveAllInputs();
|
|
|
|
myClsLabeledDataMapper->Delete();
|
|
|
|
|
|
|
|
myClsSelectVisiblePoints->UnRegisterAllOutputs();
|
|
|
|
myClsSelectVisiblePoints->Delete();
|
|
|
|
|
|
|
|
myClsMaskPoints->UnRegisterAllOutputs();
|
|
|
|
myClsMaskPoints->Delete();
|
|
|
|
|
|
|
|
myCellCenters->UnRegisterAllOutputs();
|
|
|
|
myCellCenters->Delete();
|
|
|
|
|
|
|
|
myCellsLabels->Delete();
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
myImplicitBoolean->Delete();
|
|
|
|
|
|
|
|
myTimeStamp->Delete();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetPointsLabeled( bool theIsPointsLabeled )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
|
|
|
|
myIsPointsLabeled = theIsPointsLabeled && aGrid->GetNumberOfPoints();
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
if ( myIsPointsLabeled )
|
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
myPointsNumDataSet->ShallowCopy(aGrid);
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkDataSet *aDataSet = myPointsNumDataSet;
|
|
|
|
|
|
|
|
int aNbElem = aDataSet->GetNumberOfPoints();
|
|
|
|
|
|
|
|
vtkIntArray *anArray = vtkIntArray::New();
|
|
|
|
anArray->SetNumberOfValues( aNbElem );
|
|
|
|
|
|
|
|
for ( int anId = 0; anId < aNbElem; anId++ )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
int aSMDSId = myVisualObj->GetNodeObjId( anId );
|
|
|
|
anArray->SetValue( anId, aSMDSId );
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
aDataSet->GetPointData()->SetScalars( anArray );
|
|
|
|
anArray->Delete();
|
|
|
|
myPtsMaskPoints->SetInput( aDataSet );
|
|
|
|
myPointLabels->SetVisibility( GetVisibility() );
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
else
|
|
|
|
{
|
|
|
|
myPointLabels->SetVisibility( false );
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
SetRepresentation(GetRepresentation());
|
|
|
|
myTimeStamp->Modified();
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
2005-03-22 15:32:59 +05:00
|
|
|
void SMESH_ActorDef::SetCellsLabeled(bool theIsCellsLabeled)
|
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
vtkUnstructuredGrid* aGrid = GetUnstructuredGrid();
|
|
|
|
myIsCellsLabeled = theIsCellsLabeled && aGrid->GetNumberOfPoints();
|
2004-06-18 14:34:31 +06:00
|
|
|
if(myIsCellsLabeled){
|
2004-12-01 15:48:31 +05:00
|
|
|
myCellsNumDataSet->ShallowCopy(aGrid);
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkDataSet *aDataSet = myCellsNumDataSet;
|
|
|
|
int aNbElem = aDataSet->GetNumberOfCells();
|
|
|
|
vtkIntArray *anArray = vtkIntArray::New();
|
|
|
|
anArray->SetNumberOfValues(aNbElem);
|
|
|
|
for(int anId = 0; anId < aNbElem; anId++){
|
|
|
|
int aSMDSId = myVisualObj->GetElemObjId(anId);
|
|
|
|
anArray->SetValue(anId,aSMDSId);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
aDataSet->GetCellData()->SetScalars(anArray);
|
|
|
|
myCellCenters->SetInput(aDataSet);
|
|
|
|
myCellsLabels->SetVisibility(GetVisibility());
|
|
|
|
}else{
|
|
|
|
myCellsLabels->SetVisibility(false);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
myTimeStamp->Modified();
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
void
|
|
|
|
SMESH_ActorDef::
|
|
|
|
SetControlMode(eControl theMode)
|
|
|
|
{
|
|
|
|
SetControlMode(theMode,true);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
SMESH_ActorDef::
|
|
|
|
SetControlMode(eControl theMode,
|
|
|
|
bool theCheckEntityMode)
|
|
|
|
{
|
2005-06-08 16:45:19 +06:00
|
|
|
SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
|
|
|
|
if( !mgr )
|
|
|
|
return;
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
myControlMode = eNone;
|
2005-06-27 17:29:58 +06:00
|
|
|
theCheckEntityMode &= mgr->booleanValue( "SMESH", "display_entity", false );
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
my1DActor->GetMapper()->SetScalarVisibility(false);
|
|
|
|
my2DActor->GetMapper()->SetScalarVisibility(false);
|
|
|
|
my3DActor->GetMapper()->SetScalarVisibility(false);
|
|
|
|
myScalarBarActor->SetVisibility(false);
|
|
|
|
|
|
|
|
bool anIsScalarVisible = theMode > eNone;
|
|
|
|
|
|
|
|
if(anIsScalarVisible){
|
2004-12-01 15:48:31 +05:00
|
|
|
SMESH::Controls::FunctorPtr aFunctor;
|
2004-06-18 14:34:31 +06:00
|
|
|
switch(theMode){
|
2005-01-20 11:25:54 +05:00
|
|
|
case eLength:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::Length* aControl = new SMESH::Controls::Length();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my1DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
case eLength2D:
|
|
|
|
{
|
|
|
|
aFunctor.reset(new SMESH::Controls::Length2D());
|
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
case eFreeBorders:
|
2004-12-01 15:48:31 +05:00
|
|
|
aFunctor.reset(new SMESH::Controls::FreeBorders());
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my1DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
case eFreeEdges:
|
|
|
|
aFunctor.reset(new SMESH::Controls::FreeEdges());
|
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-06-18 14:34:31 +06:00
|
|
|
case eMultiConnection:
|
2004-12-01 15:48:31 +05:00
|
|
|
aFunctor.reset(new SMESH::Controls::MultiConnection());
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my1DActor;
|
|
|
|
break;
|
2005-01-20 11:25:54 +05:00
|
|
|
case eMultiConnection2D:
|
|
|
|
aFunctor.reset(new SMESH::Controls::MultiConnection2D());
|
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-06-18 14:34:31 +06:00
|
|
|
case eArea:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::Area* aControl = new SMESH::Controls::Area();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
case eTaper:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::Taper* aControl = new SMESH::Controls::Taper();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
case eAspectRatio:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::AspectRatio* aControl = new SMESH::Controls::AspectRatio();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
case eAspectRatio3D:
|
|
|
|
{
|
|
|
|
SMESH::Controls::AspectRatio3D* aControl = new SMESH::Controls::AspectRatio3D();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
|
|
|
myControlActor = my3DActor;
|
|
|
|
break;
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
case eMinimumAngle:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::MinimumAngle* aControl = new SMESH::Controls::MinimumAngle();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
case eWarping:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::Warping* aControl = new SMESH::Controls::Warping();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
case eSkew:
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
SMESH::Controls::Skew* aControl = new SMESH::Controls::Skew();
|
|
|
|
aControl->SetPrecision( myControlsPrecision );
|
|
|
|
aFunctor.reset( aControl );
|
2004-06-18 14:34:31 +06:00
|
|
|
myControlActor = my2DActor;
|
|
|
|
break;
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
default:
|
|
|
|
return;
|
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid* aGrid = myControlActor->GetUnstructuredGrid();
|
|
|
|
vtkIdType aNbCells = aGrid->GetNumberOfCells();
|
|
|
|
if(aNbCells){
|
2005-01-20 11:25:54 +05:00
|
|
|
myControlMode = theMode;
|
|
|
|
switch(myControlMode){
|
|
|
|
case eFreeEdges:
|
|
|
|
case eFreeBorders:
|
2005-03-30 20:06:25 +06:00
|
|
|
my1DExtActor->SetExtControlMode(aFunctor);
|
2005-01-20 11:25:54 +05:00
|
|
|
break;
|
|
|
|
case eLength2D:
|
|
|
|
case eMultiConnection2D:
|
2005-03-30 20:06:25 +06:00
|
|
|
my1DExtActor->SetExtControlMode(aFunctor,myScalarBarActor,myLookupTable);
|
2005-01-20 11:25:54 +05:00
|
|
|
break;
|
|
|
|
default:
|
2004-12-01 15:48:31 +05:00
|
|
|
myControlActor->SetControlMode(aFunctor,myScalarBarActor,myLookupTable);
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
if(theCheckEntityMode){
|
2005-01-20 11:25:54 +05:00
|
|
|
if(myControlActor == my1DActor)
|
2005-03-30 20:06:25 +06:00
|
|
|
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);
|
2005-01-20 11:25:54 +05:00
|
|
|
}
|
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
}else if(theCheckEntityMode){
|
2005-01-20 11:25:54 +05:00
|
|
|
myEntityMode = eAllEntity;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
SetRepresentation(GetRepresentation());
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
myTimeStamp->Modified();
|
2004-06-18 14:34:31 +06:00
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer){
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOME_Actor::AddToRender(theRenderer);
|
|
|
|
|
|
|
|
theRenderer->AddActor(myNodeActor);
|
|
|
|
theRenderer->AddActor(myBaseActor);
|
|
|
|
|
|
|
|
theRenderer->AddActor(my3DActor);
|
|
|
|
theRenderer->AddActor(my2DActor);
|
|
|
|
|
|
|
|
theRenderer->AddActor(my1DActor);
|
|
|
|
theRenderer->AddActor(my1DExtActor);
|
|
|
|
|
|
|
|
theRenderer->AddActor(myHighlitableActor);
|
|
|
|
|
|
|
|
theRenderer->AddActor2D(myScalarBarActor);
|
|
|
|
|
|
|
|
myPtsSelectVisiblePoints->SetRenderer(theRenderer);
|
|
|
|
myClsSelectVisiblePoints->SetRenderer(theRenderer);
|
|
|
|
|
|
|
|
theRenderer->AddActor2D(myPointLabels);
|
|
|
|
theRenderer->AddActor2D(myCellsLabels);
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::RemoveFromRender(vtkRenderer* theRenderer){
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOME_Actor::RemoveFromRender(theRenderer);
|
|
|
|
|
|
|
|
theRenderer->RemoveActor(myNodeActor);
|
|
|
|
theRenderer->RemoveActor(myBaseActor);
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
theRenderer->RemoveActor(myHighlitableActor);
|
|
|
|
|
|
|
|
theRenderer->RemoveActor(my1DActor);
|
|
|
|
theRenderer->RemoveActor(my1DExtActor);
|
|
|
|
|
|
|
|
theRenderer->RemoveActor(my2DActor);
|
|
|
|
theRenderer->RemoveActor(my3DActor);
|
|
|
|
|
|
|
|
theRenderer->RemoveActor(myScalarBarActor);
|
|
|
|
theRenderer->RemoveActor(myPointLabels);
|
|
|
|
theRenderer->RemoveActor(myCellsLabels);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
bool SMESH_ActorDef::Init(TVisualObjPtr theVisualObj,
|
|
|
|
const char* theEntry,
|
|
|
|
const char* theName,
|
|
|
|
int theIsClear)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-12-01 15:48:31 +05:00
|
|
|
Handle(SALOME_InteractiveObject) anIO = new SALOME_InteractiveObject(theEntry,"SMESH",theName);
|
2004-06-18 14:34:31 +06:00
|
|
|
setIO(anIO);
|
2004-12-01 15:48:31 +05:00
|
|
|
setName(theName);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
myVisualObj = theVisualObj;
|
|
|
|
myVisualObj->Update(theIsClear);
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
myNodeActor->Init(myVisualObj,myImplicitBoolean);
|
|
|
|
myBaseActor->Init(myVisualObj,myImplicitBoolean);
|
|
|
|
|
|
|
|
myHighlitableActor->Init(myVisualObj,myImplicitBoolean);
|
|
|
|
|
|
|
|
my1DActor->Init(myVisualObj,myImplicitBoolean);
|
|
|
|
my1DExtActor->Init(myVisualObj,myImplicitBoolean);
|
|
|
|
|
|
|
|
my2DActor->Init(myVisualObj,myImplicitBoolean);
|
|
|
|
my3DActor->Init(myVisualObj,myImplicitBoolean);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
my1DActor->GetMapper()->SetLookupTable(myLookupTable);
|
2005-01-20 11:25:54 +05:00
|
|
|
my1DExtActor->GetMapper()->SetLookupTable(myLookupTable);
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
my2DActor->GetMapper()->SetLookupTable(myLookupTable);
|
|
|
|
my3DActor->GetMapper()->SetLookupTable(myLookupTable);
|
|
|
|
|
|
|
|
float aFactor, aUnits;
|
|
|
|
my2DActor->GetPolygonOffsetParameters(aFactor,aUnits);
|
|
|
|
my2DActor->SetPolygonOffsetParameters(aFactor,aUnits*0.75);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
//SetIsShrunkable(theGrid->GetNumberOfCells() > 10);
|
|
|
|
SetIsShrunkable(true);
|
2005-06-08 16:45:19 +06:00
|
|
|
|
|
|
|
SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
|
|
|
|
if( !mgr )
|
|
|
|
return false;
|
|
|
|
|
2005-07-22 09:25:55 +06:00
|
|
|
QString aMode = mgr->stringValue( "SMESH", "display_mode" );
|
2004-06-18 14:34:31 +06:00
|
|
|
SetRepresentation(-1);
|
2005-06-08 16:45:19 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
if(aMode.compare("Wireframe") == 0){
|
|
|
|
SetRepresentation(eEdge);
|
|
|
|
}else if(aMode.compare("Shading") == 0){
|
|
|
|
SetRepresentation(eSurface);
|
|
|
|
}else if(aMode.compare("Nodes") == 0){
|
|
|
|
SetRepresentation(ePoint);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2005-06-08 16:45:19 +06:00
|
|
|
|
2005-07-22 09:25:55 +06:00
|
|
|
if(aMode == "Shrink"){
|
2004-06-18 14:34:31 +06:00
|
|
|
SetShrink();
|
2005-06-08 16:45:19 +06:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
myTimeStamp->Modified();
|
2004-06-18 14:34:31 +06:00
|
|
|
Modified();
|
2004-12-01 15:48:31 +05:00
|
|
|
return true;
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
float* SMESH_ActorDef::GetBounds(){
|
2004-12-01 15:48:31 +05:00
|
|
|
return myNodeActor->GetBounds();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
vtkDataSet* SMESH_ActorDef::GetInput(){
|
2004-12-01 15:48:31 +05:00
|
|
|
return GetUnstructuredGrid();
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-06-07 19:22:20 +06:00
|
|
|
void SMESH_ActorDef::SetTransform(VTKViewer_Transform* theTransform){
|
2004-06-18 14:34:31 +06:00
|
|
|
myNodeActor->SetTransform(theTransform);
|
|
|
|
myBaseActor->SetTransform(theTransform);
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlitableActor->SetTransform(theTransform);
|
|
|
|
|
|
|
|
my1DActor->SetTransform(theTransform);
|
|
|
|
my1DExtActor->SetTransform(theTransform);
|
|
|
|
|
|
|
|
my2DActor->SetTransform(theTransform);
|
|
|
|
my3DActor->SetTransform(theTransform);
|
|
|
|
|
|
|
|
Modified();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetMapper(vtkMapper* theMapper){
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkLODActor::SetMapper(theMapper);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::ShallowCopy(vtkProp *prop){
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOME_Actor::ShallowCopy(prop);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
vtkMapper* SMESH_ActorDef::GetMapper(){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myPickableActor->GetMapper();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
vtkUnstructuredGrid* SMESH_ActorDef::GetUnstructuredGrid(){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myVisualObj->GetUnstructuredGrid();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
bool SMESH_ActorDef::IsInfinitive(){
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkDataSet *aDataSet = myPickableActor->GetUnstructuredGrid();
|
|
|
|
aDataSet->Update();
|
2004-12-01 15:48:31 +05:00
|
|
|
myIsInfinite = aDataSet->GetNumberOfCells() == 0 ||
|
|
|
|
aDataSet->GetNumberOfCells() == 1 &&
|
|
|
|
aDataSet->GetCell(0)->GetCellType() == VTK_VERTEX;
|
2004-06-18 14:34:31 +06:00
|
|
|
return SALOME_Actor::IsInfinitive();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetIsShrunkable(bool theShrunkable){
|
2004-06-18 14:34:31 +06:00
|
|
|
myIsShrinkable = theShrunkable;
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
float SMESH_ActorDef::GetShrinkFactor(){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myBaseActor->GetShrinkFactor();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetShrinkFactor(float theValue){
|
2004-06-18 14:34:31 +06:00
|
|
|
myBaseActor->SetShrinkFactor(theValue);
|
|
|
|
|
|
|
|
my1DActor->SetShrinkFactor(theValue);
|
|
|
|
my1DExtActor->SetShrinkFactor(theValue);
|
|
|
|
|
|
|
|
my2DActor->SetShrinkFactor(theValue);
|
|
|
|
my3DActor->SetShrinkFactor(theValue);
|
|
|
|
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetShrink(){
|
2004-06-18 14:34:31 +06:00
|
|
|
if(!myIsShrinkable) return;
|
|
|
|
|
|
|
|
myBaseActor->SetShrink();
|
|
|
|
|
|
|
|
my1DActor->SetShrink();
|
|
|
|
my1DExtActor->SetShrink();
|
|
|
|
|
|
|
|
my2DActor->SetShrink();
|
|
|
|
my3DActor->SetShrink();
|
|
|
|
|
|
|
|
myIsShrunk = true;
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::UnShrink(){
|
2004-06-18 14:34:31 +06:00
|
|
|
if(!myIsShrunk) return;
|
|
|
|
|
|
|
|
myBaseActor->UnShrink();
|
|
|
|
|
|
|
|
my1DActor->UnShrink();
|
|
|
|
my1DExtActor->UnShrink();
|
|
|
|
|
|
|
|
my2DActor->UnShrink();
|
|
|
|
my3DActor->UnShrink();
|
|
|
|
|
|
|
|
myIsShrunk = false;
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
int SMESH_ActorDef::GetNodeObjId(int theVtkID){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myPickableActor->GetNodeObjId(theVtkID);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
float* SMESH_ActorDef::GetNodeCoord(int theObjID){
|
2004-12-01 15:48:31 +05:00
|
|
|
return myPickableActor->GetNodeCoord(theObjID);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
int SMESH_ActorDef::GetElemObjId(int theVtkID){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myPickableActor->GetElemObjId(theVtkID);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
vtkCell* SMESH_ActorDef::GetElemCell(int theObjID){
|
2004-12-01 15:48:31 +05:00
|
|
|
return myPickableActor->GetElemCell(theObjID);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetVisibility(int theMode){
|
2004-12-01 15:48:31 +05:00
|
|
|
SetVisibility(theMode,true);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation){
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOME_Actor::SetVisibility(theMode);
|
2005-01-20 11:25:54 +05:00
|
|
|
|
|
|
|
myNodeActor->VisibilityOff();
|
|
|
|
myBaseActor->VisibilityOff();
|
|
|
|
|
|
|
|
my1DActor->VisibilityOff();
|
|
|
|
my1DExtActor->VisibilityOff();
|
|
|
|
|
|
|
|
my2DActor->VisibilityOff();
|
|
|
|
my3DActor->VisibilityOff();
|
|
|
|
|
|
|
|
myScalarBarActor->VisibilityOff();
|
|
|
|
myPointLabels->VisibilityOff();
|
|
|
|
myCellsLabels->VisibilityOff();
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
if(GetVisibility()){
|
2004-12-01 15:48:31 +05:00
|
|
|
if(theIsUpdateRepersentation)
|
|
|
|
SetRepresentation(GetRepresentation());
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
if(myControlMode != eNone){
|
|
|
|
switch(myControlMode){
|
|
|
|
case eFreeEdges:
|
|
|
|
case eFreeBorders:
|
|
|
|
my1DExtActor->VisibilityOn();
|
|
|
|
break;
|
|
|
|
case eLength2D:
|
|
|
|
case eMultiConnection2D:
|
|
|
|
my1DExtActor->VisibilityOn();
|
|
|
|
default:
|
|
|
|
if(myControlActor->GetUnstructuredGrid()->GetNumberOfCells())
|
|
|
|
myScalarBarActor->VisibilityOn();
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
if(myRepresentation != ePoint)
|
|
|
|
myPickableActor->VisibilityOn();
|
2005-02-07 15:45:26 +05:00
|
|
|
else {
|
|
|
|
myNodeActor->VisibilityOn();
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-02-07 15:45:26 +05:00
|
|
|
if(myEntityMode & eEdges){
|
2005-01-20 11:25:54 +05:00
|
|
|
my1DActor->VisibilityOn();
|
2005-02-07 15:45:26 +05:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2005-02-07 15:45:26 +05:00
|
|
|
if(myEntityMode & eFaces){
|
2005-01-20 11:25:54 +05:00
|
|
|
my2DActor->VisibilityOn();
|
2005-02-07 15:45:26 +05:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2005-02-07 15:45:26 +05:00
|
|
|
if(myEntityMode & eVolumes){
|
2005-01-20 11:25:54 +05:00
|
|
|
my3DActor->VisibilityOn();
|
2005-02-07 15:45:26 +05:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2005-03-22 15:32:59 +05:00
|
|
|
if(myIsPointsLabeled){
|
2005-01-20 11:25:54 +05:00
|
|
|
myPointLabels->VisibilityOn();
|
2005-02-08 15:04:57 +05:00
|
|
|
myNodeActor->VisibilityOn();
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
if(myIsCellsLabeled)
|
|
|
|
myCellsLabels->VisibilityOn();
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
Modified();
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetEntityMode(unsigned int theMode){
|
2005-03-30 20:06:25 +06:00
|
|
|
myEntityState = eAllEntity;
|
|
|
|
|
|
|
|
if(!myVisualObj->GetNbEntities(SMDSAbs_Edge)){
|
|
|
|
myEntityState &= ~eEdges;
|
2005-01-20 11:25:54 +05:00
|
|
|
theMode &= ~eEdges;
|
2005-03-30 20:06:25 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
if(!myVisualObj->GetNbEntities(SMDSAbs_Face)){
|
|
|
|
myEntityState &= ~eFaces;
|
2005-01-20 11:25:54 +05:00
|
|
|
theMode &= ~eFaces;
|
2005-03-30 20:06:25 +06:00
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
if(!myVisualObj->GetNbEntities(SMDSAbs_Volume)){
|
|
|
|
myEntityState &= ~eVolumes;
|
2005-01-20 11:25:54 +05:00
|
|
|
theMode &= ~eVolumes;
|
2005-03-30 20:06:25 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-02-11 17:34:57 +05:00
|
|
|
if(!theMode){
|
|
|
|
if(myVisualObj->GetNbEntities(SMDSAbs_Edge))
|
|
|
|
theMode |= eEdges;
|
|
|
|
|
|
|
|
if(myVisualObj->GetNbEntities(SMDSAbs_Face))
|
|
|
|
theMode |= eFaces;
|
|
|
|
|
|
|
|
if(myVisualObj->GetNbEntities(SMDSAbs_Volume))
|
|
|
|
theMode |= eVolumes;
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
myBaseActor->myGeomFilter->SetInside(myEntityMode != myEntityState);
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
myEntityMode = theMode;
|
2005-06-07 19:22:20 +06:00
|
|
|
VTKViewer_ExtractUnstructuredGrid* aFilter = NULL;
|
2005-02-11 17:34:57 +05:00
|
|
|
aFilter = myBaseActor->GetExtractUnstructuredGrid();
|
|
|
|
aFilter->ClearRegisteredCellsWithType();
|
2005-06-07 19:22:20 +06:00
|
|
|
aFilter->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
|
2005-02-11 17:34:57 +05:00
|
|
|
|
|
|
|
if(myEntityMode & eEdges){
|
|
|
|
if (MYDEBUG) MESSAGE("EDGES");
|
|
|
|
aFilter->RegisterCellsWithType(VTK_LINE);
|
|
|
|
}
|
2005-01-20 11:25:54 +05:00
|
|
|
|
2005-02-11 17:34:57 +05:00
|
|
|
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());
|
2005-01-20 11:25:54 +05:00
|
|
|
SetVisibility(GetVisibility(),false);
|
|
|
|
}
|
|
|
|
|
|
|
|
void SMESH_ActorDef::SetRepresentation(int theMode){
|
|
|
|
int aNbEdges = myVisualObj->GetNbEntities(SMDSAbs_Edge);
|
|
|
|
int aNbFaces = myVisualObj->GetNbEntities(SMDSAbs_Face);
|
|
|
|
int aNbVolumes = myVisualObj->GetNbEntities(SMDSAbs_Volume);
|
2004-06-18 14:34:31 +06:00
|
|
|
if(theMode < 0){
|
|
|
|
myRepresentation = eSurface;
|
|
|
|
if(!aNbFaces && !aNbVolumes && aNbEdges){
|
|
|
|
myRepresentation = eEdge;
|
|
|
|
}else if(!aNbFaces && !aNbVolumes && !aNbEdges){
|
|
|
|
myRepresentation = ePoint;
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
switch(theMode){
|
|
|
|
case eEdge:
|
|
|
|
if(!aNbFaces && !aNbVolumes && !aNbEdges) return;
|
|
|
|
break;
|
|
|
|
case eSurface:
|
|
|
|
if(!aNbFaces && !aNbVolumes) return;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
myRepresentation = theMode;
|
|
|
|
}
|
|
|
|
|
|
|
|
if(!GetUnstructuredGrid()->GetNumberOfCells())
|
|
|
|
myRepresentation = ePoint;
|
|
|
|
|
|
|
|
if(myIsShrunk){
|
|
|
|
if(myRepresentation == ePoint){
|
|
|
|
UnShrink();
|
|
|
|
myIsShrunk = true;
|
|
|
|
}else{
|
|
|
|
SetShrink();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
myPickableActor = myBaseActor;
|
|
|
|
myNodeActor->SetVisibility(false);
|
|
|
|
vtkProperty *aProp = NULL, *aBackProp = NULL;
|
|
|
|
SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::EReperesent(-1);
|
|
|
|
switch(myRepresentation){
|
2005-02-07 15:45:26 +05:00
|
|
|
case ePoint:
|
2004-06-18 14:34:31 +06:00
|
|
|
myPickableActor = myNodeActor;
|
2004-12-01 15:48:31 +05:00
|
|
|
myNodeActor->SetVisibility(true);
|
2005-03-22 15:32:59 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
aProp = aBackProp = myNodeProp;
|
|
|
|
aReperesent = SMESH_DeviceActor::ePoint;
|
|
|
|
break;
|
|
|
|
case eEdge:
|
|
|
|
aProp = aBackProp = myEdgeProp;
|
|
|
|
aReperesent = SMESH_DeviceActor::eInsideframe;
|
|
|
|
break;
|
|
|
|
case eSurface:
|
|
|
|
aProp = mySurfaceProp;
|
|
|
|
aBackProp = myBackSurfaceProp;
|
|
|
|
aReperesent = SMESH_DeviceActor::eSurface;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
my2DActor->SetProperty(aProp);
|
|
|
|
my2DActor->SetBackfaceProperty(aBackProp);
|
|
|
|
my2DActor->SetRepresentation(aReperesent);
|
|
|
|
|
|
|
|
my3DActor->SetProperty(aProp);
|
|
|
|
my3DActor->SetBackfaceProperty(aBackProp);
|
|
|
|
my3DActor->SetRepresentation(aReperesent);
|
|
|
|
|
|
|
|
my1DExtActor->SetVisibility(false);
|
2005-01-20 11:25:54 +05:00
|
|
|
|
|
|
|
switch(myControlMode){
|
|
|
|
case eLength:
|
|
|
|
case eMultiConnection:
|
2004-06-18 14:34:31 +06:00
|
|
|
aProp = aBackProp = my1DProp;
|
|
|
|
if(myRepresentation != ePoint)
|
|
|
|
aReperesent = SMESH_DeviceActor::eInsideframe;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
my1DActor->SetProperty(aProp);
|
|
|
|
my1DActor->SetBackfaceProperty(aBackProp);
|
|
|
|
my1DActor->SetRepresentation(aReperesent);
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
my1DExtActor->SetRepresentation(aReperesent);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
if(myIsPointsVisible)
|
2004-06-18 14:34:31 +06:00
|
|
|
myPickableActor = myNodeActor;
|
2004-12-01 15:48:31 +05:00
|
|
|
if(GetPointRepresentation())
|
2004-06-18 14:34:31 +06:00
|
|
|
myNodeActor->SetVisibility(true);
|
|
|
|
|
|
|
|
SetMapper(myPickableActor->GetMapper());
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
SetVisibility(GetVisibility(),false);
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetPointRepresentation(bool theIsPointsVisible){
|
2004-06-18 14:34:31 +06:00
|
|
|
myIsPointsVisible = theIsPointsVisible;
|
|
|
|
SetRepresentation(GetRepresentation());
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
bool SMESH_ActorDef::GetPointRepresentation(){
|
2004-12-01 15:48:31 +05:00
|
|
|
return myIsPointsVisible || myIsPointsLabeled;
|
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::UpdateHighlight(){
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlitableActor->SetVisibility(false);
|
2004-12-01 15:48:31 +05:00
|
|
|
myHighlitableActor->SetHighlited(false);
|
|
|
|
|
|
|
|
if(myIsHighlighted){
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlitableActor->SetProperty(myHighlightProp);
|
2004-12-01 15:48:31 +05:00
|
|
|
}else if(myIsPreselected){
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlitableActor->SetProperty(myPreselectProp);
|
|
|
|
}
|
|
|
|
|
2005-03-30 20:06:25 +06:00
|
|
|
bool anIsVisible = GetVisibility();
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
if(myIsHighlighted || myIsPreselected){
|
|
|
|
if(GetUnstructuredGrid()->GetNumberOfCells()){
|
2005-03-30 20:06:25 +06:00
|
|
|
myHighlitableActor->SetHighlited(anIsVisible);
|
|
|
|
myHighlitableActor->SetVisibility(anIsVisible);
|
|
|
|
myHighlitableActor->GetExtractUnstructuredGrid()->
|
2005-06-07 19:22:20 +06:00
|
|
|
SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::eCells);
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::eWireframe);
|
2005-03-30 20:06:25 +06:00
|
|
|
}else if(myRepresentation == ePoint || GetPointRepresentation()){
|
|
|
|
myHighlitableActor->SetHighlited(anIsVisible);
|
|
|
|
myHighlitableActor->SetVisibility(anIsVisible);
|
|
|
|
myHighlitableActor->GetExtractUnstructuredGrid()->
|
2005-06-07 19:22:20 +06:00
|
|
|
SetModeOfExtraction(VTKViewer_ExtractUnstructuredGrid::ePoints);
|
2005-03-30 20:06:25 +06:00
|
|
|
myHighlitableActor->SetRepresentation(SMESH_DeviceActor::ePoint);
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::highlight(bool theHighlight){
|
2004-12-01 15:48:31 +05:00
|
|
|
myIsHighlighted = theHighlight;
|
2004-06-18 14:34:31 +06:00
|
|
|
UpdateHighlight();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetPreSelected(bool thePreselect){
|
2004-12-01 15:48:31 +05:00
|
|
|
myIsPreselected = thePreselect;
|
2004-06-18 14:34:31 +06:00
|
|
|
UpdateHighlight();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
// From vtkFollower
|
2005-01-20 11:25:54 +05:00
|
|
|
int SMESH_ActorDef::RenderOpaqueGeometry(vtkViewport *vp)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if (myPickableActor->GetIsOpaque())
|
|
|
|
{
|
|
|
|
vtkRenderer *ren = static_cast<vtkRenderer *>(vp);
|
|
|
|
this->Render(ren);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
int SMESH_ActorDef::RenderTranslucentGeometry(vtkViewport *vp)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if (!myPickableActor->GetIsOpaque())
|
|
|
|
{
|
|
|
|
vtkRenderer *ren = static_cast<vtkRenderer *>(vp);
|
|
|
|
this->Render(ren);
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::Render(vtkRenderer *ren){
|
|
|
|
unsigned long aTime = myTimeStamp->GetMTime();
|
2004-12-01 15:48:31 +05:00
|
|
|
unsigned long anObjTime = myVisualObj->GetUnstructuredGrid()->GetMTime();
|
2005-01-20 11:25:54 +05:00
|
|
|
unsigned long aClippingTime = myImplicitBoolean->GetMTime();
|
|
|
|
if(anObjTime > aTime || aClippingTime > aTime)
|
2004-12-01 15:48:31 +05:00
|
|
|
Update();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::Update(){
|
|
|
|
if(MYDEBUG) MESSAGE("SMESH_ActorDef::Update");
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
if(GetControlMode() != eNone) {
|
2005-02-02 18:35:49 +05:00
|
|
|
unsigned long aTime = myTimeStamp->GetMTime();
|
|
|
|
unsigned long anObjTime = myVisualObj->GetUnstructuredGrid()->GetMTime();
|
|
|
|
if (anObjTime > aTime)
|
2005-03-30 20:06:25 +06:00
|
|
|
SetControlMode(GetControlMode(),false);
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
|
|
|
if(myIsPointsLabeled){
|
2005-01-20 11:25:54 +05:00
|
|
|
SetPointsLabeled(myIsPointsLabeled);
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
|
|
|
if(myIsCellsLabeled){
|
2005-01-20 11:25:54 +05:00
|
|
|
SetCellsLabeled(myIsCellsLabeled);
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
2005-02-11 17:34:57 +05:00
|
|
|
SetEntityMode(GetEntityMode());
|
2005-01-20 11:25:54 +05:00
|
|
|
SetVisibility(GetVisibility());
|
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
myTimeStamp->Modified();
|
|
|
|
Modified();
|
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::ReleaseGraphicsResources(vtkWindow *renWin){
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOME_Actor::ReleaseGraphicsResources(renWin);
|
|
|
|
|
|
|
|
myPickableActor->ReleaseGraphicsResources(renWin);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
static void GetColor(vtkProperty *theProperty, float& r,float& g,float& b){
|
|
|
|
float* aColor = theProperty->GetColor();
|
|
|
|
r = aColor[0];
|
|
|
|
g = aColor[1];
|
|
|
|
b = aColor[2];
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetOpacity(float theValue){
|
2004-06-18 14:34:31 +06:00
|
|
|
mySurfaceProp->SetOpacity(theValue);
|
|
|
|
myBackSurfaceProp->SetOpacity(theValue);
|
|
|
|
myEdgeProp->SetOpacity(theValue);
|
|
|
|
myNodeProp->SetOpacity(theValue);
|
|
|
|
|
|
|
|
my1DProp->SetOpacity(theValue);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
float SMESH_ActorDef::GetOpacity(){
|
2004-06-18 14:34:31 +06:00
|
|
|
return mySurfaceProp->GetOpacity();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetSufaceColor(float r,float g,float b){
|
2004-06-18 14:34:31 +06:00
|
|
|
mySurfaceProp->SetColor(r,g,b);
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetSufaceColor(float& r,float& g,float& b){
|
2004-06-18 14:34:31 +06:00
|
|
|
::GetColor(mySurfaceProp,r,g,b);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetBackSufaceColor(float r,float g,float b){
|
2004-06-18 14:34:31 +06:00
|
|
|
myBackSurfaceProp->SetColor(r,g,b);
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetBackSufaceColor(float& r,float& g,float& b){
|
2004-06-18 14:34:31 +06:00
|
|
|
::GetColor(myBackSurfaceProp,r,g,b);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetEdgeColor(float r,float g,float b){
|
2004-06-18 14:34:31 +06:00
|
|
|
myEdgeProp->SetColor(r,g,b);
|
|
|
|
my1DProp->SetColor(r,g,b);
|
|
|
|
my1DExtProp->SetColor(1.0-r,1.0-g,1.0-b);
|
|
|
|
Modified();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetEdgeColor(float& r,float& g,float& b){
|
2004-06-18 14:34:31 +06:00
|
|
|
::GetColor(myEdgeProp,r,g,b);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetNodeColor(float r,float g,float b){
|
2004-06-18 14:34:31 +06:00
|
|
|
myNodeProp->SetColor(r,g,b);
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetNodeColor(float& r,float& g,float& b){
|
2004-06-18 14:34:31 +06:00
|
|
|
::GetColor(myNodeProp,r,g,b);
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetHighlightColor(float r,float g,float b){
|
2004-06-18 14:34:31 +06:00
|
|
|
myHighlightProp->SetColor(r,g,b);
|
|
|
|
Modified();
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetHighlightColor(float& r,float& g,float& b){
|
2004-06-18 14:34:31 +06:00
|
|
|
::GetColor(myHighlightProp,r,g,b);
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetPreHighlightColor(float r,float g,float b){
|
2004-06-18 14:34:31 +06:00
|
|
|
myPreselectProp->SetColor(r,g,b);
|
|
|
|
Modified();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetPreHighlightColor(float& r,float& g,float& b){
|
2004-06-18 14:34:31 +06:00
|
|
|
::GetColor(myPreselectProp,r,g,b);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
float SMESH_ActorDef::GetLineWidth(){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myEdgeProp->GetLineWidth();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetLineWidth(float theVal){
|
2004-06-18 14:34:31 +06:00
|
|
|
myEdgeProp->SetLineWidth(theVal);
|
2004-12-01 15:48:31 +05:00
|
|
|
|
|
|
|
my1DProp->SetLineWidth(theVal + aLineWidthInc);
|
|
|
|
my1DExtProp->SetLineWidth(theVal + aLineWidthInc);
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
Modified();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetNodeSize(float theVal){
|
2004-12-01 15:48:31 +05:00
|
|
|
myNodeProp->SetPointSize(theVal);
|
|
|
|
myHighlightProp->SetPointSize(theVal);
|
|
|
|
myPreselectProp->SetPointSize(theVal);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2004-12-01 15:48:31 +05:00
|
|
|
my1DProp->SetPointSize(theVal + aPointSizeInc);
|
|
|
|
my1DExtProp->SetPointSize(theVal + aPointSizeInc);
|
2004-06-18 14:34:31 +06:00
|
|
|
|
|
|
|
Modified();
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
float SMESH_ActorDef::GetNodeSize(){
|
2004-06-18 14:34:31 +06:00
|
|
|
return myNodeProp->GetPointSize();
|
|
|
|
}
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
int SMESH_ActorDef::GetObjDimension( const int theObjId )
|
2004-06-18 14:34:31 +06:00
|
|
|
{
|
|
|
|
return myVisualObj->GetElemDimension( theObjId );
|
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2005-03-22 15:32:59 +05:00
|
|
|
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);
|
|
|
|
}
|
2004-12-01 15:48:31 +05:00
|
|
|
|
2005-03-22 15:32:59 +05:00
|
|
|
vtkIdType
|
|
|
|
SMESH_ActorDef::
|
|
|
|
GetNumberOfClippingPlanes()
|
|
|
|
{
|
|
|
|
return myCippingPlaneCont.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
vtkPlane*
|
|
|
|
SMESH_ActorDef::
|
|
|
|
GetClippingPlane(vtkIdType theID)
|
|
|
|
{
|
|
|
|
if(theID >= myCippingPlaneCont.size())
|
|
|
|
return NULL;
|
|
|
|
return myCippingPlaneCont[theID].Get();
|
2004-12-01 15:48:31 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void ComputeBoundsParam(vtkDataSet* theDataSet,
|
|
|
|
float theDirection[3], float theMinPnt[3],
|
|
|
|
float& theMaxBoundPrj, float& theMinBoundPrj)
|
|
|
|
{
|
|
|
|
float aBounds[6];
|
|
|
|
theDataSet->GetBounds(aBounds);
|
|
|
|
|
|
|
|
//Enlarge bounds in order to avoid conflicts of precision
|
|
|
|
for(int i = 0; i < 6; i += 2){
|
|
|
|
static double EPS = 1.0E-3;
|
|
|
|
float aDelta = (aBounds[i+1] - aBounds[i])*EPS;
|
|
|
|
aBounds[i] -= aDelta;
|
|
|
|
aBounds[i+1] += aDelta;
|
|
|
|
}
|
|
|
|
|
|
|
|
float aBoundPoints[8][3] = { {aBounds[0],aBounds[2],aBounds[4]},
|
|
|
|
{aBounds[1],aBounds[2],aBounds[4]},
|
|
|
|
{aBounds[0],aBounds[3],aBounds[4]},
|
|
|
|
{aBounds[1],aBounds[3],aBounds[4]},
|
|
|
|
{aBounds[0],aBounds[2],aBounds[5]},
|
|
|
|
{aBounds[1],aBounds[2],aBounds[5]},
|
|
|
|
{aBounds[0],aBounds[3],aBounds[5]},
|
|
|
|
{aBounds[1],aBounds[3],aBounds[5]}};
|
|
|
|
|
|
|
|
int aMaxId = 0, aMinId = aMaxId;
|
|
|
|
theMaxBoundPrj = vtkMath::Dot(theDirection,aBoundPoints[aMaxId]);
|
|
|
|
theMinBoundPrj = theMaxBoundPrj;
|
|
|
|
for(int i = 1; i < 8; i++){
|
|
|
|
float aTmp = vtkMath::Dot(theDirection,aBoundPoints[i]);
|
|
|
|
if(theMaxBoundPrj < aTmp){
|
|
|
|
theMaxBoundPrj = aTmp;
|
|
|
|
aMaxId = i;
|
|
|
|
}
|
|
|
|
if(theMinBoundPrj > aTmp){
|
|
|
|
theMinBoundPrj = aTmp;
|
|
|
|
aMinId = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
float *aMinPnt = aBoundPoints[aMaxId];
|
|
|
|
theMinPnt[0] = aMinPnt[0];
|
|
|
|
theMinPnt[1] = aMinPnt[1];
|
|
|
|
theMinPnt[2] = aMinPnt[2];
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void DistanceToPosition(vtkDataSet* theDataSet,
|
|
|
|
float theDirection[3], float theDist, float thePos[3])
|
|
|
|
{
|
|
|
|
float aMaxBoundPrj, aMinBoundPrj, aMinPnt[3];
|
|
|
|
ComputeBoundsParam(theDataSet,theDirection,aMinPnt,aMaxBoundPrj,aMinBoundPrj);
|
|
|
|
float aLength = (aMaxBoundPrj-aMinBoundPrj)*theDist;
|
|
|
|
thePos[0] = aMinPnt[0]-theDirection[0]*aLength;
|
|
|
|
thePos[1] = aMinPnt[1]-theDirection[1]*aLength;
|
|
|
|
thePos[2] = aMinPnt[2]-theDirection[2]*aLength;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static void PositionToDistance(vtkDataSet* theDataSet,
|
|
|
|
float theDirection[3], float thePos[3], float& theDist)
|
|
|
|
{
|
|
|
|
float aMaxBoundPrj, aMinBoundPrj, aMinPnt[3];
|
|
|
|
ComputeBoundsParam(theDataSet,theDirection,aMinPnt,aMaxBoundPrj,aMinBoundPrj);
|
|
|
|
float aPrj = vtkMath::Dot(theDirection,thePos);
|
|
|
|
theDist = (aPrj-aMinBoundPrj)/(aMaxBoundPrj-aMinBoundPrj);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::SetPlaneParam(float theDir[3], float theDist, vtkPlane* thePlane)
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
thePlane->SetNormal(theDir);
|
|
|
|
float anOrigin[3];
|
|
|
|
::DistanceToPosition(GetUnstructuredGrid(),theDir,theDist,anOrigin);
|
|
|
|
thePlane->SetOrigin(anOrigin);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-01-20 11:25:54 +05:00
|
|
|
void SMESH_ActorDef::GetPlaneParam(float theDir[3], float& theDist, vtkPlane* thePlane)
|
2004-12-01 15:48:31 +05:00
|
|
|
{
|
|
|
|
thePlane->GetNormal(theDir);
|
|
|
|
|
|
|
|
float anOrigin[3];
|
|
|
|
thePlane->GetOrigin(anOrigin);
|
|
|
|
::PositionToDistance(GetUnstructuredGrid(),theDir,anOrigin,theDist);
|
|
|
|
}
|
2005-07-25 10:36:37 +06:00
|
|
|
|
|
|
|
void SMESH_ActorDef::UpdateScalarBar()
|
|
|
|
{
|
|
|
|
SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
|
|
|
|
if( !mgr )
|
|
|
|
return;
|
|
|
|
|
|
|
|
vtkTextProperty* aScalarBarTitleProp = vtkTextProperty::New();
|
|
|
|
|
|
|
|
QColor aTColor = mgr->colorValue( "SMESH", "scalar_bar_title_color", QColor( 255, 255, 255 ) );
|
|
|
|
aScalarBarTitleProp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
|
|
|
|
|
|
|
|
aScalarBarTitleProp->SetFontFamilyToArial();
|
|
|
|
|
|
|
|
if ( mgr->hasValue( "SMESH", "scalar_bar_title_font" ) )
|
|
|
|
{
|
|
|
|
QFont f = mgr->fontValue( "SMESH", "scalar_bar_title_font" );
|
|
|
|
if ( f.family() == "Arial" )
|
|
|
|
aScalarBarTitleProp->SetFontFamilyToArial();
|
|
|
|
else if ( f.family() == "Courier" )
|
|
|
|
aScalarBarTitleProp->SetFontFamilyToCourier();
|
|
|
|
else if ( f.family() == "Times" )
|
|
|
|
aScalarBarTitleProp->SetFontFamilyToTimes();
|
|
|
|
|
|
|
|
if ( f.bold() )
|
|
|
|
aScalarBarTitleProp->BoldOn();
|
|
|
|
else
|
|
|
|
aScalarBarTitleProp->BoldOff();
|
|
|
|
|
|
|
|
if ( f.italic() )
|
|
|
|
aScalarBarTitleProp->ItalicOn();
|
|
|
|
else
|
|
|
|
aScalarBarTitleProp->ItalicOff();
|
|
|
|
|
|
|
|
if ( f.underline() )
|
|
|
|
aScalarBarTitleProp->ShadowOn();
|
|
|
|
else
|
|
|
|
aScalarBarTitleProp->ShadowOff();
|
|
|
|
}
|
|
|
|
|
|
|
|
myScalarBarActor->SetTitleTextProperty( aScalarBarTitleProp );
|
|
|
|
aScalarBarTitleProp->Delete();
|
|
|
|
|
|
|
|
vtkTextProperty* aScalarBarLabelProp = vtkTextProperty::New();
|
|
|
|
|
|
|
|
aTColor = mgr->colorValue( "SMESH", "scalar_bar_label_color", QColor( 255, 255, 255 ) );
|
|
|
|
aScalarBarLabelProp->SetColor( aTColor.red()/255., aTColor.green()/255., aTColor.blue()/255. );
|
|
|
|
|
|
|
|
aScalarBarLabelProp->SetFontFamilyToArial();
|
|
|
|
if( mgr->hasValue( "SMESH", "scalar_bar_label_font" ) )
|
|
|
|
{
|
|
|
|
QFont f = mgr->stringValue( "SMESH", "scalar_bar_label_font" );
|
|
|
|
if( f.family() == "Arial" )
|
|
|
|
aScalarBarLabelProp->SetFontFamilyToArial();
|
|
|
|
else if( f.family() == "Courier" )
|
|
|
|
aScalarBarLabelProp->SetFontFamilyToCourier();
|
|
|
|
else if( f.family() == "Times" )
|
|
|
|
aScalarBarLabelProp->SetFontFamilyToTimes();
|
|
|
|
|
|
|
|
if ( f.bold() )
|
|
|
|
aScalarBarLabelProp->BoldOn();
|
|
|
|
else
|
|
|
|
aScalarBarLabelProp->BoldOff();
|
|
|
|
|
|
|
|
if ( f.italic() )
|
|
|
|
aScalarBarLabelProp->ItalicOn();
|
|
|
|
else
|
|
|
|
aScalarBarLabelProp->ItalicOff();
|
|
|
|
|
|
|
|
if( f.underline() )
|
|
|
|
aScalarBarLabelProp->ShadowOn();
|
|
|
|
else
|
|
|
|
aScalarBarLabelProp->ShadowOff();
|
|
|
|
}
|
|
|
|
|
|
|
|
myScalarBarActor->SetLabelTextProperty( aScalarBarLabelProp );
|
|
|
|
aScalarBarLabelProp->Delete();
|
|
|
|
|
|
|
|
bool horiz = ( mgr->integerValue( "SMESH", "scalar_bar_orientation" ) == 1 );
|
|
|
|
QString name = QString( "scalar_bar_%1_" ).arg( horiz ? "horizontal" : "vertical" );
|
|
|
|
if( horiz )
|
|
|
|
myScalarBarActor->SetOrientationToHorizontal();
|
|
|
|
else
|
|
|
|
myScalarBarActor->SetOrientationToVertical();
|
|
|
|
|
|
|
|
|
|
|
|
float aXVal = horiz ? 0.20 : 0.01;
|
|
|
|
if( mgr->hasValue( "SMESH", name + "x" ) )
|
|
|
|
aXVal = mgr->doubleValue( "SMESH", name + "x", aXVal );
|
|
|
|
|
|
|
|
float aYVal = horiz ? 0.01 : 0.1;
|
|
|
|
if( mgr->hasValue( "SMESH", name + "y" ) )
|
|
|
|
aYVal = mgr->doubleValue( "SMESH", name + "y", aYVal );
|
|
|
|
myScalarBarActor->SetPosition( aXVal, aYVal );
|
|
|
|
|
|
|
|
float aWVal = horiz ? 0.60 : 0.10;
|
|
|
|
if( mgr->hasValue( "SMESH", name + "width" ) )
|
|
|
|
aWVal = mgr->doubleValue( "SMESH", name + "width", aWVal );
|
|
|
|
myScalarBarActor->SetWidth( aWVal );
|
|
|
|
|
|
|
|
float aHVal = horiz ? 0.12 : 0.80;
|
|
|
|
if( mgr->hasValue( "SMESH", name + "height" ) )
|
|
|
|
aHVal = mgr->doubleValue( "SMESH", name + "height", aHVal );
|
|
|
|
myScalarBarActor->SetHeight( aHVal );
|
|
|
|
|
|
|
|
int anIntVal = 5;
|
|
|
|
if( mgr->hasValue( "SMESH", "scalar_bar_num_labels" ) )
|
|
|
|
anIntVal = mgr->integerValue( "SMESH", "scalar_bar_num_labels", anIntVal );
|
|
|
|
myScalarBarActor->SetNumberOfLabels( anIntVal == 0 ? 5: anIntVal );
|
|
|
|
|
|
|
|
anIntVal = 64;
|
|
|
|
if( mgr->hasValue( "SMESH", "scalar_bar_num_colors" ) )
|
|
|
|
anIntVal = mgr->integerValue( "SMESH", "scalar_bar_num_colors", anIntVal );
|
|
|
|
myScalarBarActor->SetMaximumNumberOfColors( anIntVal == 0 ? 64 : anIntVal );
|
|
|
|
|
|
|
|
}
|