// Author : Open CASCADE S.A.S. (dmv)
// SMESH includes
//
+
#include "StdMeshersGUI_SubShapeSelectorWdg.h"
// SMESH Includes
StdMeshersGUI_SubShapeSelectorWdg
::StdMeshersGUI_SubShapeSelectorWdg( QWidget * parent ):
- QWidget( parent )
+ QWidget( parent ),
+ myPreviewActor( 0 )
{
QPixmap image0( SMESH::GetResourceMgr( mySMESHGUI )->loadPixmap( "SMESH", tr( "ICON_SELECT" ) ) );
StdMeshersGUI_SubShapeSelectorWdg::~StdMeshersGUI_SubShapeSelectorWdg()
{
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) {
- myPreviewActor->RemoveFromRender( myRenderer );
- aViewWindow->Repaint();
+ if ( myPreviewActor ) {
+ myPreviewActor->RemoveFromRender( myRenderer );
+ aViewWindow->Repaint();
+
+ delete myPreviewActor;
+ myPreviewActor = 0;
+ }
}
myEntry = "";
myParamValue = "";
myMainShape.Nullify();
-
- delete myPreviewActor;
}
//================================================================================
void StdMeshersGUI_SubShapeSelectorWdg::init()
{
myParamValue = "";
+ myIsNotCorrected = true; // to dont call the GetCorrectedValue method twice
myListOfIDs.clear();
mySelectedIDs.clear();
void StdMeshersGUI_SubShapeSelectorWdg::showPreview( bool visible)
{
+ if ( !myPreviewActor )
+ return;
+
if ( myIsShown != visible ) {
myPreviewActor->SetShown( visible );
//=================================================================================
void StdMeshersGUI_SubShapeSelectorWdg::SelectionIntoArgument()
{
+ if ( !myPreviewActor )
+ return;
+
mySelectedIDs.clear();
// get selected mesh
//=================================================================================
void StdMeshersGUI_SubShapeSelectorWdg::onListSelectionChanged()
{
+ if ( !myPreviewActor )
+ return;
+
mySelectionMgr->clearSelected();
TColStd_MapOfInteger aIndexes;
QList<QListWidgetItem*> selItems = myListWidget->selectedItems();
// function : setGeomShape
// purpose : Called to set geometry
//================================================================================
-void StdMeshersGUI_SubShapeSelectorWdg::SetMainShapeEntry( const QString& theEntry )
+void StdMeshersGUI_SubShapeSelectorWdg::SetGeomShapeEntry( const QString& theEntry )
{
if ( theEntry != "") {
myParamValue = theEntry;
myEntry = theEntry;
- myMainShape = GetTopoDSByEntry( theEntry );
+ myGeomShape = GetTopoDSByEntry( theEntry );
updateState();
+ myIsNotCorrected = true;
}
}
void StdMeshersGUI_SubShapeSelectorWdg::updateState()
{
bool state = false;
- if ( !myMainShape.IsNull() )
+ if ( !myGeomShape.IsNull() )
state = true;
myListWidget->setEnabled( state );
myAddButton->setEnabled( state );
myRemoveButton->setEnabled( state );
- if (state = true) {
+ if (state) {
myPreviewActor = new SMESH_PreviewActorsCollection();
myPreviewActor->SetSelector( mySelector );
- //myPreviewActor->Init( myMainShape, TopAbs_EDGE, myEntry );
- myPreviewActor->Init( myMainShape, mySubShType, myEntry );
+ myPreviewActor->Init( myGeomShape, mySubShType, myEntry );
myPreviewActor->SetShown( false );
myIsShown = false;
if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI )) {
SMESH::long_array_var StdMeshersGUI_SubShapeSelectorWdg::GetListOfIDs()
{
SMESH::long_array_var anArray = new SMESH::long_array;
+
+ if ( myMainEntry != "" && myIsNotCorrected )
+ myListOfIDs = GetCorrectedListOfIDs( true );
+
int size = myListOfIDs.size();
anArray->length( size );
if ( size ) {
int size = theIds->length();
for ( int i = 0; i < size; i++ )
mySelectedIDs.append( theIds[ i ] );
+
+ mySelectedIDs = GetCorrectedListOfIDs( false );
onAdd();
}
+//=================================================================================
+// function : SetMainShapeEntry
+// purpose : Called to set the Main Object Entry
+//=================================================================================
+void StdMeshersGUI_SubShapeSelectorWdg::SetMainShapeEntry( const QString& theEntry )
+{
+ myMainEntry = theEntry;
+ myMainShape = GetTopoDSByEntry( theEntry );
+ myIsNotCorrected = true;
+}
+
+//=================================================================================
+// function : GetMainShapeEntry
+// purpose : Called to get the Main Object Entry
+//=================================================================================
+const char* StdMeshersGUI_SubShapeSelectorWdg::GetMainShapeEntry()
+{
+ if ( myMainEntry == "")
+ return myEntry.toLatin1().data();
+
+ return myMainEntry.toLatin1().data();
+}
+
+//=================================================================================
+// function : GetCorrectedListOfIds
+// purpose : Called to convert the list of IDs from subshape IDs to main shape IDs
+//=================================================================================
+QList<int> StdMeshersGUI_SubShapeSelectorWdg::GetCorrectedListOfIDs( bool fromSubshapeToMainshape )
+{
+ if ( myMainShape.IsNull() || myGeomShape.IsNull() )
+ return myListOfIDs;
+
+ QList<int> aList;
+ TopTools_IndexedMapOfShape aGeomMap;
+ TopTools_IndexedMapOfShape aMainMap;
+ TopExp::MapShapes(myGeomShape, aGeomMap);
+ TopExp::MapShapes(myMainShape, aMainMap);
+
+ if ( fromSubshapeToMainshape ) { // convert indexes from subshape to mainshape
+ int size = myListOfIDs.size();
+ for (int i = 0; i < size; i++) {
+ TopoDS_Shape aSubShape = aGeomMap.FindKey( myListOfIDs.at(i) );
+ int index = aMainMap.FindIndex( aSubShape );
+ aList.append( index );
+ }
+ myIsNotCorrected = false;
+ } else { // convert indexes from main shape to subshape
+ int size = mySelectedIDs.size();
+ for (int i = 0; i < size; i++) {
+ TopoDS_Shape aSubShape = aMainMap.FindKey( mySelectedIDs.at(i) );
+ int index = aGeomMap.FindIndex( aSubShape );
+ aList.append( index );
+ }
+ }
+
+ return aList;
+}