X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FTransformationGUI%2FTransformationGUI_MultiTranslationDlg.cxx;h=6d9c3262015d037a5dd37002ad8b35a6e86477df;hb=8d26af3d7b521a6524ffaa2c7ea98400cce78d63;hp=286e2dc00b9b51b8734c2c33ab755a86d98bedd3;hpb=407cadd372e3b984e4edf56e5898d57c129432ef;p=modules%2Fgeom.git diff --git a/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx b/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx index 286e2dc00..6d9c32620 100644 --- a/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx +++ b/src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2013 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2021 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 @@ -6,7 +6,7 @@ // 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. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -239,15 +239,21 @@ void TransformationGUI_MultiTranslationDlg::ConstructorsClicked (int constructor GroupDimensions->hide(); GroupPoints->show(); - GroupPoints->LineEdit1->setText(""); - GroupPoints->LineEdit2->setText(""); - myBase.nullify(); - myVectorU.nullify(); + //GroupPoints->LineEdit1->setText(""); + //GroupPoints->LineEdit2->setText(""); + //myBase.nullify(); + //myVectorU.nullify(); + + if ( myBase ) GroupDimensions->LineEdit1->setText( GEOMBase::GetName( myBase.get() ) ); + if ( myVectorU ) GroupDimensions->LineEdit2->setText( GEOMBase::GetName( myVectorU.get() ) ); GroupPoints->SpinBox_DX->setValue(myStepU); GroupPoints->SpinBox_DY->setValue(myNbTimesU); - GroupPoints->PushButton1->click(); + if ( !myBase ) + GroupPoints->PushButton1->click(); + else if ( !myVectorU ) + GroupPoints->PushButton2->click(); break; } case 1: // Translate double @@ -255,19 +261,28 @@ void TransformationGUI_MultiTranslationDlg::ConstructorsClicked (int constructor GroupPoints->hide(); GroupDimensions->show(); - GroupDimensions->LineEdit1->setText(""); - GroupDimensions->LineEdit2->setText(""); - GroupDimensions->LineEdit3->setText(""); - myBase.nullify(); - myVectorU.nullify(); - myVectorV.nullify(); + //GroupDimensions->LineEdit1->setText(""); + //GroupDimensions->LineEdit2->setText(""); + //GroupDimensions->LineEdit3->setText(""); + //myBase.nullify(); + //myVectorU.nullify(); + //myVectorV.nullify(); + + if ( myBase ) GroupDimensions->LineEdit1->setText( GEOMBase::GetName( myBase.get() ) ); + if ( myVectorU ) GroupDimensions->LineEdit2->setText( GEOMBase::GetName( myVectorU.get() ) ); + if ( myVectorV ) GroupDimensions->LineEdit3->setText( GEOMBase::GetName( myVectorV.get() ) ); GroupDimensions->SpinBox_DX1->setValue(myStepU); GroupDimensions->SpinBox_DY1->setValue(myNbTimesU); GroupDimensions->SpinBox_DX2->setValue(myStepV); GroupDimensions->SpinBox_DY2->setValue(myNbTimesV); - GroupDimensions->PushButton1->click(); + if ( !myBase ) + GroupDimensions->PushButton1->click(); + else if ( !myVectorU ) + GroupDimensions->PushButton2->click(); + else if ( !myVectorV ) + GroupDimensions->PushButton3->click(); break; } } @@ -329,45 +344,35 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument() QString aName = GEOMBase::GetName( aSelectedObject.get() ); myEditCurrentArgument->setText( aName ); - if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) { + if ( myEditCurrentArgument == GroupPoints->LineEdit1 || myEditCurrentArgument == GroupDimensions->LineEdit1 ) { myBase = aSelectedObject; // recompute myStepU (Mantis issue 0021718) - GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId()); + GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(); double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax; anOper->GetBoundingBox(myBase.get(), true, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax); if (anOper->IsDone()) { myStepU = floor(1.5 * (Xmax - Xmin)); + myStepV = floor(1.5 * (Ymax - Ymin)); GroupPoints->SpinBox_DX->setValue(myStepU); + GroupDimensions->SpinBox_DX1->setValue(myStepU); + GroupDimensions->SpinBox_DX2->setValue(myStepV); } - if (!myVectorU) + if ( myEditCurrentArgument == GroupPoints->LineEdit1 && !myVectorU ) GroupPoints->PushButton2->click(); + if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) { + if ( !myVectorU ) + GroupDimensions->PushButton2->click(); + else if ( !myVectorV ) + GroupDimensions->PushButton3->click(); + } } else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) { myVectorU = aSelectedObject; if ( !myBase ) GroupPoints->PushButton1->click(); } - else if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) { - myBase = aSelectedObject; - - // recompute myStepU and myStepV (Mantis issue 0021718) - GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId()); - double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax; - anOper->GetBoundingBox(myBase.get(), true, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax); - if (anOper->IsDone()) { - myStepU = floor(1.5 * (Xmax - Xmin)); - myStepV = floor(1.5 * (Ymax - Ymin)); - GroupDimensions->SpinBox_DX1->setValue(myStepU); - GroupDimensions->SpinBox_DX2->setValue(myStepV); - } - - if ( !myVectorU ) - GroupDimensions->PushButton2->click(); - else if ( !myVectorV ) - GroupDimensions->PushButton3->click(); - } else if ( myEditCurrentArgument == GroupDimensions->LineEdit2 ) { myVectorU = aSelectedObject; if ( !myVectorV ) @@ -384,10 +389,10 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument() } // clear selection - disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); - myGeomGUI->getApp()->selectionMgr()->clearSelected(); - connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), - this, SLOT(SelectionIntoArgument())); + // disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); + // myGeomGUI->getApp()->selectionMgr()->clearSelected(); + // connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), + // this, SLOT(SelectionIntoArgument())); } else { if ( myEditCurrentArgument == GroupPoints->LineEdit1 || @@ -424,7 +429,7 @@ void TransformationGUI_MultiTranslationDlg::SetEditCurrentArgument() else if (send == GroupPoints->PushButton2) { myEditCurrentArgument = GroupPoints->LineEdit2; - localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); + localSelection(TopAbs_EDGE); GroupPoints->PushButton1->setDown(false); GroupPoints->LineEdit1->setEnabled(false); @@ -440,7 +445,7 @@ void TransformationGUI_MultiTranslationDlg::SetEditCurrentArgument() else if (send == GroupDimensions->PushButton2) { myEditCurrentArgument = GroupDimensions->LineEdit2; - localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); + localSelection(TopAbs_EDGE); GroupDimensions->PushButton1->setDown(false); GroupDimensions->PushButton3->setDown(false); @@ -450,7 +455,7 @@ void TransformationGUI_MultiTranslationDlg::SetEditCurrentArgument() else if (send == GroupDimensions->PushButton3) { myEditCurrentArgument = GroupDimensions->LineEdit3; - localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); + localSelection(TopAbs_EDGE); GroupDimensions->PushButton1->setDown(false); GroupDimensions->PushButton2->setDown(false); @@ -497,7 +502,7 @@ void TransformationGUI_MultiTranslationDlg::enterEvent (QEvent*) // function : TextValueChangedInSpinBox // purpose : //================================================================================= -void TransformationGUI_MultiTranslationDlg::TextValueChangedInSpinBox( const QString& s) +void TransformationGUI_MultiTranslationDlg::TextValueChangedInSpinBox( const QString& ) { QObject* send = (QObject*)sender(); bool isDigit = true; @@ -610,7 +615,7 @@ void TransformationGUI_MultiTranslationDlg::ReverseStepV() //================================================================================= GEOM::GEOM_IOperations_ptr TransformationGUI_MultiTranslationDlg::createOperation() { - return getGeomEngine()->GetITransformOperations(getStudyId()); + return getGeomEngine()->GetITransformOperations(); } //================================================================================= @@ -668,8 +673,8 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects) createPathPreview(myVectorU.get()); createPathPreview(myVectorV.get()); anObj = anOper->MultiTranslate2D(myBase.get(), - myVectorU.get(), myStepU, myNbTimesU, - myVectorV.get(), myStepV, myNbTimesV); + myVectorU.get(), myStepU, myNbTimesU, + myVectorV.get(), myStepV, myNbTimesV); if (!IsPreview()) { aParameters << GroupDimensions->SpinBox_DX1->text(); aParameters << GroupDimensions->SpinBox_DY1->text(); @@ -682,7 +687,7 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects) if (!anObj->_is_nil()) { if (!IsPreview()) - anObj->SetParameters(aParameters.join(":").toLatin1().constData()); + anObj->SetParameters(aParameters.join(":").toUtf8().constData()); objects.push_back(anObj._retn()); } @@ -708,12 +713,22 @@ void TransformationGUI_MultiTranslationDlg::addSubshapesToStudy() } } +//================================================================================= +// function : getSourceObjects +// purpose : virtual method to get source objects +//================================================================================= +QList TransformationGUI_MultiTranslationDlg::getSourceObjects() +{ + QList res; + res << myBase << myVectorU << myVectorV; + return res; +} + //================================================================================= // function : restoreSubShapes // purpose : //================================================================================= -void TransformationGUI_MultiTranslationDlg::restoreSubShapes (SALOMEDS::Study_ptr theStudy, - SALOMEDS::SObject_ptr theSObject) +void TransformationGUI_MultiTranslationDlg::restoreSubShapes (SALOMEDS::SObject_ptr theSObject) { if (mainFrame()->CheckBoxRestoreSS->isChecked()) { // we pass here the first operation argument (object) through the list of arguments @@ -722,7 +737,7 @@ void TransformationGUI_MultiTranslationDlg::restoreSubShapes (SALOMEDS::Study_pt GEOM::ListOfGO_var anArgs = new GEOM::ListOfGO; anArgs->length(1); anArgs[0] = myBase.copy(); - getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, anArgs, + getGeomEngine()->RestoreSubShapesSO(theSObject, anArgs, /*theFindMethod=*/GEOM::FSM_MultiTransformed, /*theInheritFirstArg=*/true, mainFrame()->CheckBoxAddPrefix->isChecked()); @@ -743,10 +758,11 @@ void TransformationGUI_MultiTranslationDlg::createPathPreview ( GEOM::GEOM_Objec ShapeAnalysis_Edge aShapeAnal; TopoDS_Vertex aFirst = aShapeAnal.FirstVertex( anEdge ); TopoDS_Vertex aLast = aShapeAnal.LastVertex( anEdge ); + if ( BRep_Tool::Pnt(aFirst).IsEqual( BRep_Tool::Pnt(aLast), Precision::Confusion() ) ) return; TopoDS_Shape aVector = BRepBuilderAPI_MakeEdge(BRep_Tool::Pnt(aFirst), BRep_Tool::Pnt(aLast)).Shape(); const char* aName = "tmpVector"; Handle(GEOM_AISVector) anIO = new GEOM_AISVector( aVector, aName ); - + // add Prs to preview SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); SOCC_Prs* aPrs = dynamic_cast(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));