myPlaneSource->Delete();
}
-/*!
- Definition of class ActorItem
- */
-class ActorItem : public QListWidgetItem
+namespace
{
-public:
- ActorItem( SMESH_Actor* theActor, const QString& theName, QListWidget* theListWidget ) :
- QListWidgetItem( theName, theListWidget ),
- myActor( theActor ) {}
+ /*!
+ Definition of class ActorItem
+ */
+ class ActorItem : public QListWidgetItem
+ {
+ public:
+ ActorItem( SMESH_Actor* theActor, const QString& theName, QListWidget* theListWidget ) :
+ QListWidgetItem( theName, theListWidget ),
+ myActor( theActor ) {}
- SMESH_Actor* getActor() const { return myActor; }
+ SMESH_Actor* getActor() const { return myActor; }
-private:
- SMESH_Actor* myActor;
-};
+ private:
+ SMESH_Actor* myActor;
+ };
-/*!
- Definition of class TSetVisibility
- */
-struct TSetVisibility {
- // Set visibility of cutting plane
- TSetVisibility(int theIsVisible): myIsVisible(theIsVisible){}
- void operator()(SMESH::TPlaneData& thePlaneData){
- bool anIsEmpty = thePlaneData.ActorList.empty();
- thePlaneData.Plane.GetPointer()->myActor->SetVisibility(myIsVisible && !anIsEmpty);
- }
- int myIsVisible;
-};
+ /*!
+ Definition of class TSetVisibility
+ */
+ struct TSetVisibility {
+ // Set visibility of cutting plane
+ TSetVisibility(int theIsVisible): myIsVisible(theIsVisible){}
+ void operator()(SMESH::TPlaneData& thePlaneData){
+ bool anIsEmpty = thePlaneData.ActorList.empty();
+ thePlaneData.Plane.GetPointer()->myActor->SetVisibility(myIsVisible && !anIsEmpty);
+ }
+ int myIsVisible;
+ };
+}
/*********************************************************************************
********************* class SMESHGUI_ClippingDlg *********************
QFont fnt = SpinSliderDistance->font(); fnt.setBold( true ); SpinSliderDistance->setFont( fnt );
GroupParametersLayout->addWidget( SpinSliderDistance, 1, 1 );
- QString aUnitRot = "\xB0";
+ QString aUnitRot = QString(QChar(0xB0));
TextLabelRotation1 = new QLabel( tr("ROTATION_AROUND_X_Y2Z"), GroupParameters );
TextLabelRotation1->setObjectName( "TextLabelRotation1" );
myIsSelectPlane = false;
- myHelpFileName = "clipping_page.html";
+ myHelpFileName = "clipping.html";
// signals and slots connections :
connect( ComboBoxPlanes, SIGNAL( activated( int ) ), this, SLOT( onSelectPlane( int ) ) );
return aPlaneWgt;
}
-/*!
- Translate two angles of plane to normal
-*/
-void rotationToNormal ( double theRotation[2],
- int theOrientation,
- double theNormal[3],
- double theDir[2][3] )
+namespace
{
- static double aCoeff = M_PI/180.0;
-
- double anU[2] = { cos( aCoeff * theRotation[0] ), cos( aCoeff * theRotation[1] ) };
- double aV[2] = { sqrt( 1.0 - anU[0]*anU[0] ), sqrt( 1.0 - anU[1] * anU[1] ) };
- aV[0] = theRotation[0] > 0? aV[0]: -aV[0];
- aV[1] = theRotation[1] > 0? aV[1]: -aV[1];
+ /*!
+ Translate two angles of plane to normal
+ */
+ void rotationToNormal ( double theRotation[2],
+ int theOrientation,
+ double theNormal[3],
+ double theDir[2][3] )
+ {
+ static double aCoeff = M_PI/180.0;
+
+ double anU[2] = { cos( aCoeff * theRotation[0] ), cos( aCoeff * theRotation[1] ) };
+ double aV[2] = { sqrt( 1.0 - anU[0]*anU[0] ), sqrt( 1.0 - anU[1] * anU[1] ) };
+ aV[0] = theRotation[0] > 0? aV[0]: -aV[0];
+ aV[1] = theRotation[1] > 0? aV[1]: -aV[1];
+
+ switch ( theOrientation ) {
+ case 0:
+ case 1:
+ theDir[0][1] = anU[0];
+ theDir[0][2] = aV[0];
+ theDir[1][0] = anU[1];
+ theDir[1][2] = aV[1];
+ break;
+ case 2:
+ theDir[0][2] = anU[0];
+ theDir[0][0] = aV[0];
+ theDir[1][1] = anU[1];
+ theDir[1][0] = aV[1];
+ break;
+ case 3:
+ theDir[0][0] = anU[0];
+ theDir[0][1] = aV[0];
+ theDir[1][2] = anU[1];
+ theDir[1][1] = aV[1];
+ break;
+ }
- switch ( theOrientation ) {
- case 0:
- case 1:
- theDir[0][1] = anU[0];
- theDir[0][2] = aV[0];
- theDir[1][0] = anU[1];
- theDir[1][2] = aV[1];
- break;
- case 2:
- theDir[0][2] = anU[0];
- theDir[0][0] = aV[0];
- theDir[1][1] = anU[1];
- theDir[1][0] = aV[1];
- break;
- case 3:
- theDir[0][0] = anU[0];
- theDir[0][1] = aV[0];
- theDir[1][2] = anU[1];
- theDir[1][1] = aV[1];
- break;
+ vtkMath::Cross( theDir[1], theDir[0], theNormal );
+ vtkMath::Normalize( theNormal );
+ vtkMath::Cross( theNormal, theDir[1], theDir[0] );
}
- vtkMath::Cross( theDir[1], theDir[0], theNormal );
- vtkMath::Normalize( theNormal );
- vtkMath::Cross( theNormal, theDir[1], theDir[0] );
+ /*!
+ * \brief Return a name of a father mesh if any
+ */
+ QString getFatherName( _PTR(SObject)& theSObj )
+ {
+ _PTR(SComponent) objComponent = theSObj->GetFatherComponent();
+ const int theMeshDepth = 1 + objComponent->Depth();
+ if ( theSObj->Depth() <= theMeshDepth )
+ return QString(); // theSObj is a mesh
+
+ _PTR(SObject) sobj = theSObj->GetFather();
+ while ( sobj && sobj->Depth() > theMeshDepth )
+ sobj = sobj->GetFather();
+
+ return sobj ? sobj->GetName().c_str() : "";
+ }
}
/*!
{
ActorList->clear();
- SalomeApp_Study* anAppStudy = SMESHGUI::activeStudy();
- if( !anAppStudy )
- return;
-
- _PTR(Study) aStudy = anAppStudy->studyDS();
+ _PTR(Study) aStudy = SMESH::getStudy();
if( !aStudy )
return;
std::for_each( myPlanes.begin(),myPlanes.end(), TSetVisibility( PreviewCheckBox->isChecked() ) );
aPlaneData.Plane.GetPointer()->myActor->SetVisibility( false );
+ std::map< std::string, QListWidgetItem* > itemMap; // used to sort items by entry
+
VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() );
vtkActorCollection* anAllActors = aCopy.GetActors();
anAllActors->InitTraversal();
}
}
QString aName = QString( aSObj->GetName().c_str() );
- QListWidgetItem* anItem = new ActorItem( anActor, aName, ActorList );
+ QString aFatherName = getFatherName( aSObj );
+ if ( !aFatherName.isEmpty() )
+ aName = aFatherName + " / " + aName;
+ aName += QString(" (%1)").arg( aSObj->GetID().c_str() );
+ QListWidgetItem* anItem = new ActorItem( anActor, aName, 0 );
anItem->setCheckState( anIsChecked ? Qt::Checked : Qt::Unchecked );
- updateActorItem( anItem, true, false );
+ itemMap.insert( std::make_pair( aSObj->GetID(), anItem ));
}
}
}
}
+ std::map< std::string, QListWidgetItem* >::iterator s2i = itemMap.begin();
+ for ( ; s2i != itemMap.end(); ++s2i )
+ {
+ QListWidgetItem* anItem = s2i->second;
+ ActorList->addItem( anItem );
+ }
+ updateActorItem( 0, true, false );
}
/*!
SMESH::OrientedPlane* aPlane = SMESH::OrientedPlane::New(myViewWindow);
SMESH::TPlane aTPlane(aPlane);
aPlane->PlaneMode = CurrentMode;
- SMESH::TActorList anActorList;
+ SMESH::TActorList anActorList, aVisibleActorList;
VTK::ActorCollectionCopy aCopy( myViewWindow->getRenderer()->GetActors() );
vtkActorCollection* anAllActors = aCopy.GetActors();
anAllActors->InitTraversal();
while( vtkActor* aVTKActor = anAllActors->GetNextActor() )
if( SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( aVTKActor ) )
+ {
anActorList.push_back( anActor );
-
- SMESH::TPlaneData aPlaneData(aTPlane, anActorList);
-
+ if ( anActor->GetVisibility() )
+ aVisibleActorList.push_back( anActor );
+ }
+ SMESH::TPlaneData aPlaneData(aTPlane,
+ aVisibleActorList.empty() ? anActorList : aVisibleActorList);
myPlanes.push_back(aPlaneData);