- }
- }
- }
- }
- return listSOmesh._retn() ;
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::Import_Mesh(QAD_Desktop* parent, int theCommandID)
-{
- QString filter;
- string myExtension;
- Mesh_Reader* myReader;
-
- if (theCommandID==113) {
- filter = tr("MED files (*.med)");
- myExtension = string("MED");
- myReader = new DriverMED_R_SMESHDS_Mesh;
- }
- else if (theCommandID==112) {
- filter = tr("IDEAS files (*.unv)");
- myExtension = string("UNV");
- }
- else if (theCommandID==111) {
- filter = tr("DAT files (*.dat)");
- myExtension = string("MED");
- myReader = new DriverDAT_R_SMESHDS_Mesh;
- }
-
- QString filename = QAD_FileDlg::getFileName(parent,
- "",
- filter,
- tr("Import mesh"),
- true);
- if ( !filename.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- string myClass = string("SMESHDS_Mesh");
-// Mesh_Reader* myReader = SMESHDriver::GetMeshReader(myExtension, myClass);
-
- int myMeshId = (smeshGUI->myDocument)->NewMesh();
- Handle(SMDS_Mesh) myMesh = (smeshGUI->myDocument)->GetMesh(myMeshId);
-
- myReader->SetFile(string(filename.latin1()));
- myReader->SetMesh(myMesh);
- myReader->SetMeshId(myMeshId);
- myReader->Read();
-
- QApplication::restoreOverrideCursor();
- }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::Export_Mesh(QAD_Desktop* parent, int theCommandID)
-{
- SALOME_Selection* Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
- int nbSel = Sel->IObjectCount() ;
- if ( nbSel == 1 ) {
- Standard_Boolean res;
- Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
- SMESH::SMESH_Mesh_var aMesh = smeshGUI->ConvertIOinMesh( IObject, res );
- if ( res ) {
- if (theCommandID==122) { // EXPORT MED
- QString filename = QAD_FileDlg::getFileName(parent,
- "",
- tr("MED files (*.med)"),
- tr("Export mesh"),
- false);
- if ( !filename.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- aMesh->ExportMED( filename.latin1() );
- QApplication::restoreOverrideCursor();
- }
- }
- else if (theCommandID==121) { // EXPORT DAT
- QString filename = QAD_FileDlg::getFileName(parent,
- "",
- tr("DAT files (*.dat)"),
- tr("Export mesh"),
- false);
- if ( !filename.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- aMesh->ExportDAT( filename.latin1() );
- QApplication::restoreOverrideCursor();
- }
- }
- else if (theCommandID==123) { // EXPORT UNV
- QString filename = QAD_FileDlg::getFileName(parent,
- "",
- tr("IDEAS files (*.unv)"),
- tr("Export mesh"),
- false);
- if ( !filename.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- aMesh->ExportUNV( filename.latin1() );
- QApplication::restoreOverrideCursor();
- }
- else
- aMesh->ExportDAT( filename.latin1() );
-
- QApplication::restoreOverrideCursor();
-
- if ( IObject->hasEntry() )
- {
- MESSAGE("---");
- SALOMEDS::SObject_var SO = smeshGUI->myStudy->FindObjectID( IObject->getEntry() );
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeComment_var aFileName;
- SALOMEDS::StudyBuilder_var aStudyBuilder = smeshGUI->myStudy->NewBuilder();
- anAttr = aStudyBuilder->FindOrCreateAttribute(SO, "AttributeComment");
- aFileName = SALOMEDS::AttributeComment::_narrow(anAttr);
- aFileName->SetValue(filename.latin1());
- }
- }
- }
- }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::Import_Document(QAD_Desktop* parent, int theCommandID)
-{
- QString filter;
- string myExtension;
- Document_Reader* myReader;
-
- if (theCommandID==113) {
- filter = tr("MED files (*.med)");
- myExtension = string("MED");
- myReader = new DriverMED_R_SMESHDS_Document;
- }
- else if (theCommandID==112) {
- filter = tr("IDEAS files (*.unv)");
- myExtension = string("UNV");
- myReader = new DriverUNV_R_SMESHDS_Document;
- }
- else if (theCommandID==111) {
- filter = tr("DAT files (*.dat)");
- myExtension = string("DAT");
- myReader = new DriverDAT_R_SMESHDS_Document;
- }
-
- QString filename = QAD_FileDlg::getFileName(parent,
- "",
- filter,
- tr("Import document"),
- true);
- if ( !filename.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- string myClass = string("SMESHDS_Document");
-// Document_Reader* myReader = SMESHDriver::GetDocumentReader(myExtension, myClass);
- Handle(SMESHDS_Document) newDocument = new SMESHDS_Document(1);
-
- myReader->SetFile(string(filename.latin1()));
- myReader->SetDocument(smeshGUI->myDocument);
- myReader->Read();
- QApplication::restoreOverrideCursor();
- }
-}
-
-void SMESHGUI::Export_Document(QAD_Desktop* parent, int theCommandID)
-{
- QString filter;
- Document_Writer* myWriter;
- string myExtension;
-
- if (theCommandID==122) {
- filter = tr("MED files (*.med)");
- myExtension = string("MED");
- myWriter = new DriverMED_W_SMESHDS_Document;
- }
- else if (theCommandID==121) {
- filter = tr("DAT files (*.dat)");
- myExtension = string("DAT");
- myWriter = new DriverDAT_W_SMESHDS_Document;
- } else if (theCommandID==123) {
- filter = tr("IDEAS files (*.unv)");
- myExtension = string("UNV");
- myWriter = new DriverUNV_W_SMESHDS_Document;
- }
-
- QString filename = QAD_FileDlg::getFileName(parent,
- "",
- filter,
- tr("Export document"),
- false);
- if ( !filename.isEmpty() ) {
- QApplication::setOverrideCursor( Qt::waitCursor );
- string myClass = string("SMESHDS_Document");
- //Document_Writer* myWriter = SMESHDriver::GetDocumentWriter(myExtension, myClass);
-
- myWriter->SetFile(string(filename.latin1()));
- myWriter->SetDocument(smeshGUI->myDocument);
-
- //StudyContextStruct* myStudyContext = _impl.GetStudyContext(myStudyId);
- //Handle(SMESHDS_Document) myDocument = myStudyContext->myDocument;
- //myWriter->SetDocument(myDocument);
-
- myWriter->Write();
- QApplication::restoreOverrideCursor();
- }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-bool SMESHGUI::OnMousePress(QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-{
- SMESHGUI::GetOrCreateSMESHGUI(parent);
- return false ;
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-bool SMESHGUI::OnMouseMove (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-{
- SMESHGUI::GetOrCreateSMESHGUI(parent);
-
- return true;
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-bool SMESHGUI::OnKeyPress (QKeyEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
-{
- SMESHGUI::GetOrCreateSMESHGUI(parent);
-
- return true ;
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-bool SMESHGUI::SetSettings( QAD_Desktop* parent )
-{
- SMESHGUI::GetOrCreateSMESHGUI(parent);
-
- /* Display mode */
- QString DisplayMode = QAD_CONFIG->getSetting("SMESH:DisplayMode");
- if ( DisplayMode.compare("") == 0 ) {
- DisplayMode = "Shading";
- QAD_CONFIG->addSetting("SMESH:DisplayMode","Shading");
- }
-
- if ( DisplayMode.compare("Wireframe") == 0 ){
- parent->menuBar()->setItemChecked(10003, false );
- parent->menuBar()->setItemChecked(10002, false );
- parent->menuBar()->setItemChecked(10001, true );
- } else if ( DisplayMode.compare("Shading") == 0 ){
- parent->menuBar()->setItemChecked(10003, false );
- parent->menuBar()->setItemChecked(10002, true );
- parent->menuBar()->setItemChecked(10001, false );
- } else if ( DisplayMode.compare("Shrink") == 0 ) {
- parent->menuBar()->setItemChecked(10003, true );
- parent->menuBar()->setItemChecked(10002, false );
- parent->menuBar()->setItemChecked(10001, false );
- }
-
- /* Automatic Update */
- QString AutoUpdate = QAD_CONFIG->getSetting("SMESH:AutomaticUpdate");
- if ( AutoUpdate.compare("true") == 0 ) {
- parent->menuBar()->setItemChecked(1001, true );
- smeshGUI->myAutomaticUpdate = true;
- } else {
- parent->menuBar()->setItemChecked(1001, false );
- smeshGUI->myAutomaticUpdate = false;
- }
-
- /* menus disable */
- parent->menuBar()->setItemEnabled( 11, false); // IMPORT
-
- return true;
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::DefinePopup( QString & theContext, QString & theParent, QString & theObject )
-{
- /* Create or retrieve an object SMESHGUI */
- SMESHGUI::GetOrCreateSMESHGUI(QAD_Application::getDesktop());
-
- // NRI : Temporary added
- // if ( smeshGUI->myStudy->GetProperties()->IsLocked() ) {
- // theObject = "NothingSelected";
- // theContext = "NothingSelected";
- // }
- // NRI
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
- int nbSel = Sel->IObjectCount();
- if (nbSel == 0) {
- if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
- vtkScalarBarActor* aScalarBar = smeshGUI->GetScalarBar();
- if ((aScalarBar != NULL) && (aScalarBar->GetVisibility() == 1) ) {
- theObject = "ScalarBar";
- theContext = "";
- } else {
- theObject = "NothingSelected";
- theContext = "NothingSelected";
- }
- } else {
- theObject = "NothingSelected";
- theContext = "NothingSelected";
- }
- } else if (nbSel == 1 ) {
- theObject = smeshGUI->CheckTypeObject( Sel->firstIObject() );
- theContext = "";
- } else {
- theObject = smeshGUI->CheckHomogeneousSelection();
- theContext = "";
- }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-bool SMESHGUI::CustomPopup( QAD_Desktop* parent,
- QPopupMenu* popup,
- const QString& theContext,
- const QString& theParent,
- const QString& theObject )
-{
- // Popup should be customized for any viewer since some meaningless commands may be present in the popup
- //if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK) //Test du type de viewer true=OCC false=VTK
- // return false;
- /* Create or retrieve an object SMESHGUI */
- SMESHGUI::GetOrCreateSMESHGUI(parent);
-
- // NRI : Temporary added
- // if ( smeshGUI->myStudy->GetProperties()->IsLocked() ) {
- // return false;
- // }
- // NRI
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
- QAD_StudyFrame* studyFrame = smeshGUI->myActiveStudy->getActiveStudyFrame();
- int nbSel = Sel->IObjectCount();
-
- if (nbSel == 0) {
- if (studyFrame->getTypeView() != VIEW_VTK)
- popup->clear();
- return false;
- } else if (nbSel == 1 ) {
- QString parentComp = ((SALOMEGUI_Desktop*)parent)->getComponentFromSelection();
- // First check type of active viewer (VTK required)
- if (/*studyFrame->getTypeView() != VIEW_VTK ||*/ parentComp != parent->getActiveComponent())
- {
- //MESSAGE("CustomPopup(): VTK viewer required, removing all SMESH-specific popup menu items")
- while (1) {
- int id = popup->idAt(0);
- if (id <= QAD_TopLabel_Popup_ID)
- popup->removeItemAt(0);
- else
- break;
- }
- if (theObject.compare("Component") == 0) {
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- }
- return false;
- }
-
- // Remove common popup items for Submesh, Hypothesis and Algorithm
- if (theObject.compare("SubMesh") == 0 ||
- theObject.compare("Hypothesis") == 0 ||
- theObject.compare("Algorithm") == 0 ) {
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItem(QAD_Erase_Popup_ID);
- int id = popup->idAt(popup->count()-1); // last item
- if (id < 0 && id != -1) popup->removeItem(id); // separator
- }
-
- if (theObject.compare("Component") == 0) {
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- return true;
- }
-
- int id = QAD_TopLabel_Popup_ID;//popup->idAt(0);
- QFont f = QApplication::font();
- f.setBold( TRUE );
-
- Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
-
- if ( theParent.compare("Viewer")==0 ) {
- if (popup->idAt(0) == id) {
- popup->removeItem(id);
- popup->insertItem( new CustomItem ( QString(IObject->getName()), f ), id, 0 );
- }
-
- Standard_Boolean res;
- SMESH_Actor* ac = smeshGUI->FindActorByEntry( IObject->getEntry(), res, false );
- if ( res && studyFrame->getTypeView() == VIEW_VTK) {
- VTKViewer_RenderWindowInteractor* myRenderInter=
- ((VTKViewer_ViewFrame*)studyFrame->getRightFrame()->getViewFrame())->getRWInteractor();
- if ( myRenderInter->isVisible( IObject ) ) {
- popup->removeItem(QAD_Display_Popup_ID);
- } else {
- popup->removeItem(QAD_Erase_Popup_ID);
- }
- } else {
- popup->removeItem(QAD_Erase_Popup_ID);
- if (!res) {// mesh not computed -> can't display it
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItemAt(popup->count() - 1);//separator
- }
- }
- } else if ( theParent.compare("ObjectBrowser")==0 ) {
- if (theObject.compare("Mesh") == 0 ||
- theObject.compare("SubMesh") == 0 ||
- theObject.compare("Hypothesis") == 0 ||
- theObject.compare("Algorithm") == 0 ) {
- popup->removeItemAt(0);
- } else {
- if (popup->idAt(0) == id) {
- popup->removeItem(id);
- popup->removeItemAt(0);//separator
- }
- }
-
- Standard_Boolean res;
- SMESH_Actor* ac = smeshGUI->FindActorByEntry( IObject->getEntry(), res, false );
- if ( res && studyFrame->getTypeView() == VIEW_VTK ) {
- VTKViewer_RenderWindowInteractor* myRenderInter=
- ((VTKViewer_ViewFrame*)studyFrame->getRightFrame()->getViewFrame())->getRWInteractor();
- if ( myRenderInter->isVisible( IObject ) ) {
- popup->removeItem(QAD_Display_Popup_ID);
- } else {
- popup->removeItem(QAD_Erase_Popup_ID);
- }
- } else {
- if (theObject.compare("Mesh") == 0 ||
- theObject.compare("SubMesh") == 0 ||
- theObject.compare("Hypothesis") == 0 ||
- theObject.compare("Algorithm") == 0 ) {
- } else {
- popup->removeItem(QAD_Erase_Popup_ID);
- if (!res) {// mesh not computed -> can't display it
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItemAt(popup->count() - 1);//separator
- }
- }
- }
- }
- } else {
- QString parentComp = ((SALOMEGUI_Desktop*)parent)->getComponentFromSelection();
- QAD_StudyFrame* studyFrame = smeshGUI->myActiveStudy->getActiveStudyFrame();
- if (/*studyFrame->getTypeView() != VIEW_VTK ||*/ parentComp != parent->getActiveComponent())
- {
- //MESSAGE("CustomPopup(): VTK viewer required, removing all SMESH-specific popup menu items")
- while (1) {
- int id = popup->idAt(0);
- if (id <= QAD_TopLabel_Popup_ID && id != -1)
- popup->removeItemAt(0);
- else
- break;
- }
- if (parentComp.isNull()) { // objects from several components are selected
- popup->removeItem(QAD_DisplayOnly_Popup_ID);
- popup->removeItem(QAD_Display_Popup_ID);
- popup->removeItem(QAD_Erase_Popup_ID);
- int id = popup->idAt(popup->count()-1); // last item
- if (id < 0 && id != -1) popup->removeItem(id); // separator
- }
- return false;
- }
-
- QString type = smeshGUI->CheckHomogeneousSelection();
- if ( type.compare("Heterogeneous Selection") != 0 ) {
- int id = QAD_TopLabel_Popup_ID;//popup->idAt(0);
- QFont f = QApplication::font();
- f.setBold( TRUE );
- popup->removeItem(id);
- popup->insertItem( new CustomItem ( QString("%1 ").arg(nbSel) + type + " (s) ", f), id, 0 );
- }
- }
- return false;
-}
-
-//=============================================================================
-/*! Method: BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
- * Purpose: ensures that the actor for the given <theIO> exists in the active VTK view
- */
-//=============================================================================
-void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
-{
- /* Create or retrieve an object SMESHGUI */
- SMESHGUI::GetOrCreateSMESHGUI(QAD_Application::getDesktop());
-
- QAD_StudyFrame* activeFrame = smeshGUI->myActiveStudy->getActiveStudyFrame();
- if (activeFrame->getTypeView() == VIEW_VTK) {
- // VTK
- SALOMEDS::SObject_var fatherSF =
- smeshGUI->myStudy->FindObjectID(activeFrame->entry());
-
- SALOME_Selection* Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
- SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
-
-// for(;It.More();It.Next()) {
-// Handle(SALOME_InteractiveObject) IObject = It.Value();
- Handle(SALOME_InteractiveObject) IObject = theIO;
- if ( IObject->hasEntry() ) {
- // Look for the actor in all views
- Standard_Boolean res;
- SMESH_Actor *ac = smeshGUI->FindActorByEntry(IObject->getEntry(), res, false);
-
- // Actor not found at all -> mesh is not computed -> do nothing!!!
- if ( !res ) {
- /*SMESH::SMESH_Mesh_var aM;
- SALOMEDS::SObject_var aMorSM = smeshGUI->myStudy->FindObjectID( IObject->getEntry() );
- SALOMEDS::SObject_var father = aMorSM->GetFather();
- SALOMEDS::SObject_var fatherComp = aMorSM->GetFatherComponent();
-
- // Non-displayable objects (Hypo, Algo) have tags < 3 or have a father different from component
- if (aMorSM->Tag() < 3 || strcmp(father->GetID(), fatherComp->GetID()) != 0)
- continue;
-
- SALOMEDS::GenericAttribute_var anAttr;
- SALOMEDS::AttributeIOR_var anIOR;
- if ( !aMorSM->_is_nil() ) {
- if (aMorSM->FindAttribute(anAttr, "AttributeIOR") ) {
- anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
- aM = SMESH::SMESH_Mesh::_narrow( _orb->string_to_object(anIOR->Value()) );
- }
- }
-
- if (!aM->_is_nil()) {
- smeshGUI->InitActor(aM);
- ac = smeshGUI->ReadScript(aM);
- }
-
- if (ac) {
- smeshGUI->DisplayActor( ac, true );
- smeshGUI->DisplayEdges( ac );
- smeshGUI->ChangeRepresentation( ac, ac->getDisplayMode() );
- }*/
-// continue;
- } else { // The actor exists in some view
- // Check whether the actor belongs to the active view
- VTKViewer_RenderWindowInteractor* rwInter =
- ((VTKViewer_ViewFrame*)activeFrame->getRightFrame()->getViewFrame())->getRWInteractor();
-
- // The actor belongs to inactive view -> create a copy and display it in the active view
- if (!rwInter->isInViewer(IObject)) {
- SMESH_Actor* acCopy = SMESH_Actor::New();
- acCopy->ShallowCopy(ac);
- ac = acCopy;
- }
- smeshGUI->DisplayActor( ac, false );
- smeshGUI->DisplayEdges( ac );
- smeshGUI->ChangeRepresentation( ac, ac->getDisplayMode() );
- }
- }
-// }
- } else {
- MESSAGE("BuildPresentation() must not be called while non-VTK view is active")
- }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::setOrb()
-{
- try {
- ORB_INIT &init = *SINGLETON_<ORB_INIT>::Instance();
- ASSERT(SINGLETON_<ORB_INIT>::IsAlreadyExisting());
- _orb = init( 0 , 0 );
- } catch (...) {
- INFOS("internal error : orb not found");
- _orb = 0;
- }
- ASSERT(! CORBA::is_nil(_orb));
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-SMESH_Actor* SMESHGUI::ReadScript(SMESH::SMESH_Mesh_ptr aMesh)
-{
- SMESH_Actor* MeshActor;
- if ( !aMesh->_is_nil() ) {
- Standard_Boolean result;
- MeshActor = FindActor(aMesh, result, true);
- if ( result ) {
- SMESH::log_array_var aSeq = aMesh->GetLog(true);
-
- if (aSeq->length() == 0) {
- MESSAGE("ReadScript(): log is empty")
- return MeshActor;
- }
-
- for (unsigned int ind = 0; ind < aSeq->length();ind++) {
- switch ( aSeq[ind].commandType )
- {
- case SMESH::ADD_NODE :
- {
- AddNodes( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::ADD_EDGE :
- {
- // AddEdges( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::ADD_TRIANGLE :
- {
- AddTriangles( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::ADD_QUADRANGLE :
- {
- AddQuadrangles( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::ADD_TETRAHEDRON :
- {
- AddTetras( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::ADD_PYRAMID :
- {
- break;
- }
- case SMESH::ADD_PRISM :
- {
- break;
- }
- case SMESH::ADD_HEXAHEDRON :
- {
- AddHexaedres( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::REMOVE_NODE :
- {
- RemoveNodes( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- case SMESH::REMOVE_ELEMENT :
- {
- RemoveElements( MeshActor, aSeq[ind].number, aSeq[ind].coords, aSeq[ind].indexes );
- break;
- }
- }
- }
- return MeshActor;
- }
- }
- return NULL;
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::Dump(SMESH_Actor* Mactor)
-{
- vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- vtkPoints *Pts = ugrid->GetPoints();
- int nbPts = Pts->GetNumberOfPoints();
- int nbCells = ugrid->GetNumberOfCells();
-
- FILE *In;
- int i,j;
- In = fopen("/tmp/dumpMesh","w+");
- fprintf(In,"%d %d\n",nbPts,nbCells);
- for ( int i = 0; i < nbPts; i++ ) {
- float *p = ugrid->GetPoint(i);
- fprintf(In,"%d %e %e %e\n",i, p[0], p[1], p[2] );
- }
-
- for ( int i = 0; i < nbCells; i++ ) {
- fprintf(In,"%d %d",i,ugrid->GetCell(i)->GetCellType());
- vtkIdList *Id = ugrid->GetCell(i)->GetPointIds();
- for (j=0; j<Id->GetNumberOfIds(); j++) {
- fprintf(In," %d",Id->GetId(j));
- }
- fprintf(In,"\n");
- }
- fclose(In);
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddNodes( SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords,
- const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- if ( Mactor->GetMapper() == NULL ) {
- vtkPoints *Pts = vtkPoints::New();
- SMESH_Grid *ugrid = SMESH_Grid::New();
- ugrid->Allocate();
-
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- int idVTK = Pts->InsertNextPoint( coords[j-1], coords[j], coords[j+1] );
- //Mactor->AddNode( indexes[i-1], idVTK );
- ugrid->AddNode( indexes[i-1], idVTK );
- i++;
- j = j + 3;
- }
- //vtkUnstructuredGrid *ugrid = vtkUnstructuredGrid::New();
- ugrid->SetPoints(Pts);
- vtkDataSetMapper * PtsMapper = vtkDataSetMapper::New();
- PtsMapper->SetInput( ugrid );
- Mactor->DataSource = PtsMapper->GetInput();
- Mactor->SetMapper(PtsMapper);
- } else {
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- int idVTK = ugrid->GetPoints()->InsertNextPoint( coords[j-1], coords[j], coords[j+1] );
- ugrid->AddNode( indexes[i-1], idVTK );
- i++;
- j = j + 3;
- }
- vtkDataSetMapper *PtsMapper = vtkDataSetMapper::New();
- PtsMapper->SetInput( ugrid );
- Mactor->DataSource = PtsMapper->GetInput();
- Mactor->SetMapper(PtsMapper);
- }
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddNode(SMESH_Actor* Mactor, int idnode, float x, float y, float z)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- MESSAGE ( "SMESHGUI::AddNode " << idnode << " : " << x << ";" << y << ";" << z )
- if ( Mactor->GetMapper() == NULL ) {
- vtkPoints *Pts = vtkPoints::New();
- int idVTK = Pts->InsertNextPoint( x, y, z );
- //Mactor->AddNode( idnode, idVTK );
- //vtkUnstructuredGrid *ugrid = vtkUnstructuredGrid::New();
- SMESH_Grid *ugrid = SMESH_Grid::New();
- ugrid->Allocate();
- ugrid->AddNode( idnode, idVTK );
- ugrid->SetPoints(Pts);
- vtkDataSetMapper * PtsMapper = vtkDataSetMapper::New();
- PtsMapper->SetInput( ugrid );
- Mactor->DataSource = PtsMapper->GetInput();
- Mactor->SetMapper(PtsMapper);
- } else {
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid *ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int idVTK = ugrid->GetPoints()->InsertNextPoint( x, y, z );
- //Mactor->AddNode( idnode, idVTK );
- ugrid->AddNode( idnode, idVTK );
- vtkDataSetMapper *PtsMapper = vtkDataSetMapper::New();
- PtsMapper->SetInput( ugrid );
- Mactor->DataSource = PtsMapper->GetInput();
- Mactor->SetMapper(PtsMapper);
- }
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::RemoveNode(SMESH_Actor* Mactor, int idnode)
-{
- MESSAGE ( " OLD RemoveNode method " )
-// int id = Mactor->GetIdVTKNode( idnode );
-// MESSAGE ( " RemoveNode id VTK " << id )
-// if ( Mactor->GetMapper() != NULL ) {
-// vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
-// vtkUnstructuredGrid* newUgrid = vtkUnstructuredGrid::New();
-// vtkPoints *Pts = ugrid->GetPoints();
-// vtkPoints *newPts = vtkPoints::New();
-// int nbPts = Pts->GetNumberOfPoints();
-// bool findPt = false;
-// for ( int i = 0; i < nbPts; i++ ) {
-// if ( id != i ) {
-// if ( !findPt)
-// newPts->InsertPoint(i, Pts->GetPoint(i) );
-// else
-// newPts->InsertPoint(i-1, Pts->GetPoint(i) );
-// } else {
-// findPt = true;
-// Mactor->RemoveNode( idnode );
-// }
-// }
-
-// newUgrid->SetPoints(newPts);
-// int nbCells = ugrid->GetNumberOfCells();
-// for ( int i = 0; i < nbCells; i++ ) {
-// vtkIdList *Ids = ugrid->GetCell(i)->GetPointIds();
-// vtkIdList *newIds = vtkIdList::New();
-// int nbIds = Ids->GetNumberOfIds();
-// newIds->SetNumberOfIds(nbIds);
-// for ( int j = 0; j < nbIds; j++ ) {
-// int theid = Ids->GetId(j);
-// if ( theid > id ) {
-// newIds->SetId( j, theid-1 );
-// } else
-// newIds->SetId( j, theid );
-// }
-// int idSMDSel = Mactor->GetIdSMESHDSElement( i );
-// Mactor->RemoveElement( idSMDSel, false );
-// int idVTKel = newUgrid->InsertNextCell( ugrid->GetCell(i)->GetCellType(), newIds );
-// Mactor->AddElement( idSMDSel, idVTKel );
-// }
-
-
-// vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
-// Mapper->SetInput( newUgrid );
-// Mactor->DataSource = Mapper->GetInput();
-// Mactor->SetMapper(Mapper);
-
-// UpdateView();
-// }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::RemoveNodes(SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- int i = 1;
- while ( i <= number ) {
- Mactor->RemoveNode( indexes[i-1] );
- i++;
- }
-
- TColStd_DataMapOfIntegerInteger newMapVTKNodes;
- TColStd_DataMapOfIntegerInteger newMapSMESHDSNodes;
- TColStd_DataMapOfIntegerInteger MapOldNodesToNewNodes;
-
- if ( Mactor->GetMapper() != NULL ) {
- SMESH_Grid *ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid *newUgrid = SMESH_Grid::New();
- newUgrid->CopyMaps(ugrid);
-
- vtkPoints *Pts = ugrid->GetPoints();
- vtkPoints *newPts = vtkPoints::New();
- int nbPts = Pts->GetNumberOfPoints();
- int j = 0;
- for ( int i = 0; i < nbPts; i++ ) {
- int idSMESHDSNode = Mactor->GetIdSMESHDSNode(i);
- if ( idSMESHDSNode != -1 ) {
- newPts->InsertPoint(j, Pts->GetPoint(i) );
-
- newMapVTKNodes.Bind(j, idSMESHDSNode);
- newMapSMESHDSNodes.Bind(idSMESHDSNode, j);
-
- MapOldNodesToNewNodes.Bind(i,j);
- j++;
- }
- }
-
- newUgrid->SetIdsVTKNode(newMapVTKNodes);
- newUgrid->SetIdsSMESHDSNode(newMapSMESHDSNodes);
- newUgrid->SetPoints(newPts);
-
- TColStd_DataMapOfIntegerInteger newMapElementSMDStoVTK;
- TColStd_DataMapOfIntegerInteger newMapElementVTKtoSMDS;
-
- int nbCells = ugrid->GetNumberOfCells();
- for ( int i = 0; i < nbCells; i++ ) {
- vtkIdList *Ids = ugrid->GetCell(i)->GetPointIds();
- vtkIdList *newIds = vtkIdList::New();
- int nbIds = Ids->GetNumberOfIds();
- newIds->SetNumberOfIds(nbIds);
- bool isGood = true;
- for ( int j = 0; j < nbIds; j++ ) {
- int theid = Ids->GetId(j);
- if ( MapOldNodesToNewNodes.IsBound( theid ) ) {
- newIds->SetId( j, MapOldNodesToNewNodes.Find( theid ) );
- } else {
- isGood = false;
- break;
- }
- }
-
- // Filtering out cells based on non-existing nodes
- if (isGood) {
- int idSMDSel = Mactor->GetIdSMESHDSElement( i );
- int idVTKel = newUgrid->InsertNextCell( ugrid->GetCell(i)->GetCellType(), newIds );
-
- newMapElementSMDStoVTK.Bind(idSMDSel, idVTKel);
- newMapElementVTKtoSMDS.Bind(idVTKel, idSMDSel);
- }
- }
-
- newUgrid->SetIdsVTKElement(newMapElementVTKtoSMDS);
- newUgrid->SetIdsSMESHDSElement(newMapElementSMDStoVTK);
-
- // Copy new data to the old DatSource: keep the single DataSource for all actors
- ugrid->DeepCopy(newUgrid);
-
- vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
- Mapper->SetInput( ugrid );
- Mactor->SetMapper(Mapper);
-
- // Commented to avoid multiple viewer updates when called by ReadScript()
- //UpdateView();
-
- }
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::RemoveNodes(SMESH::SMESH_Mesh_ptr aMesh, const TColStd_MapOfInteger& MapIndex)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- Standard_Boolean result;
- SMESH_Actor* ac = FindActor( aMesh, result, true );
- if ( result ) {
- SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
- anArrayOfIdeces->length(MapIndex.Extent());
- TColStd_MapIteratorOfMapOfInteger ite( MapIndex );
- int i = 0;
- for ( ; ite.More(); ite.Next() ) {
- // MESSAGE ( " RemoveNode : id " << ac->GetIdSMESHDSNode(ite.Key()) )
- anArrayOfIdeces[i] = ac->GetIdSMESHDSNode(ite.Key());
- i++;
- }
- SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
- aMeshEditor->RemoveNodes(anArrayOfIdeces);
-
- }
- if ( myAutomaticUpdate ) {
- SMESH_Actor* Mesh = smeshGUI->ReadScript(aMesh);
- if ( Mesh != NULL ) {
- smeshGUI->DisplayActor( Mesh );
- smeshGUI->DisplayEdges( Mesh );
- smeshGUI->ChangeRepresentation( Mesh, Mesh->getDisplayMode() );
- AddActorInSelection( Mesh );
- }
- }
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::RemoveElement(SMESH_Actor* Mactor, int idelement)
-{
- MESSAGE ( " OLD RemoveElement method " )
-// int id = Mactor->GetIdVTKElement( idelement );
-// MESSAGE ( " RemoveElement id VTK : " << id )
-// if ( Mactor->GetMapper() != NULL ) {
-// vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
-// vtkUnstructuredGrid* newUgrid = vtkUnstructuredGrid::New();
-
-// int nbCells = ugrid->GetNumberOfCells();
-// for ( int i = 0; i < nbCells; i++ ) {
-// if ( id != i ) {
-// newUgrid->InsertNextCell( ugrid->GetCell(i)->GetCellType(),
-// ugrid->GetCell(i)->GetPointIds() );
-// } else
-// Mactor->RemoveElement( idelement );
-// }
-// newUgrid->SetPoints(ugrid->GetPoints());
-
-// vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
-// Mapper->SetInput( newUgrid );
-// Mactor->DataSource = Mapper->GetInput();
-// Mactor->SetMapper(Mapper);
-
-// UpdateView();
-// }
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::RemoveElements(SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- int i = 1;
- while ( i <= number ) {
- Mactor->RemoveElement( indexes[i-1] );
- i++;
- }
- TColStd_DataMapOfIntegerInteger newMapElementSMDStoVTK;
- TColStd_DataMapOfIntegerInteger newMapElementVTKtoSMDS;
-
- if ( Mactor->GetMapper() != NULL ) {
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* newUgrid = SMESH_Grid::New();
- newUgrid->CopyMaps(ugrid);
-
- int nbCells = ugrid->GetNumberOfCells();
- for ( int i = 0; i < nbCells; i++ ) {
- int idSMESHDSElement = Mactor->GetIdSMESHDSElement(i);
- if ( idSMESHDSElement != -1 ) {
- int newId = newUgrid->InsertNextCell( ugrid->GetCell(i)->GetCellType(),
- ugrid->GetCell(i)->GetPointIds() );
- newMapElementSMDStoVTK.Bind(idSMESHDSElement, newId);
- newMapElementVTKtoSMDS.Bind(newId, idSMESHDSElement);
- }
- }
-
- newUgrid->SetIdsVTKElement(newMapElementVTKtoSMDS);
- newUgrid->SetIdsSMESHDSElement(newMapElementSMDStoVTK);
-
- newUgrid->SetPoints(ugrid->GetPoints());
-
- // Copy new data to the old DatSource: keep the single DataSource for all actors
- ugrid->DeepCopy(newUgrid);
-
- vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
- Mapper->SetInput( ugrid );
- Mactor->SetMapper(Mapper);
-
- // Commented to avoid multiple viewer updates when called by ReadScript()
- //UpdateView();
- }
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::RemoveElements(SMESH::SMESH_Mesh_ptr aMesh, const TColStd_MapOfInteger& MapIndex)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- Standard_Boolean result;
- SMESH_Actor* ac = FindActor( aMesh, result, true );
- if ( result ) {
- SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
- anArrayOfIdeces->length(MapIndex.Extent());
- TColStd_MapIteratorOfMapOfInteger ite( MapIndex );
- int i = 0;
- for ( ; ite.More(); ite.Next() ) {
- // MESSAGE ( " RemoveElement : id " << ite.Key() << "," << ac->GetIdSMESHDSElement(ite.Key()) )
- anArrayOfIdeces[i] = ac->GetIdSMESHDSElement(ite.Key());
- i++;
- }
-
- SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
- aMeshEditor->RemoveElements(anArrayOfIdeces);
- }
-
- if ( myAutomaticUpdate ) {
- SMESH_Actor* Mesh = smeshGUI->ReadScript(aMesh);
- if ( Mesh != NULL ) {
- smeshGUI->DisplayActor( Mesh );
- smeshGUI->DisplayEdges( Mesh );
- smeshGUI->ChangeRepresentation( Mesh, Mesh->getDisplayMode() );
- AddActorInSelection( Mesh );
-#ifdef TRACE
- Dump( Mesh );
-#endif
- }
- }
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::OrientationElements(SMESH::SMESH_Mesh_ptr aMesh, const TColStd_MapOfInteger& MapIndex)
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
- return;
-
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- Standard_Boolean result;
- SMESH_Actor* ac = FindActor( aMesh, result, true );
- if ( result ) {
- //vtkUnstructuredGrid* UGrid = vtkUnstructuredGrid::New();
- SMESH_Grid* UGrid = SMESH_Grid::New();
- SMESH_Grid* oldGrid = SMESH_Grid::SafeDownCast(ac->DataSource);
- UGrid->CopyMaps(oldGrid);
-
- vtkGeometryFilter *gf = vtkGeometryFilter::New();
- gf->SetInput( ac->DataSource );
-
- vtkPolyDataMapper *Mapper = vtkPolyDataMapper::New();
- Mapper->SetInput( gf->GetOutput() );
- Mapper->Update();
-
- TColStd_MapIteratorOfMapOfInteger ite( MapIndex );
- for ( ; ite.More(); ite.Next() ) {
- Mapper->GetInput()->ReverseCell( ite.Key() );
- }
-
- UGrid->SetPoints( Mapper->GetInput()->GetPoints() );
- int nbCells = Mapper->GetInput()->GetNumberOfCells();
- for ( int i = 0; i < nbCells; i++ ) {
- UGrid->InsertNextCell( Mapper->GetInput()->GetCellType(i), Mapper->GetInput()->GetCell(i)->GetPointIds() );
- }
-
- // Copy new data to the old DatSource: keep the single DataSource for all actors
- oldGrid->DeepCopy(UGrid);
-
- vtkDataSetMapper *NewMapper = vtkDataSetMapper::New();
- //NewMapper->SetInput( UGrid );
- NewMapper->SetInput( oldGrid );
- NewMapper->Update();
-
- //ac->DataSource = NewMapper->GetInput();
- ac->SetMapper( NewMapper );
- }
- vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
- renWin->Render();
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::DiagonalInversion(SMESH::SMESH_Mesh_ptr aMesh, const TColStd_MapOfInteger& MapIndex)
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
- return;
-
- QApplication::setOverrideCursor( Qt::waitCursor );
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- Standard_Boolean result;
-
- SMESH_Actor* ac = FindActor( aMesh, result, true );
- if ( result ) {
- //vtkUnstructuredGrid* UGrid = vtkUnstructuredGrid::New();
- SMESH_Grid* UGrid = SMESH_Grid::New();
- vtkGeometryFilter *gf = vtkGeometryFilter::New();
- gf->SetInput( ac->DataSource );
-
- vtkExtractEdges *edges = vtkExtractEdges::New();
- edges->SetInput( ac->DataSource );
-
- vtkPolyDataMapper *Mapper = vtkPolyDataMapper::New();
- Mapper->SetInput( edges->GetOutput() );
- Mapper->Update();
-
- int nb = Mapper->GetInput()->GetNumberOfCells();
- //MESSAGE ( "nb : " << nb )
-
- TColStd_MapIteratorOfMapOfInteger ite( MapIndex );
- for ( ; ite.More(); ite.Next() ) {
- vtkCell* StartEdge = Mapper->GetInput()->GetCell(ite.Key());
- //MESSAGE( "DCQ : Edge Id = " << ite.Key())
- int CellType = StartEdge->GetCellType();
- //MESSAGE( "DCQ : Cell Type = " << CellType)
- int nbPoints = StartEdge->GetNumberOfPoints();
-
- //MESSAGE( "DCQ : Nb Point = " << nbPoints)
- if ( nbPoints == 2 ) {
- vtkUnstructuredGrid* StartUGrid = vtkUnstructuredGrid::SafeDownCast( ac->DataSource );
-
- vtkIdList *IdCells = vtkIdList::New();
- vtkIdList *IdPoints = StartEdge->GetPointIds();
- float p1[3];
- float p2[3];
-
- Mapper->GetInput()->GetPoints()->GetPoint(IdPoints->GetId(0),p1);
- Mapper->GetInput()->GetPoints()->GetPoint(IdPoints->GetId(1),p2);
-
- int idp1 = StartUGrid->FindPoint(p1);
- int idp2 = StartUGrid->FindPoint(p2);
-
- StartUGrid->GetPointCells( idp1, IdCells );
-
- //MESSAGE ( " pt 0 : " << IdPoints->GetId(0) )
- //MESSAGE ( " pt 1 : " << IdPoints->GetId(1) )
-
- //MESSAGE ( " pt 0 : " << idp1 )
- //MESSAGE ( " pt 1 : " << idp2 )
-
- vtkIdList *IdPts = vtkIdList::New();
- if (IdCells->GetNumberOfIds() >= 2) {
- int nbCells = IdCells->GetNumberOfIds();
- //MESSAGE ( " nbCells : " << nbCells )
- for (int j=0; j<nbCells; j++) {
- StartUGrid->GetCellPoints( IdCells->GetId(j), IdPts );
- if ( IdPts->IsId( idp2 ) == -1 ) {
- IdCells->DeleteId( IdCells->GetId(j) );
- }
- }
-
-
- //MESSAGE ( " IdCells " << IdCells->GetNumberOfIds() )
-
- vtkIdList *IdPts0 = vtkIdList::New();
- vtkIdList *IdPts1 = vtkIdList::New();
-
- if (IdCells->GetNumberOfIds() == 2) {
- StartUGrid->GetCellPoints( IdCells->GetId(0), IdPts0 );
- StartUGrid->GetCellPoints( IdCells->GetId(1), IdPts1 );
-
- //Create new faces
- TColStd_MapOfInteger EndMapIndex;
- for (int j = 0; j < 3; j++ ) {
- if ( IdPts0->GetId(j) != idp1 && IdPts0->GetId(j) != idp2 ) {
- EndMapIndex.Add( IdPts0->GetId(j) );
- }
- if ( IdPts1->GetId(j) != idp1 && IdPts1->GetId(j) != idp2 ) {
- EndMapIndex.Add( IdPts1->GetId(j) );
- }
- }
-
- bool MyAU = myAutomaticUpdate ;
- myAutomaticUpdate = false ;
-
- EndMapIndex.Add( idp1 );
- TColStd_MapIteratorOfMapOfInteger ite1( EndMapIndex );
- int i = 1;
- while ( ite1.More() ) {
- if ( ite1.Key() == idp1 )
- break;
- i++;
- ite1.Next();
- }
- bool reverse1 = ( i == 2 );
- this->AddFace( aMesh, EndMapIndex, reverse1 );
-
- EndMapIndex.Remove( idp1 );
- EndMapIndex.Add( idp2 );
- TColStd_MapIteratorOfMapOfInteger ite2( EndMapIndex );
- i = 1;
- while ( ite2.More() ) {
- if ( ite2.Key() == idp2 )
- break;
- i++;
- ite2.Next();
- }
- bool reverse2 = ( i == 2 );
- this->AddFace( aMesh, EndMapIndex, !(reverse1 == reverse2) );
-
- myAutomaticUpdate = MyAU ;
- //MESSAGE ( " myAutomaticUpdate = " << MyAU )
- Mapper->Update();
- //Remove old faces
- TColStd_MapOfInteger StartMapIndex;
- StartMapIndex.Add( IdCells->GetId(0) );
- StartMapIndex.Add( IdCells->GetId(1) );
- this->RemoveElements( aMesh, StartMapIndex );
-
- Mapper->Update();
- }
- }
- }
- }
-
- // UGrid->SetPoints( Mapper->GetInput()->GetPoints() );
- // int nbCells = Mapper->GetInput()->GetNumberOfCells();
- // for ( int i = 0; i < nbCells; i++ ) {
- // UGrid->InsertNextCell( Mapper->GetInput()->GetCellType(i), Mapper->GetInput()->GetCell(i)->GetPointIds() );
- // }
-
- // vtkDataSetMapper *NewMapper = vtkDataSetMapper::New();
- // NewMapper->SetInput( UGrid );
- // NewMapper->Update();
-
- // ac->DataSource = NewMapper->GetInput();
- // ac->SetMapper( NewMapper );
- }
- vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
- renWin->Render();
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddEdges( SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+1] ) );
- int id = ugrid->InsertNextCell(VTK_LINE, Ids);
- Mactor->AddElement( indexes[j-1], id );
- i++;
- j = j + 3;
- }
- vtkDataSetMapper *EdgeMapper = vtkDataSetMapper::New();
- EdgeMapper->SetInput( ugrid );
- Mactor->DataSource = EdgeMapper->GetInput();
- Mactor->SetMapper(EdgeMapper);
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddEdge(SMESH_Actor* Mactor, int idedge, int idnode1, int idnode2)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- MESSAGE ( "SMESHGUI::AddEdge " << idedge << " : " << idnode1 << ";" << idnode2 )
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode1 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode2 ) );
-
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int id = ugrid->InsertNextCell(VTK_LINE, Ids);
- Mactor->AddElement( idedge, id );
-
- MESSAGE ( " Edge VTK id " << id )
-
- vtkDataSetMapper *EdgeMapper = vtkDataSetMapper::New();
- EdgeMapper->SetInput( ugrid );
- Mactor->DataSource = EdgeMapper->GetInput();
- Mactor->SetMapper(EdgeMapper);
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddTriangles( SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+1] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+2] ) );
- int id = ugrid->InsertNextCell(VTK_TRIANGLE, Ids);
- Mactor->AddElement( indexes[j-1], id );
- i++;
- j = j + 4;
- }
- vtkDataSetMapper *TriMapper = vtkDataSetMapper::New();
- TriMapper->SetInput( ugrid );
- Mactor->DataSource = TriMapper->GetInput();
- Mactor->SetMapper(TriMapper);
- QApplication::restoreOverrideCursor();
-}
-void SMESHGUI::AddTriangle(SMESH_Actor* Mactor, int idtri, int idnode1, int idnode2, int idnode3)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode1 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode2 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode3 ) );
-
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int id = ugrid->InsertNextCell(VTK_TRIANGLE, Ids);
- Mactor->AddElement( idtri, id );
-
- vtkDataSetMapper *TriMapper = vtkDataSetMapper::New();
- TriMapper->SetInput( ugrid );
- Mactor->DataSource = TriMapper->GetInput();
- Mactor->SetMapper(TriMapper);
- QApplication::restoreOverrideCursor();
-}
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddQuadrangles( SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+1] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+2] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+3] ) );
- int id = ugrid->InsertNextCell(VTK_QUAD, Ids);
- Mactor->AddElement( indexes[j-1], id );
- i++;
- j = j + 5;
- }
- vtkDataSetMapper *QuadMapper = vtkDataSetMapper::New();
- QuadMapper->SetInput( ugrid );
- Mactor->DataSource = QuadMapper->GetInput();
- Mactor->SetMapper(QuadMapper);
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddQuadrangle(SMESH_Actor* Mactor, int idquad, int idnode1, int idnode2,
- int idnode3, int idnode4)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode1 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode2 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode3 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode4 ) );
-
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int id = ugrid->InsertNextCell(VTK_QUAD, Ids);
- Mactor->AddElement( idquad, id );
-
- vtkDataSetMapper *QuadMapper = vtkDataSetMapper::New();
- QuadMapper->SetInput( ugrid );
- Mactor->DataSource = QuadMapper->GetInput();
- Mactor->SetMapper(QuadMapper);
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddTetras( SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+1] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+2] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+3] ) );
- int id = ugrid->InsertNextCell(VTK_TETRA, Ids);
- Mactor->AddElement( indexes[j-1], id );
- i++;
- j = j + 5;
- }
- vtkDataSetMapper *TetraMapper = vtkDataSetMapper::New();
- TetraMapper->SetInput( ugrid );
- Mactor->DataSource = TetraMapper->GetInput();
- Mactor->SetMapper(TetraMapper);
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddTetra(SMESH_Actor* Mactor, int idtetra, int idnode1, int idnode2,
- int idnode3, int idnode4)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- MESSAGE ( "SMESHGUI::AddTetra " << idtetra << " : " << idnode1 << ";" << idnode2
- << ";" << idnode3 << ";" << idnode4 )
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode1 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode2 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode3 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode4 ) );
-
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int id = ugrid->InsertNextCell(VTK_TETRA, Ids);
- Mactor->AddElement( idtetra, id );
-
- MESSAGE ( " Tetra VTK id " << id )
-
- vtkDataSetMapper *TetraMapper = vtkDataSetMapper::New();
- TetraMapper->SetInput( ugrid );
- Mactor->DataSource = TetraMapper->GetInput();
- Mactor->SetMapper(TetraMapper);
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddHexaedres( SMESH_Actor* Mactor, int number,
- const SMESH::double_array& coords, const SMESH::long_array& indexes)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- //vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int i = 1;
- int j = 1;
- while ( i <= number ) {
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+1] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+2] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+3] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+4] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+5] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+6] ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( indexes[j+7] ) );
- int id = ugrid->InsertNextCell(VTK_HEXAHEDRON, Ids);
- Mactor->AddElement( indexes[j-1], id );
- i++;
- j = j + 9;
- }
- vtkDataSetMapper *HexaMapper = vtkDataSetMapper::New();
- HexaMapper->SetInput( ugrid );
- Mactor->DataSource = HexaMapper->GetInput();
- Mactor->SetMapper(HexaMapper);
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::AddHexaedre(SMESH_Actor* Mactor, int idhexa, int idnode1, int idnode2,
- int idnode3, int idnode4, int idnode5, int idnode6, int idnode7, int idnode8)
-{
- QApplication::setOverrideCursor( Qt::waitCursor );
- MESSAGE ( "SMESHGUI::AddHexaedre " << idhexa << " : " << idnode1 << ";" << idnode2
- << ";" << idnode3 << ";" << idnode4 << ";" << idnode5 << ";" << idnode6
- << ";" << idnode7 << ";" << idnode8)
-
- vtkIdList *Ids = vtkIdList::New();
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode1 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode2 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode3 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode4 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode5 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode6 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode7 ) );
- Ids->InsertNextId( Mactor->GetIdVTKNode( idnode8 ) );
-
- //vtkUnstructuredGrid *ugrid = vtkUnstructuredGrid::SafeDownCast( Mactor->DataSource );
- SMESH_Grid* ugrid = SMESH_Grid::SafeDownCast( Mactor->DataSource );
- int id = ugrid->InsertNextCell(VTK_HEXAHEDRON, Ids);
- Mactor->AddElement( idhexa, id );
-
- MESSAGE ( " Hexa VTK id " << id )
-
- vtkDataSetMapper *HexaMapper = vtkDataSetMapper::New();
- HexaMapper->SetInput( ugrid );
- Mactor->DataSource = HexaMapper->GetInput();
- Mactor->SetMapper(HexaMapper);
- QApplication::restoreOverrideCursor();
-}
-
-//=====================================================================================
-// EXPORTED METHODS
-//=====================================================================================
-extern "C"
-{
- bool OnGUIEvent(int theCommandID, QAD_Desktop* parent)
- {
- return SMESHGUI::OnGUIEvent(theCommandID, parent);
- }
-
- bool OnKeyPress (QKeyEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
- {
- return SMESHGUI::OnKeyPress (pe, parent, studyFrame);
- }
-
- bool OnMousePress (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
- {
- return SMESHGUI::OnMousePress (pe, parent, studyFrame);
- }
-
- bool OnMouseMove (QMouseEvent* pe, QAD_Desktop* parent, QAD_StudyFrame* studyFrame)
- {
- return SMESHGUI::OnMouseMove (pe, parent, studyFrame);
- }
-
- bool SetSettings ( QAD_Desktop* parent )
- {
- return SMESHGUI::SetSettings( parent );
- }
-
- bool customPopup ( QAD_Desktop* parent, QPopupMenu* popup, const QString & theContext,
- const QString & theParent, const QString & theObject )
- {
- return SMESHGUI::CustomPopup( parent, popup, theContext, theParent, theObject );
- }
-
- void definePopup ( QString & theContext, QString & theParent, QString & theObject )
- {
- SMESHGUI::DefinePopup( theContext, theParent, theObject );
- }
-
- bool activeStudyChanged ( QAD_Desktop* parent )
- {
- SMESHGUI::activeStudyChanged( parent );
- }
-
- void buildPresentation ( const Handle(SALOME_InteractiveObject)& theIO )
- {
- SMESHGUI::BuildPresentation(theIO);
- }
-
- void supportedViewType(int* buffer, int bufferSize)
- {
- if (!buffer || !bufferSize) return;
- buffer[0] = (int)VIEW_VTK;
- }
-
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::ViewNodes()
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
- return;
-
- EraseSimulationActors();
- mySimulationActors = vtkActorCollection::New();
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* theActors = theRenderer->GetActors();
- theActors->InitTraversal();
- vtkActor *ac = theActors->GetNextActor();
- while(!(ac==NULL)) {
- if ( ac->IsA("SMESH_Actor") ) {
- SMESH_Actor* anActor = SMESH_Actor::SafeDownCast( ac );
- if ( anActor->GetVisibility() == 1 ) {
- vtkGeometryFilter *gf = vtkGeometryFilter::New();
- gf->SetInput( anActor->DataSource );
- vtkMaskPoints *verts = vtkMaskPoints::New();
- verts->SetInput(gf->GetOutput());
- verts->GenerateVerticesOn();
- verts->SetOnRatio(1);
-
- vtkPolyDataMapper *vertMapper = vtkPolyDataMapper::New();
- vertMapper->SetInput(verts->GetOutput());
- vertMapper->ScalarVisibilityOff();
-
- vtkActor *vertActor = vtkActor::New();
- vertActor->SetMapper(vertMapper);
-
- float r, g , b ;
- anActor->GetNodeColor(r, g, b ) ;
- vertActor->GetProperty()->SetColor( r, g, b ) ;
-
- vertActor->GetProperty()->SetPointSize( anActor->GetNodeSize() );
-
- vertActor->PickableOff();
-
- mySimulationActors->AddItem( vertActor );
- theRenderer->AddActor( vertActor );
- }
- }
- ac = theActors->GetNextActor();
- }
-
- vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
- renWin->Render();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::Control(int theCommandID)
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
- return;
-
- QApplication::setOverrideCursor( Qt::waitCursor );
- DisplayScalarBar( false );
-
- vtkScalars *scalars = vtkScalars::New();
- vtkDataSetMapper* meshMapper = 0;
- SALOME_Selection* Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
- int nbSel = Sel->IObjectCount();
- Standard_Boolean result;
- Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
- SMESH_Actor* MeshActor = FindActorByEntry(IObject->getEntry(), result, true);
-
- // Mesh may be not updated after Compute
- if (!MeshActor->DataSource || !MeshActor->GetMapper()) {
- QApplication::restoreOverrideCursor();
- return;
- }
-
- bool ValidateScalars = false;
- if ( result ) {
- QString type;
- switch (theCommandID)
- {
- case 6001: //Length Edges
- {
- type = tr( "SMESH_CONTROL_LENGTH_EDGES");
- meshMapper = (vtkDataSetMapper*)MeshActor->EdgeDevice->GetMapper();
- vtkUnstructuredGrid* grid = (vtkUnstructuredGrid*)meshMapper->GetInput();
- MESSAGE ( " init minimum length " << grid->GetNumberOfCells() )
- for (int i=0; i<grid->GetNumberOfCells(); i++ ) {
- vtkCell* cell = grid->GetCell(i);
- float len = SMESHGUI_ComputeScalarValue::LengthEdges(cell);
- if (len == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,len);
- }
- }
- if (ValidateScalars && (MeshActor->getDisplayMode()!=0))
- ChangeRepresentation( MeshActor, 1 );// limitation; in Wireframe, colored edges are not visible
- break;
- }
- case 6011: // Area Elements
- {
- type = tr( "SMESH_CONTROL_AREA_ELEMENTS");
- for (int i=0; i< MeshActor->GetMapper()->GetInput()->GetNumberOfCells(); i++ ) {
- vtkCell* cell = MeshActor->GetMapper()->GetInput()->GetCell(i);
- float area = SMESHGUI_ComputeScalarValue::AreaElements(cell);
- if (area == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,area);
- }
- }
- if (ValidateScalars && (MeshActor->getDisplayMode()!=1))
- ChangeRepresentation( MeshActor, 1 );
- break;
- }
- case 6012: // Taper
- {
- type = tr( "SMESH_CONTROL_TAPER_ELEMENTS");
- for (int i=0; i< MeshActor->DataSource->GetNumberOfCells(); i++ ) {
- vtkCell* cell = MeshActor->DataSource->GetCell(i);
- float taper = SMESHGUI_ComputeScalarValue::Taper(cell);
- if (taper == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,taper);
- }
- }
- break;
- }
- case 6013: // Aspect ratio
- {
- type = tr( "SMESH_CONTROL_ASPECTRATIO_ELEMENTS");
- for (int i=0; i<MeshActor->DataSource->GetNumberOfCells(); i++ ) {
- vtkCell* cell = MeshActor->DataSource->GetCell(i);
- float aspect = SMESHGUI_ComputeScalarValue::AspectRatio(cell);
- if (aspect == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,aspect);
- }
- }
- if (ValidateScalars && (MeshActor->getDisplayMode()!=1))
- ChangeRepresentation( MeshActor, 1 );
- break;
- }
- case 6014: // Minimum angle
- {
- type = tr( "SMESH_CONTROL_MINIMUMANGLE_ELEMENTS");
- for (int i=0; i<MeshActor->DataSource->GetNumberOfCells(); i++ ) {
- vtkCell* cell = MeshActor->DataSource->GetCell(i);
- float angle = SMESHGUI_ComputeScalarValue::MinimumAngle(cell);
- if (angle == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,angle);
- }
- }
- if (ValidateScalars && (MeshActor->getDisplayMode()!=1))
- ChangeRepresentation( MeshActor, 1 );
- break;
- }
- case 6015: // Warp
- {
- type = tr( "SMESH_CONTROL_WARP_ELEMENTS");
- for (int i=0; i<MeshActor->DataSource->GetNumberOfCells(); i++ ) {
- vtkCell* cell = MeshActor->DataSource->GetCell(i);
- float Warp = SMESHGUI_ComputeScalarValue::Warp(cell);
- if (Warp == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,Warp);
- }
- }
- break;
- }
- case 6016: // Skew
- {
- type = tr( "SMESH_CONTROL_SKEW_ELEMENTS");
- for (int i=0; i<MeshActor->DataSource->GetNumberOfCells(); i++ ) {
- vtkCell* cell = MeshActor->DataSource->GetCell(i);
- float angle = SMESHGUI_ComputeScalarValue::Skew(cell);
- if (angle == 0) continue;
- else {
- ValidateScalars = true;
- scalars->InsertScalar(i,angle);
- }
- }
- break;
- }
- }
-
- if ( !ValidateScalars ) {
- QApplication::restoreOverrideCursor();
- return;
- }
-
- float range[2];
- scalars->GetRange(range);
-
- vtkLookupTable* wat = vtkLookupTable::New();
- wat->SetRange( range );
- wat->Build();
-
- scalars->SetLookupTable(wat);
-
- if (!meshMapper) meshMapper = (vtkDataSetMapper*) (MeshActor->getMapper());
- meshMapper->SetScalarModeToUseCellData();
- meshMapper->GetInput()->GetCellData()->SetScalars(scalars);
- meshMapper->SetScalarRange( range );
- meshMapper->ScalarVisibilityOn();
-
- vtkScalarBarActor* aScalarBar = GetScalarBar();
- if ( aScalarBar == NULL ) {
- aScalarBar = vtkScalarBarActor::New();
- QString Bold = QAD_CONFIG->getSetting("ScalarBar:Bold");
- QString Italic = QAD_CONFIG->getSetting("ScalarBar:Italic");
- QString Shadow = QAD_CONFIG->getSetting("ScalarBar:Shadow");
- QString FontFamily = QAD_CONFIG->getSetting("ScalarBar:FontFamily");
- QString Orientation = QAD_CONFIG->getSetting("ScalarBar:Orientation");
- float Width = QAD_CONFIG->getSetting("ScalarBar:Width").toFloat();
- float Height = QAD_CONFIG->getSetting("ScalarBar:Height").toFloat();
- int NumberOfLabels = QAD_CONFIG->getSetting("ScalarBar:NumberOfLabels").toInt();
- int NumberOfColors = QAD_CONFIG->getSetting("ScalarBar:NumberOfColors").toInt();
-
- SetSettingsScalarBar(aScalarBar, Bold, Italic, Shadow, FontFamily, Orientation,
- Width, Height, NumberOfColors, NumberOfLabels);
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- theRenderer->AddActor2D(aScalarBar);
- }
- aScalarBar->SetLookupTable( wat );
- aScalarBar->SetTitle( type.latin1() );
-
- scalars->Delete();
- // wat->Delete();
- DisplayScalarBar( true );
- }
- QApplication::restoreOverrideCursor();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::SetSettingsScalarBar(vtkScalarBarActor* theScalarBar,
- QString Bold, QString Italic,
- QString Shadow, QString FontFamily,
- QString Orientation, float Width, float Height,
- int NbColors, int NbLabels )
-{
- if ( Bold.isNull() || Bold.isEmpty() || (Bold.compare( "true" ) == 0) )
- theScalarBar->BoldOn();
- else
- theScalarBar->BoldOff();
-
- if ( Italic.isNull() || Italic.isEmpty() || (Italic.compare( "true" ) == 0) )
- theScalarBar->ItalicOn();
- else
- theScalarBar->ItalicOff();
-
- if ( Shadow.isNull() || Shadow.isEmpty() || (Shadow.compare( "true" ) == 0) )
- theScalarBar->ShadowOn();
- else
- theScalarBar->ShadowOff();
-
- if ( FontFamily.compare( "Arial" ) == 0 )
- theScalarBar->SetFontFamilyToArial();
- else if ( FontFamily.compare( "Courier" ) == 0 )
- theScalarBar->SetFontFamilyToCourier();
- else if ( FontFamily.compare( "Times" ) == 0 )
- theScalarBar->SetFontFamilyToTimes();
- else
- theScalarBar->SetFontFamilyToArial();
-
- if ( Orientation.isNull() || Orientation.isEmpty() || (Orientation.compare( "Vertical" ) == 0) )
- theScalarBar->SetOrientationToVertical();
- else
- theScalarBar->SetOrientationToHorizontal();
-
-
- theScalarBar->SetWidth((Width == 0)? 0.17 : Width);
- theScalarBar->SetHeight((Height == 0)? 0.8 : Height);
-
- theScalarBar->SetNumberOfLabels((NbLabels == 0)? 5 : NbLabels);
- theScalarBar->SetMaximumNumberOfColors((NbColors == 0)? 64 : NbColors);
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::DisplayScalarBar(bool visibility)
-{
- if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
- return;
-
- vtkRenderer *theRenderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkScalarBarActor* aScalarBar = GetScalarBar();
-
- if ( aScalarBar == NULL ) {
- MESSAGE("myScalarBar is NULL");
- return;
- }
-
- if ( visibility )
- aScalarBar->VisibilityOn();
- else {
- aScalarBar->VisibilityOff();
- //Turn off mesh coloring (influences on all views)
- vtkActorCollection* actorList=theRenderer->GetActors();
- actorList->InitTraversal();
- vtkActor *ac = actorList->GetNextActor();
- while(ac!=NULL) {
- if (ac->GetMapper() != NULL) {
- ac->GetMapper()->ScalarVisibilityOff();
- }
- ac = actorList->GetNextActor();
- }
- // Turn off ScalarBar in all views
- /*QList<QAD_StudyFrame> aFrames = myActiveStudy->getStudyFrames();
- for ( QAD_StudyFrame* aFrame = aFrames.first(); aFrame; aFrame = aFrames.next() ) {
- if (aFrame->getTypeView() == VIEW_VTK) {
- vtkRenderer *aRenderer = ((VTKViewer_ViewFrame*) aFrame->getRightFrame()->getViewFrame())->getRenderer();
- vtkActor2DCollection* actor2DList = aRenderer->GetActors2D();
- actor2DList->InitTraversal();
- vtkActor2D* aActor2d = actor2DList->GetNextActor2D();
- while (aActor2d != NULL) {
- if (aActor2d->IsA("vtkScalarBarActor")) {
- aActor2d->VisibilityOff();
- break;
- }
- actor2DList->GetNextActor2D();
- }
- }
- }*/
- }
- myActiveStudy->update3dViewers();
-}
-
-
-//=============================================================================
-/*!
- *
- */
-//=============================================================================
-void SMESHGUI::UpdateScalarBar(float MinRange, float MaxRange)
-{
- vtkScalarBarActor* aScalarBar = GetScalarBar();
- if ( aScalarBar == NULL ) {
- MESSAGE("myScalarBar is NULL");
- return;
- }
- DisplayScalarBar(false);
-
- aScalarBar->GetLookupTable()->SetRange(MinRange, MaxRange);
- vtkRenderer *aRenderer = ((VTKViewer_ViewFrame*)myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
- vtkActorCollection* aActorList = aRenderer->GetActors();
- aActorList->InitTraversal();
- vtkActor *aActor = aActorList->GetNextActor();
- while(aActor != NULL) {
- if (aActor->IsA("SMESH_Actor")) {
- SMESH_Actor* aMeshActor = SMESH_Actor::SafeDownCast(aActor);
- vtkDataSetMapper* aMeshMapper = (vtkDataSetMapper*) (aMeshActor->getMapper());
- if ((aMeshMapper != NULL)) {
- aMeshMapper->SetScalarRange( MinRange, MaxRange );
- aMeshMapper->ScalarVisibilityOn();