2003-07-10 18:28:26 +06:00
|
|
|
// SMESH SMESHGUI : GUI for SMESH component
|
|
|
|
//
|
|
|
|
// 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
|
|
|
|
//
|
2004-06-18 14:34:31 +06:00
|
|
|
// See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org
|
2003-07-10 18:28:26 +06:00
|
|
|
//
|
|
|
|
// File : SMESHGUI.cxx
|
|
|
|
// Author : Nicolas REJNERI
|
|
|
|
// Module : SMESH
|
2003-05-19 20:07:00 +06:00
|
|
|
// $Header$
|
|
|
|
|
|
|
|
#include "SMESHGUI.h"
|
|
|
|
#include "SMESHGUI_AddHypothesisDlg.h"
|
|
|
|
#include "SMESHGUI_AddAlgorithmDlg.h"
|
|
|
|
#include "SMESHGUI_InitMeshDlg.h"
|
|
|
|
#include "SMESHGUI_AddSubMeshDlg.h"
|
|
|
|
#include "SMESHGUI_NodesDlg.h"
|
|
|
|
#include "SMESHGUI_TransparencyDlg.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SMESHGUI_GroupDlg.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "SMESHGUI_RemoveNodesDlg.h"
|
|
|
|
#include "SMESHGUI_RemoveElementsDlg.h"
|
|
|
|
#include "SMESHGUI_MeshInfosDlg.h"
|
|
|
|
#include "SMESHGUI_Preferences_ColorDlg.h"
|
|
|
|
#include "SMESHGUI_Preferences_ScalarBarDlg.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SMESHGUI_Preferences_SelectionDlg.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "SMESHGUI_aParameterDlg.h"
|
|
|
|
#include "SMESHGUI_ComputeScalarValue.h"
|
|
|
|
#include "SMESHGUI_MoveNodesDlg.h"
|
|
|
|
#include "SMESHGUI_OrientationElementsDlg.h"
|
|
|
|
#include "SMESHGUI_DiagonalInversionDlg.h"
|
|
|
|
#include "SMESHGUI_AddFaceDlg.h"
|
|
|
|
#include "SMESHGUI_AddEdgeDlg.h"
|
|
|
|
#include "SMESHGUI_AddVolumeDlg.h"
|
|
|
|
#include "SMESHGUI_EditHypothesesDlg.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SMESHGUI_CreateHypothesesDlg.h"
|
|
|
|
#include "SMESHGUI_FilterDlg.h"
|
|
|
|
#include "SMESHGUI_XmlHandler.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SMESH_Actor.h"
|
|
|
|
#include "SMESH_Object.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
// SALOME Includes
|
|
|
|
#include "Utils_ORB_INIT.hxx"
|
|
|
|
#include "Utils_SINGLETON.hxx"
|
|
|
|
|
|
|
|
#include "QAD.h"
|
|
|
|
#include "QAD_Tools.h"
|
|
|
|
#include "QAD_Config.h"
|
|
|
|
#include "QAD_Settings.h"
|
|
|
|
#include "QAD_RightFrame.h"
|
2003-12-10 21:05:04 +05:00
|
|
|
#include "QAD_MessageBox.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "QAD_Resource.h"
|
|
|
|
#include "QAD_FileDlg.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "QAD_Desktop.h"
|
|
|
|
#include "QAD_ResourceMgr.h"
|
|
|
|
#include "QAD_WaitCursor.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
#include "OCCViewer_ViewPort.h"
|
|
|
|
#include "OCCViewer_ViewPort3d.h"
|
|
|
|
#include "OCCViewer_Viewer3d.h"
|
|
|
|
|
|
|
|
#include "GEOM_InteractiveObject.hxx"
|
|
|
|
|
|
|
|
#include "SALOME_NamingService.hxx"
|
|
|
|
#include "SALOME_ListIteratorOfListIO.hxx"
|
|
|
|
#include "SALOME_InteractiveObject.hxx"
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "SALOMEGUI_Desktop.h"
|
|
|
|
#include "SALOMEGUI_NameDlg.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "SALOMEGUI_ImportOperation.h"
|
|
|
|
#include "SALOMEGUI_QtCatchCorbaException.hxx"
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
#include "utilities.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <dlfcn.h>
|
|
|
|
|
|
|
|
#include "SMDS_Mesh.hxx"
|
|
|
|
#include "SMESHDS_Document.hxx"
|
|
|
|
#include "Document_Reader.h"
|
|
|
|
#include "Document_Writer.h"
|
|
|
|
#include "Mesh_Reader.h"
|
|
|
|
#include "Mesh_Writer.h"
|
|
|
|
|
|
|
|
#include "DriverDAT_R_SMESHDS_Document.h"
|
|
|
|
#include "DriverMED_R_SMESHDS_Document.h"
|
|
|
|
#include "DriverUNV_R_SMESHDS_Document.h"
|
|
|
|
#include "DriverDAT_W_SMESHDS_Document.h"
|
|
|
|
#include "DriverMED_W_SMESHDS_Document.h"
|
|
|
|
#include "DriverUNV_W_SMESHDS_Document.h"
|
|
|
|
#include "DriverDAT_R_SMESHDS_Mesh.h"
|
|
|
|
#include "DriverMED_R_SMESHDS_Mesh.h"
|
|
|
|
#include "DriverUNV_R_SMESHDS_Mesh.h"
|
|
|
|
#include "DriverDAT_W_SMESHDS_Mesh.h"
|
|
|
|
#include "DriverMED_W_SMESHDS_Mesh.h"
|
|
|
|
#include "DriverUNV_W_SMESHDS_Mesh.h"
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
// QT Includes
|
|
|
|
#define INCLUDE_MENUITEM_DEF
|
|
|
|
#include <qapplication.h>
|
|
|
|
#include <qlineedit.h>
|
|
|
|
#include <qmenudata.h>
|
|
|
|
#include <qmenubar.h>
|
|
|
|
#include <qpopupmenu.h>
|
|
|
|
#include <qfont.h>
|
|
|
|
#include <qstring.h>
|
|
|
|
#include <qcheckbox.h>
|
|
|
|
#include <qcolordialog.h>
|
|
|
|
#include <qspinbox.h>
|
|
|
|
#include <qlist.h>
|
2003-12-10 21:05:04 +05:00
|
|
|
#include <qwidget.h>
|
|
|
|
#include <qevent.h>
|
|
|
|
#include <qradiobutton.h>
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
// VTK Includes
|
2003-07-10 18:28:26 +06:00
|
|
|
#include "VTKViewer_Common.h"
|
|
|
|
#include "VTKViewer_ViewFrame.h"
|
2004-06-18 14:34:31 +06:00
|
|
|
#include "VTKViewer_InteractorStyleSALOME.h"
|
|
|
|
|
|
|
|
#include <vtkScalarBarActor.h>
|
2003-05-19 20:07:00 +06:00
|
|
|
#include <vtkLegendBoxActor.h>
|
2003-07-10 18:28:26 +06:00
|
|
|
#include <vtkFeatureEdges.h>
|
2003-11-06 19:43:11 +05:00
|
|
|
#include <vtkDoubleArray.h>
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <vtkTextProperty.h>
|
2003-07-10 18:28:26 +06:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
// Open CASCADE Includes
|
|
|
|
#include <gp_Pnt.hxx>
|
|
|
|
#include <gp_Vec.hxx>
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
static SMESHGUI *smeshGUI = 0;
|
|
|
|
static CORBA::ORB_var _orb;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
typedef pair<int,string> TKeyOfVisualObj;
|
|
|
|
typedef boost::shared_ptr<SMESH_VisualObj> TVisualObjPtr;
|
|
|
|
typedef map<TKeyOfVisualObj,TVisualObjPtr> TVisualObjCont;
|
|
|
|
static TVisualObjCont VISUALOBJCONT;
|
|
|
|
|
|
|
|
|
|
|
|
TVisualObjPtr GetVisualObj(int theStudyId, const char* theEntry){
|
|
|
|
TVisualObjPtr aVisualObj;
|
|
|
|
try{
|
|
|
|
TVisualObjCont::key_type aKey(theStudyId,theEntry);
|
|
|
|
TVisualObjCont::iterator anIter = VISUALOBJCONT.find(aKey);
|
|
|
|
if(anIter != VISUALOBJCONT.end()){
|
|
|
|
aVisualObj = anIter->second;
|
|
|
|
}else{
|
|
|
|
SALOMEDS::Study_var aStudy = QAD_Application::getDesktop()->getActiveStudy()->getStudyDocument();
|
|
|
|
SALOMEDS::SObject_var aSObj = aStudy->FindObjectID(theEntry);
|
|
|
|
if(!CORBA::is_nil(aSObj)){
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
if(aSObj->FindAttribute(anAttr,"AttributeIOR")){
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
CORBA::String_var aVal = anIOR->Value();
|
|
|
|
CORBA::Object_var anObj =_orb->string_to_object(aVal.in());
|
|
|
|
if(!CORBA::is_nil(anObj)){
|
|
|
|
//Try narrow to SMESH_Mesh interafce
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObj);
|
|
|
|
if(!aMesh->_is_nil()){
|
|
|
|
aVisualObj.reset(new SMESH_MeshObj(aMesh));
|
|
|
|
aVisualObj->Update();
|
|
|
|
TVisualObjCont::value_type aValue(aKey,aVisualObj);
|
|
|
|
VISUALOBJCONT.insert(aValue);
|
|
|
|
return aVisualObj;
|
|
|
|
}
|
|
|
|
//Try narrow to SMESH_Group interafce
|
|
|
|
SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow(anObj);
|
|
|
|
if(!aGroup->_is_nil()){
|
|
|
|
SALOMEDS::SObject_var aFatherSObj = aSObj->GetFather();
|
|
|
|
if(aFatherSObj->_is_nil()) return aVisualObj;
|
|
|
|
aFatherSObj = aFatherSObj->GetFather();
|
|
|
|
if(aFatherSObj->_is_nil()) return aVisualObj;
|
|
|
|
CORBA::String_var anEntry = aFatherSObj->GetID();
|
|
|
|
TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
|
|
|
|
if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
|
|
|
|
aVisualObj.reset(new SMESH_GroupObj(aGroup,aMeshObj));
|
|
|
|
aVisualObj->Update();
|
|
|
|
TVisualObjCont::value_type aValue(aKey,aVisualObj);
|
|
|
|
VISUALOBJCONT.insert(aValue);
|
|
|
|
return aVisualObj;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//Try narrow to SMESH_subMesh interafce
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(anObj);
|
|
|
|
if(!aSubMesh->_is_nil()){
|
|
|
|
SALOMEDS::SObject_var aFatherSObj = aSObj->GetFather();
|
|
|
|
if(aFatherSObj->_is_nil()) return aVisualObj;
|
|
|
|
aFatherSObj = aFatherSObj->GetFather();
|
|
|
|
if(aFatherSObj->_is_nil()) return aVisualObj;
|
|
|
|
CORBA::String_var anEntry = aFatherSObj->GetID();
|
|
|
|
TVisualObjPtr aVisObj = GetVisualObj(theStudyId,anEntry.in());
|
|
|
|
if(SMESH_MeshObj* aMeshObj = dynamic_cast<SMESH_MeshObj*>(aVisObj.get())){
|
|
|
|
aVisualObj.reset(new SMESH_subMeshObj(aSubMesh,aMeshObj));
|
|
|
|
aVisualObj->Update();
|
|
|
|
TVisualObjCont::value_type aValue(aKey,aVisualObj);
|
|
|
|
VISUALOBJCONT.insert(aValue);
|
|
|
|
return aVisualObj;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(...){
|
|
|
|
INFOS("GetMeshObj - There is no SMESH_Mesh object for the SALOMEDS::Strudy and Entry!!!");
|
|
|
|
}
|
|
|
|
return aVisualObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
VTKViewer_ViewFrame* GetVtkViewFrame(QAD_StudyFrame* theStudyFrame){
|
|
|
|
QAD_ViewFrame* aViewFrame = theStudyFrame->getRightFrame()->getViewFrame();
|
|
|
|
return dynamic_cast<VTKViewer_ViewFrame*>(aViewFrame);
|
|
|
|
}
|
|
|
|
|
|
|
|
void UpdateSelectionProp() {
|
|
|
|
QAD_Study* aStudy = SMESHGUI::GetSMESHGUI()->GetActiveStudy();
|
|
|
|
QList<QAD_StudyFrame> aFrameList = aStudy->getStudyFrames();
|
|
|
|
|
|
|
|
QString SCr, SCg, SCb;
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorBlue");
|
|
|
|
QColor aHiColor = Qt::white;
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
aHiColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorBlue");
|
|
|
|
QColor aSelColor = Qt::yellow;
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
aSelColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
QString SW = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectWidth");
|
|
|
|
if (SW.isEmpty()) SW = "5";
|
|
|
|
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorBlue");
|
|
|
|
QColor aPreColor = Qt::cyan;
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
aPreColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
QString PW = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectWidth");
|
|
|
|
if (PW.isEmpty()) PW = "5";
|
|
|
|
|
|
|
|
QString SP1 = QAD_CONFIG->getSetting("SMESH:SettingsNodeSelectTol");
|
|
|
|
if (SP1.isEmpty()) SP1 = "0.025";
|
|
|
|
QString SP2 = QAD_CONFIG->getSetting("SMESH:SettingsElementsSelectTol");
|
|
|
|
if (SP2.isEmpty()) SP2 = "0.001";
|
|
|
|
|
|
|
|
for (QAD_StudyFrame* aStudyFrame = aFrameList.first(); aStudyFrame; aStudyFrame = aFrameList.next()) {
|
|
|
|
if (aStudyFrame->getTypeView() == VIEW_VTK) {
|
|
|
|
VTKViewer_ViewFrame* aVtkViewFrame = GetVtkViewFrame(aStudyFrame);
|
|
|
|
if (!aVtkViewFrame) continue;
|
|
|
|
// update VTK viewer properties
|
|
|
|
VTKViewer_RenderWindowInteractor* anInteractor = aVtkViewFrame->getRWInteractor();
|
|
|
|
if (anInteractor) {
|
|
|
|
// mesh element selection
|
|
|
|
anInteractor->SetSelectionProp(aSelColor.red()/255., aSelColor.green()/255.,
|
|
|
|
aSelColor.blue()/255., SW.toInt());
|
|
|
|
|
|
|
|
// tolerances
|
|
|
|
anInteractor->SetSelectionTolerance(SP1.toDouble(), SP2.toDouble());
|
|
|
|
|
|
|
|
// pre-selection
|
|
|
|
VTKViewer_InteractorStyleSALOME* aStyle = anInteractor->GetInteractorStyleSALOME();
|
|
|
|
if (aStyle) {
|
|
|
|
aStyle->setPreselectionProp(aPreColor.red()/255., aPreColor.green()/255.,
|
|
|
|
aPreColor.blue()/255., PW.toInt());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// update actors
|
|
|
|
vtkRenderer* aRenderer = aVtkViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
anActor->SetHighlightColor(aHiColor.red()/255., aHiColor.green()/255.,
|
|
|
|
aHiColor.blue()/255.);
|
|
|
|
anActor->SetPreHighlightColor(aPreColor.red()/255., aPreColor.green()/255.,
|
|
|
|
aPreColor.blue()/255.);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
VTKViewer_ViewFrame* GetCurrentVtkView(){
|
|
|
|
QAD_Study* aStudy = SMESHGUI::GetSMESHGUI()->GetActiveStudy();
|
|
|
|
QAD_StudyFrame *aStudyFrame = aStudy->getActiveStudyFrame();
|
|
|
|
return GetVtkViewFrame(aStudyFrame);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SMESH_Actor* FindActorByEntry(QAD_StudyFrame *theStudyFrame,
|
|
|
|
const char* theEntry)
|
|
|
|
{
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetVtkViewFrame(theStudyFrame)){
|
|
|
|
vtkRenderer *aRenderer = aViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
if(anActor->hasIO()){
|
|
|
|
Handle(SALOME_InteractiveObject) anIO = anActor->getIO();
|
|
|
|
if(anIO->hasEntry() && strcmp(anIO->getEntry(),theEntry) == 0){
|
|
|
|
return anActor;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SMESH_Actor* FindActorByEntry(const char* theEntry){
|
|
|
|
QAD_Study* aStudy = SMESHGUI::GetSMESHGUI()->GetActiveStudy();
|
|
|
|
QAD_StudyFrame *aStudyFrame = aStudy->getActiveStudyFrame();
|
|
|
|
return FindActorByEntry(aStudyFrame,theEntry);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
SMESH_Actor* CreateActor(SALOMEDS::Study_ptr theStudy,
|
|
|
|
const char* theEntry,
|
|
|
|
int theIsClear = false)
|
|
|
|
{
|
|
|
|
SMESH_Actor *anActor = NULL;
|
|
|
|
CORBA::Long anId = theStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,theEntry)){
|
|
|
|
SALOMEDS::SObject_var aSObj = theStudy->FindObjectID(theEntry);
|
|
|
|
if(!aSObj->_is_nil()){
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
if(aSObj->FindAttribute(anAttr,"AttributeName")){
|
|
|
|
SALOMEDS::AttributeName_var aName = SALOMEDS::AttributeName::_narrow(anAttr);
|
|
|
|
CORBA::String_var aVal = aName->Value();
|
|
|
|
string aNameVal = aVal.in();
|
|
|
|
SMESH::FilterManager_ptr aFilterMgr = smeshGUI->GetFilterMgr();
|
|
|
|
anActor = SMESH_Actor::New(aVisualObj,aFilterMgr,theEntry,aNameVal.c_str(),theIsClear);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return anActor;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void DisplayActor(QAD_StudyFrame *theStudyFrame, SMESH_Actor* theActor){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetVtkViewFrame(theStudyFrame)){
|
|
|
|
aViewFrame->AddActor(theActor);
|
|
|
|
aViewFrame->Repaint();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void RemoveActor(QAD_StudyFrame *theStudyFrame, SMESH_Actor* theActor){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetVtkViewFrame(theStudyFrame)){
|
|
|
|
aViewFrame->RemoveActor(theActor);
|
|
|
|
aViewFrame->Repaint();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void FitAll(){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetCurrentVtkView()){
|
|
|
|
aViewFrame->onViewFitAll();
|
|
|
|
aViewFrame->Repaint();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
vtkRenderer* GetCurrentRenderer(){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetCurrentVtkView())
|
|
|
|
return aViewFrame->getRenderer();
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void RepaintCurrentView(){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetCurrentVtkView())
|
|
|
|
aViewFrame->Repaint();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
enum EDisplaing {eDisplayAll, eDisplay, eDisplayOnly, eErase, eEraseAll};
|
|
|
|
void UpdateView(QAD_StudyFrame *theStudyFrame, EDisplaing theAction,
|
|
|
|
const char* theEntry = "")
|
|
|
|
{
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetVtkViewFrame(theStudyFrame)){
|
|
|
|
vtkRenderer *aRenderer = aViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
switch(theAction){
|
|
|
|
case eDisplayAll: {
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
anActor->SetVisibility(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case eDisplayOnly:
|
|
|
|
case eEraseAll: {
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
anActor->SetVisibility(false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
default: {
|
|
|
|
if(SMESH_Actor *anActor = FindActorByEntry(theStudyFrame,theEntry)){
|
|
|
|
switch(theAction) {
|
|
|
|
case eDisplay:
|
|
|
|
case eDisplayOnly:
|
|
|
|
anActor->SetVisibility(true);
|
|
|
|
break;
|
|
|
|
case eErase:
|
|
|
|
anActor->SetVisibility(false);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
switch(theAction){
|
|
|
|
case eDisplay:
|
|
|
|
case eDisplayOnly:{
|
|
|
|
QAD_Study* aStudy = theStudyFrame->getStudy();
|
|
|
|
SALOMEDS::Study_var aDocument = aStudy->getStudyDocument();
|
|
|
|
if(anActor = CreateActor(aDocument,theEntry,true)) {
|
|
|
|
DisplayActor(theStudyFrame,anActor);
|
|
|
|
FitAll();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void UpdateView(EDisplaing theAction, const char* theEntry = ""){
|
|
|
|
QAD_Study* aStudy = SMESHGUI::GetSMESHGUI()->GetActiveStudy();
|
|
|
|
QAD_StudyFrame *aStudyFrame = aStudy->getActiveStudyFrame();
|
|
|
|
UpdateView(aStudyFrame,theAction,theEntry);
|
|
|
|
}
|
|
|
|
|
|
|
|
static bool IsReferencedObject( SALOMEDS::SObject_ptr SO )
|
|
|
|
{
|
|
|
|
if ( !SO->_is_nil() ) {
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
if ( SO->FindAttribute( anAttr, "AttributeTarget" ) ) {
|
|
|
|
SALOMEDS::AttributeTarget_var aTarget = SALOMEDS::AttributeTarget::_narrow( anAttr );
|
|
|
|
SALOMEDS::Study::ListOfSObject_var aList = aTarget->Get();
|
|
|
|
if ( aList->length() > 0 ) {
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SetPointRepresentation(bool theIsVisible){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetCurrentVtkView()){
|
|
|
|
vtkRenderer *aRenderer = aViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
if(anActor->GetVisibility()){
|
|
|
|
anActor->SetPointRepresentation(theIsVisible);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
RepaintCurrentView();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
class CustomItem:public QCustomMenuItem
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
public:
|
|
|
|
CustomItem(const QString & s, const QFont & f):string(s), font(f)
|
|
|
|
{
|
|
|
|
};
|
|
|
|
~CustomItem()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void paint(QPainter * p, const QColorGroup & /*cg */ , bool /*act */ ,
|
|
|
|
bool /*enabled */ , int x, int y, int w, int h)
|
|
|
|
{
|
|
|
|
p->setFont(font);
|
|
|
|
p->drawText(x, y, w, h,
|
|
|
|
AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string);
|
|
|
|
}
|
|
|
|
|
|
|
|
QSize sizeHint()
|
|
|
|
{
|
|
|
|
return QFontMetrics(font).
|
|
|
|
size(AlignHCenter | AlignVCenter | ShowPrefix | DontClip, string);
|
|
|
|
}
|
|
|
|
private:
|
|
|
|
QString string;
|
|
|
|
QFont font;
|
2003-05-19 20:07:00 +06:00
|
|
|
};
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESHGUI::SMESHGUI( const QString& theName, QObject* theParent ) :
|
|
|
|
SALOMEGUI( theName, theParent )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
SMESHGUI::~SMESHGUI()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESHGUI* SMESHGUI::GetSMESHGUI()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if ( !smeshGUI )
|
|
|
|
GetOrCreateSMESHGUI( QAD_Application::getDesktop() );
|
|
|
|
return smeshGUI;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
extern "C"
|
|
|
|
{
|
|
|
|
Standard_EXPORT SALOMEGUI* GetComponentGUI() {
|
|
|
|
return SMESHGUI::GetSMESHGUI();
|
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESHGUI* SMESHGUI::GetOrCreateSMESHGUI( QAD_Desktop* desktop )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if( !smeshGUI ) {
|
|
|
|
setOrb();
|
|
|
|
smeshGUI = new SMESHGUI;
|
|
|
|
smeshGUI->myActiveDialogBox = 0 ;
|
|
|
|
smeshGUI->myState = -1 ;
|
|
|
|
smeshGUI->myDesktop = desktop ;
|
|
|
|
|
|
|
|
/* get smesh engine */
|
|
|
|
Engines::Component_var comp = desktop->getEngine("FactoryServer", "SMESH");
|
|
|
|
smeshGUI->myComponentMesh = SMESH::SMESH_Gen::_narrow(comp);
|
|
|
|
|
|
|
|
/* get geom engine */
|
|
|
|
Engines::Component_var comp1 = desktop->getEngine("FactoryServer", "GEOM");
|
|
|
|
smeshGUI->myComponentGeom = GEOM::GEOM_Gen::_narrow(comp1);
|
|
|
|
|
|
|
|
/* set current study */
|
|
|
|
smeshGUI->myActiveStudy = desktop->getActiveStudy();
|
|
|
|
smeshGUI->myStudyId = smeshGUI->myActiveStudy->getStudyId();
|
|
|
|
smeshGUI->myStudy = smeshGUI->myActiveStudy->getStudyDocument();
|
|
|
|
smeshGUI->myComponentGeom->GetCurrentStudy( smeshGUI->myStudyId );
|
|
|
|
smeshGUI->myComponentMesh->SetCurrentStudy( smeshGUI->myStudy );
|
|
|
|
// smeshGUI->myComponentGeom->NbLabels();
|
|
|
|
|
|
|
|
/* create service object */
|
|
|
|
smeshGUI->myStudyAPI = SMESHGUI_StudyAPI(smeshGUI->myStudy, smeshGUI->myComponentMesh);
|
|
|
|
|
|
|
|
smeshGUI->myDocument = new SMESHDS_Document(1);//NBU
|
|
|
|
|
|
|
|
smeshGUI->mySimulationActors = vtkActorCollection::New();
|
|
|
|
smeshGUI->mySimulationActors2D = vtkActor2DCollection::New();
|
|
|
|
|
|
|
|
/*filter manager*/
|
|
|
|
smeshGUI->myFilterMgr = smeshGUI->myComponentMesh->CreateFilterManager();
|
|
|
|
|
|
|
|
/* load resources for all available meshers */
|
|
|
|
smeshGUI->InitAvailableHypotheses();
|
|
|
|
} else {
|
|
|
|
/* study may have changed - set current study */
|
|
|
|
smeshGUI->myActiveStudy = desktop->getActiveStudy();
|
|
|
|
smeshGUI->myStudyId = smeshGUI->myActiveStudy->getStudyId();
|
|
|
|
smeshGUI->myStudy = smeshGUI->myActiveStudy->getStudyDocument();
|
|
|
|
smeshGUI->myComponentGeom->GetCurrentStudy( smeshGUI->myStudyId );
|
|
|
|
smeshGUI->myComponentMesh->SetCurrentStudy( smeshGUI->myStudy );
|
|
|
|
|
|
|
|
// Set active study to Study API
|
|
|
|
smeshGUI->myStudyAPI.Update( smeshGUI->myStudy );
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Automatic Update flag */
|
|
|
|
smeshGUI->myAutomaticUpdate = ( QAD_CONFIG->getSetting( "SMESH:AutomaticUpdate" ).compare( "true" ) == 0 );
|
|
|
|
|
|
|
|
return smeshGUI;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::SetState(int aState)
|
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
this->myState = aState;
|
|
|
|
return;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
void SMESHGUI::ResetState()
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
this->myState = -1;
|
|
|
|
return;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
void SMESHGUI::EmitSignalDeactivateDialog()
|
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
emit this->SignalDeactivateActiveDialog();
|
|
|
|
return;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
void SMESHGUI::EmitSignalCloseAllDialogs()
|
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
emit SignalCloseAllDialogs();
|
|
|
|
return;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
QDialog *SMESHGUI::GetActiveDialogBox()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return this->myActiveDialogBox;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::SetActiveDialogBox(QDialog * aDlg)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
this->myActiveDialogBox = (QDialog *) aDlg;
|
|
|
|
return;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
QAD_Study *SMESHGUI::GetActiveStudy()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return this->myActiveStudy;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
SALOMEDS::Study_ptr SMESHGUI::GetStudy()
|
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return SALOMEDS::Study::_narrow(myStudy);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
SMESHGUI_StudyAPI SMESHGUI::GetStudyAPI()
|
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return myStudyAPI;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
QAD_Desktop *SMESHGUI::GetDesktop()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return this->myDesktop;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::ActiveStudyChanged(QAD_Desktop* parent)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
MESSAGE("SMESHGUI::activeStudyChanged init.");
|
|
|
|
QAD_Study* prevStudy = 0;
|
|
|
|
if ( smeshGUI )
|
|
|
|
prevStudy = smeshGUI->myActiveStudy;
|
|
|
|
/* Create or retrieve an object SMESHGUI */
|
|
|
|
MESSAGE("Active study changed : prev study =" << prevStudy);
|
|
|
|
SMESHGUI::GetOrCreateSMESHGUI( parent );
|
|
|
|
MESSAGE("Active study changed : active study =" << smeshGUI->myActiveStudy);
|
|
|
|
if ( prevStudy != smeshGUI->myActiveStudy ) {
|
|
|
|
smeshGUI->EmitSignalCloseAllDialogs();
|
|
|
|
MESSAGE("Active study changed : SMESHGUI nullified" << endl);
|
|
|
|
//smeshGUI = 0;
|
|
|
|
::UpdateSelectionProp();
|
|
|
|
}
|
|
|
|
MESSAGE("SMESHGUI::activeStudyChanged done.");
|
|
|
|
return true;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::DefineDlgPosition(QWidget * aDlg, int &x, int &y)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
/* Here the position is on the bottom right corner - 10 */
|
|
|
|
// aDlg->resize(QSize().expandedTo(aDlg->minimumSizeHint()));
|
|
|
|
aDlg->adjustSize();
|
|
|
|
QAD_Desktop *PP = QAD_Application::getDesktop();
|
|
|
|
x = abs(PP->x() + PP->size().width() - aDlg->size().width() - 10);
|
|
|
|
y = abs(PP->y() + PP->size().height() - aDlg->size().height() - 10);
|
|
|
|
return true;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::EraseSimulationActors()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK)
|
|
|
|
{ //VTK
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
|
|
|
|
if (mySimulationActors != NULL)
|
|
|
|
{
|
|
|
|
mySimulationActors->InitTraversal();
|
|
|
|
vtkActor *ac = mySimulationActors->GetNextActor();
|
|
|
|
while (!(ac == NULL))
|
|
|
|
{
|
|
|
|
theRenderer->RemoveActor(ac);
|
|
|
|
ac = mySimulationActors->GetNextActor();
|
|
|
|
}
|
|
|
|
mySimulationActors->RemoveAllItems();
|
|
|
|
}
|
|
|
|
if (mySimulationActors2D != NULL)
|
|
|
|
{
|
|
|
|
mySimulationActors2D->InitTraversal();
|
|
|
|
vtkActor2D *ac = mySimulationActors2D->GetNextActor2D();
|
|
|
|
while (!(ac == NULL))
|
|
|
|
{
|
|
|
|
theRenderer->RemoveActor2D(ac);
|
|
|
|
ac = mySimulationActors2D->GetNextActor2D();
|
|
|
|
}
|
|
|
|
mySimulationActors2D->RemoveAllItems();
|
|
|
|
}
|
|
|
|
SetPointRepresentation(false);
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Mesh_ptr SMESHGUI::InitMesh( GEOM::GEOM_Shape_ptr aShape,
|
|
|
|
QString NameMesh )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
try {
|
|
|
|
if ( !myComponentMesh->_is_nil() && !aShape->_is_nil() ) {
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = myComponentMesh->CreateMesh( aShape );
|
|
|
|
if ( !aMesh->_is_nil() ) {
|
|
|
|
SALOMEDS::SObject_var SM = smeshGUI->myStudy->FindObjectIOR( _orb->object_to_string( aMesh ) );
|
|
|
|
myStudyAPI.SetName( SM, NameMesh );
|
|
|
|
return SMESH::SMESH_Mesh::_narrow(aMesh);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
}
|
|
|
|
return SMESH::SMESH_Mesh::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_subMesh_ptr SMESHGUI::AddSubMesh( SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
GEOM::GEOM_Shape_ptr aShape,
|
|
|
|
QString NameMesh )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_subMesh_var aSubMesh;
|
|
|
|
try {
|
|
|
|
if ( !aMesh->_is_nil() && !aShape->_is_nil() )
|
|
|
|
// create sub mesh
|
|
|
|
aSubMesh = SMESH::SMESH_subMesh::_duplicate( aMesh->GetSubMesh( aShape, NameMesh.latin1() ) ); //VSR: published automatically
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
aSubMesh = SMESH::SMESH_subMesh::_nil();
|
|
|
|
}
|
|
|
|
return aSubMesh._retn();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Group_ptr SMESHGUI::AddGroup( SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
SMESH::ElementType aType,
|
|
|
|
QString aName )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Group_var aGroup;
|
|
|
|
try {
|
|
|
|
if ( !aMesh->_is_nil() )
|
|
|
|
// create group
|
|
|
|
aGroup = SMESH::SMESH_Group::_duplicate( aMesh->CreateGroup( aType, strdup(aName) ) ); //VSR: published automatically
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
aGroup = SMESH::SMESH_Group::_nil();
|
|
|
|
}
|
|
|
|
myActiveStudy->updateObjBrowser( true );
|
|
|
|
return aGroup._retn();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
static void addMap( const map<string, HypothesisData*>& theMap,
|
|
|
|
map<string, HypothesisData*>& toMap)
|
|
|
|
{
|
|
|
|
map<string, HypothesisData*>::const_iterator it;
|
|
|
|
for ( it = theMap.begin(); it != theMap.end(); it++ )
|
|
|
|
toMap.insert( *it );
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
2004-06-18 14:34:31 +06:00
|
|
|
* InitAvailableHypotheses (read from resource XML file)
|
2003-05-19 20:07:00 +06:00
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::InitAvailableHypotheses ()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
if ((myHypothesesMap.begin() == myHypothesesMap.end()) &&
|
|
|
|
(myAlgorithmsMap.begin() == myAlgorithmsMap.end()))
|
|
|
|
{
|
|
|
|
// Resource manager
|
|
|
|
QAD_ResourceMgr* resMgr = QAD_Desktop::createResourceManager();
|
|
|
|
if (!resMgr) return;
|
|
|
|
|
|
|
|
// Find name of a resource XML file ("SMESH_Meshers.xml");
|
|
|
|
QString HypsXml;
|
|
|
|
char* cenv = getenv("SMESH_MeshersList");
|
|
|
|
if (cenv)
|
|
|
|
HypsXml.sprintf("%s", cenv);
|
|
|
|
|
|
|
|
QStringList HypsXmlList = QStringList::split( ":", HypsXml, false );
|
|
|
|
if (HypsXmlList.count() == 0)
|
|
|
|
{
|
|
|
|
QAD_MessageBox::error1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr("MESHERS_FILE_NO_VARIABLE"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// loop on files in HypsXml
|
|
|
|
QString aNoAccessFiles;
|
|
|
|
for ( int i = 0; i < HypsXmlList.count(); i++ ) {
|
|
|
|
QString HypsXml = HypsXmlList[ i ];
|
|
|
|
|
|
|
|
// Find full path to the resource XML file
|
|
|
|
QString xmlFile = HypsXml + ".xml";
|
|
|
|
xmlFile = QAD_Tools::addSlash(resMgr->findFile(xmlFile, HypsXml)) + xmlFile;
|
|
|
|
|
|
|
|
QFile file (QAD_Tools::unix2win(xmlFile));
|
|
|
|
if (file.exists() && file.open(IO_ReadOnly))
|
|
|
|
{
|
|
|
|
file.close();
|
|
|
|
|
|
|
|
SMESHGUI_XmlHandler* myXmlHandler = new SMESHGUI_XmlHandler();
|
|
|
|
ASSERT(myXmlHandler);
|
|
|
|
|
|
|
|
QXmlInputSource source (file);
|
|
|
|
QXmlSimpleReader reader;
|
|
|
|
reader.setContentHandler(myXmlHandler);
|
|
|
|
reader.setErrorHandler(myXmlHandler);
|
|
|
|
bool ok = reader.parse(source);
|
|
|
|
file.close();
|
|
|
|
if (ok)
|
|
|
|
{
|
|
|
|
addMap( myXmlHandler->myHypothesesMap, myHypothesesMap );
|
|
|
|
addMap( myXmlHandler->myAlgorithmsMap, myAlgorithmsMap );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
QAD_MessageBox::error1(myDesktop,
|
|
|
|
tr("INF_PARSE_ERROR"),
|
|
|
|
tr(myXmlHandler->errorProtocol()),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (aNoAccessFiles.isEmpty())
|
|
|
|
aNoAccessFiles = xmlFile;
|
|
|
|
else
|
|
|
|
aNoAccessFiles += ", " + xmlFile;
|
|
|
|
}
|
|
|
|
} // end loop
|
|
|
|
|
|
|
|
|
|
|
|
if (!aNoAccessFiles.isEmpty())
|
|
|
|
{
|
|
|
|
QString aMess = tr("MESHERS_FILE_CANT_OPEN") + " " + aNoAccessFiles + "\n";
|
|
|
|
aMess += tr("MESHERS_FILE_CHECK_VARIABLE");
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
aMess,
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
2004-06-18 14:34:31 +06:00
|
|
|
* GetAvailableHypotheses (read from resource XML file)
|
2003-05-19 20:07:00 +06:00
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
QStringList SMESHGUI::GetAvailableHypotheses (const bool isAlgo)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QStringList aHypList;
|
|
|
|
|
|
|
|
// Init list of available hypotheses, if needed
|
|
|
|
InitAvailableHypotheses();
|
|
|
|
|
|
|
|
// fill list of hypotheses/algorithms
|
|
|
|
map<string, HypothesisData*>::iterator anIter;
|
|
|
|
if (isAlgo)
|
|
|
|
{
|
|
|
|
anIter = myAlgorithmsMap.begin();
|
|
|
|
for (; anIter != myAlgorithmsMap.end(); anIter++)
|
|
|
|
{
|
|
|
|
aHypList.append(((*anIter).first).c_str());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
anIter = myHypothesesMap.begin();
|
|
|
|
for (; anIter != myHypothesesMap.end(); anIter++)
|
|
|
|
{
|
|
|
|
aHypList.append(((*anIter).first).c_str());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return aHypList;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
2004-06-18 14:34:31 +06:00
|
|
|
* GetHypothesisData
|
2003-05-19 20:07:00 +06:00
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
HypothesisData* SMESHGUI::GetHypothesisData (const char* aHypType)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
HypothesisData* aHypData = 0;
|
|
|
|
|
|
|
|
// Init list of available hypotheses, if needed
|
|
|
|
InitAvailableHypotheses();
|
|
|
|
|
|
|
|
if (myHypothesesMap.find(aHypType) == myHypothesesMap.end())
|
|
|
|
{
|
|
|
|
if (myAlgorithmsMap.find(aHypType) != myAlgorithmsMap.end())
|
|
|
|
{
|
|
|
|
aHypData = myAlgorithmsMap[aHypType];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
aHypData = myHypothesesMap[aHypType];
|
|
|
|
}
|
|
|
|
return aHypData;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
/*!
|
|
|
|
* Get a Hypothesis Creator from a Plugin Library
|
2003-05-19 20:07:00 +06:00
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESHGUI_GenericHypothesisCreator* SMESHGUI::GetHypothesisCreator(const QString& aHypType)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
char* sHypType = (char*)aHypType.latin1();
|
|
|
|
MESSAGE("Get HypothesisCreator for " << sHypType);
|
|
|
|
|
|
|
|
SMESHGUI_GenericHypothesisCreator* aCreator = 0;
|
|
|
|
|
|
|
|
// check, if creator for this hypothesis type already exists
|
|
|
|
if (myHypCreatorMap.find(sHypType) != myHypCreatorMap.end())
|
|
|
|
{
|
|
|
|
aCreator = myHypCreatorMap[sHypType];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// 1. Init list of available hypotheses, if needed
|
|
|
|
InitAvailableHypotheses();
|
|
|
|
|
|
|
|
// 2. Get names of plugin libraries
|
|
|
|
HypothesisData* aHypData = GetHypothesisData(sHypType);
|
|
|
|
if (!aHypData)
|
|
|
|
{
|
|
|
|
return aCreator;
|
|
|
|
}
|
|
|
|
QString aClientLibName = aHypData->ClientLibName;
|
|
|
|
QString aServerLibName = aHypData->ServerLibName;
|
|
|
|
|
|
|
|
// 3. Load Client Plugin Library
|
|
|
|
try
|
|
|
|
{
|
|
|
|
// load plugin library
|
|
|
|
MESSAGE("Loading client meshers plugin library ...");
|
|
|
|
void* libHandle = dlopen (aClientLibName, RTLD_LAZY);
|
|
|
|
if (!libHandle)
|
|
|
|
{
|
|
|
|
// report any error, if occured
|
|
|
|
const char* anError = dlerror();
|
|
|
|
MESSAGE(anError);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// get method, returning hypothesis creator
|
|
|
|
MESSAGE("Find GetHypothesisCreator() method ...");
|
|
|
|
typedef SMESHGUI_GenericHypothesisCreator* (*GetHypothesisCreator) \
|
|
|
|
(QString aHypType, QString aServerLibName, SMESHGUI* aSMESHGUI);
|
|
|
|
GetHypothesisCreator procHandle =
|
|
|
|
(GetHypothesisCreator)dlsym( libHandle, "GetHypothesisCreator" );
|
|
|
|
if (!procHandle)
|
|
|
|
{
|
|
|
|
MESSAGE("bad hypothesis client plugin library");
|
|
|
|
dlclose(libHandle);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// get hypothesis creator
|
|
|
|
MESSAGE("Get Hypothesis Creator for " << aHypType);
|
|
|
|
aCreator = procHandle(aHypType, aServerLibName, smeshGUI);
|
|
|
|
if (!aCreator)
|
|
|
|
{
|
|
|
|
MESSAGE("no such a hypothesis in this plugin");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// map hypothesis creator to a hypothesis name
|
|
|
|
myHypCreatorMap[sHypType] = aCreator;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (const SALOME::SALOME_Exception& S_ex)
|
|
|
|
{
|
|
|
|
QtCatchCorbaException(S_ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return aCreator;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Hypothesis_ptr SMESHGUI::CreateHypothesis (const QString& aHypType,
|
|
|
|
const QString& aHypName,
|
|
|
|
const bool isAlgo)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
MESSAGE("Create " << aHypType << " with name " << aHypName);
|
|
|
|
|
|
|
|
SMESH::SMESH_Hypothesis_var Hyp;
|
|
|
|
|
|
|
|
HypothesisData* aHypData = GetHypothesisData((char*)aHypType.latin1());
|
|
|
|
QString aServLib = aHypData->ServerLibName;
|
|
|
|
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Hyp = myComponentMesh->CreateHypothesis(aHypType, aServLib);
|
|
|
|
if (!Hyp->_is_nil())
|
|
|
|
{
|
|
|
|
SALOMEDS::SObject_var SHyp =
|
|
|
|
smeshGUI->myStudy->FindObjectIOR( _orb->object_to_string( Hyp ) );
|
|
|
|
if (!SHyp->_is_nil())
|
|
|
|
{
|
|
|
|
if ( !aHypName.isEmpty() )
|
|
|
|
myStudyAPI.SetName( SHyp, aHypName );
|
|
|
|
myActiveStudy->updateObjBrowser(true);
|
|
|
|
return Hyp._retn();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (const SALOME::SALOME_Exception & S_ex)
|
|
|
|
{
|
|
|
|
QtCatchCorbaException(S_ex);
|
|
|
|
}
|
|
|
|
|
|
|
|
return SMESH::SMESH_Hypothesis::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::AddHypothesisOnMesh(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
SMESH::SMESH_Hypothesis_ptr aHyp)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
int res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
|
|
|
|
if ( !aMesh->_is_nil() ) {
|
|
|
|
SALOMEDS::SObject_var SM = myStudyAPI.FindObject( aMesh );
|
|
|
|
GEOM::GEOM_Shape_var aShape = myStudyAPI.GetShapeOnMeshOrSubMesh(SM);
|
|
|
|
try {
|
|
|
|
res = aMesh->AddHypothesis( aShape, aHyp );
|
|
|
|
if ( res < SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
SALOMEDS::SObject_var SH = myStudyAPI.FindObject(aHyp);
|
|
|
|
if ( !SM->_is_nil() && !SH->_is_nil() ) {
|
|
|
|
//myStudyAPI.SetHypothesis(SM, SH); // VSR: published automatically by engine
|
|
|
|
myStudyAPI.ModifiedMesh(SM, false);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ( res >= SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::error1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_ERROR"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
else if ( res > SMESH::HYP_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res < SMESH::HYP_UNKNOWN_FATAL;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::RemoveHypothesisOrAlgorithmOnMesh
|
|
|
|
(const Handle(SALOME_InteractiveObject)& IObject)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
int res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
|
|
|
|
if (IObject->hasReference())
|
|
|
|
{
|
|
|
|
try {
|
|
|
|
SMESH::SMESH_Hypothesis_var anHyp;
|
|
|
|
SALOMEDS::SObject_var SO_Hypothesis =
|
|
|
|
smeshGUI->myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
|
|
|
|
if (!SO_Hypothesis->_is_nil()) {
|
|
|
|
if (SO_Hypothesis->FindAttribute(anAttr, "AttributeIOR")) {
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
anHyp = SMESH::SMESH_Hypothesis::_narrow
|
|
|
|
(_orb->string_to_object(anIOR->Value()));
|
|
|
|
}
|
|
|
|
|
|
|
|
SALOMEDS::SObject_var SO_Applied_Hypothesis =
|
|
|
|
smeshGUI->myStudy->FindObjectID(IObject->getReference());
|
|
|
|
if (!SO_Applied_Hypothesis->_is_nil()) {
|
|
|
|
SALOMEDS::SObject_var MorSM =
|
|
|
|
smeshGUI->myStudyAPI.GetMeshOrSubmesh(SO_Applied_Hypothesis);
|
|
|
|
if (!MorSM->_is_nil()) {
|
|
|
|
GEOM::GEOM_Shape_var aShape =
|
|
|
|
smeshGUI->myStudyAPI.GetShapeOnMeshOrSubMesh(MorSM);
|
|
|
|
if (!aShape->_is_nil() && MorSM->FindAttribute(anAttr, "AttributeIOR")) {
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
SMESH::SMESH_Mesh_var aMesh =
|
|
|
|
SMESH::SMESH_Mesh::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh =
|
|
|
|
SMESH::SMESH_subMesh::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
|
|
|
|
if (!aSubMesh->_is_nil())
|
|
|
|
aMesh = aSubMesh->GetFather();
|
|
|
|
|
|
|
|
if (!aMesh->_is_nil())
|
|
|
|
{
|
|
|
|
res = aMesh->RemoveHypothesis(aShape, anHyp);
|
|
|
|
if ( res < SMESH::HYP_UNKNOWN_FATAL )
|
|
|
|
smeshGUI->myStudyAPI.ModifiedMesh(MorSM, false);
|
|
|
|
if ( res > SMESH::HYP_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (IObject->hasEntry())
|
|
|
|
{
|
|
|
|
MESSAGE("IObject entry " << IObject->getEntry());
|
|
|
|
}
|
|
|
|
return res < SMESH::HYP_UNKNOWN_FATAL;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::RemoveHypothesisOrAlgorithmOnMesh(SALOMEDS::SObject_ptr MorSM,
|
|
|
|
SMESH::SMESH_Hypothesis_ptr anHyp)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOMEDS::SObject_var AHR, aRef;
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
int res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
|
|
|
|
if (!MorSM->_is_nil()) {
|
|
|
|
try {
|
|
|
|
GEOM::GEOM_Shape_var aShape = smeshGUI->myStudyAPI.GetShapeOnMeshOrSubMesh(MorSM);
|
|
|
|
if (!aShape->_is_nil()) {
|
|
|
|
if (MorSM->FindAttribute(anAttr, "AttributeIOR")) {
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
SMESH::SMESH_Mesh_var aMesh =
|
|
|
|
SMESH::SMESH_Mesh::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh =
|
|
|
|
SMESH::SMESH_subMesh::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
|
|
|
|
if ( !aSubMesh->_is_nil() )
|
|
|
|
aMesh = aSubMesh->GetFather();
|
|
|
|
|
|
|
|
if (!aMesh->_is_nil()) {
|
|
|
|
res = aMesh->RemoveHypothesis(aShape, anHyp);
|
|
|
|
if ( res < SMESH::HYP_UNKNOWN_FATAL )
|
|
|
|
smeshGUI->myStudyAPI.ModifiedMesh(MorSM, false);
|
|
|
|
if ( res > SMESH::HYP_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res < SMESH::HYP_UNKNOWN_FATAL;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::AddAlgorithmOnMesh( SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
SMESH::SMESH_Hypothesis_ptr aHyp )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
int res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
|
|
|
|
if ( !aMesh->_is_nil() ) {
|
|
|
|
SALOMEDS::SObject_var SM = myStudyAPI.FindObject( aMesh );
|
|
|
|
GEOM::GEOM_Shape_var aShape = myStudyAPI.GetShapeOnMeshOrSubMesh( SM );
|
|
|
|
try {
|
|
|
|
res = aMesh->AddHypothesis( aShape, aHyp );
|
|
|
|
if ( res < SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
//SALOMEDS::SObject_var SH = myStudyAPI.FindObject( aHyp );
|
|
|
|
//if ( !SM->_is_nil() && !SH->_is_nil() ) {
|
|
|
|
//myStudyAPI.SetAlgorithms(SM, SH);
|
|
|
|
myStudyAPI.ModifiedMesh( SM, false );
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
if ( res >= SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::error1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_ERROR"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
else if ( res > SMESH::HYP_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1( QAD_Application::getDesktop(),
|
|
|
|
tr( "SMESH_WRN_WARNING" ),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr( "SMESH_BUT_OK" ) );
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res < SMESH::HYP_UNKNOWN_FATAL;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::AddHypothesisOnSubMesh( SMESH::SMESH_subMesh_ptr aSubMesh,
|
|
|
|
SMESH::SMESH_Hypothesis_ptr aHyp )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
int res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
|
|
|
|
if ( !aSubMesh->_is_nil() ) {
|
|
|
|
try {
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
|
|
|
|
SALOMEDS::SObject_var SsubM = myStudyAPI.FindObject( aSubMesh );
|
|
|
|
GEOM::GEOM_Shape_var aShape = myStudyAPI.GetShapeOnMeshOrSubMesh( SsubM );
|
|
|
|
if ( !aMesh->_is_nil() && !SsubM->_is_nil() && !aShape->_is_nil() ) {
|
|
|
|
res = aMesh->AddHypothesis( aShape, aHyp );
|
|
|
|
if ( res < SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
//SALOMEDS::SObject_var SH = myStudyAPI.FindObject(aHyp);
|
|
|
|
// if (!SsubM->_is_nil() && !SH->_is_nil())
|
|
|
|
// {
|
|
|
|
// myStudyAPI.SetHypothesis(SsubM, SH);
|
|
|
|
myStudyAPI.ModifiedMesh( SsubM, false );
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
if ( res >= SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::error1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_ERROR"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
else if ( res > SMESH::HYP_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr( "SMESH_WRN_WARNING" ),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr( "SMESH_BUT_OK" ) );
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res < SMESH::HYP_UNKNOWN_FATAL;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::AddAlgorithmOnSubMesh( SMESH::SMESH_subMesh_ptr aSubMesh,
|
|
|
|
SMESH::SMESH_Hypothesis_ptr aHyp )
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
int res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
|
|
|
|
if ( !aSubMesh->_is_nil() ) {
|
|
|
|
try {
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
|
|
|
|
SALOMEDS::SObject_var SsubM = myStudyAPI.FindObject(aSubMesh);
|
|
|
|
GEOM::GEOM_Shape_var aShape = myStudyAPI.GetShapeOnMeshOrSubMesh(SsubM);
|
|
|
|
if ( !aMesh->_is_nil() && !SsubM->_is_nil() && !aShape->_is_nil() ) {
|
|
|
|
res = aMesh->AddHypothesis( aShape, aHyp );
|
|
|
|
if ( res < SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
//SALOMEDS::SObject_var SH = myStudyAPI.FindObject(aHyp);
|
|
|
|
//if (!SsubM->_is_nil() && !SH->_is_nil()) {
|
|
|
|
//myStudyAPI.SetAlgorithms(SsubM, SH);
|
|
|
|
myStudyAPI.ModifiedMesh( SsubM, false );
|
|
|
|
//}
|
|
|
|
}
|
|
|
|
if ( res >= SMESH::HYP_UNKNOWN_FATAL ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::error1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_ERROR"),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
else if ( res > SMESH::HYP_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr( "SMESH_WRN_WARNING" ),
|
|
|
|
tr(QString("SMESH_HYP_%1").arg(res)),
|
|
|
|
tr( "SMESH_BUT_OK" ) );
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const SALOME::SALOME_Exception& S_ex ) {
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException( S_ex );
|
|
|
|
res = SMESH::HYP_UNKNOWN_FATAL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res < SMESH::HYP_UNKNOWN_FATAL;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
int SMESHGUI::GetNameOfSelectedIObjects(SALOME_Selection * Sel, QString & aName)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
if (nbSel == 1)
|
|
|
|
{
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
aName = IObject->getName();
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
aName = tr("SMESH_OBJECTS_SELECTED").arg(nbSel);
|
|
|
|
}
|
|
|
|
return nbSel;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
int SMESHGUI::GetNameOfSelectedNodes(SALOME_Selection * Sel, QString & aName){
|
|
|
|
aName = "";
|
|
|
|
if(Sel->IObjectCount() == 1){
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if(IObject->hasEntry()){
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(IObject->getEntry())){
|
|
|
|
TColStd_MapOfInteger MapIndex;
|
|
|
|
Sel->GetIndex(IObject, MapIndex);
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(; ite.More(); ite.Next()){
|
|
|
|
aName += QString(" %1").arg(anActor->GetNodeObjId(ite.Key()));
|
|
|
|
}
|
|
|
|
return MapIndex.Extent();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
int SMESHGUI::GetNameOfSelectedElements(SALOME_Selection * Sel, QString & aName){
|
|
|
|
aName = "";
|
|
|
|
if(Sel->IObjectCount() == 1){
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if(IObject->hasEntry()){
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(IObject->getEntry())){
|
|
|
|
TColStd_MapOfInteger MapIndex;
|
|
|
|
Sel->GetIndex(IObject, MapIndex);
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
std::vector<int> aList;
|
|
|
|
for(; ite.More(); ite.Next()){
|
|
|
|
int aVtkId = ite.Key();
|
|
|
|
int anObjId = anActor->GetElemObjId(aVtkId);
|
|
|
|
std::vector<int>::iterator found = find(aList.begin(), aList.end(), anObjId);
|
|
|
|
// MESSAGE("GetNameOfSelectedElements(): VTK Id = " << aVtkId << ", OBJECT Id = " << anObjId);
|
|
|
|
if (found == aList.end()) {
|
|
|
|
aList.push_back(anObjId);
|
|
|
|
aName += QString(" %1").arg(anObjId);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return aList.size();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
int SMESHGUI::GetNameOfSelectedEdges(SALOME_Selection * Sel, QString & aName){
|
|
|
|
aName = "";
|
|
|
|
if(Sel->IObjectCount() == 1){
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if(IObject->hasEntry()){
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(IObject->getEntry())){
|
|
|
|
TColStd_MapOfInteger MapIndex;
|
|
|
|
Sel->GetIndex(IObject, MapIndex);
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(; ite.More(); ite.Next()){
|
|
|
|
aName += QString(" %1").arg(ite.Key());
|
|
|
|
}
|
|
|
|
return MapIndex.Extent();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return -1;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
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 *SMESHGUI::FindActorByEntry(QString theEntry,
|
|
|
|
Standard_Boolean & theResult,
|
|
|
|
bool onlyInActiveView)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
theResult = false;
|
|
|
|
int aNbStudyFrames = myActiveStudy->getStudyFramesCount();
|
|
|
|
for (int i = 0; i < aNbStudyFrames; i++){
|
|
|
|
QAD_StudyFrame *aStudyFrame = myActiveStudy->getStudyFrame(i);
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(aStudyFrame,theEntry.latin1())){
|
|
|
|
theResult = true;
|
|
|
|
return anActor;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return NULL;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH_Actor* SMESHGUI::FindActor(CORBA::Object_ptr theObj,
|
|
|
|
Standard_Boolean & theResult,
|
|
|
|
bool theOnlyInActiveView)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
theResult = false;
|
|
|
|
SMESH_Actor* aRes = NULL;
|
|
|
|
if ( !CORBA::is_nil( theObj ) ) {
|
|
|
|
SALOMEDS::SObject_var aSObject = SALOMEDS::SObject::_narrow( myStudy->FindObjectIOR( _orb->object_to_string( theObj ) ) );
|
|
|
|
if( !aSObject->_is_nil()) {
|
|
|
|
CORBA::String_var anEntry = aSObject->GetID();
|
|
|
|
aRes = FindActorByEntry( anEntry.in(), theResult, theOnlyInActiveView );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return aRes;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Mesh_ptr SMESHGUI::ConvertIOinMesh(const Handle(SALOME_InteractiveObject) & IO,
|
|
|
|
Standard_Boolean & testResult)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Mesh_var aMesh;
|
|
|
|
testResult = false;
|
|
|
|
|
|
|
|
/* case SObject */
|
|
|
|
if (IO->hasEntry())
|
|
|
|
{
|
|
|
|
SALOMEDS::SObject_var obj = myStudy->FindObjectID(IO->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
if (!obj->_is_nil())
|
|
|
|
{
|
|
|
|
if (obj->FindAttribute(anAttr, "AttributeIOR"))
|
|
|
|
{
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
aMesh =
|
|
|
|
SMESH::SMESH_Mesh::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
if (!aMesh->_is_nil())
|
|
|
|
{
|
|
|
|
testResult = true;
|
|
|
|
return SMESH::SMESH_Mesh::_duplicate(aMesh);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return SMESH::SMESH_Mesh::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_subMesh_ptr SMESHGUI::ConvertIOinSubMesh(const Handle(SALOME_InteractiveObject) & IO,
|
|
|
|
Standard_Boolean & testResult)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_subMesh_var aSubMesh;
|
|
|
|
testResult = false;
|
|
|
|
|
|
|
|
/* case SObject */
|
|
|
|
if (IO->hasEntry())
|
|
|
|
{
|
|
|
|
SALOMEDS::SObject_var obj = myStudy->FindObjectID(IO->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
if (!obj->_is_nil())
|
|
|
|
{
|
|
|
|
if (obj->FindAttribute(anAttr, "AttributeIOR"))
|
|
|
|
{
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
aSubMesh = SMESH::SMESH_subMesh::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
if (!aSubMesh->_is_nil())
|
|
|
|
{
|
|
|
|
testResult = true;
|
|
|
|
return SMESH::SMESH_subMesh::_duplicate(aSubMesh);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return SMESH::SMESH_subMesh::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Hypothesis_ptr SMESHGUI::ConvertIOinSMESHHypothesis(const Handle(SALOME_InteractiveObject) & IO,
|
|
|
|
Standard_Boolean & testResult)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Hypothesis_var aHyp;
|
|
|
|
testResult = false;
|
|
|
|
|
|
|
|
/* case SObject */
|
|
|
|
if (IO->hasEntry())
|
|
|
|
{
|
|
|
|
SALOMEDS::SObject_var obj = myStudy->FindObjectID(IO->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
if (!obj->_is_nil())
|
|
|
|
{
|
|
|
|
if (obj->FindAttribute(anAttr, "AttributeIOR"))
|
|
|
|
{
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
aHyp = SMESH::SMESH_Hypothesis::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
if (!aHyp->_is_nil())
|
|
|
|
{
|
|
|
|
testResult = true;
|
|
|
|
return SMESH::SMESH_Hypothesis::_duplicate(aHyp);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return SMESH::SMESH_Hypothesis::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Group_ptr SMESHGUI::ConvertIOinSMESHGroup(const Handle(SALOME_InteractiveObject) & IO,
|
|
|
|
Standard_Boolean & testResult)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Group_var aGroup;
|
|
|
|
testResult = false;
|
|
|
|
|
|
|
|
/* case SObject */
|
|
|
|
if (IO->hasEntry()) {
|
|
|
|
SALOMEDS::SObject_var obj = myStudy->FindObjectID(IO->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
if (!obj->_is_nil()) {
|
|
|
|
if (obj->FindAttribute(anAttr, "AttributeIOR")) {
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
aGroup = SMESH::SMESH_Group::_narrow(_orb->string_to_object(anIOR->Value()));
|
|
|
|
if (!aGroup->_is_nil()) {
|
|
|
|
testResult = true;
|
|
|
|
return SMESH::SMESH_Group::_duplicate(aGroup);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return SMESH::SMESH_Group::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
GEOM::GEOM_Shape_ptr SMESHGUI::ConvertIOinGEOMShape(const Handle(SALOME_InteractiveObject) & IO,
|
|
|
|
Standard_Boolean & testResult)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
GEOM::GEOM_Shape_var aShape;
|
|
|
|
testResult = false;
|
|
|
|
|
|
|
|
/* case SObject */
|
|
|
|
if (IO->hasEntry()) {
|
|
|
|
SALOMEDS::SObject_var obj = myStudy->FindObjectID(IO->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
if (!obj->_is_nil()) {
|
|
|
|
if (obj->FindAttribute(anAttr, "AttributeIOR")) {
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
aShape = myComponentGeom->GetIORFromString(anIOR->Value());
|
|
|
|
if (!aShape->_is_nil()) {
|
|
|
|
testResult = true;
|
|
|
|
return GEOM::GEOM_Shape::_duplicate(aShape);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return GEOM::GEOM_Shape::_nil();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::SetViewMode(int commandId){
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
|
|
|
if(Sel->IObjectCount() >= 1){
|
|
|
|
SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
|
|
|
|
for(; It.More(); It.Next()){
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = It.Value();
|
|
|
|
if(IObject->hasEntry()){
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(IObject->getEntry())){
|
|
|
|
switch(commandId){
|
|
|
|
case 211:
|
|
|
|
ChangeRepresentation(anActor,0);
|
|
|
|
break;
|
|
|
|
case 212:
|
|
|
|
ChangeRepresentation(anActor,1);
|
|
|
|
break;
|
|
|
|
case 213:
|
|
|
|
ChangeRepresentation(anActor,2);
|
|
|
|
break;
|
|
|
|
case 215:
|
|
|
|
ChangeRepresentation(anActor,5);
|
|
|
|
break;
|
|
|
|
case 1132:
|
|
|
|
ChangeRepresentation(anActor,3);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(commandId == 1133)
|
|
|
|
ChangeRepresentation(NULL,4);
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::ChangeRepresentation(SMESH_Actor * theActor, int type){
|
|
|
|
switch (type){
|
|
|
|
case 0:{
|
|
|
|
//theActor->UnShrink();
|
|
|
|
theActor->SetRepresentation(SMESH_Actor::eEdge);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 1:{
|
|
|
|
//theActor->UnShrink();
|
|
|
|
theActor->SetRepresentation(SMESH_Actor::eSurface);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 2:{
|
|
|
|
theActor->IsShrunk() ? theActor->UnShrink() : theActor->SetShrink();
|
|
|
|
//theActor->SetRepresentation(SMESH_Actor::eSurface);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 5:{
|
|
|
|
//theActor->UnShrink();
|
|
|
|
theActor->SetRepresentation(SMESH_Actor::ePoint);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 3:{
|
|
|
|
float color[3];
|
|
|
|
theActor->GetSufaceColor(color[0], color[1], color[2]);
|
|
|
|
int c0 = int (color[0] * 255);
|
|
|
|
int c1 = int (color[1] * 255);
|
|
|
|
int c2 = int (color[2] * 255);
|
|
|
|
QColor c(c0, c1, c2);
|
|
|
|
|
|
|
|
float edgecolor[3];
|
|
|
|
theActor->GetEdgeColor(edgecolor[0], edgecolor[1], edgecolor[2]);
|
|
|
|
c0 = int (edgecolor[0] * 255);
|
|
|
|
c1 = int (edgecolor[1] * 255);
|
|
|
|
c2 = int (edgecolor[2] * 255);
|
|
|
|
QColor e(c0, c1, c2);
|
|
|
|
|
|
|
|
float backfacecolor[3];
|
|
|
|
theActor->GetBackSufaceColor(backfacecolor[0], backfacecolor[1], backfacecolor[2]);
|
|
|
|
c0 = int (backfacecolor[0] * 255);
|
|
|
|
c1 = int (backfacecolor[1] * 255);
|
|
|
|
c2 = int (backfacecolor[2] * 255);
|
|
|
|
QColor b(c0, c1, c2);
|
|
|
|
|
|
|
|
float nodecolor[3];
|
|
|
|
theActor->GetNodeColor(nodecolor[0], nodecolor[1], nodecolor[2]);
|
|
|
|
c0 = int (nodecolor[0] * 255);
|
|
|
|
c1 = int (nodecolor[1] * 255);
|
|
|
|
c2 = int (nodecolor[2] * 255);
|
|
|
|
QColor n(c0, c1, c2);
|
|
|
|
|
|
|
|
int Edgewidth = (int)theActor->GetLineWidth();
|
|
|
|
if(Edgewidth == 0)
|
|
|
|
Edgewidth = 1;
|
|
|
|
int intValue = int(theActor->GetNodeSize());
|
|
|
|
float Shrink = theActor->GetShrinkFactor();
|
|
|
|
|
|
|
|
SMESHGUI_Preferences_ColorDlg *aDlg = new SMESHGUI_Preferences_ColorDlg(QAD_Application::getDesktop(),"");
|
|
|
|
aDlg->SetColor(1, c);
|
|
|
|
aDlg->SetColor(2, e);
|
|
|
|
aDlg->SetColor(3, n);
|
|
|
|
aDlg->SetColor(4, b);
|
|
|
|
aDlg->SetIntValue(1, Edgewidth);
|
|
|
|
aDlg->SetIntValue(2, intValue);
|
|
|
|
aDlg->SetIntValue(3, int(Shrink*100.));
|
|
|
|
if(aDlg->exec()){
|
|
|
|
QColor color = aDlg->GetColor(1);
|
|
|
|
QColor edgecolor = aDlg->GetColor(2);
|
|
|
|
QColor nodecolor = aDlg->GetColor(3);
|
|
|
|
QColor backfacecolor = aDlg->GetColor(4);
|
|
|
|
/* actor color and backface color */
|
|
|
|
theActor->SetSufaceColor(float (color.red()) / 255.,
|
|
|
|
float (color.green()) / 255.,
|
|
|
|
float (color.blue()) / 255.);
|
|
|
|
theActor->SetBackSufaceColor(float (backfacecolor.red()) / 255.,
|
|
|
|
float (backfacecolor.green()) / 255.,
|
|
|
|
float (backfacecolor.blue()) / 255.);
|
|
|
|
|
|
|
|
/* edge color */
|
|
|
|
theActor->SetEdgeColor(float (edgecolor.red()) / 255.,
|
|
|
|
float (edgecolor.green()) / 255.,
|
|
|
|
float (edgecolor.blue()) / 255.);
|
|
|
|
|
|
|
|
/* Shrink factor and size edges */
|
|
|
|
theActor->SetShrinkFactor(aDlg->GetIntValue(3) / 100.);
|
|
|
|
theActor->SetLineWidth(aDlg->GetIntValue(1));
|
|
|
|
|
|
|
|
/* Nodes color and size */
|
|
|
|
theActor->SetNodeColor(float (nodecolor.red()) / 255.,
|
|
|
|
float (nodecolor.green()) / 255.,
|
|
|
|
float (nodecolor.blue()) / 255.);
|
|
|
|
theActor->SetNodeSize(aDlg->GetIntValue(2));
|
|
|
|
|
|
|
|
delete aDlg;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4:{
|
|
|
|
EmitSignalDeactivateDialog();
|
|
|
|
SMESHGUI_TransparencyDlg *aDlg = new SMESHGUI_TransparencyDlg(QAD_Application::getDesktop(),"",false);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
UpdateView();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::UpdateView(){
|
|
|
|
::RepaintCurrentView();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::DisplayActor(SMESH_Actor * theActor, bool theVisibility){
|
|
|
|
theActor->SetVisibility(theVisibility);
|
|
|
|
::DisplayActor(myActiveStudy->getActiveStudyFrame(),theActor);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::EraseActor(SMESH_Actor * theActor){
|
|
|
|
theActor->SetVisibility(false);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
bool SMESHGUI::AddActorInSelection(SMESH_Actor * ac)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
SALOME_Selection *Sel =
|
|
|
|
SALOME_Selection::Selection(myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
if (ac->hasIO())
|
|
|
|
return Sel->AddIObject(ac->getIO());
|
|
|
|
else
|
|
|
|
return -1;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
QString SMESHGUI::CheckHomogeneousSelection()
|
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
SALOME_Selection *Sel =
|
|
|
|
SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
/* copy the list */
|
|
|
|
SALOME_ListIO List;
|
|
|
|
SALOME_ListIteratorOfListIO Itinit(Sel->StoredIObjects());
|
|
|
|
for (; Itinit.More(); Itinit.Next())
|
|
|
|
{
|
|
|
|
List.Append(Itinit.Value());
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
QString RefType = CheckTypeObject(Sel->firstIObject());
|
|
|
|
SALOME_ListIteratorOfListIO It(List);
|
|
|
|
for (; It.More(); It.Next())
|
|
|
|
{
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = It.Value();
|
|
|
|
QString Type = CheckTypeObject(IObject);
|
|
|
|
if (Type.compare(RefType) != 0)
|
|
|
|
return "Heterogeneous Selection";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
SALOME_ListIteratorOfListIO It1(List);
|
|
|
|
for (; It1.More(); It1.Next())
|
|
|
|
{
|
|
|
|
int res = Sel->AddIObject(It1.Value());
|
|
|
|
if (res == -1)
|
|
|
|
myActiveStudy->highlight(It1.Value(), false);
|
|
|
|
if (res == 0)
|
|
|
|
myActiveStudy->highlight(It1.Value(), true);
|
|
|
|
}
|
|
|
|
return RefType;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
QString SMESHGUI::CheckTypeObject(const Handle(SALOME_InteractiveObject) & IO)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOMEDS::SObject_var sobj = smeshGUI->myActiveStudy->getStudyDocument()->FindObjectID(IO->getEntry());
|
|
|
|
if (!sobj->_is_nil()) {
|
|
|
|
SALOMEDS::SComponent_var scomp = sobj->GetFatherComponent();
|
|
|
|
if (strcmp(scomp->GetID(), IO->getEntry()) == 0)
|
|
|
|
{ // component is selected
|
|
|
|
return "Component";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
|
|
|
|
Handle(SMESH_TypeFilter) aHypFilter = new SMESH_TypeFilter(HYPOTHESIS);
|
|
|
|
Handle(SMESH_TypeFilter) anAlgoFilter = new SMESH_TypeFilter(ALGORITHM);
|
|
|
|
Handle(SMESH_TypeFilter) aMeshFilter = new SMESH_TypeFilter(MESH);
|
|
|
|
Handle(SMESH_TypeFilter) aSubMeshFilter = new SMESH_TypeFilter(SUBMESH);
|
|
|
|
Handle(SMESH_TypeFilter) aGroupFilter = new SMESH_TypeFilter(GROUP);
|
|
|
|
Handle(SMESH_TypeFilter) aMeshOrSubMeshFilter = new SMESH_TypeFilter(MESHorSUBMESH);
|
|
|
|
Handle(SMESH_TypeFilter) aSubMeshVextexFilter = new SMESH_TypeFilter(SUBMESH_VERTEX);
|
|
|
|
Handle(SMESH_TypeFilter) aSubMeshEdgeFilter = new SMESH_TypeFilter(SUBMESH_EDGE);
|
|
|
|
Handle(SMESH_TypeFilter) aSubMeshFaceFilter = new SMESH_TypeFilter(SUBMESH_FACE);
|
|
|
|
Handle(SMESH_TypeFilter) aSubMeshSolidFilter = new SMESH_TypeFilter(SUBMESH_SOLID);
|
|
|
|
Handle(SMESH_TypeFilter) aSubMeshCompoundFilter = new SMESH_TypeFilter(SUBMESH_COMPOUND);
|
|
|
|
|
|
|
|
Sel->AddFilter(aHypFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "Hypothesis";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(anAlgoFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "Algorithm";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aMeshFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "Mesh";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aSubMeshFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "SubMesh";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aGroupFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "Group";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aSubMeshVextexFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "SubMeshVertex";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aSubMeshEdgeFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "SubMeshEdge";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aSubMeshFaceFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "SubMeshFace";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aSubMeshSolidFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "SubMeshSolid";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddFilter(aSubMeshCompoundFilter);
|
|
|
|
if (Sel->AddIObject(IO) != -1) {
|
|
|
|
Sel->ClearFilters();
|
|
|
|
return "SubMeshCompound";
|
|
|
|
}
|
|
|
|
|
|
|
|
Sel->ClearFilters();
|
|
|
|
Sel->AddIObject(IO);
|
|
|
|
return "NoType";
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
static int isStudyLocked(const SALOMEDS::Study_var& theStudy){
|
|
|
|
return theStudy->GetProperties()->IsLocked();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
static int checkLock(const SALOMEDS::Study_var& theStudy) {
|
|
|
|
if (isStudyLocked(theStudy)) {
|
|
|
|
QAD_MessageBox::warn1 ( (QWidget*)QAD_Application::getDesktop(),
|
|
|
|
QObject::tr("WRN_WARNING"),
|
|
|
|
QObject::tr("WRN_STUDY_LOCKED"),
|
|
|
|
QObject::tr("BUT_OK") );
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
bool SMESHGUI::OnGUIEvent(int theCommandID, QAD_Desktop * parent)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOMEDS::Study_var aStudy = smeshGUI->myActiveStudy->getStudyDocument(); //Document OCAF de l'etude active
|
|
|
|
// QAD_Viewer3d* v3d;
|
|
|
|
OCCViewer_Viewer3d *v3d;
|
|
|
|
|
|
|
|
Handle(AIS_InteractiveContext) ic;
|
|
|
|
vtkRenderer *Renderer;
|
|
|
|
vtkRenderWindow *RenWin;
|
|
|
|
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_OCC) {
|
|
|
|
v3d = ((OCCViewer_ViewFrame *) smeshGUI->myActiveStudy->
|
|
|
|
getActiveStudyFrame()->getRightFrame()->getViewFrame())->getViewer();
|
|
|
|
ic = v3d->getAISContext();
|
|
|
|
}
|
|
|
|
else if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
Renderer = ((VTKViewer_ViewFrame *) smeshGUI->myActiveStudy->
|
|
|
|
getActiveStudyFrame()->getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
RenWin = Renderer->GetRenderWindow();
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (theCommandID) {
|
|
|
|
case 33: // DELETE
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->OnEditDelete();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 113: // IMPORT
|
|
|
|
case 112:
|
|
|
|
case 111:
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
//Import_Document(parent, theCommandID); //NBU
|
|
|
|
Import_Mesh(parent,theCommandID);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 122: // EXPORT MED
|
|
|
|
case 121:
|
|
|
|
case 123:
|
|
|
|
{
|
|
|
|
Export_Mesh(parent, theCommandID);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 200: // SCALAR BAR
|
|
|
|
{
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
|
|
|
|
if( Sel && Sel->IObjectCount() ) {
|
|
|
|
Handle(SALOME_InteractiveObject) anIO = Sel->firstIObject();
|
|
|
|
if( anIO->hasEntry() ) {
|
|
|
|
if( SMESH_Actor* anActor = ::FindActorByEntry( anIO->getEntry() ) ) {
|
|
|
|
anActor->SetControlMode( SMESH_Actor::eNone );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 201:
|
|
|
|
{
|
|
|
|
SALOME_Selection* Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
|
|
|
|
SMESHGUI_Preferences_ScalarBarDlg::ScalarBarProperties( parent, Sel );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1133: // DISPLAY MODE : WireFrame, Surface, Shrink
|
|
|
|
case 1132:
|
|
|
|
case 215:
|
|
|
|
case 213:
|
|
|
|
case 212:
|
|
|
|
case 211:
|
|
|
|
{
|
|
|
|
smeshGUI->SetViewMode(theCommandID);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 214: // UPDATE
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->Update();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 300: // ERASE
|
|
|
|
case 301: // DISPLAY
|
|
|
|
case 302: // DISPLAY ONLY
|
|
|
|
{
|
|
|
|
EDisplaing anAction;
|
|
|
|
switch(theCommandID){
|
|
|
|
case 300: anAction = eErase; break;
|
|
|
|
case 301: anAction = eDisplay; break;
|
|
|
|
case 302: anAction = eDisplayOnly; break;
|
|
|
|
}
|
|
|
|
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
|
|
|
|
for (; It.More(); It.Next()) {
|
|
|
|
Handle(SALOME_InteractiveObject) IOS = It.Value();
|
|
|
|
if (IOS->hasEntry()) {
|
|
|
|
::UpdateView(anAction,IOS->getEntry());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 400: // NODES
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_NodesDlg *aDlg = new SMESHGUI_NodesDlg(parent, "", Sel);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 2151: // FILTER
|
|
|
|
{
|
|
|
|
if ( smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK )
|
|
|
|
{
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SMESHGUI_FilterDlg *aDlg = new SMESHGUI_FilterDlg( parent, SMESH::EDGE );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 405: // MOVE NODE
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SMESHGUI_MoveNodesDlg *aDlg = new SMESHGUI_MoveNodesDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 701: // COMPUTE MESH
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
if (nbSel != 1){
|
|
|
|
break;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH::SMESH_Mesh_var aMesh;
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh;
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if (IObject->hasEntry()){
|
|
|
|
SALOMEDS::SObject_var aMeshSObj = smeshGUI->myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
GEOM::GEOM_Shape_var aShape = smeshGUI->myStudyAPI.GetShapeOnMeshOrSubMesh( aMeshSObj );
|
|
|
|
if ( aShape->_is_nil() ) {
|
|
|
|
// imported mesh
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
if(!aMeshSObj->_is_nil() && aMeshSObj->FindAttribute(anAttr, "AttributeIOR")){
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
MESSAGE("SMESHGUI::OnGUIEvent - Compute mesh : IOR = "<< anIOR->Value());
|
|
|
|
CORBA::Object_var anObj;
|
|
|
|
try{
|
|
|
|
anObj = _orb->string_to_object(anIOR->Value());
|
|
|
|
if (CORBA::is_nil(anObj)){
|
|
|
|
MESSAGE("SMESHGUI::OnGUIEvent - Compute mesh : nil object");
|
|
|
|
}
|
|
|
|
}catch(CORBA::COMM_FAILURE & ex){
|
|
|
|
INFOS("SMESHGUI::OnGUIEvent - Compute mesh : exception (1)");
|
|
|
|
}
|
|
|
|
aMesh = SMESH::SMESH_Mesh::_narrow(anObj);
|
|
|
|
aSubMesh = SMESH::SMESH_subMesh::_narrow(anObj);
|
|
|
|
if (!aMesh->_is_nil()){
|
|
|
|
GEOM::GEOM_Shape_var refShape = smeshGUI->myStudyAPI.GetShapeOnMeshOrSubMesh(aMeshSObj);
|
|
|
|
if (!refShape->_is_nil()) {
|
|
|
|
if(!smeshGUI->myComponentMesh->IsReadyToCompute(aMesh,refShape)){
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr("SMESH_WRN_MISSING_PARAMETERS"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
try{
|
|
|
|
if (smeshGUI->myComponentMesh->Compute(aMesh,refShape))
|
|
|
|
smeshGUI->myStudyAPI.ModifiedMesh(aMeshSObj,true);
|
|
|
|
// TO Do : change icon of all submeshes
|
|
|
|
}
|
|
|
|
catch(const SALOME::SALOME_Exception & S_ex){
|
|
|
|
QtCatchCorbaException(S_ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else if(!aSubMesh->_is_nil()){
|
|
|
|
aMesh = aSubMesh->GetFather();
|
|
|
|
GEOM::GEOM_Shape_var refShape = smeshGUI->myStudyAPI.GetShapeOnMeshOrSubMesh(aMeshSObj);
|
|
|
|
if(!refShape->_is_nil()){
|
|
|
|
bool compute = smeshGUI->myComponentMesh->IsReadyToCompute(aMesh,refShape);
|
|
|
|
if(!compute){
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr("SMESH_WRN_MISSING_PARAMETERS"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
try{
|
|
|
|
if ( smeshGUI->myComponentMesh->Compute(aMesh,refShape) )
|
|
|
|
smeshGUI->myStudyAPI.ModifiedMesh(aMeshSObj,true);
|
|
|
|
// TO Do : change icon of all submeshes
|
|
|
|
}catch(const SALOME::SALOME_Exception & S_ex){
|
|
|
|
QtCatchCorbaException(S_ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
TVisualObjPtr aVisualObj = GetVisualObj(anId,IObject->getEntry());
|
|
|
|
if(smeshGUI->myAutomaticUpdate && aVisualObj){
|
|
|
|
aVisualObj->Update();
|
|
|
|
SMESH_Actor* anActor = ::FindActorByEntry(IObject->getEntry());
|
|
|
|
if(!anActor){
|
|
|
|
anActor = ::CreateActor(smeshGUI->myStudy,IObject->getEntry());
|
|
|
|
if(anActor){
|
|
|
|
::DisplayActor(smeshGUI->myActiveStudy->getActiveStudyFrame(),anActor); //apo
|
|
|
|
::FitAll();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 702: // ADD SUB MESH
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SMESHGUI_AddSubMeshDlg *aDlg = new SMESHGUI_AddSubMeshDlg(parent, "", Sel);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 703: // INIT MESH
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SMESHGUI_InitMeshDlg *aDlg = new SMESHGUI_InitMeshDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 704: // EDIT Hypothesis
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SMESHGUI_EditHypothesesDlg *aDlg = new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 705: // EDIT Global Hypothesis
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SMESHGUI_EditHypothesesDlg *aDlg = new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 706: // EDIT Local Hypothesis
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SMESHGUI_EditHypothesesDlg *aDlg = new SMESHGUI_EditHypothesesDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 406: // ORIENTATION ELEMENTS
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(FaceSelection, true);
|
|
|
|
SMESHGUI_OrientationElementsDlg *aDlg = new SMESHGUI_OrientationElementsDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 407: // DIAGONAL INVERSION
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(EdgeOfCellSelection, true);
|
|
|
|
SMESHGUI_DiagonalInversionDlg *aDlg = new SMESHGUI_DiagonalInversionDlg(parent, "", Sel);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 801: // CREATE GROUP
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
if (nbSel == 1) {
|
|
|
|
// check if mesh is selected
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if (IObject->hasEntry()) {
|
|
|
|
SALOMEDS::SObject_var aMeshSObj = smeshGUI->myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
if (!aMeshSObj->_is_nil()) {
|
|
|
|
CORBA::Object_var anObj = aMeshSObj->GetObject();
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow(anObj);
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(anObj);
|
|
|
|
if (aMesh->_is_nil() && !aSubMesh->_is_nil()) {
|
|
|
|
aMesh = aSubMesh->GetFather();
|
|
|
|
}
|
|
|
|
if (!aMesh->_is_nil()) {
|
|
|
|
SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg(parent, "", Sel, aMesh);
|
|
|
|
aDlg->show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 802: // CONSTRUCT GROUP
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
if (nbSel == 1) {
|
|
|
|
// check if submesh is selected
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if (IObject->hasEntry()) {
|
|
|
|
SALOMEDS::SObject_var aSObj = smeshGUI->myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
if(!aSObj->_is_nil()) {
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(aSObj->GetObject());
|
|
|
|
if (!aSubMesh->_is_nil()) {
|
|
|
|
try {
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
|
|
|
|
// get submesh elements list by types
|
|
|
|
SMESH::long_array_var aNodes = aSubMesh->GetElementsByType(SMESH::NODE);
|
|
|
|
SMESH::long_array_var aEdges = aSubMesh->GetElementsByType(SMESH::EDGE);
|
|
|
|
SMESH::long_array_var aFaces = aSubMesh->GetElementsByType(SMESH::FACE);
|
|
|
|
SMESH::long_array_var aVolumes = aSubMesh->GetElementsByType(SMESH::VOLUME);
|
|
|
|
// create group for each type o elements
|
|
|
|
QString aName = IObject->getName();
|
|
|
|
MESSAGE("SMESHGUI::OnGUIEvent - Construct group on submesh : "<<aName);
|
|
|
|
MESSAGE(" Number of elements : nodes "<<aNodes->length() << ", edges " << aEdges->length()
|
|
|
|
<< ", faces " << aFaces->length() << ", volumes " << aVolumes->length());
|
|
|
|
if (aNodes->length() > 0) {
|
|
|
|
SMESH::SMESH_Group_var aGroup = smeshGUI->AddGroup(aMesh, SMESH::NODE, aName);
|
|
|
|
aGroup->Add(aNodes);
|
|
|
|
}
|
|
|
|
if (aEdges->length() > 0) {
|
|
|
|
SMESH::SMESH_Group_var aGroup = smeshGUI->AddGroup(aMesh, SMESH::EDGE, aName);
|
|
|
|
aGroup->Add(aEdges);
|
|
|
|
}
|
|
|
|
if (aFaces->length() > 0) {
|
|
|
|
SMESH::SMESH_Group_var aGroup = smeshGUI->AddGroup(aMesh, SMESH::FACE, aName);
|
|
|
|
aGroup->Add(aFaces);
|
|
|
|
}
|
|
|
|
if (aVolumes->length() > 0) {
|
|
|
|
SMESH::SMESH_Group_var aGroup = smeshGUI->AddGroup(aMesh, SMESH::VOLUME, aName);
|
|
|
|
aGroup->Add(aVolumes);
|
|
|
|
}
|
|
|
|
smeshGUI->myActiveStudy->updateObjBrowser(true);
|
|
|
|
}catch(const SALOME::SALOME_Exception & S_ex){
|
|
|
|
QtCatchCorbaException(S_ex);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 803: // EDIT GROUP
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
if (nbSel == 1) {
|
|
|
|
// check if group is selected
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
if (IObject->hasEntry()) {
|
|
|
|
SALOMEDS::SObject_var aSObj = smeshGUI->myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
if(!aSObj->_is_nil()) {
|
|
|
|
SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow(aSObj->GetObject());
|
|
|
|
if (!aGroup->_is_nil()) {
|
|
|
|
SMESHGUI_GroupDlg *aDlg = new SMESHGUI_GroupDlg(parent, "", Sel, aGroup);
|
|
|
|
aDlg->show();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 804: // Add elements to group
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myState == 800) {
|
|
|
|
SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) smeshGUI->myActiveDialogBox;
|
|
|
|
if (aDlg) aDlg->onAdd();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 805: // Remove elements from group
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myState == 800) {
|
|
|
|
SMESHGUI_GroupDlg *aDlg = (SMESHGUI_GroupDlg*) smeshGUI->myActiveDialogBox;
|
|
|
|
if (aDlg) aDlg->onRemove();
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 900: // MESH INFOS
|
|
|
|
{
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SMESHGUI_MeshInfosDlg *aDlg = new SMESHGUI_MeshInfosDlg(parent, "", false);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1001: // AUTOMATIC UPDATE PREFERENCES
|
|
|
|
{
|
|
|
|
parent->menuBar()->setItemChecked(1001, !parent->menuBar()->isItemChecked(1001));
|
|
|
|
if (parent->menuBar()->isItemChecked(1001)) {
|
|
|
|
QAD_CONFIG->addSetting("SMESH:AutomaticUpdate", "true");
|
|
|
|
smeshGUI->myAutomaticUpdate = true;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_CONFIG->addSetting("SMESH:AutomaticUpdate", "false");
|
|
|
|
smeshGUI->myAutomaticUpdate = false;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1003: // MESH PREFERENCES
|
|
|
|
{
|
|
|
|
smeshGUI->SetDisplaySettings();
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1005:
|
|
|
|
{
|
|
|
|
SMESHGUI_Preferences_ScalarBarDlg::ScalarBarPreferences( parent );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1006:
|
|
|
|
{
|
|
|
|
SMESHGUI_Preferences_SelectionDlg* aDlg =
|
|
|
|
new SMESHGUI_Preferences_SelectionDlg(parent);
|
|
|
|
|
|
|
|
QColor aColor;
|
|
|
|
QString SCr, SCg, SCb;
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
aColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
else aColor = Qt::cyan;
|
|
|
|
aDlg->SetColor(1, aColor);
|
|
|
|
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
aColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
else aColor = Qt::yellow;
|
|
|
|
aDlg->SetColor(2, aColor);
|
|
|
|
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsSelectColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
aColor = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
else aColor = Qt::white;
|
|
|
|
aDlg->SetColor(3, aColor);
|
|
|
|
|
|
|
|
QString SW1 = QAD_CONFIG->getSetting("SMESH:SettingsPreSelectWidth");
|
|
|
|
if (SW1.isEmpty()) SW1 = "5";
|
|
|
|
aDlg->SetWidth(1, SW1.toInt());
|
|
|
|
|
|
|
|
QString SW2 = QAD_CONFIG->getSetting("SMESH:SettingsItemSelectWidth");
|
|
|
|
if (SW2.isEmpty()) SW2 = "5";
|
|
|
|
aDlg->SetWidth(2, SW2.toInt());
|
|
|
|
|
|
|
|
QString SP1 = QAD_CONFIG->getSetting("SMESH:SettingsNodeSelectTol");
|
|
|
|
if (SP1.isEmpty()) SP1 = "0.025";
|
|
|
|
aDlg->SetPrecision(1, SP1.toDouble());
|
|
|
|
|
|
|
|
QString SP2 = QAD_CONFIG->getSetting("SMESH:SettingsElementsSelectTol");
|
|
|
|
if (SP2.isEmpty()) SP2 = "0.001";
|
|
|
|
aDlg->SetPrecision(2, SP2.toDouble());
|
|
|
|
|
|
|
|
if (aDlg->exec()) {
|
|
|
|
QColor aPreColor = aDlg->GetColor(1);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsPreSelectColorRed", aPreColor.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsPreSelectColorGreen", aPreColor.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsPreSelectColorBlue", aPreColor.blue());
|
|
|
|
|
|
|
|
QColor aSelColor = aDlg->GetColor(2);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsItemSelectColorRed", aSelColor.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsItemSelectColorGreen", aSelColor.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsItemSelectColorBlue", aSelColor.blue());
|
|
|
|
|
|
|
|
QColor aHiColor = aDlg->GetColor(3);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsSelectColorRed", aHiColor.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsSelectColorGreen", aHiColor.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsSelectColorBlue", aHiColor.blue());
|
|
|
|
|
|
|
|
int aPreWidth = aDlg->GetWidth(1);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsPreSelectWidth", aPreWidth);
|
|
|
|
int aSelWidth = aDlg->GetWidth(2);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsItemSelectWidth", aSelWidth);
|
|
|
|
|
|
|
|
double aTolNodes = aDlg->GetPrecision(1);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsNodeSelectTol", aTolNodes);
|
|
|
|
double aTolItems = aDlg->GetPrecision(2);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsElementsSelectTol", aTolItems);
|
|
|
|
|
|
|
|
// update current study settings
|
|
|
|
::UpdateSelectionProp();
|
|
|
|
|
|
|
|
QAD_StudyFrame* studyFrame = smeshGUI->myActiveStudy->getActiveStudyFrame();
|
|
|
|
if (studyFrame->getTypeView() == VIEW_VTK) {
|
|
|
|
VTKViewer_ViewFrame* aViewFrame = GetVtkViewFrame(studyFrame);
|
|
|
|
// update VTK viewer properties
|
|
|
|
VTKViewer_RenderWindowInteractor* anInteractor = aViewFrame->getRWInteractor();
|
|
|
|
if (anInteractor) {
|
|
|
|
anInteractor->SetSelectionProp(aSelColor.red()/255., aSelColor.green()/255.,
|
|
|
|
aSelColor.blue()/255., aSelWidth);
|
|
|
|
anInteractor->SetSelectionTolerance(aTolNodes, aTolItems);
|
|
|
|
VTKViewer_InteractorStyleSALOME* aStyle = anInteractor->GetInteractorStyleSALOME();
|
|
|
|
if (aStyle)
|
|
|
|
aStyle->setPreselectionProp(aPreColor.red()/255., aPreColor.green()/255.,
|
|
|
|
aPreColor.blue()/255., aPreWidth);
|
|
|
|
}
|
|
|
|
// update actors
|
|
|
|
vtkRenderer* aRenderer = aViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
anActor->SetHighlightColor(aHiColor.red()/255., aHiColor.green()/255.,
|
|
|
|
aHiColor.blue()/255.);
|
|
|
|
anActor->SetPreHighlightColor(aPreColor.red()/255., aPreColor.green()/255.,
|
|
|
|
aPreColor.blue()/255.);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1100: // EDIT HYPOTHESIS
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
SALOME_Selection *Sel =
|
|
|
|
SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
|
|
|
|
if (nbSel == 1) {
|
|
|
|
Standard_Boolean res;
|
|
|
|
SMESH::SMESH_Hypothesis_var Hyp =
|
|
|
|
smeshGUI->ConvertIOinSMESHHypothesis(Sel->firstIObject(), res);
|
|
|
|
|
|
|
|
/* Look for all mesh objects that have this hypothesis affected in order to flag as ModifiedMesh */
|
|
|
|
/* At end below '...->updateObjBrowser(true)' will change icon of mesh objects */
|
|
|
|
/* Warning : however by internal mechanism all subMeshes icons are changed ! */
|
|
|
|
if ( res )
|
|
|
|
{
|
|
|
|
char* sName = Hyp->GetName();
|
|
|
|
SMESHGUI_GenericHypothesisCreator* aCreator = smeshGUI->GetHypothesisCreator(sName);
|
|
|
|
if (aCreator)
|
|
|
|
{
|
|
|
|
aCreator->EditHypothesis(Hyp);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
// report error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1101: // RENAME
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
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();
|
|
|
|
|
|
|
|
SALOMEDS::SObject_var obj = smeshGUI->myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeName_var aName;
|
|
|
|
if (!obj->_is_nil()) {
|
|
|
|
if (obj->FindAttribute(anAttr, "AttributeName")) {
|
|
|
|
aName = SALOMEDS::AttributeName::_narrow(anAttr);
|
|
|
|
QString newName = QString(aName->Value());
|
|
|
|
newName = SALOMEGUI_NameDlg::getName(QAD_Application::getDesktop(), newName);
|
|
|
|
if (!newName.isEmpty()) {
|
|
|
|
smeshGUI->myActiveStudy->renameIObject(IObject, newName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 1102: // REMOVE HYPOTHESIS / ALGORITHMS
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
|
|
|
|
for (int i = 0; It.More(); It.Next(), i++) {
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = It.Value();
|
|
|
|
smeshGUI->RemoveHypothesisOrAlgorithmOnMesh(IObject);
|
|
|
|
}
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myActiveStudy->updateObjBrowser(true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 401: // GEOM::EDGE
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_AddEdgeDlg *aDlg = new SMESHGUI_AddEdgeDlg(parent, "", Sel);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4021: // TRIANGLE
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_AddFaceDlg *aDlg = new SMESHGUI_AddFaceDlg(parent, "", Sel, 3);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4022: // QUAD
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_AddFaceDlg *aDlg = new SMESHGUI_AddFaceDlg(parent, "", Sel, 4);
|
|
|
|
}
|
|
|
|
else
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4031: // TETRA
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_AddVolumeDlg *aDlg = new SMESHGUI_AddVolumeDlg(parent, "", Sel, 4);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4032: // HEXA
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_AddVolumeDlg *aDlg = new SMESHGUI_AddVolumeDlg(parent, "", Sel, 8);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 4041: // REMOVES NODES
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(NodeSelection, true);
|
|
|
|
smeshGUI->ViewNodes();
|
|
|
|
SMESHGUI_RemoveNodesDlg *aDlg = new SMESHGUI_RemoveNodesDlg(parent, "", Sel);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4042: // REMOVES ELEMENTS
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
if (smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK) {
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
smeshGUI->myDesktop->SetSelectionMode(CellSelection, true);
|
|
|
|
SMESHGUI_RemoveElementsDlg *aDlg = new SMESHGUI_RemoveElementsDlg(parent, "", Sel);
|
|
|
|
}
|
|
|
|
else
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"), tr("SMESH_WRN_VIEWER_VTK"),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 5000: // HYPOTHESIS
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SMESHGUI_CreateHypothesesDlg *aDlg =
|
|
|
|
new SMESHGUI_CreateHypothesesDlg (parent, "", FALSE, false);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 5010: // ALGO
|
|
|
|
{
|
|
|
|
if(checkLock(aStudy)) break;
|
|
|
|
smeshGUI->EmitSignalDeactivateDialog();
|
|
|
|
SMESHGUI_CreateHypothesesDlg *aDlg =
|
|
|
|
new SMESHGUI_CreateHypothesesDlg (parent, "", FALSE, true);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case 6016: // CONTROLS
|
|
|
|
case 6015:
|
|
|
|
case 6014:
|
|
|
|
case 6013:
|
|
|
|
case 6012:
|
|
|
|
case 6011:
|
|
|
|
case 6001:
|
|
|
|
case 6003:
|
|
|
|
case 6004:
|
|
|
|
if ( smeshGUI->myActiveStudy->getActiveStudyFrame()->getTypeView() == VIEW_VTK ) {
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
if ( Sel->IObjectCount() == 1 && Sel->firstIObject()->hasEntry() ) {
|
|
|
|
SALOMEDS::SObject_var SO = smeshGUI->myStudy->FindObjectID( Sel->firstIObject()->getEntry() );
|
|
|
|
if ( !SO->_is_nil() ) {
|
|
|
|
CORBA::Object_var aObject = SO->GetObject();
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( aObject );
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow( aObject );
|
|
|
|
SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group::_narrow( aObject );
|
|
|
|
if ( !aMesh->_is_nil() || !aSubMesh->_is_nil() || !aGroup->_is_nil() ) {
|
|
|
|
smeshGUI->Control( theCommandID );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
QAD_MessageBox::warn1(smeshGUI->GetDesktop(),
|
|
|
|
tr( "SMESH_WRN_WARNING" ),
|
|
|
|
tr( "SMESH_BAD_SELECTION" ),
|
|
|
|
tr( "SMESH_BUT_OK" ) );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QAD_MessageBox::warn1(smeshGUI->GetDesktop(),
|
|
|
|
tr( "SMESH_WRN_WARNING" ),
|
|
|
|
tr( "NOT_A_VTK_VIEWER" ),
|
|
|
|
tr( "SMESH_BUT_OK" ) );
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 9010:
|
|
|
|
{
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
if (Sel->IObjectCount() == 1) {
|
|
|
|
Handle(SALOME_InteractiveObject) anIObject = Sel->firstIObject();
|
|
|
|
if(anIObject->hasEntry())
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(anIObject->getEntry())){
|
|
|
|
anActor->SetPointsLabeled( !anActor->GetPointsLabeled() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 9011:
|
|
|
|
{
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
if (Sel->IObjectCount() == 1) {
|
|
|
|
Handle(SALOME_InteractiveObject) anIObject = Sel->firstIObject();
|
|
|
|
if(anIObject->hasEntry())
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(anIObject->getEntry())){
|
|
|
|
anActor->SetCellsLabeled( !anActor->GetCellsLabeled() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 10001: // DISPLAY MODE PREFERENCE
|
|
|
|
{
|
|
|
|
// Wireframe
|
|
|
|
parent->menuBar()->setItemChecked(10001, true);
|
|
|
|
parent->menuBar()->setItemChecked(10002, false);
|
|
|
|
parent->menuBar()->setItemChecked(10004, false);
|
|
|
|
parent->menuBar()->setItemEnabled(10003, true);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:DisplayMode", "Wireframe");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 10002:
|
|
|
|
{
|
|
|
|
parent->menuBar()->setItemChecked(10002, true);
|
|
|
|
parent->menuBar()->setItemChecked(10001, false);
|
|
|
|
parent->menuBar()->setItemChecked(10004, false);
|
|
|
|
parent->menuBar()->setItemEnabled(10003, true);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:DisplayMode", "Shading");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 10003:
|
|
|
|
{
|
|
|
|
parent->menuBar()->setItemChecked(10003,!parent->menuBar()->isItemChecked(10003));
|
|
|
|
QAD_CONFIG->addSetting("SMESH:Shrink", parent->menuBar()->isItemChecked(10003) ? "yes" : "no");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 10004:
|
|
|
|
{
|
|
|
|
parent->menuBar()->setItemChecked(10001, false);
|
|
|
|
parent->menuBar()->setItemChecked(10004, true);
|
|
|
|
parent->menuBar()->setItemChecked(10002, false);
|
|
|
|
parent->menuBar()->setItemEnabled(10003, false);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:DisplayMode", "Nodes");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
smeshGUI->myActiveStudy->updateObjBrowser(true);
|
|
|
|
return true;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
/*! function : GetMeshesUsingAlgoOrHypothesis()
|
|
|
|
* purpose : return a list of Study objects (mesh kind) that have 'AlgoOrHyp' affected.
|
|
|
|
* : However is supposed here that father of father of an hypothesis is a Mesh Object.
|
2003-05-19 20:07:00 +06:00
|
|
|
*/
|
2004-06-18 14:34:31 +06:00
|
|
|
//=============================================================================
|
|
|
|
SALOMEDS::Study::ListOfSObject *
|
|
|
|
SMESHGUI::GetMeshesUsingAlgoOrHypothesis(SMESH::
|
|
|
|
SMESH_Hypothesis_ptr AlgoOrHyp)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOMEDS::Study::ListOfSObject_var listSOmesh =
|
|
|
|
new SALOMEDS::Study::ListOfSObject;
|
|
|
|
listSOmesh->length(0);
|
|
|
|
unsigned int index = 0;
|
|
|
|
if (!AlgoOrHyp->_is_nil()) {
|
|
|
|
SALOMEDS::SObject_var SO_Hypothesis =
|
|
|
|
smeshGUI->GetStudyAPI().FindObject(AlgoOrHyp);
|
|
|
|
if (!SO_Hypothesis->_is_nil()) {
|
|
|
|
SALOMEDS::Study::ListOfSObject_var listSO =
|
|
|
|
smeshGUI->myStudy->FindDependances(SO_Hypothesis);
|
|
|
|
MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<<listSO->length());
|
|
|
|
for (unsigned int i = 0; i < listSO->length(); i++) {
|
|
|
|
SALOMEDS::SObject_ptr SO = listSO[i];
|
|
|
|
if (!SO->_is_nil()) {
|
|
|
|
SALOMEDS::SObject_var aFather = SO->GetFather();
|
|
|
|
if (!aFather->_is_nil()) {
|
|
|
|
SALOMEDS::SObject_var SOfatherFather = aFather->GetFather();
|
|
|
|
if (!SOfatherFather->_is_nil()) {
|
|
|
|
MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency added to list");
|
|
|
|
index++;
|
|
|
|
listSOmesh->length(index);
|
|
|
|
listSOmesh[index - 1] = SOfatherFather;
|
|
|
|
}
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): completed");
|
|
|
|
return listSOmesh._retn();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
void SMESHGUI::Import_Mesh(QAD_Desktop * parent, int theCommandID){
|
|
|
|
QString filter;
|
|
|
|
string myExtension;
|
|
|
|
|
|
|
|
if(theCommandID == 113){
|
|
|
|
filter = tr("MED files (*.med)");
|
|
|
|
}else if (theCommandID == 112){
|
|
|
|
filter = tr("IDEAS files (*.unv)");
|
|
|
|
}else if (theCommandID == 111){
|
|
|
|
filter = tr("DAT files (*.dat)");
|
|
|
|
}
|
|
|
|
QString filename = QAD_FileDlg::getFileName(parent,
|
|
|
|
"",
|
|
|
|
filter,
|
|
|
|
tr("Import mesh"),
|
|
|
|
true);
|
|
|
|
if(!filename.isEmpty()){
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
SMESH::mesh_array_var aMeshes;
|
|
|
|
try {
|
|
|
|
SMESH::DriverMED_ReadStatus res;
|
|
|
|
aMeshes = smeshGUI->myComponentMesh->CreateMeshesFromMED(filename.latin1(),
|
|
|
|
res);
|
|
|
|
if ( res > SMESH::DRS_OK ) {
|
|
|
|
wc.stop();
|
|
|
|
QAD_MessageBox::warn1(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr(QString("SMESH_DRS_%1").arg(res)),
|
|
|
|
tr("SMESH_BUT_OK"));
|
|
|
|
wc.start();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
catch (const SALOME::SALOME_Exception& S_ex)
|
|
|
|
{
|
|
|
|
wc.stop();
|
|
|
|
QtCatchCorbaException(S_ex);
|
|
|
|
wc.start();
|
|
|
|
}
|
|
|
|
for ( int i = 0, n = aMeshes->length(); i < n; i++ ) {
|
|
|
|
SALOMEDS::SObject_var aMeshSO = smeshGUI->myStudyAPI.FindObject( aMeshes[i] );
|
|
|
|
if ( !aMeshSO->_is_nil() ) {
|
|
|
|
SALOMEDS::StudyBuilder_var aBuilder = smeshGUI->myStudy->NewBuilder();
|
|
|
|
SALOMEDS::AttributePixMap_var aPixmap = SALOMEDS::AttributePixMap::_narrow( aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" ) );
|
|
|
|
aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::Export_Mesh(QAD_Desktop * parent, int theCommandID)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
SALOME_Selection *Sel =
|
|
|
|
SALOME_Selection::Selection(smeshGUI->myActiveStudy->getSelection());
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
if ( !nbSel )
|
|
|
|
return;
|
|
|
|
Standard_Boolean res;
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = smeshGUI->ConvertIOinMesh(IObject, res);
|
|
|
|
if ( res && ( nbSel == 1 || theCommandID == 122 ) ) {// MED export supports multiple meshes
|
|
|
|
QString aFilter, aTitle = tr("Export mesh");
|
|
|
|
switch ( theCommandID ) {
|
|
|
|
case 122:
|
|
|
|
aFilter = tr("MED files (*.med)");
|
|
|
|
break;
|
|
|
|
case 121:
|
|
|
|
aFilter = tr("DAT files (*.dat)");
|
|
|
|
break;
|
|
|
|
case 123:
|
|
|
|
aFilter = tr("IDEAS files (*.unv)");
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
QString filename = QAD_FileDlg::getFileName(parent, "", aFilter, aTitle, false);
|
|
|
|
|
|
|
|
if ( !filename.isEmpty() ) {
|
|
|
|
// Check whether the file already exists and delete it if yes
|
|
|
|
QFile aFile( filename );
|
|
|
|
if ( aFile.exists() )
|
|
|
|
aFile.remove();
|
|
|
|
|
|
|
|
QAD_WaitCursor wc;
|
|
|
|
for ( SALOME_ListIteratorOfListIO it( Sel->StoredIObjects() ); it.More(); it.Next() ) {
|
|
|
|
aMesh = smeshGUI->ConvertIOinMesh( it.Value(), res );
|
|
|
|
if ( res ) {
|
|
|
|
switch ( theCommandID ) {
|
|
|
|
case 122:
|
|
|
|
aMesh->ExportMED( filename.latin1(), true ); // currently, automatic groups are always created
|
|
|
|
break;
|
|
|
|
case 121:
|
|
|
|
aMesh->ExportDAT( filename.latin1() );
|
|
|
|
break;
|
|
|
|
case 123:
|
|
|
|
aMesh->ExportUNV( filename.latin1() );
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::OnMousePress(QMouseEvent * pe, QAD_Desktop * parent,
|
|
|
|
QAD_StudyFrame * studyFrame)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return false;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::OnMouseMove(QMouseEvent * pe, QAD_Desktop * parent,
|
|
|
|
QAD_StudyFrame * studyFrame)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return true;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::OnKeyPress(QKeyEvent * pe, QAD_Desktop * parent,
|
|
|
|
QAD_StudyFrame * studyFrame)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
return true;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::SetSettings(QAD_Desktop * parent)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
MESSAGE("SMESHGUI::SetSettings.");
|
|
|
|
SMESHGUI::GetOrCreateSMESHGUI(parent);
|
|
|
|
|
|
|
|
/* Display mode */
|
|
|
|
QString DisplayMode = "Shading";
|
|
|
|
if ( QAD_CONFIG->hasSetting("SMESH:DisplayMode") )
|
|
|
|
DisplayMode = QAD_CONFIG->getSetting("SMESH:DisplayMode");
|
|
|
|
else
|
|
|
|
QAD_CONFIG->addSetting("SMESH:DisplayMode", "Shading");
|
|
|
|
|
|
|
|
bool Shrink = false;
|
|
|
|
if ( QAD_CONFIG->hasSetting("SMESH:Shrink") )
|
|
|
|
Shrink = QAD_CONFIG->getSetting("SMESH:Shrink") == "yes";
|
|
|
|
|
|
|
|
if (DisplayMode == "Wireframe") {
|
|
|
|
// wireframe
|
|
|
|
parent->menuBar()->setItemChecked(10004, false);
|
|
|
|
parent->menuBar()->setItemChecked(10002, false);
|
|
|
|
parent->menuBar()->setItemChecked(10001, true);
|
|
|
|
parent->menuBar()->setItemEnabled(10003, true);
|
|
|
|
}
|
|
|
|
else if (DisplayMode == "Nodes") {
|
|
|
|
// poins
|
|
|
|
parent->menuBar()->setItemChecked(10004, true);
|
|
|
|
parent->menuBar()->setItemChecked(10002, false);
|
|
|
|
parent->menuBar()->setItemChecked(10001, false);
|
|
|
|
parent->menuBar()->setItemEnabled(10003, false);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// default is shading
|
|
|
|
parent->menuBar()->setItemChecked(10004, false);
|
|
|
|
parent->menuBar()->setItemChecked(10002, true);
|
|
|
|
parent->menuBar()->setItemChecked(10001, false);
|
|
|
|
parent->menuBar()->setItemEnabled(10003, true);
|
|
|
|
}
|
|
|
|
parent->menuBar()->setItemChecked(10003, Shrink);
|
|
|
|
|
|
|
|
/* 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;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Selection */
|
|
|
|
::UpdateSelectionProp();
|
|
|
|
|
|
|
|
/* menus disable */
|
|
|
|
parent->menuBar()->setItemEnabled(111, false); // IMPORT DAT
|
|
|
|
parent->menuBar()->setItemEnabled(112, false); // IMPORT UNV
|
|
|
|
|
|
|
|
return true;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::DefinePopup(QString & theContext, QString & theParent, QString & theObject)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
// 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();
|
|
|
|
switch ( nbSel ) {
|
|
|
|
case 0:
|
|
|
|
theObject = "NothingSelected";
|
|
|
|
theContext = "NothingSelected";
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if ( smeshGUI->myState == 800 && Sel->HasIndex( Sel->firstIObject() ) )
|
|
|
|
theObject = "Elements";
|
|
|
|
else
|
|
|
|
theObject = smeshGUI->CheckTypeObject( Sel->firstIObject() );
|
|
|
|
theContext = "";
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
theObject = smeshGUI->CheckHomogeneousSelection();
|
|
|
|
theContext = "";
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
bool SMESHGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext,
|
|
|
|
const QString& theParent, const QString& theObject)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
// get active study frame
|
|
|
|
QAD_StudyFrame* studyFrame = smeshGUI->myActiveStudy->getActiveStudyFrame();
|
|
|
|
|
|
|
|
// get parent component which selected object(s) belongs to
|
|
|
|
QString parentComp = ( (SALOMEGUI_Desktop*)parent )->getComponentFromSelection();
|
|
|
|
|
|
|
|
// get selection
|
|
|
|
SALOME_Selection* Sel = SALOME_Selection::Selection( smeshGUI->myActiveStudy->getSelection() );
|
|
|
|
int nbSel = Sel->IObjectCount();
|
|
|
|
|
|
|
|
if ( nbSel == 0 ) {
|
|
|
|
popup->clear();
|
|
|
|
}
|
|
|
|
else if ( nbSel == 1 ) {
|
|
|
|
if ( parentComp != parent->getActiveComponent() ) {
|
|
|
|
// object not belongs to SMESH module - remove all commands except common Display/Erase...
|
|
|
|
while ( 1 ) {
|
|
|
|
int id = popup->idAt( 0 );
|
|
|
|
if ( id <= QAD_TopLabel_Popup_ID )
|
|
|
|
popup->removeItemAt( 0 );
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// get selected interactive object
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = Sel->firstIObject();
|
|
|
|
SALOMEDS::SObject_var SO = smeshGUI->myStudy->FindObjectID( IObject->getEntry() );
|
|
|
|
// find popup menu's TopLabel item
|
|
|
|
int topItem = popup->indexOf( QAD_TopLabel_Popup_ID );
|
|
|
|
if ( topItem >= 0 ) {
|
|
|
|
if ( theParent == "Viewer" ) {
|
|
|
|
// set bold font for popup menu's TopLabel item (Viewer popup)
|
|
|
|
QFont fnt = QApplication::font(); fnt.setBold( TRUE );
|
|
|
|
popup->removeItem( QAD_TopLabel_Popup_ID );
|
|
|
|
popup->insertItem( new CustomItem( QString( IObject->getName() ), fnt ), QAD_TopLabel_Popup_ID, topItem );
|
|
|
|
}
|
|
|
|
else if ( theParent == "ObjectBrowser" ) {
|
|
|
|
// remove popup menu's TopLabel item (Object Browser popup)
|
|
|
|
popup->removeItem( QAD_TopLabel_Popup_ID );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// remove "Display only" command for component object
|
|
|
|
if ( theObject.compare( "Component" ) == 0 ) {
|
|
|
|
popup->removeItem( QAD_DisplayOnly_Popup_ID );
|
|
|
|
}
|
|
|
|
else if ( theObject == "Hypothesis" || theObject == "Algorithm" ) {
|
|
|
|
// remove Display/Erase commands
|
|
|
|
popup->removeItem( QAD_Display_Popup_ID );
|
|
|
|
popup->removeItem( QAD_DisplayOnly_Popup_ID );
|
|
|
|
popup->removeItem( QAD_Erase_Popup_ID );
|
|
|
|
// remove "Unassign ..." command if hyp/algo is not assigned
|
|
|
|
if ( SO->_is_nil() || !IObject->hasReference()/* !IsReferencedObject( SO ) */)
|
|
|
|
popup->removeItem( 1102 );
|
|
|
|
}
|
|
|
|
else if ( theObject == "Mesh" || theObject == "SubMesh" || theObject == "Group" ) {
|
|
|
|
// get actor
|
|
|
|
GEOM::GEOM_Shape_var aShape = GetSMESHGUI()->GetStudyAPI().GetShapeOnMeshOrSubMesh( SO );
|
|
|
|
if ( aShape->_is_nil() ) {
|
|
|
|
// imported mesh
|
|
|
|
popup->removeItem( 701 ); // Compute
|
|
|
|
popup->removeItem( 705 ); // Edit hypothesis
|
|
|
|
popup->removeItem( 706 ); // ...
|
|
|
|
}
|
|
|
|
SMESH_Actor* ac = ::FindActorByEntry(IObject->getEntry());
|
|
|
|
// if object has actor
|
|
|
|
if ( ac && studyFrame->getTypeView() == VIEW_VTK ) {
|
|
|
|
VTKViewer_RenderWindowInteractor* myRenderInter =
|
|
|
|
( ( VTKViewer_ViewFrame* ) studyFrame->getRightFrame()->getViewFrame() )->getRWInteractor();
|
|
|
|
if ( myRenderInter->isVisible( IObject ) ) {
|
|
|
|
popup->removeItem( QAD_Display_Popup_ID );
|
|
|
|
popup->setItemChecked( 9010, ac->GetPointsLabeled() ); // Numbering / Display Nodes #
|
|
|
|
popup->setItemChecked( 9011, ac->GetCellsLabeled() ); // Numbering / Display Elements #
|
|
|
|
TVisualObjPtr aVisualObj = ac->GetObject();
|
|
|
|
int aNbEdges = aVisualObj->GetNbEntities(SMESH::EDGE);
|
|
|
|
int aNbFaces = aVisualObj->GetNbEntities(SMESH::FACE);
|
|
|
|
int aNbVolumes = aVisualObj->GetNbEntities(SMESH::VOLUME);
|
|
|
|
QMenuItem* mi = popup->findItem( 1131 );
|
|
|
|
if ( mi && mi->popup() ) {
|
|
|
|
int prType = ac->GetRepresentation();
|
|
|
|
// Display Mode / Wireframe
|
|
|
|
if(!aNbFaces && !aNbVolumes && !aNbEdges){
|
|
|
|
mi->popup()->removeItem( 211 );
|
|
|
|
}else{
|
|
|
|
mi->popup()->setItemChecked( 211, prType == SMESH_Actor::eEdge );
|
|
|
|
}
|
|
|
|
// Display Mode / Shading
|
|
|
|
if(!aNbFaces && !aNbVolumes){
|
|
|
|
mi->popup()->removeItem( 212 );
|
|
|
|
}else{
|
|
|
|
mi->popup()->setItemChecked( 212, prType == SMESH_Actor::eSurface );
|
|
|
|
}
|
|
|
|
// Display Mode / Points
|
|
|
|
mi->popup()->setItemChecked( 215, prType == SMESH_Actor::ePoint );
|
|
|
|
// Display Mode / Shrink
|
|
|
|
bool isShrunk = ac->IsShrunk();
|
|
|
|
bool isShrunkable = ac->IsShrunkable();
|
|
|
|
mi->popup()->setItemChecked( 213, isShrunk );
|
|
|
|
mi->popup()->setItemEnabled( 213, prType != SMESH_Actor::ePoint && isShrunkable);
|
|
|
|
}
|
|
|
|
// Scalar Bar
|
|
|
|
mi = popup->findItem( 2000 );
|
|
|
|
if ( mi && mi->popup() ) {
|
|
|
|
SMESH_Actor::eControl cMode = ac->GetControlMode();
|
|
|
|
switch ( cMode ) {
|
|
|
|
case SMESH_Actor::eLengthEdges:
|
|
|
|
mi->popup()->setItemChecked( 6001, true ); break;
|
|
|
|
case SMESH_Actor::eFreeBorders:
|
|
|
|
mi->popup()->setItemChecked( 6003, true );
|
|
|
|
mi->popup()->removeItem( 201 );
|
|
|
|
break;
|
|
|
|
case SMESH_Actor::eMultiConnection:
|
|
|
|
mi->popup()->setItemChecked( 6004, true ); break;
|
|
|
|
case SMESH_Actor::eArea:
|
|
|
|
mi->popup()->setItemChecked( 6011, true ); break;
|
|
|
|
case SMESH_Actor::eTaper:
|
|
|
|
mi->popup()->setItemChecked( 6012, true ); break;
|
|
|
|
case SMESH_Actor::eAspectRatio:
|
|
|
|
mi->popup()->setItemChecked( 6013, true ); break;
|
|
|
|
case SMESH_Actor::eMinimumAngle:
|
|
|
|
mi->popup()->setItemChecked( 6014, true ); break;
|
|
|
|
case SMESH_Actor::eWarping:
|
|
|
|
mi->popup()->setItemChecked( 6015, true ); break;
|
|
|
|
case SMESH_Actor::eSkew:
|
|
|
|
mi->popup()->setItemChecked( 6016, true ); break;
|
|
|
|
case SMESH_Actor::eNone:
|
|
|
|
default:
|
|
|
|
mi->popup()->removeItem( 200 );
|
|
|
|
mi->popup()->removeItem( 201 );
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
TVisualObjPtr aVisualObj = ac->GetObject();
|
|
|
|
SMESH::ElementType aType;
|
|
|
|
if(!aNbEdges){
|
|
|
|
mi->popup()->removeItem( 6001 );
|
|
|
|
mi->popup()->removeItem( 6003 );
|
|
|
|
mi->popup()->removeItem( 6004 );
|
|
|
|
}
|
|
|
|
if(!aNbFaces){
|
|
|
|
mi->popup()->removeItem( 6011 );
|
|
|
|
mi->popup()->removeItem( 6012 );
|
|
|
|
mi->popup()->removeItem( 6013 );
|
|
|
|
mi->popup()->removeItem( 6014 );
|
|
|
|
mi->popup()->removeItem( 6015 );
|
|
|
|
mi->popup()->removeItem( 6016 );
|
|
|
|
}
|
|
|
|
if(!aNbFaces && !aNbEdges)
|
|
|
|
popup->removeItem( 2000 ); // Scalar Bar
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
popup->removeItem( QAD_Erase_Popup_ID );
|
|
|
|
popup->removeItem( 114 ); // Numbering popup menu
|
|
|
|
popup->removeItem( 1131 ); // Display mode
|
|
|
|
popup->removeItem( 1132 ); // Color / size
|
|
|
|
popup->removeItem( 1133 ); // Transparency
|
|
|
|
popup->removeItem( 2000 ); // Scalar Bar
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// object doesn't have actor
|
|
|
|
CORBA::Object_var anObject = SO->GetObject();
|
|
|
|
bool bDisplay = false;
|
|
|
|
if ( !CORBA::is_nil( anObject ) ) {
|
|
|
|
SMESH::SMESH_Mesh_var aMeshObj = SMESH::SMESH_Mesh::_narrow( anObject );
|
|
|
|
if ( !aMeshObj->_is_nil() && ( aMeshObj->NbNodes() > 0 || aMeshObj->NbFaces() > 0 || aMeshObj->NbVolumes() > 0 ) )
|
|
|
|
bDisplay = true;
|
|
|
|
SMESH::SMESH_subMesh_var aSubMeshObj = SMESH::SMESH_subMesh::_narrow( anObject );
|
|
|
|
if ( !aSubMeshObj->_is_nil() && ( aSubMeshObj->GetNumberOfNodes() > 0 || aSubMeshObj->GetNumberOfElements() > 0 ) )
|
|
|
|
bDisplay = true;
|
|
|
|
SMESH::SMESH_Group_var aGroupObj = SMESH::SMESH_Group::_narrow( anObject );
|
|
|
|
if ( !aGroupObj->_is_nil() && aGroupObj->Size() > 0 )
|
|
|
|
bDisplay = true;
|
|
|
|
}
|
|
|
|
if ( !bDisplay ) {
|
|
|
|
popup->removeItem( QAD_Display_Popup_ID );
|
|
|
|
popup->removeItem( QAD_DisplayOnly_Popup_ID );
|
|
|
|
}
|
|
|
|
popup->removeItem( QAD_Erase_Popup_ID );
|
|
|
|
popup->removeItem( 114 ); // Numbering popup menu
|
|
|
|
popup->removeItem( 1131 ); // Display mode
|
|
|
|
popup->removeItem( 1132 ); // Color / size
|
|
|
|
popup->removeItem( 1133 ); // Transparency
|
|
|
|
popup->removeItem( 2000 ); // Scalar Bar
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// another SMESH object
|
|
|
|
popup->removeItem( QAD_Display_Popup_ID );
|
|
|
|
popup->removeItem( QAD_DisplayOnly_Popup_ID );
|
|
|
|
popup->removeItem( QAD_Erase_Popup_ID );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
// multiple selection
|
|
|
|
if ( parentComp != parent->getActiveComponent() ) {
|
|
|
|
// object not belongs to SMESH module - remove all commands except common Display/Erase...
|
|
|
|
while ( 1 ) {
|
|
|
|
int id = popup->idAt( 0 );
|
|
|
|
if ( id <= QAD_TopLabel_Popup_ID )
|
|
|
|
popup->removeItemAt( 0 );
|
|
|
|
else
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if ( parentComp.isNull() ) {
|
|
|
|
// objects from different components are selected
|
|
|
|
popup->removeItem( QAD_DisplayOnly_Popup_ID );
|
|
|
|
popup->removeItem( QAD_Display_Popup_ID );
|
|
|
|
popup->removeItem( QAD_Erase_Popup_ID );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
QString type = smeshGUI->CheckHomogeneousSelection();
|
|
|
|
if ( type != "Heterogeneous Selection" ) {
|
|
|
|
int topItem = popup->indexOf( QAD_TopLabel_Popup_ID );
|
|
|
|
if ( topItem >= 0 ) {
|
|
|
|
// set bold font for popup menu's TopLabel item
|
|
|
|
QFont fnt = QApplication::font(); fnt.setBold( TRUE );
|
|
|
|
popup->removeItem( QAD_TopLabel_Popup_ID );
|
|
|
|
popup->insertItem( new CustomItem( QString("%1 ").arg( nbSel ) + type + "(s) ", fnt ), QAD_TopLabel_Popup_ID, topItem );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
/*! Method: BuildPresentation(const Handle(SALOME_InteractiveObject)& theIO)
|
|
|
|
* Purpose: ensures that the actor for the given <theIO> exists in the active VTK view
|
2003-05-19 20:07:00 +06:00
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::BuildPresentation(const Handle(SALOME_InteractiveObject) & theIO)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if(theIO->hasEntry()){
|
|
|
|
QAD_Study* aStudy = SMESHGUI::GetSMESHGUI()->GetActiveStudy();
|
|
|
|
QAD_StudyFrame *aStudyFrame = aStudy->getActiveStudyFrame();
|
|
|
|
::UpdateView(aStudyFrame,eDisplay,theIO->getEntry());
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::setOrb()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
try
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
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;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
ASSERT(!CORBA::is_nil(_orb));
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
SMESH_Actor *SMESHGUI::ReadScript(SMESH::SMESH_Mesh_ptr theMesh){}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::Dump(SMESH_Actor * Mactor)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid *ugrid = Mactor->GetUnstructuredGrid();
|
|
|
|
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++)
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
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");
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
fclose(In);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::RemoveNodes(SMESH::SMESH_Mesh_ptr theMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
try{
|
|
|
|
SALOMEDS::SObject_var aSobj = myStudyAPI.FindObject(theMesh);
|
|
|
|
CORBA::String_var anEntry = aSobj->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(anEntry.in())){
|
|
|
|
SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
|
|
|
|
anArrayOfIdeces->length(MapIndex.Extent());
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(int i = 0; ite.More(); ite.Next(), i++){
|
|
|
|
anArrayOfIdeces[i] = anActor->GetNodeObjId(ite.Key());
|
|
|
|
}
|
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
|
|
|
|
aMeshEditor->RemoveNodes(anArrayOfIdeces);
|
|
|
|
if(myAutomaticUpdate){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,anEntry.in())){
|
|
|
|
aVisualObj->Update(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(SALOME::SALOME_Exception& exc) {
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.details.text);
|
|
|
|
}catch(const std::exception& exc){
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.what());
|
|
|
|
}catch(...){
|
|
|
|
INFOS("Unknown exception was cought !!!");
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
|
|
|
void SMESHGUI::RemoveElements(SMESH::SMESH_Mesh_ptr theMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
try{
|
|
|
|
SALOMEDS::SObject_var aSobj = myStudyAPI.FindObject(theMesh);
|
|
|
|
CORBA::String_var anEntry = aSobj->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(anEntry.in())){
|
|
|
|
SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
|
|
|
|
anArrayOfIdeces->length(MapIndex.Extent());
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(int i = 0; ite.More(); ite.Next(), i++){
|
|
|
|
anArrayOfIdeces[i] = anActor->GetElemObjId(ite.Key());
|
|
|
|
}
|
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
|
|
|
|
aMeshEditor->RemoveElements(anArrayOfIdeces);
|
|
|
|
if(myAutomaticUpdate){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,anEntry.in())){
|
|
|
|
aVisualObj->Update(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(SALOME::SALOME_Exception& exc) {
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.details.text);
|
|
|
|
}catch(const std::exception& exc){
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.what());
|
|
|
|
}catch(...){
|
|
|
|
INFOS("Unknown exception was cought !!!");
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::OrientationElements(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
MESSAGE("OrientationElements - not implemeted yet!");
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::DiagonalInversion(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
MESSAGE("OrientationElements - not implemeted yet!");
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
//=====================================================================================
|
|
|
|
// EXPORTED METHODS
|
|
|
|
//=====================================================================================
|
|
|
|
void SMESHGUI::SupportedViewType(int *buffer, int bufferSize)
|
|
|
|
{
|
|
|
|
if (!buffer || !bufferSize)
|
|
|
|
return;
|
|
|
|
buffer[0] = (int)VIEW_VTK;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::Deactivate()
|
|
|
|
{
|
|
|
|
if ( SMESHGUI::GetSMESHGUI() ) {
|
|
|
|
SMESHGUI::GetSMESHGUI()->EmitSignalCloseAllDialogs();
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::SetPickable(SMESH_Actor* theActor){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetCurrentVtkView()){
|
|
|
|
int anIsAllPickable = (theActor == NULL);
|
|
|
|
vtkRenderer *aRenderer = aViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SALOME_Actor *anActor = dynamic_cast<SALOME_Actor*>(anAct)){
|
|
|
|
if(anActor->GetVisibility()){
|
|
|
|
anActor->SetPickable(anIsAllPickable);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(theActor)
|
|
|
|
theActor->SetPickable(!anIsAllPickable);
|
|
|
|
RepaintCurrentView();
|
|
|
|
}
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::ViewNodes(){
|
|
|
|
EraseSimulationActors();
|
|
|
|
::SetPointRepresentation(true);
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::Control( int theCommandID ){
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection( myActiveStudy->getSelection() );
|
|
|
|
if(Sel){
|
|
|
|
Handle(SALOME_InteractiveObject) anIO = Sel->firstIObject();
|
|
|
|
if(!anIO.IsNull()){
|
|
|
|
QString aTitle;
|
|
|
|
SMESH_Actor::eControl aControl = SMESH_Actor::eNone;
|
|
|
|
if(SMESH_Actor *anActor = ::FindActorByEntry(anIO->getEntry())){
|
|
|
|
switch ( theCommandID ){
|
|
|
|
case 6001:
|
|
|
|
aTitle = tr( "LENGTH_EDGES" );
|
|
|
|
aControl = SMESH_Actor::eLengthEdges;
|
|
|
|
break;
|
|
|
|
case 6003:
|
|
|
|
aTitle = tr( "FREE_BORDERS" );
|
|
|
|
aControl = SMESH_Actor::eFreeBorders;
|
|
|
|
break;
|
|
|
|
case 6004:
|
|
|
|
aTitle = tr( "MULTI_BORDERS" );
|
|
|
|
aControl = SMESH_Actor::eMultiConnection;
|
|
|
|
break;
|
|
|
|
case 6011:
|
|
|
|
aTitle = tr( "AREA_ELEMENTS" );
|
|
|
|
aControl = SMESH_Actor::eArea;
|
|
|
|
break;
|
|
|
|
case 6012:
|
|
|
|
aTitle = tr( "TAPER_ELEMENTS" );
|
|
|
|
aControl = SMESH_Actor::eTaper;
|
|
|
|
break;
|
|
|
|
case 6013:
|
|
|
|
aTitle = tr( "ASPECTRATIO_ELEMENTS" );
|
|
|
|
aControl = SMESH_Actor::eAspectRatio;
|
|
|
|
break;
|
|
|
|
case 6014:
|
|
|
|
aTitle = tr( "MINIMUMANGLE_ELEMENTS" );
|
|
|
|
aControl = SMESH_Actor::eMinimumAngle;
|
|
|
|
break;
|
|
|
|
case 6015:
|
|
|
|
aTitle = tr( "WARP_ELEMENTS" );
|
|
|
|
aControl = SMESH_Actor::eWarping;
|
|
|
|
break;
|
|
|
|
case 6016:
|
|
|
|
aTitle = tr( "SKEW_ELEMENTS" );
|
|
|
|
aControl = SMESH_Actor::eSkew;
|
|
|
|
break;
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2004-06-18 14:34:31 +06:00
|
|
|
anActor->SetControlMode(aControl);
|
|
|
|
anActor->GetScalarBarActor()->SetTitle(aTitle.latin1());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::SetSettingsScalarBar(vtkScalarBarActor * theScalarBar,
|
|
|
|
QString Bold,
|
|
|
|
QString Italic,
|
|
|
|
QString Shadow,
|
|
|
|
QString FontFamily,
|
|
|
|
QString Orientation,
|
|
|
|
float Width,
|
|
|
|
float Height,
|
|
|
|
int NbColors,
|
|
|
|
int NbLabels)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
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);
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::SetDisplaySettings()
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
EmitSignalDeactivateDialog();
|
|
|
|
SMESHGUI_Preferences_ColorDlg *aDlg =
|
|
|
|
new SMESHGUI_Preferences_ColorDlg(QAD_Application::getDesktop(), "");
|
|
|
|
|
|
|
|
QColor color;
|
|
|
|
QString SCr, SCg, SCb;
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsFillColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsFillColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsFillColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
color = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
else color = QColor(0, 170, 255);
|
|
|
|
aDlg->SetColor(1, color);
|
|
|
|
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsOutlineColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsOutlineColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsOutlineColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
color = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
else color = QColor(0, 170, 255);
|
|
|
|
aDlg->SetColor(2, color);
|
|
|
|
|
|
|
|
SCr = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorRed");
|
|
|
|
SCg = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorGreen");
|
|
|
|
SCb = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
color = QColor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
else color = Qt::red;
|
|
|
|
aDlg->SetColor(3, color);
|
|
|
|
|
|
|
|
QString SBr = QAD_CONFIG->getSetting("SMESH:SettingsBackFaceColorRed");
|
|
|
|
QString SBg = QAD_CONFIG->getSetting("SMESH:SettingsBackFaceColorGreen");
|
|
|
|
QString SBb = QAD_CONFIG->getSetting("SMESH:SettingsBackFaceColorBlue");
|
|
|
|
if (!SCr.isEmpty() && !SCg.isEmpty() && !SCb.isEmpty())
|
|
|
|
color = QColor(SBr.toInt(), SBg.toInt(), SBb.toInt());
|
|
|
|
else color = Qt::blue;
|
|
|
|
aDlg->SetColor(4, color);
|
|
|
|
|
|
|
|
QString intValue = QAD_CONFIG->getSetting("SMESH:SettingsWidth");
|
|
|
|
if (intValue.isEmpty()) intValue = "1";
|
|
|
|
aDlg->SetIntValue(1, intValue.toInt());
|
|
|
|
intValue = QAD_CONFIG->getSetting("SMESH:SettingsNodesSize");
|
|
|
|
if (intValue.isEmpty()) intValue = "3";
|
|
|
|
aDlg->SetIntValue(2, intValue.toInt());
|
|
|
|
intValue = QAD_CONFIG->getSetting("SMESH:SettingsShrinkCoeff");
|
|
|
|
if (intValue.isEmpty()) intValue = "75";
|
|
|
|
aDlg->SetIntValue(3, intValue.toInt());
|
|
|
|
|
|
|
|
if (aDlg->exec()) {
|
|
|
|
QColor colorFill = aDlg->GetColor(1);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsFillColorRed", colorFill.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsFillColorGreen", colorFill.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsFillColorBlue", colorFill.blue());
|
|
|
|
|
|
|
|
QColor colorOutline = aDlg->GetColor(2);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsOutlineColorRed", colorOutline.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsOutlineColorGreen", colorOutline.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsOutlineColorBlue", colorOutline.blue());
|
|
|
|
|
|
|
|
QColor colorNode = aDlg->GetColor(3);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsNodeColorRed", colorNode.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsNodeColorGreen", colorNode.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsNodeColorBlue", colorNode.blue());
|
|
|
|
|
|
|
|
QColor colorBackFace = aDlg->GetColor(4);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsBackFaceColorRed", colorBackFace.red());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsBackFaceColorGreen", colorBackFace.green());
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsBackFaceColorBlue", colorBackFace.blue());
|
|
|
|
|
|
|
|
int width = aDlg->GetIntValue(1);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsWidth", width);
|
|
|
|
|
|
|
|
int nodes_size = aDlg->GetIntValue(2);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsNodesSize", nodes_size);
|
|
|
|
|
|
|
|
int shrink_coeff = aDlg->GetIntValue(3);
|
|
|
|
QAD_CONFIG->addSetting("SMESH:SettingsShrinkCoeff", shrink_coeff);
|
|
|
|
}
|
|
|
|
|
|
|
|
delete aDlg;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=======================================================================
|
|
|
|
// function : Parameter()
|
|
|
|
// purpose : return a parameter (double) from a dialog box
|
|
|
|
//
|
|
|
|
// aValue : is a double used as a default value displayed
|
|
|
|
// aLabel : is the title for aValue1
|
|
|
|
// aTitle : is the main title
|
|
|
|
// bottom : maximum value to be entered
|
2003-12-10 21:05:04 +05:00
|
|
|
// top : minimum value to be entered
|
2003-05-19 20:07:00 +06:00
|
|
|
// decimals : number of decimals
|
|
|
|
//=======================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
double SMESHGUI::Parameter(Standard_Boolean & res,
|
|
|
|
const double aValue,
|
|
|
|
const char *aLabel,
|
|
|
|
const char *aTitle,
|
|
|
|
const double bottom, const double top, const int decimals)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
SMESHGUI_aParameterDlg *Dialog =
|
|
|
|
new SMESHGUI_aParameterDlg(QAD_Application::getDesktop(),
|
|
|
|
aTitle,
|
|
|
|
aLabel,
|
|
|
|
bottom, top, decimals,
|
|
|
|
TRUE);
|
|
|
|
Dialog->setValue(aValue);
|
|
|
|
double X = 0.0;
|
|
|
|
res = (Dialog->exec() == QDialog::Accepted);
|
|
|
|
if (res)
|
|
|
|
X = Dialog->getDblValue();
|
|
|
|
return X;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=======================================================================
|
|
|
|
// function : Parameter()
|
|
|
|
// purpose : return a parameter (int) from a dialog box
|
|
|
|
//
|
|
|
|
// aValue : is a int used as a default value displayed
|
|
|
|
// aLabel : is the title for aValue1
|
|
|
|
// aTitle : is the main title
|
|
|
|
// bottom : maximum value to be entered
|
2003-12-10 21:05:04 +05:00
|
|
|
// top : minimum value to be entered
|
2003-05-19 20:07:00 +06:00
|
|
|
//=======================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
int SMESHGUI::Parameter(Standard_Boolean & res,
|
|
|
|
const int aValue,
|
|
|
|
const char *aLabel, const char *aTitle, const int bottom, const int top)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
SMESHGUI_aParameterDlg *Dialog =
|
|
|
|
new SMESHGUI_aParameterDlg(QAD_Application::getDesktop(),
|
|
|
|
aTitle,
|
|
|
|
aLabel,
|
|
|
|
bottom, top,
|
|
|
|
TRUE);
|
|
|
|
Dialog->setValue(aValue);
|
|
|
|
int X = 0;
|
|
|
|
res = (Dialog->exec() == QDialog::Accepted);
|
|
|
|
if (res)
|
|
|
|
X = Dialog->getIntValue();
|
|
|
|
return X;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::DisplayEdges(SMESH_Actor * ac, bool visibility){}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::InitActor(SMESH::SMESH_Mesh_ptr aMesh){}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::Update(){
|
|
|
|
if(VTKViewer_ViewFrame* aViewFrame = GetCurrentVtkView()){
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
|
|
|
if(Sel->IObjectCount() == 0){
|
|
|
|
vtkRenderer* aRenderer = aViewFrame->getRenderer();
|
|
|
|
vtkActorCollection *aCollection = aRenderer->GetActors();
|
|
|
|
aCollection->InitTraversal();
|
|
|
|
while(vtkActor *anAct = aCollection->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = dynamic_cast<SMESH_Actor*>(anAct)){
|
|
|
|
if(anActor->hasIO()){
|
|
|
|
Update(anActor->getIO());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
|
|
|
|
for(; It.More(); It.Next()){
|
|
|
|
Handle(SALOME_InteractiveObject) IO = It.Value();
|
|
|
|
Update(IO);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
::RepaintCurrentView();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::Update(const Handle(SALOME_InteractiveObject) & theIO){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
TVisualObjPtr aVisualObj = ::GetVisualObj(anId,theIO->getEntry());
|
|
|
|
aVisualObj->Update();
|
|
|
|
::UpdateView(eDisplay,theIO->getEntry());
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkActor *SMESHGUI::SimulationMoveNode(SMESH_Actor * Mactor, int idnode)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(Mactor->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkIdList *IdCells = vtkIdList::New();
|
|
|
|
ugrid->GetPointCells(idnode, IdCells);
|
|
|
|
|
|
|
|
vtkPoints *Pts = vtkPoints::New();
|
|
|
|
Pts = ugrid->GetPoints();
|
|
|
|
|
|
|
|
vtkUnstructuredGrid *ugridSimulation = vtkUnstructuredGrid::New();
|
|
|
|
ugridSimulation->SetPoints(Pts);
|
|
|
|
vtkIdList *IdPts = vtkIdList::New();
|
|
|
|
for (int j = 0; j < IdCells->GetNumberOfIds(); j++)
|
|
|
|
{
|
|
|
|
ugrid->GetCellPoints(IdCells->GetId(j), IdPts);
|
|
|
|
ugridSimulation->InsertNextCell(ugrid->GetCellType(IdCells->GetId(j)),
|
|
|
|
IdPts);
|
|
|
|
}
|
|
|
|
|
|
|
|
vtkProperty *prop = vtkProperty::New();
|
|
|
|
prop->SetColor(1., 0., 0.);
|
|
|
|
prop->SetRepresentationToWireframe();
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
int Edgewidth = (int)Mactor->GetLineWidth();
|
2003-12-10 21:05:04 +05:00
|
|
|
if (Edgewidth == 0)
|
|
|
|
Edgewidth = 1;
|
|
|
|
prop->SetLineWidth(Edgewidth + 1);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
|
|
|
|
Mapper->SetInput(ugridSimulation);
|
|
|
|
vtkActor *ac = vtkActor::New();
|
|
|
|
ac->SetMapper(Mapper);
|
|
|
|
ac->SetProperty(prop);
|
|
|
|
|
|
|
|
ac->GetMapper()->SetResolveCoincidentTopologyToShiftZBuffer();
|
|
|
|
ac->GetMapper()->SetResolveCoincidentTopologyZShift(0.02);
|
|
|
|
|
|
|
|
mySimulationActors->AddItem(ac);
|
|
|
|
theRenderer->AddActor(ac);
|
|
|
|
|
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
|
|
|
|
|
|
|
return ac;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationNode(SMESH::SMESH_Mesh_ptr aMesh, float x,
|
|
|
|
float y, float z)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
Standard_Boolean result;
|
|
|
|
SMESH_Actor *ac = FindActor(aMesh, result, true);
|
|
|
|
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(ac->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkUnstructuredGrid *newugrid = vtkUnstructuredGrid::New();
|
|
|
|
|
|
|
|
vtkPoints *Pts = ugrid->GetPoints();
|
|
|
|
vtkPoints *newPts = vtkPoints::New();
|
|
|
|
int nbPts = Pts->GetNumberOfPoints();
|
|
|
|
for (int i = 0; i < nbPts; i++)
|
|
|
|
{
|
|
|
|
newPts->InsertPoint(i, Pts->GetPoint(i));
|
|
|
|
}
|
|
|
|
|
|
|
|
newugrid->SetPoints(newPts);
|
|
|
|
newugrid->GetPoints()->InsertNextPoint(x, y, z);
|
|
|
|
|
|
|
|
vtkMaskPoints *verts = vtkMaskPoints::New();
|
|
|
|
verts->SetInput(newugrid);
|
|
|
|
verts->SetGenerateVertices(1);
|
|
|
|
verts->SetOnRatio(1);
|
|
|
|
|
|
|
|
vtkPolyDataMapper *vertMapper = vtkPolyDataMapper::New();
|
|
|
|
vertMapper->SetInput(verts->GetOutput());
|
|
|
|
vertMapper->ScalarVisibilityOff();
|
|
|
|
|
|
|
|
vtkActor *node = vtkActor::New();
|
|
|
|
node->SetMapper(vertMapper);
|
|
|
|
|
|
|
|
QString SCr = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorRed");
|
|
|
|
QString SCg = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorGreen");
|
|
|
|
QString SCb = QAD_CONFIG->getSetting("SMESH:SettingsNodeColorBlue");
|
|
|
|
QColor nodecolor(SCr.toInt(), SCg.toInt(), SCb.toInt());
|
|
|
|
if (!nodecolor.isValid())
|
2003-12-08 20:43:20 +05:00
|
|
|
// nodecolor = QColor(0.,1.,0.);
|
2003-12-10 21:05:04 +05:00
|
|
|
nodecolor = QColor(0, 1, 0);
|
|
|
|
|
|
|
|
node->GetProperty()->SetColor(float (nodecolor.red()) / 255.,
|
|
|
|
float (nodecolor.green()) / 255., float (nodecolor.blue()) / 255.);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
int intValue =
|
|
|
|
QAD_CONFIG->getSetting("SMESH:SettingsNodesSize").toInt();
|
|
|
|
if (intValue < 1)
|
|
|
|
intValue == 1;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
node->GetProperty()->SetPointSize(intValue);
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
node->VisibilityOn();
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
mySimulationActors->AddItem(node);
|
|
|
|
theRenderer->AddActor(node);
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationMoveNode(vtkActor * ac, int idnode, float x,
|
|
|
|
float y, float z)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
float *pt = ac->GetMapper()->GetInput()->GetPoint(idnode);
|
|
|
|
pt[0] = x;
|
|
|
|
pt[1] = y;
|
|
|
|
pt[2] = z;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
ac->GetMapper()->ImmediateModeRenderingOn();
|
|
|
|
ac->GetProperty()->SetRepresentationToWireframe();
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
renWin->Render();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::MoveNode(SMESH::SMESH_Mesh_ptr aMesh, int idnode, float x,
|
|
|
|
float y, float z)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
Standard_Boolean result;
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
SMESH_Actor *MeshActor = FindActor(aMesh, result, true);
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::ScalarVisibilityOff(){
|
|
|
|
if(vtkRenderer *aRenderer = ::GetCurrentRenderer()){
|
|
|
|
vtkActorCollection *actorList = aRenderer->GetActors();
|
|
|
|
actorList->InitTraversal();
|
|
|
|
while(vtkActor *ac = actorList->GetNextActor()){
|
|
|
|
if(SMESH_Actor *anActor = SMESH_Actor::SafeDownCast(ac)){
|
|
|
|
anActor->GetMapper()->ScalarVisibilityOff();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
::RepaintCurrentView();
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationEdge(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
Standard_Boolean result;
|
|
|
|
SMESH_Actor *ac = FindActor(aMesh, result, true);
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
int idNodes[2];
|
|
|
|
int pts[2];
|
|
|
|
int i = 0;
|
|
|
|
vtkIdList *Ids = vtkIdList::New();
|
|
|
|
for (; ite.More(); ite.Next())
|
|
|
|
{
|
|
|
|
idNodes[i] = ite.Key();
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
Ids->InsertId(0, idNodes[0]);
|
|
|
|
pts[0] = idNodes[0];
|
|
|
|
Ids->InsertId(1, idNodes[1]);
|
|
|
|
pts[1] = idNodes[1];
|
|
|
|
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(ac->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkUnstructuredGrid *newugrid = vtkUnstructuredGrid::New();
|
|
|
|
newugrid->SetPoints(ugrid->GetPoints());
|
|
|
|
newugrid->InsertNextCell(VTK_LINE, 2, pts);
|
|
|
|
|
|
|
|
vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
|
|
|
|
Mapper->SetInput(newugrid);
|
|
|
|
Mapper->Update();
|
|
|
|
|
|
|
|
vtkActor *edge = vtkActor::New();
|
|
|
|
edge->SetMapper(Mapper);
|
|
|
|
edge->SetProperty(ac->GetProperty());
|
|
|
|
edge->SetBackfaceProperty(ac->GetBackfaceProperty());
|
|
|
|
edge->VisibilityOn();
|
|
|
|
mySimulationActors->AddItem(edge);
|
|
|
|
theRenderer->AddActor(edge);
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationTriangle(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex, bool reverse)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
Standard_Boolean result;
|
|
|
|
SMESH_Actor *ac = FindActor(aMesh, result, true);
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
int idNodes[3];
|
|
|
|
int pts[3];
|
|
|
|
int i = 0;
|
|
|
|
vtkIdList *Ids = vtkIdList::New();
|
|
|
|
for (; ite.More(); ite.Next())
|
|
|
|
{
|
|
|
|
idNodes[i] = ite.Key();
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (reverse)
|
|
|
|
{
|
|
|
|
Ids->InsertId(0, idNodes[2]);
|
|
|
|
pts[0] = idNodes[2];
|
|
|
|
Ids->InsertId(1, idNodes[1]);
|
|
|
|
pts[1] = idNodes[1];
|
|
|
|
Ids->InsertId(2, idNodes[0]);
|
|
|
|
pts[2] = idNodes[0];
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Ids->InsertId(0, idNodes[0]);
|
|
|
|
pts[0] = idNodes[0];
|
|
|
|
Ids->InsertId(1, idNodes[1]);
|
|
|
|
pts[1] = idNodes[1];
|
|
|
|
Ids->InsertId(2, idNodes[2]);
|
|
|
|
pts[2] = idNodes[2];
|
|
|
|
}
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(ac->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkUnstructuredGrid *newugrid = vtkUnstructuredGrid::New();
|
|
|
|
newugrid->SetPoints(ugrid->GetPoints());
|
|
|
|
newugrid->InsertNextCell(VTK_TRIANGLE, 3, pts);
|
|
|
|
|
|
|
|
vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
|
|
|
|
Mapper->SetInput(newugrid);
|
|
|
|
Mapper->Update();
|
|
|
|
|
|
|
|
vtkActor *tri = vtkActor::New();
|
|
|
|
tri->SetMapper(Mapper);
|
|
|
|
tri->SetProperty(ac->GetProperty());
|
|
|
|
tri->SetBackfaceProperty(ac->GetBackfaceProperty());
|
|
|
|
tri->VisibilityOn();
|
|
|
|
mySimulationActors->AddItem(tri);
|
|
|
|
theRenderer->AddActor(tri);
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationQuadrangle(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex, bool reverse)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
Standard_Boolean result;
|
|
|
|
SMESH_Actor *ac = FindActor(aMesh, result, true);
|
|
|
|
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(ac->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
int i = 0;
|
|
|
|
int idNodes[4];
|
|
|
|
vtkIdList *Ids = vtkIdList::New();
|
|
|
|
for (; ite.More(); ite.Next())
|
|
|
|
{
|
|
|
|
idNodes[i] = ite.Key();
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
float *p0 = ugrid->GetPoint(idNodes[0]);
|
|
|
|
float *p1 = ugrid->GetPoint(idNodes[1]);
|
|
|
|
float *p2 = ugrid->GetPoint(idNodes[2]);
|
|
|
|
float *p3 = ugrid->GetPoint(idNodes[3]);
|
|
|
|
|
|
|
|
gp_Pnt P0(p0[0], p0[1], p0[2]);
|
|
|
|
|
|
|
|
gp_Vec V1(P0, gp_Pnt(p1[0], p1[1], p1[2]));
|
|
|
|
gp_Vec V2(P0, gp_Pnt(p2[0], p2[1], p2[2]));
|
|
|
|
gp_Vec V3(P0, gp_Pnt(p3[0], p3[1], p3[2]));
|
|
|
|
|
|
|
|
gp_Vec Cross1 = V1 ^ V2;
|
|
|
|
gp_Vec Cross2 = V2 ^ V3;
|
|
|
|
|
|
|
|
int tmp;
|
|
|
|
if (Cross1.Dot(Cross2) < 0)
|
|
|
|
{
|
|
|
|
V1 = gp_Vec(P0, gp_Pnt(p2[0], p2[1], p2[2]));
|
|
|
|
V2 = gp_Vec(P0, gp_Pnt(p1[0], p1[1], p1[2]));
|
|
|
|
Cross1 = V1 ^ V2;
|
|
|
|
Cross2 = V2 ^ V3;
|
|
|
|
|
|
|
|
if (Cross1.Dot(Cross2) < 0)
|
|
|
|
{
|
|
|
|
tmp = idNodes[2];
|
|
|
|
idNodes[2] = idNodes[3];
|
|
|
|
idNodes[3] = tmp;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
tmp = idNodes[1];
|
|
|
|
idNodes[1] = idNodes[2];
|
|
|
|
idNodes[2] = tmp;
|
|
|
|
}
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
if (reverse)
|
|
|
|
{
|
|
|
|
Ids->InsertId(0, idNodes[3]);
|
|
|
|
Ids->InsertId(1, idNodes[2]);
|
|
|
|
Ids->InsertId(2, idNodes[1]);
|
|
|
|
Ids->InsertId(3, idNodes[0]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
Ids->InsertId(0, idNodes[0]);
|
|
|
|
Ids->InsertId(1, idNodes[1]);
|
|
|
|
Ids->InsertId(2, idNodes[2]);
|
|
|
|
Ids->InsertId(3, idNodes[3]);
|
|
|
|
}
|
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
// vtkUnstructuredGrid* ugrid = vtkUnstructuredGrid::SafeDownCast( ac->GetUnstructuredGrid() );
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkUnstructuredGrid *newugrid = vtkUnstructuredGrid::New();
|
|
|
|
newugrid->SetPoints(ugrid->GetPoints());
|
|
|
|
newugrid->InsertNextCell(VTK_QUAD, Ids);
|
|
|
|
|
|
|
|
vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
|
|
|
|
Mapper->SetInput(newugrid);
|
|
|
|
Mapper->Update();
|
|
|
|
|
|
|
|
vtkActor *quad = vtkActor::New();
|
|
|
|
quad->SetMapper(Mapper);
|
|
|
|
quad->SetProperty(ac->GetProperty());
|
|
|
|
quad->SetBackfaceProperty(ac->GetBackfaceProperty());
|
|
|
|
quad->VisibilityOn();
|
|
|
|
mySimulationActors->AddItem(quad);
|
|
|
|
theRenderer->AddActor(quad);
|
|
|
|
}
|
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationTetra(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
Standard_Boolean result;
|
|
|
|
SMESH_Actor *ac = FindActor(aMesh, result, true);
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
int i = 0;
|
|
|
|
int idNodes[4];
|
|
|
|
vtkIdList *Ids = vtkIdList::New();
|
|
|
|
for (; ite.More(); ite.Next())
|
|
|
|
{
|
|
|
|
idNodes[i] = ite.Key();
|
|
|
|
i++;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
Ids->InsertId(0, idNodes[0]);
|
|
|
|
Ids->InsertId(1, idNodes[1]);
|
|
|
|
Ids->InsertId(2, idNodes[2]);
|
|
|
|
Ids->InsertId(3, idNodes[3]);
|
|
|
|
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(ac->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkUnstructuredGrid *newugrid = vtkUnstructuredGrid::New();
|
|
|
|
newugrid->SetPoints(ugrid->GetPoints());
|
|
|
|
newugrid->InsertNextCell(VTK_TETRA, Ids);
|
|
|
|
|
|
|
|
vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
|
|
|
|
Mapper->SetInput(newugrid);
|
|
|
|
Mapper->Update();
|
|
|
|
|
|
|
|
vtkActor *tetra = vtkActor::New();
|
|
|
|
tetra->SetMapper(Mapper);
|
|
|
|
tetra->SetProperty(ac->GetProperty());
|
|
|
|
tetra->SetBackfaceProperty(ac->GetBackfaceProperty());
|
|
|
|
tetra->VisibilityOn();
|
|
|
|
mySimulationActors->AddItem(tetra);
|
|
|
|
theRenderer->AddActor(tetra);
|
|
|
|
}
|
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplaySimulationHexa(SMESH::SMESH_Mesh_ptr aMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors = vtkActorCollection::New();
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
Standard_Boolean result;
|
|
|
|
SMESH_Actor *ac = FindActor(aMesh, result, true);
|
|
|
|
if (result)
|
|
|
|
{
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
int i = 0;
|
|
|
|
int idNodes[8];
|
|
|
|
vtkIdList *Ids = vtkIdList::New();
|
|
|
|
for (; ite.More(); ite.Next())
|
|
|
|
{
|
|
|
|
idNodes[i] = ite.Key();
|
|
|
|
i++;
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
2003-12-10 21:05:04 +05:00
|
|
|
Ids->InsertId(0, idNodes[0]);
|
|
|
|
Ids->InsertId(1, idNodes[1]);
|
|
|
|
Ids->InsertId(2, idNodes[2]);
|
|
|
|
Ids->InsertId(3, idNodes[3]);
|
|
|
|
Ids->InsertId(4, idNodes[4]);
|
|
|
|
Ids->InsertId(5, idNodes[5]);
|
|
|
|
Ids->InsertId(6, idNodes[6]);
|
|
|
|
Ids->InsertId(7, idNodes[7]);
|
|
|
|
|
|
|
|
vtkUnstructuredGrid *ugrid =
|
2004-06-18 14:34:31 +06:00
|
|
|
vtkUnstructuredGrid::SafeDownCast(ac->GetUnstructuredGrid());
|
2003-12-10 21:05:04 +05:00
|
|
|
vtkUnstructuredGrid *newugrid = vtkUnstructuredGrid::New();
|
|
|
|
newugrid->SetPoints(ugrid->GetPoints());
|
|
|
|
newugrid->InsertNextCell(VTK_HEXAHEDRON, Ids);
|
|
|
|
|
|
|
|
vtkDataSetMapper *Mapper = vtkDataSetMapper::New();
|
|
|
|
Mapper->SetInput(newugrid);
|
|
|
|
Mapper->Update();
|
|
|
|
|
|
|
|
vtkActor *hexa = vtkActor::New();
|
|
|
|
hexa->SetMapper(Mapper);
|
|
|
|
hexa->SetProperty(ac->GetProperty());
|
|
|
|
hexa->SetBackfaceProperty(ac->GetBackfaceProperty());
|
|
|
|
hexa->VisibilityOn();
|
|
|
|
mySimulationActors->AddItem(hexa);
|
|
|
|
theRenderer->AddActor(hexa);
|
|
|
|
}
|
|
|
|
vtkRenderWindow *renWin = theRenderer->GetRenderWindow();
|
|
|
|
renWin->Render();
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::AddFace(SMESH::SMESH_Mesh_ptr theMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex,
|
|
|
|
bool reverse)
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
try{
|
|
|
|
SALOMEDS::SObject_var aSobj = myStudyAPI.FindObject(theMesh);
|
|
|
|
CORBA::String_var anEntry = aSobj->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(anEntry.in())){
|
|
|
|
SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
|
|
|
|
anArrayOfIdeces->length(MapIndex.Extent());
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(int i = 0; ite.More(); ite.Next(), i++){
|
|
|
|
anArrayOfIdeces[i] = anActor->GetNodeObjId(ite.Key());
|
|
|
|
}
|
|
|
|
int tmp;
|
|
|
|
if(MapIndex.Extent() == 4){
|
|
|
|
int idNodes[4];
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite1(MapIndex);
|
|
|
|
for(int i = 0; ite1.More(); ite1.Next(), i++){
|
|
|
|
idNodes[i] = ite1.Key();
|
|
|
|
}
|
|
|
|
vtkUnstructuredGrid *ugrid = anActor->GetUnstructuredGrid();
|
|
|
|
float *p0 = ugrid->GetPoint(idNodes[0]);
|
|
|
|
float *p1 = ugrid->GetPoint(idNodes[1]);
|
|
|
|
float *p2 = ugrid->GetPoint(idNodes[2]);
|
|
|
|
float *p3 = ugrid->GetPoint(idNodes[3]);
|
|
|
|
|
|
|
|
gp_Pnt P0(p0[0], p0[1], p0[2]);
|
|
|
|
|
|
|
|
gp_Vec V1(P0, gp_Pnt(p1[0], p1[1], p1[2]));
|
|
|
|
gp_Vec V2(P0, gp_Pnt(p2[0], p2[1], p2[2]));
|
|
|
|
gp_Vec V3(P0, gp_Pnt(p3[0], p3[1], p3[2]));
|
|
|
|
|
|
|
|
gp_Vec Cross1 = V1 ^ V2;
|
|
|
|
gp_Vec Cross2 = V2 ^ V3;
|
|
|
|
|
|
|
|
if(Cross1.Dot(Cross2) < 0){
|
|
|
|
V1 = gp_Vec(P0, gp_Pnt(p2[0], p2[1], p2[2]));
|
|
|
|
V2 = gp_Vec(P0, gp_Pnt(p1[0], p1[1], p1[2]));
|
|
|
|
Cross1 = V1 ^ V2;
|
|
|
|
Cross2 = V2 ^ V3;
|
|
|
|
|
|
|
|
if(Cross1.Dot(Cross2) < 0){
|
|
|
|
tmp = anArrayOfIdeces[2];
|
|
|
|
anArrayOfIdeces[2] = anArrayOfIdeces[3];
|
|
|
|
anArrayOfIdeces[3] = tmp;
|
|
|
|
}else{
|
|
|
|
tmp = anArrayOfIdeces[1];
|
|
|
|
anArrayOfIdeces[1] = anArrayOfIdeces[2];
|
|
|
|
anArrayOfIdeces[2] = tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(reverse){
|
|
|
|
for(int i = 0; i < (MapIndex.Extent() / 2); i++){
|
|
|
|
tmp = anArrayOfIdeces[i];
|
|
|
|
anArrayOfIdeces[i] = anArrayOfIdeces[MapIndex.Extent() - i - 1];
|
|
|
|
anArrayOfIdeces[MapIndex.Extent() - i - 1] = tmp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
|
|
|
|
aMeshEditor->AddFace(anArrayOfIdeces);
|
|
|
|
if(myAutomaticUpdate){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,anEntry.in())){
|
|
|
|
aVisualObj->Update(true);
|
|
|
|
}
|
|
|
|
AddActorInSelection(anActor);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(SALOME::SALOME_Exception& exc) {
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.details.text);
|
|
|
|
}catch(const std::exception& exc){
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.what());
|
|
|
|
}catch(...){
|
|
|
|
INFOS("Unknown exception was cought !!!");
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::AddVolume(SMESH::SMESH_Mesh_ptr theMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
try{
|
|
|
|
SALOMEDS::SObject_var aSobj = myStudyAPI.FindObject(theMesh);
|
|
|
|
CORBA::String_var anEntry = aSobj->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(anEntry.in())){
|
|
|
|
SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
|
|
|
|
anArrayOfIdeces->length(MapIndex.Extent());
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(int i = 0; ite.More(); ite.Next(), i++){
|
|
|
|
anArrayOfIdeces[i] = anActor->GetNodeObjId(ite.Key());
|
|
|
|
}
|
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
|
|
|
|
aMeshEditor->AddVolume(anArrayOfIdeces);
|
|
|
|
if(myAutomaticUpdate){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,anEntry.in())){
|
|
|
|
aVisualObj->Update(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(SALOME::SALOME_Exception& exc) {
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.details.text);
|
|
|
|
}catch(const std::exception& exc){
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.what());
|
|
|
|
}catch(...){
|
|
|
|
INFOS("Unknown exception was cought !!!");
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::AddEdge(SMESH::SMESH_Mesh_ptr theMesh,
|
|
|
|
const TColStd_MapOfInteger & MapIndex)
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
try{
|
|
|
|
SALOMEDS::SObject_var aSobj = myStudyAPI.FindObject(theMesh);
|
|
|
|
CORBA::String_var anEntry = aSobj->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(anEntry.in())){
|
|
|
|
SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
|
|
|
|
anArrayOfIdeces->length(MapIndex.Extent());
|
|
|
|
TColStd_MapIteratorOfMapOfInteger ite(MapIndex);
|
|
|
|
for(int i = 0; ite.More(); ite.Next(), i++){
|
|
|
|
anArrayOfIdeces[i] = anActor->GetNodeObjId(ite.Key());
|
|
|
|
}
|
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
|
|
|
|
aMeshEditor->AddEdge(anArrayOfIdeces);
|
|
|
|
if(myAutomaticUpdate){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,anEntry.in())){
|
|
|
|
aVisualObj->Update(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(SALOME::SALOME_Exception& exc) {
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.details.text);
|
|
|
|
}catch(const std::exception& exc){
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.what());
|
|
|
|
}catch(...){
|
|
|
|
INFOS("Unknown exception was cought !!!");
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2004-06-18 14:34:31 +06:00
|
|
|
void SMESHGUI::AddNode(SMESH::SMESH_Mesh_ptr theMesh,
|
|
|
|
float x, float y, float z)
|
2003-12-10 21:05:04 +05:00
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
QAD_WaitCursor wc;
|
|
|
|
try{
|
|
|
|
SALOMEDS::SObject_var aSobj = myStudyAPI.FindObject(theMesh);
|
|
|
|
CORBA::String_var anEntry = aSobj->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(anEntry.in())){
|
|
|
|
SMESH::SMESH_MeshEditor_var aMeshEditor = theMesh->GetMeshEditor();
|
|
|
|
aMeshEditor->AddNode(x, y, z);
|
|
|
|
if(myAutomaticUpdate){
|
|
|
|
CORBA::Long anId = smeshGUI->myStudy->StudyId();
|
|
|
|
if(TVisualObjPtr aVisualObj = GetVisualObj(anId,anEntry.in())){
|
|
|
|
aVisualObj->Update(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}catch(SALOME::SALOME_Exception& exc) {
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.details.text);
|
|
|
|
}catch(const std::exception& exc){
|
|
|
|
INFOS("Follow exception was cought:\n\t"<<exc.what());
|
|
|
|
}catch(...){
|
|
|
|
INFOS("Unknown exception was cought !!!");
|
|
|
|
}
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
//=============================================================================
|
|
|
|
/*!
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
//=============================================================================
|
2003-12-10 21:05:04 +05:00
|
|
|
void SMESHGUI::DisplayEdgesConnectivityLegendBox(vtkActor * ac)
|
2003-05-19 20:07:00 +06:00
|
|
|
{
|
2003-12-10 21:05:04 +05:00
|
|
|
if (myActiveStudy->getActiveStudyFrame()->getTypeView() != VIEW_VTK)
|
|
|
|
return;
|
|
|
|
|
|
|
|
EraseSimulationActors();
|
|
|
|
mySimulationActors2D = vtkActor2DCollection::New();
|
|
|
|
|
|
|
|
vtkRenderer *theRenderer =
|
|
|
|
((VTKViewer_ViewFrame *) myActiveStudy->getActiveStudyFrame()->
|
|
|
|
getRightFrame()->getViewFrame())->getRenderer();
|
|
|
|
|
|
|
|
vtkGlyphSource2D *gs2 = vtkGlyphSource2D::New();
|
|
|
|
gs2->SetGlyphTypeToTriangle();
|
|
|
|
gs2->FilledOff();
|
|
|
|
|
|
|
|
vtkLegendBoxActor *legend = vtkLegendBoxActor::New();
|
|
|
|
legend->GetPositionCoordinate()->SetValue(0.025, 0.025, 0.);
|
|
|
|
legend->GetPosition2Coordinate()->SetValue(0.3, 0.3, 0.); //relative to Position
|
|
|
|
|
|
|
|
legend->SetNumberOfEntries(4);
|
|
|
|
legend->SetEntryString(0, tr("SMESH_BOUNDARYEDGES"));
|
|
|
|
legend->SetEntrySymbol(0, gs2->GetOutput());
|
|
|
|
legend->SetEntryColor(0, ac->GetMapper()->GetLookupTable()->GetColor(0.));
|
|
|
|
legend->SetEntryString(1, tr("SMESH_MANIFOLDEDGES"));
|
|
|
|
legend->SetEntrySymbol(1, gs2->GetOutput());
|
|
|
|
legend->SetEntryColor(1,
|
|
|
|
ac->GetMapper()->GetLookupTable()->GetColor(0.666667));
|
|
|
|
legend->SetEntryString(2, tr("SMESH_NONMANIFOLDEDGES"));
|
|
|
|
legend->SetEntrySymbol(2, gs2->GetOutput());
|
|
|
|
legend->SetEntryColor(2,
|
|
|
|
ac->GetMapper()->GetLookupTable()->GetColor(0.222222));
|
|
|
|
legend->SetEntryString(3, tr("SMESH_FEATUREEDGES"));
|
|
|
|
legend->SetEntrySymbol(3, gs2->GetOutput());
|
|
|
|
legend->SetEntryColor(3,
|
|
|
|
ac->GetMapper()->GetLookupTable()->GetColor(0.444444));
|
|
|
|
legend->SetPadding(5);
|
|
|
|
// legend->GetProperty()->SetColor();
|
|
|
|
|
|
|
|
mySimulationActors2D->AddItem(legend);
|
|
|
|
theRenderer->AddActor2D(legend);
|
|
|
|
|
|
|
|
// Update the view
|
|
|
|
myActiveStudy->getActiveStudyFrame()->getRightFrame()->getViewFrame()->
|
|
|
|
Repaint();
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|
|
|
|
|
|
|
|
//===============================================================================
|
|
|
|
// function : OnEditDelete()
|
|
|
|
// purpose :
|
|
|
|
//===============================================================================
|
|
|
|
void SMESHGUI::OnEditDelete()
|
|
|
|
{
|
2004-06-18 14:34:31 +06:00
|
|
|
if (QAD_MessageBox::warn2
|
|
|
|
(QAD_Application::getDesktop(),
|
|
|
|
tr("SMESH_WRN_WARNING"),
|
|
|
|
tr("SMESH_REALLY_DELETE"),
|
|
|
|
tr("SMESH_BUT_YES"), tr("SMESH_BUT_NO"), 1, 0, 0) != 1)
|
|
|
|
return;
|
|
|
|
|
|
|
|
int nbSf = myActiveStudy->getStudyFramesCount();
|
|
|
|
|
|
|
|
Standard_Boolean found;
|
|
|
|
SALOMEDS::Study_var aStudy = myActiveStudy->getStudyDocument();
|
|
|
|
SALOMEDS::StudyBuilder_var aStudyBuilder = myStudy->NewBuilder();
|
|
|
|
SALOMEDS::GenericAttribute_var anAttr;
|
|
|
|
SALOMEDS::AttributeIOR_var anIOR;
|
|
|
|
|
|
|
|
SALOME_Selection *Sel = SALOME_Selection::Selection(myActiveStudy->getSelection());
|
|
|
|
SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
|
|
|
|
for(; It.More(); It.Next()){
|
|
|
|
Handle(SALOME_InteractiveObject) IObject = It.Value();
|
|
|
|
if(IObject->hasEntry()){
|
|
|
|
SALOMEDS::SObject_var SO = myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
|
|
|
|
/* Erase child graphical objects */
|
|
|
|
SALOMEDS::ChildIterator_var it = aStudy->NewChildIterator(SO);
|
|
|
|
for(; it->More(); it->Next()){
|
|
|
|
SALOMEDS::SObject_var CSO = it->Value();
|
|
|
|
if(CSO->FindAttribute(anAttr, "AttributeIOR")){
|
|
|
|
anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
|
|
|
|
|
|
|
|
for(int i = 0; i < nbSf; i++){
|
|
|
|
QAD_StudyFrame *sf = myActiveStudy->getStudyFrame(i);
|
|
|
|
CORBA::String_var anEntry = CSO->GetID();
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(sf,anEntry.in())){
|
|
|
|
RemoveActor(sf,anActor);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Erase main graphical object */
|
|
|
|
for(int i = 0; i < nbSf; i++){
|
|
|
|
QAD_StudyFrame *sf = myActiveStudy->getStudyFrame(i);
|
|
|
|
if(SMESH_Actor* anActor = ::FindActorByEntry(sf,IObject->getEntry())){
|
|
|
|
RemoveActor(sf,anActor);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Remove object(s) from data structures
|
|
|
|
SALOMEDS::SObject_var obj = myStudy->FindObjectID(IObject->getEntry());
|
|
|
|
if(!obj->_is_nil()){
|
|
|
|
SMESH::SMESH_Group_var aGroup = SMESH::SMESH_Group ::_narrow(obj->GetObject());
|
|
|
|
SMESH::SMESH_subMesh_var aSubMesh = SMESH::SMESH_subMesh::_narrow(obj->GetObject());
|
|
|
|
|
|
|
|
if ( !aGroup->_is_nil() ) { // DELETE GROUP
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = aGroup->GetMesh();
|
|
|
|
aMesh->RemoveGroup( aGroup );
|
|
|
|
}
|
|
|
|
else if ( !aSubMesh->_is_nil() ) { // DELETE SUBMESH
|
|
|
|
SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
|
|
|
|
aMesh->RemoveSubMesh( aSubMesh );
|
|
|
|
}
|
|
|
|
else {// default action: remove SObject from the study
|
|
|
|
// san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
|
|
|
|
//QAD_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);
|
|
|
|
//op->start();
|
|
|
|
aStudyBuilder->RemoveObjectWithChildren( obj );
|
|
|
|
//op->finish();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
} /* IObject->hasEntry() */
|
|
|
|
} /* more/next */
|
|
|
|
|
|
|
|
/* Clear any previous selection */
|
|
|
|
Sel->ClearIObjects();
|
|
|
|
myActiveStudy->updateObjBrowser();
|
|
|
|
}
|
2003-12-10 21:05:04 +05:00
|
|
|
|
2004-06-18 14:34:31 +06:00
|
|
|
//=======================================================================
|
|
|
|
// name : SMESHGUI::GetFilterMgr
|
|
|
|
// Purpose : Get filter manager
|
|
|
|
//=======================================================================
|
|
|
|
SMESH::FilterManager_ptr SMESHGUI::GetFilterMgr()
|
|
|
|
{
|
|
|
|
return myFilterMgr;
|
2003-05-19 20:07:00 +06:00
|
|
|
}
|