// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // // File : SMESHGUI_ReorientFacesDlg.cxx // Author : Edward AGAPOV, Open CASCADE S.A.S. // SMESH includes // #include "SMESHGUI_ReorientFacesDlg.h" #include "SMESHGUI.h" #include "SMESHGUI_IdValidator.h" #include "SMESHGUI_MeshUtils.h" #include "SMESHGUI_VTKUtils.h" #include "SMESHGUI_SpinBox.h" #include "SMESHGUI_MeshEditPreview.h" #include #include #include #include #include #include // SALOME GEOM includes #include // SALOME GUI includes #include #include #include #include #include #include #include #include #include #include #include // SALOME KERNEL includes #include // OCCT includes #include #include #include #include #include // Qt includes #include #include #include #include #include #include #include #include #include #include // VTK includes #include // IDL includes #include #include CORBA_SERVER_HEADER(SMESH_Mesh) #include CORBA_SERVER_HEADER(SMESH_MeshEditor) // std #include #define SPACING 6 #define MARGIN 11 enum { CONSTRUCTOR_POINT=0, CONSTRUCTOR_FACE, EObject, EPoint, EFace, EDirection }; //======================================================================= /*! * \brief Dialog to reorient faces acoording to vector */ //======================================================================= SMESHGUI_ReorientFacesDlg::SMESHGUI_ReorientFacesDlg() : SMESHGUI_Dialog( 0, false, true ) { setWindowTitle(tr("CAPTION")); QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame()); aDlgLay->setMargin(0); aDlgLay->setSpacing(SPACING); QWidget* aMainFrame = createMainFrame (mainFrame()); aDlgLay->addWidget(aMainFrame); aDlgLay->setStretchFactor(aMainFrame, 1); } //================================================================================ /*! * \brief Create frame containing dialog's input fields */ //================================================================================ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent) { QWidget* aFrame = new QWidget(theParent); // constructors QPixmap iconReoriPoint (resMgr()->loadPixmap("SMESH", tr("ICON_DLG_REORIENT2D_POINT"))); QPixmap iconReoriFace (resMgr()->loadPixmap("SMESH", tr("ICON_DLG_REORIENT2D_FACE"))); QGroupBox* aConstructorBox = new QGroupBox(tr("REORIENT_FACES"), aFrame); myConstructorGrp = new QButtonGroup(aConstructorBox); QHBoxLayout* aConstructorGrpLayout = new QHBoxLayout(aConstructorBox); aConstructorGrpLayout->setMargin(MARGIN); aConstructorGrpLayout->setSpacing(SPACING); QRadioButton* aPntBut = new QRadioButton(aConstructorBox); aPntBut->setIcon(iconReoriPoint); aPntBut->setChecked(true); aConstructorGrpLayout->addWidget(aPntBut); myConstructorGrp->addButton(aPntBut, CONSTRUCTOR_POINT); QRadioButton* aFaceBut= new QRadioButton(aConstructorBox); aFaceBut->setIcon(iconReoriFace); aConstructorGrpLayout->addWidget(aFaceBut); myConstructorGrp->addButton(aFaceBut, CONSTRUCTOR_FACE); // Create other controls setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) ); createObject( tr("OBJECT") , aFrame, EObject ); createObject( tr("POINT") , aFrame, EPoint ); createObject( tr("FACE") , aFrame, EFace ); createObject( tr("DIRECTION"), aFrame, EDirection ); setNameIndication( EObject, OneName ); setNameIndication( EFace, OneName ); setReadOnly( EFace, false ); if ( QLineEdit* le = qobject_cast( objectWg( EFace, Control ) )) le->setValidator( new SMESHGUI_IdValidator( this,1 )); const int width = aFaceBut->fontMetrics().width( tr("DIRECTION")); objectWg( EDirection, Label )->setFixedWidth( width ); objectWg( EObject , Label )->setFixedWidth( width ); objectWg( EPoint , Label )->setFixedWidth( width ); objectWg( EFace , Label )->setFixedWidth( width ); QLabel* aXLabel = new QLabel(tr("SMESH_X"), aFrame); myX = new SMESHGUI_SpinBox(aFrame); QLabel* aYLabel = new QLabel(tr("SMESH_Y"), aFrame); myY = new SMESHGUI_SpinBox(aFrame); QLabel* aZLabel = new QLabel(tr("SMESH_Z"), aFrame); myZ = new SMESHGUI_SpinBox(aFrame); myX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); myY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); myZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); myX->SetValue(0); myY->SetValue(0); myZ->SetValue(0); QLabel* aDXLabel = new QLabel(tr("SMESH_DX"), aFrame); myDX = new SMESHGUI_SpinBox(aFrame); QLabel* aDYLabel = new QLabel(tr("SMESH_DY"), aFrame); myDY = new SMESHGUI_SpinBox(aFrame); QLabel* aDZLabel = new QLabel(tr("SMESH_DZ"), aFrame); myDZ = new SMESHGUI_SpinBox(aFrame); myDX->SetValue(1); myDY->SetValue(0); myDZ->SetValue(0); myDX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); myDY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); myDZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision"); // Layouting QGroupBox* anObjectGrp = new QGroupBox(tr("FACES"), aFrame); QHBoxLayout* anObjectGrpLayout = new QHBoxLayout(anObjectGrp); anObjectGrpLayout->setMargin(MARGIN); anObjectGrpLayout->setSpacing(SPACING); anObjectGrpLayout->addWidget( objectWg( EObject, Label )); anObjectGrpLayout->addWidget( objectWg( EObject, Btn )); anObjectGrpLayout->addWidget( objectWg( EObject, Control )); myPointFrm = new QFrame(aFrame); QHBoxLayout* aPointGrpLayout = new QHBoxLayout(myPointFrm); aPointGrpLayout->setMargin(0); objectWg( EPoint, Control )->hide(); aPointGrpLayout->addWidget( objectWg( EPoint, Label ) ); aPointGrpLayout->addWidget( objectWg( EPoint, Btn ) ); aPointGrpLayout->addWidget( aXLabel ); aPointGrpLayout->addWidget( myX ); aPointGrpLayout->addWidget( aYLabel ); aPointGrpLayout->addWidget( myY ); aPointGrpLayout->addWidget( aZLabel ); aPointGrpLayout->addWidget( myZ ); myFaceFrm = new QFrame(aFrame); QHBoxLayout* aFaceGrpLayout = new QHBoxLayout(myFaceFrm); aFaceGrpLayout->setMargin(0); aFaceGrpLayout->addWidget( objectWg( EFace, Label ) ); aFaceGrpLayout->addWidget( objectWg( EFace, Btn ) ); aFaceGrpLayout->addWidget( objectWg( EFace, Control ) ); QFrame* aDirectFrm = new QFrame(aFrame); QHBoxLayout* aDirectGrpLayout = new QHBoxLayout(aDirectFrm); aDirectGrpLayout->setMargin(0); objectWg( EDirection, Control )->hide(); aDirectGrpLayout->addWidget( objectWg( EDirection, Label ) ); aDirectGrpLayout->addWidget( objectWg( EDirection, Btn ) ); aDirectGrpLayout->addWidget(aDXLabel ); aDirectGrpLayout->addWidget(myDX ); aDirectGrpLayout->addWidget(aDYLabel ); aDirectGrpLayout->addWidget(myDY ); aDirectGrpLayout->addWidget(aDZLabel ); aDirectGrpLayout->addWidget(myDZ ); QGroupBox* anOrientGrp = new QGroupBox(tr("ORIENTATION"), aFrame); QVBoxLayout* anOrientGrpLayout = new QVBoxLayout ( anOrientGrp ); anOrientGrpLayout->addWidget(myPointFrm); anOrientGrpLayout->addWidget(myFaceFrm); anOrientGrpLayout->addWidget(aDirectFrm); QVBoxLayout* aLay = new QVBoxLayout(aFrame); aLay->addWidget(aConstructorBox); aLay->addWidget(anObjectGrp); aLay->addWidget(anOrientGrp); connect( myConstructorGrp, SIGNAL(buttonClicked (int)), this, SLOT(constructorChange(int))); return aFrame; } //================================================================================ /*! * \brief Show point or face */ //================================================================================ void SMESHGUI_ReorientFacesDlg::constructorChange(int id) { if ( id == CONSTRUCTOR_FACE ) { myPointFrm->hide(); myFaceFrm->show(); activateObject( EFace ); } else { myFaceFrm->hide(); myPointFrm->show(); activateObject( EPoint ); } } //================================================================================ /*! * \brief Constructor */ //================================================================================ SMESHGUI_ReorientFacesOp::SMESHGUI_ReorientFacesOp() :SMESHGUI_SelectionOp( ActorSelection ) { //myVectorPreview = 0; myHelpFileName = "reorient_faces_page.html"; myDlg = new SMESHGUI_ReorientFacesDlg; myDlg->constructorChange( CONSTRUCTOR_POINT ); // connect signals and slots connect( myDlg->objectWg( EFace, LightApp_Dialog::Control ), SIGNAL(textChanged(const QString&)), this, SLOT(onTextChange(const QString&))); // connect(myDlg->myX, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); // connect(myDlg->myY, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); // connect(myDlg->myZ, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); // connect(myDlg->myDX, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); // connect(myDlg->myDY, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); // connect(myDlg->myDZ, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview())); } //======================================================================= // function : startOperation() // purpose : Init dialog fields, connect signals and slots, show dialog //======================================================================= void SMESHGUI_ReorientFacesOp::startOperation() { myObjectActor = 0; // init simulation with a current View //if ( myVectorPreview ) delete myVectorPreview; // myVectorPreview = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( getSMESHGUI() )); // vtkProperty* aProp = vtkProperty::New(); // aProp->SetRepresentationToWireframe(); // aProp->SetColor(250, 0, 250); // aProp->SetPointSize(5); // aProp->SetLineWidth( SMESH::GetFloat("SMESH:element_width",1) + 1); // myVectorPreview->GetActor()->SetProperty(aProp); // aProp->Delete(); SMESHGUI_SelectionOp::startOperation(); myDlg->show(); mySelectionMode = 0; myDlg->activateObject( EObject ); } //================================================================================ /*! * \brief Stops operation */ //================================================================================ void SMESHGUI_ReorientFacesOp::stopOperation() { //myVectorPreview->SetVisibility(false); if ( myObjectActor ) { myObjectActor->SetPointRepresentation(false); SMESH::RepaintCurrentView(); myObjectActor = 0; } SMESHGUI_SelectionOp::stopOperation(); myDlg->deactivateAll(); } //================================================================================ /*! * \brief Set selection mode corresponding to a pressed selection button */ //================================================================================ void SMESHGUI_ReorientFacesOp::onActivateObject( int what ) { if ( what == mySelectionMode ) return; mySelectionMode = what; switch ( mySelectionMode ) { case EPoint: case EDirection: SMESH::SetPointRepresentation(true); setSelectionMode( NodeSelection ); SMESH::SetPickable(); break; case EObject: SMESH::SetPointRepresentation(false); setSelectionMode( ActorSelection ); break; case EFace: SMESH::SetPointRepresentation(false); setSelectionMode( FaceSelection ); if ( myObjectActor ) SMESH::SetPickable( myObjectActor ); else SMESH::SetPickable(); break; } SMESHGUI_SelectionOp::onActivateObject( what ); } //================================================================================ /*! * \brief Creates a filter corresponding to a pressed selection button */ //================================================================================ SUIT_SelectionFilter* SMESHGUI_ReorientFacesOp::createFilter( const int what ) const { switch ( what ) { case EObject: { QList filters; filters.append( new SMESH_TypeFilter( SMESH::MESH )); filters.append( new SMESH_TypeFilter( SMESH::SUBMESH_FACE )); filters.append( new SMESH_TypeFilter( SMESH::GROUP_FACE )); return new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR ); } case EPoint: { QList filters; filters.append( new SMESH_TypeFilter( SMESH::IDSOURCE )); filters.append( new SMESH_NumberFilter( "GEOM",TopAbs_VERTEX, 1, TopAbs_VERTEX )); return new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR ); } case EFace: case EDirection: { return new SMESH_TypeFilter( SMESH::IDSOURCE ); } } return NULL; } //================================================================================ /*! * \brief get data from selection */ //================================================================================ void SMESHGUI_ReorientFacesOp::selectionDone() { if ( !myDlg->isVisible() || !myDlg->isEnabled() ) return; myDlg->clearSelection( mySelectionMode ); SALOME_ListIO aList; selectionMgr()->selectedObjects(aList); const int nbSelected = aList.Extent(); if ( nbSelected == 0 ) return; Handle(SALOME_InteractiveObject) anIO = aList.First(); try { switch ( mySelectionMode ) { case EObject: { // get an actor of object if ( nbSelected == 1 ) { myDlg->selectObject( EObject, anIO->getName(), 0, anIO->getEntry(), true ); // typeById( aList.First()->getEntry(), // SMESHGUI_SelectionOp::Object ), myObjectActor = SMESH::FindActorByEntry( anIO->getEntry() ); } break; } case EFace: { // get a face ID if ( nbSelected == 1 ) { TColStd_IndexedMapOfInteger faceIndices; selector()->GetIndex( anIO, faceIndices ); if ( faceIndices.Extent() == 1 ) { SMESH_Actor* savedActor = myObjectActor; myObjectActor = 0; // to prevent work of onTextChange() myDlg->setObjectText( EFace, QString("%1").arg( faceIndices(1) )); myObjectActor = savedActor; if ( !myObjectActor ) { myDlg->selectObject( EObject, anIO->getName(), 0, anIO->getEntry(), true ); // typeById( aList.First()->getEntry(), // SMESHGUI_SelectionOp::Object ), myObjectActor = SMESH::FindActorByEntry( anIO->getEntry() ); } } } break; } case EPoint: case EDirection: { // set XYZ by selected nodes or vertices if ( mySelectionMode == EPoint && aList.Extent() > 1 ) return; TColgp_SequenceOfXYZ points; for( SALOME_ListIteratorOfListIO anIt( aList ); anIt.More(); anIt.Next() ) { anIO = anIt.Value(); GEOM::GEOM_Object_var geom = SMESH::IObjectToInterface(anIO); if ( !geom->_is_nil() ) { TopoDS_Vertex aShape; if ( GEOMBase::GetShape(geom, aShape) && aShape.ShapeType() == TopAbs_VERTEX ) { gp_Pnt P = BRep_Tool::Pnt(aShape); points.Append( P.XYZ() ); } } else { TColStd_IndexedMapOfInteger nodeIndices; selector()->GetIndex( anIO, nodeIndices ); if ( nodeIndices.Extent() > 0 && nodeIndices.Extent() <=2 ) { if ( SMESH_Actor* aMeshActor = SMESH::FindActorByEntry(anIO->getEntry())) if (SMDS_Mesh* aMesh = aMeshActor->GetObject()->GetMesh()) { if (const SMDS_MeshNode* aNode = aMesh->FindNode( nodeIndices(1))) points.Append( gp_XYZ( aNode->X(), aNode->Y(), aNode->Z())); if ( nodeIndices.Extent() == 2 ) if (const SMDS_MeshNode* aNode = aMesh->FindNode( nodeIndices(2))) points.Append( gp_XYZ( aNode->X(), aNode->Y(), aNode->Z())); } } } } gp_XYZ xyz; if ( points.Length() == 1 ) xyz = points(1); else if ( points.Length() == 2 ) xyz = points(2) - points(1); else return; if ( points.Length() == 1 && mySelectionMode == EPoint ) { myDlg->myX->SetValue( xyz.X() ); myDlg->myY->SetValue( xyz.Y() ); myDlg->myZ->SetValue( xyz.Z() ); redisplayPreview(); } if ( mySelectionMode == EDirection ) { myDlg->myDX->SetValue( xyz.X() ); myDlg->myDY->SetValue( xyz.Y() ); myDlg->myDZ->SetValue( xyz.Z() ); redisplayPreview(); } break; } // case EPoint || EDirection } // switch } catch (...) { } } //================================================================================ /*! * \brief SLOT called when the face id is changed */ //================================================================================ void SMESHGUI_ReorientFacesOp::onTextChange( const QString& theText ) { if( myObjectActor ) { sender()->blockSignals( true ); if ( mySelectionMode != EFace ) { myDlg->activateObject( EFace ); myDlg->setObjectText( EFace, theText ); } TColStd_MapOfInteger ids; if ( !theText.isEmpty() && theText.toInt() > 0 ) ids.Add( theText.toInt() ); SMESHGUI_SelectionOp::addOrRemoveIndex( myObjectActor->getIO(), ids, false ); SMESHGUI_SelectionOp::highlight( myObjectActor->getIO(), true, true ); sender()->blockSignals( false ); } } //================================================================================ /*! * \brief perform it's intention action: reorient faces of myObject */ //================================================================================ bool SMESHGUI_ReorientFacesOp::onApply() { if( isStudyLocked() ) return false; QString msg; if ( !isValid( msg ) ) { // node id is invalid if( !msg.isEmpty() ) SUIT_MessageBox::warning( dlg(), tr( "SMESH_WRN_WARNING" ), msg ); dlg()->show(); return false; } QStringList aParameters; aParameters << myDlg->myDX->text(); aParameters << myDlg->myDY->text(); aParameters << myDlg->myDZ->text(); aParameters << myDlg->myX->text(); aParameters << myDlg->myY->text(); aParameters << myDlg->myZ->text(); try { SUIT_OverrideCursor wc; SMESH::SMESH_Mesh_var aMesh = myObject->GetMesh(); if ( aMesh->_is_nil() ) return false; SMESH::DirStruct direction; direction.PS.x = myDlg->myDX->GetValue(); direction.PS.y = myDlg->myDY->GetValue(); direction.PS.z = myDlg->myDZ->GetValue(); long face = myDlg->objectText( EFace ).toInt(); if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_POINT ) face = -1; SMESH::PointStruct point; point.x = myDlg->myX->GetValue(); point.y = myDlg->myY->GetValue(); point.z = myDlg->myZ->GetValue(); SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor(); if (aMeshEditor->_is_nil()) return false; aMesh->SetParameters( aParameters.join(":").toLatin1().constData() ); int aResult = aMeshEditor->Reorient2D( myObject, direction, face, point ); if (aResult) { SALOME_ListIO aList; selectionMgr()->setSelectedObjects(aList,false); SMESH::UpdateView(); SMESHGUI::Modified(); } wc.suspend(); SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_INFORMATION"), tr("NB_REORIENTED").arg(aResult)); } catch (const SALOME::SALOME_Exception& S_ex) { SalomeApp_Tools::QtCatchCorbaException(S_ex); } catch (...) { } return true; } //================================================================================ /*! * \brief Check data validity */ //================================================================================ bool SMESHGUI_ReorientFacesOp::isValid( QString& msg ) { // check object QString objectEntry = myDlg->selectedObject( EObject ); _PTR(SObject) pSObject = studyDS()->FindObjectID( objectEntry.toLatin1().data() ); myObject = SMESH::SMESH_IDSource::_narrow( _CAST( SObject,pSObject )->GetObject() ); if ( myObject->_is_nil() ) { msg = tr("NO_OBJECT_SELECTED"); return false; } bool hasFaces = false; SMESH::array_of_ElementType_var types = myObject->GetTypes(); for ( size_t i = 0; i < types->length() && !hasFaces; ++i ) hasFaces = ( types[i] == SMESH::FACE ); if ( !hasFaces ) { msg = tr("NO_FACES"); return false; } // check vector gp_Vec vec( myDlg->myDX->GetValue(), myDlg->myDY->GetValue(), myDlg->myDZ->GetValue() ); if ( vec.Magnitude() < std::numeric_limits::min() ) { msg = tr("ZERO_SIZE_VECTOR"); return false; } // check face ID if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_FACE ) { int faceID = myDlg->objectText( EFace ).toInt(); bool faceOK = ( faceID > 0 ); if ( faceOK ) { if ( myObjectActor ) { faceOK = ( myObjectActor->GetObject()->GetElemDimension( faceID ) == 2 ); } else { SMESH::SMESH_Mesh_var aMesh = myObject->GetMesh(); if ( !aMesh->_is_nil() ) faceOK = ( aMesh->GetElementType( faceID, true ) == SMESH::FACE ); } } if ( !faceOK ) { msg = tr("INVALID_FACE"); return false; } } return true; } //================================================================================ /*! * \brief Destructor */ //================================================================================ SMESHGUI_ReorientFacesOp::~SMESHGUI_ReorientFacesOp() { if ( myDlg ) delete myDlg; //if ( myVectorPreview ) delete myVectorPreview; } //================================================================================ /*! * \brief Gets dialog of this operation * \retval LightApp_Dialog* - pointer to dialog of this operation */ //================================================================================ LightApp_Dialog* SMESHGUI_ReorientFacesOp::dlg() const { return myDlg; } //================================================================================ /*! * \brief update preview */ //================================================================================ void SMESHGUI_ReorientFacesOp::redisplayPreview() { // SMESH::MeshPreviewStruct_var aMeshPreviewStruct; // bool moveShown = false; // if ( myObjectActor) // { // const bool autoSearch = myDlg->myAutoSearchChkBox->isChecked(); // const bool preview = myDlg->myPreviewChkBox->isChecked(); // if ( autoSearch ) // { // myDlg->myCurrentX->SetValue(0); // myDlg->myCurrentY->SetValue(0); // myDlg->myCurrentZ->SetValue(0); // myDlg->myDX->SetValue(0); // myDlg->myDY->SetValue(0); // myDlg->myDZ->SetValue(0); // myDlg->myId->setText(""); // } // QString msg; // if ( autoSearch || isValid( msg ) ) // { // try { // SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myObjectActor->getIO()); // if (!aMesh->_is_nil()) { // SMESH::SMESH_MeshEditor_var aPreviewer = aMesh->GetMeshEditPreviewer(); // if (!aPreviewer->_is_nil()) // { // SUIT_OverrideCursor aWaitCursor; // int anId = 0; // if ( autoSearch ) // anId = aPreviewer->FindNodeClosestTo(myDlg->myX->GetValue(), // myDlg->myY->GetValue(), // myDlg->myZ->GetValue()); // else // anId = myDlg->myId->text().toInt(); // // find id and/or just compute preview // aPreviewer->MoveNode(anId, // myDlg->myX->GetValue(), // myDlg->myY->GetValue(), // myDlg->myZ->GetValue()); // if ( autoSearch ) { // set found id // QString idTxt("%1"); // if ( anId > 0 ) // idTxt = idTxt.arg( anId ); // else // idTxt = ""; // myDlg->myId->setText( idTxt ); // } // SMESH::double_array* aXYZ = aMesh->GetNodeXYZ( anId ); // if( aXYZ && aXYZ->length() >= 3 ) // { // double x = aXYZ->operator[](0); // double y = aXYZ->operator[](1); // double z = aXYZ->operator[](2); // double dx = myDlg->myX->GetValue() - x; // double dy = myDlg->myY->GetValue() - y; // double dz = myDlg->myZ->GetValue() - z; // myDlg->myCurrentX->SetValue(x); // myDlg->myCurrentY->SetValue(y); // myDlg->myCurrentZ->SetValue(z); // myDlg->myDX->SetValue(dx); // myDlg->myDY->SetValue(dy); // myDlg->myDZ->SetValue(dz); // } // if ( preview ) { // fill preview data // aMeshPreviewStruct = aPreviewer->GetPreviewData(); // moveShown = ( anId > 0 ); // } // } // } // }catch (...) { // } // } // } // if ( !moveShown ) // { // aMeshPreviewStruct = new SMESH::MeshPreviewStruct(); // aMeshPreviewStruct->nodesXYZ.length(1); // aMeshPreviewStruct->nodesXYZ[0].x = myDlg->myX->GetValue(); // aMeshPreviewStruct->nodesXYZ[0].y = myDlg->myY->GetValue(); // aMeshPreviewStruct->nodesXYZ[0].z = myDlg->myZ->GetValue(); // aMeshPreviewStruct->elementTypes.length(1); // aMeshPreviewStruct->elementTypes[0].SMDS_ElementType = SMESH::NODE; // aMeshPreviewStruct->elementTypes[0].isPoly = false; // aMeshPreviewStruct->elementTypes[0].nbNodesInElement = 1; // aMeshPreviewStruct->elementConnectivities.length(1); // aMeshPreviewStruct->elementConnectivities[0] = 0; // } // // display data // if ( aMeshPreviewStruct.operator->() ) // { // myVectorPreview->SetData(aMeshPreviewStruct._retn()); // } // else // { // myVectorPreview->SetVisibility(false); // } }