X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FMeasureGUI%2FMeasureGUI_AngleDlg.cxx;h=ae7a8326b43edac9a07a94904fc7c8d59d5a5ddc;hb=7a3c2d25cc85b5c75acf2c8df92e4373af480d42;hp=8a7407a29c69f5210469af4bbe01ea85e72b9aee;hpb=4e4b3762fc1215eb520840fe65eaeeea0854eff8;p=modules%2Fgeom.git diff --git a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx index 8a7407a29..ae7a8326b 100644 --- a/src/MeasureGUI/MeasureGUI_AngleDlg.cxx +++ b/src/MeasureGUI/MeasureGUI_AngleDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -55,8 +55,10 @@ #include #include #include -#include #include +#include +#include +#include // QT Includes #include @@ -97,7 +99,7 @@ MeasureGUI_AngleDlg::MeasureGUI_AngleDlg (GeometryGUI* GUI, QWidget* parent) myGrp->GroupBox1->setTitle(tr("GEOM_MEASURE_ANGLE_OBJ")); myGrp->TextLabel1->setText(tr("GEOM_OBJECT_I").arg("1")); myGrp->TextLabel2->setText(tr("GEOM_OBJECT_I").arg("2")); - myGrp->TextLabel3->setText(tr("GEOM_MEASURE_ANGLE_IS")); + myGrp->TextLabel3->setText(tr(aResMgr->stringValue ( "Geometry", "dimensions_angle_units", "deg" ) == "deg" ? "GEOM_MEASURE_ANGLE_DEG" : "GEOM_MEASURE_ANGLE_RAD")); myGrp->LineEdit3->setReadOnly(true); myGrp->PushButton1->setIcon(image1); myGrp->PushButton2->setIcon(image1); @@ -110,7 +112,7 @@ MeasureGUI_AngleDlg::MeasureGUI_AngleDlg (GeometryGUI* GUI, QWidget* parent) /***************************************************************/ // Help page reference - myHelpFileName = "using_measurement_tools_page.html#angle_anchor"; + myHelpFileName = "angle_page.html"; // Initialisation Init(); @@ -133,7 +135,10 @@ void MeasureGUI_AngleDlg::Init() // init variables myGrp->LineEdit1->setText(""); myGrp->LineEdit2->setText(""); - myObj = myObj2 = GEOM::GEOM_Object::_nil(); + myGrp->LineEdit1->setEnabled(true); + myGrp->LineEdit2->setEnabled(false); + myObj.nullify(); + myObj2.nullify(); mySelBtn = myGrp->PushButton1; mySelEdit = myGrp->LineEdit1; @@ -146,7 +151,7 @@ void MeasureGUI_AngleDlg::Init() connect(mySelEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); connect(mySelBtn2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); - globalSelection(GEOM_LINE); + activateSelection(); MeasureGUI_Skeleton::Init(); } @@ -156,15 +161,7 @@ void MeasureGUI_AngleDlg::Init() //================================================================================= void MeasureGUI_AngleDlg::SelectionIntoArgument() { - LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); - SALOME_ListIO aSelList; - aSelMgr->selectedObjects(aSelList); - - GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil(); - - if (aSelList.Extent() > 0) { - aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); - } + GEOM::GeomObjPtr aSelectedObject = getSelected( TopAbs_EDGE ); // clear selection disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); @@ -174,12 +171,12 @@ void MeasureGUI_AngleDlg::SelectionIntoArgument() if (myEditCurrentArgument == mySelEdit) { myObj = aSelectedObject; - if (!myObj->_is_nil() && myObj2->_is_nil()) + if (myObj && !myObj2) myGrp->PushButton2->click(); } else { myObj2 = aSelectedObject; - if (!myObj2->_is_nil() && myObj->_is_nil()) + if (myObj2 && !myObj) myGrp->PushButton1->click(); } @@ -192,14 +189,13 @@ void MeasureGUI_AngleDlg::SelectionIntoArgument() //================================================================================= void MeasureGUI_AngleDlg::processObject() { - myGrp->LineEdit1->setText(!myObj->_is_nil() ? GEOMBase::GetName(myObj ) : ""); - myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : ""); + myGrp->LineEdit1->setText(myObj ? GEOMBase::GetName(myObj.get()) : ""); + myGrp->LineEdit2->setText(myObj2 ? GEOMBase::GetName(myObj2.get()) : ""); double anAngle = 0.; if (getParameters(anAngle)) { - SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); - int aPrecision = resMgr->integerValue( "Geometry", "angle_precision", 6 ); - myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(anAngle, aPrecision)); + // To avoid the using different angle values in viewer and dialog, + // the value from presentation is used in both cases (see buildPrs()) redisplayPreview(); } else { @@ -218,7 +214,7 @@ bool MeasureGUI_AngleDlg::getParameters (double& theAngle) if (isValid(msg)) { GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() ); try { - theAngle = anOper->GetAngle(myObj, myObj2); + theAngle = anOper->GetAngle(myObj.get(), myObj2.get()); } catch(const SALOME::SALOME_Exception& e) { SalomeApp_Tools::QtCatchCorbaException(e); @@ -260,7 +256,7 @@ void MeasureGUI_AngleDlg::SetEditCurrentArgument() } disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); - globalSelection(GEOM_LINE); + activateSelection(); connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())); @@ -302,21 +298,20 @@ void MeasureGUI_AngleDlg::LineEditReturnPressed() SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() { double anAngle = 0.; + myGrp->LineEdit3->setText(""); SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); - if (myObj->_is_nil() || myObj2->_is_nil() || !getParameters(anAngle) || + if (!myObj || !myObj2 || !getParameters(anAngle) || vw->getViewManager()->getType() != OCCViewer_Viewer::Type()) return 0; if (anAngle > Precision::Angular()) { try { -#if OCC_VERSION_LARGE > 0x06010000 OCC_CATCH_SIGNALS; -#endif TopoDS_Shape S1, S2; - if (GEOMBase::GetShape(myObj , S1, TopAbs_EDGE) && - GEOMBase::GetShape(myObj2, S2, TopAbs_EDGE)) { + if (GEOMBase::GetShape(myObj.get() , S1, TopAbs_EDGE) && + GEOMBase::GetShape(myObj2.get(), S2, TopAbs_EDGE)) { TopoDS_Edge anEdge1 = TopoDS::Edge(S1); TopoDS_Edge anEdge2 = TopoDS::Edge(S2); @@ -352,6 +347,7 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); int w = resMgr->integerValue( "Geometry", "measures_line_width", 1 ); + QString aUnitsAngle = resMgr->stringValue ( "Geometry", "dimensions_angle_units", "deg" ); aDimensionStyle->LineAspect()->SetWidth( w ); aDimensionStyle->SetTextHorizontalPosition( Prs3d_DTHP_Center ); @@ -360,6 +356,9 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() aDimensionStyle->MakeArrows3d( Standard_True ); anIO->SetDimensionAspect( aDimensionStyle ); + anIO->SetDisplayUnits( aUnitsAngle.toLatin1().data() ); + if (aUnitsAngle == "rad") + anIO->SetDisplaySpecialSymbol(AIS_DSS_No); SOCC_Prs* aPrs = dynamic_cast(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0)); @@ -367,6 +366,18 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() if (aPrs) aPrs->AddObject(anIO); + // set angle value into dialog + double anAngle = anIO->GetValue(); + QString anAngleLabel = "GEOM_MEASURE_ANGLE_RAD"; + if (aUnitsAngle == "deg") { + // using degrees instead of radians + anAngle *= 180. / M_PI; + anAngleLabel = "GEOM_MEASURE_ANGLE_DEG"; + } + myGrp->TextLabel3->setText(tr(anAngleLabel.toLatin1().data())); + int aPrecision = resMgr->integerValue( "Geometry", "angle_precision", 6 ); + myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(anAngle, aPrecision)); + return aPrs; } } @@ -383,5 +394,15 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs() //================================================================================= bool MeasureGUI_AngleDlg::isValid (QString& msg) { - return MeasureGUI_Skeleton::isValid(msg) && !myObj2->_is_nil(); + return MeasureGUI_Skeleton::isValid(msg) && myObj2; +} + +//================================================================================= +// function : activateSelection() +// purpose : +//================================================================================= +void MeasureGUI_AngleDlg::activateSelection() +{ + globalSelection(GEOM_LINE); + localSelection( TopAbs_EDGE ); }