X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGenerationGUI%2FGenerationGUI_PipeDlg.cxx;h=a1d4e7feddf5cdd82f74986ab3fdc95277fa329c;hb=8b1511ff6327ae63c450b10e49714d3c83577eda;hp=e560176dc627c1b0a3387fa3ab47027fa2e5ca2c;hpb=392885c1a8d50369708bbe5e6b44033ed8b8ba51;p=modules%2Fgeom.git diff --git a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx index e560176dc..a1d4e7fed 100644 --- a/src/GenerationGUI/GenerationGUI_PipeDlg.cxx +++ b/src/GenerationGUI/GenerationGUI_PipeDlg.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2010 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 @@ -19,6 +19,7 @@ // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // GEOM GEOMGUI : GUI for Geometry component // File : GenerationGUI_PipeDlg.cxx // Author : Lucien PIGNOLONI, Open CASCADE S.A.S. @@ -113,7 +114,7 @@ void GenerationGUI_PipeDlg::Init() GroupPoints->LineEdit1->setText(""); GroupPoints->LineEdit2->setText(""); GroupPoints->LineEdit3->setText(""); - myBase = myPath = myVec = GEOM::GEOM_Object::_nil(); + myPath = myVec = GEOM::GEOM_Object::_nil(); myOkBase = myOkPath = myOkVec = false; GroupPoints->CheckButton1->setEnabled(false); @@ -135,6 +136,7 @@ void GenerationGUI_PipeDlg::Init() connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(SelectionTypeButtonClicked())); initName(tr("GEOM_PIPE")); + resize(100,100); GroupPoints->TextLabel3->hide(); GroupPoints->PushButton3->hide(); @@ -170,6 +172,9 @@ void GenerationGUI_PipeDlg::ConstructorsClicked( int constructorId ) break; } } + qApp->processEvents(); + updateGeometry(); + resize(100,100); displayPreview(); } @@ -185,6 +190,7 @@ void GenerationGUI_PipeDlg::SelectionTypeButtonClicked() localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } else { TColStd_MapOfInteger aMap; + aMap.Add(GEOM_COMPOUND); aMap.Add(GEOM_WIRE); aMap.Add(GEOM_LINE); globalSelection(aMap); @@ -217,7 +223,7 @@ bool GenerationGUI_PipeDlg::ClickOnApply() initName(); if ( getConstructorId() != 1 ) - ConstructorsClicked( getConstructorId() ); + ConstructorsClicked( getConstructorId() ); // activate selection and connect selection manager GroupPoints->PushButton1->click(); return true; @@ -239,12 +245,12 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument() SALOME_ListIO aSelList; aSelMgr->selectedObjects(aSelList); - if (aSelList.Extent() != 1) + if (aSelList.Extent() < 1) return; - // nbSel == 1 Standard_Boolean testResult = Standard_False; GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult); + QString aName = GEOMBase::GetName(aSelectedObject); if (!testResult || aSelectedObject->_is_nil()) return; @@ -254,98 +260,87 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument() return; if (myEditCurrentArgument == GroupPoints->LineEdit1) { - if (S.ShapeType() == TopAbs_COMPSOLID || - S.ShapeType() == TopAbs_COMPOUND || - S.ShapeType() == TopAbs_SOLID || - S.ShapeType() == TopAbs_SHAPE) - return; - if ( getConstructorId() == 1 && - (S.ShapeType() == TopAbs_SHELL || - S.ShapeType() == TopAbs_VERTEX)) - return; - - myBase = aSelectedObject; - myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject)); + myOkBase = false; + GEOMBase::ConvertListOfIOInListOfGO(aSelList, myBaseObjects, true); + if (aSelList.Extent() > 1) + aName = QString( "%1_objects").arg( aSelList.Extent() ); + + if ( aSelList.Extent() > 0 ) { + // check base shapes + for (int i=0; i < myBaseObjects.length(); i++) { + GEOMBase::GetShape(myBaseObjects[i], S); + if (S.ShapeType() == TopAbs_COMPSOLID || + /*S.ShapeType() == TopAbs_COMPOUND ||*/ + S.ShapeType() == TopAbs_SOLID || + S.ShapeType() == TopAbs_SHAPE) + return; + if ( getConstructorId() == 1 && + (S.ShapeType() == TopAbs_SHELL || + S.ShapeType() == TopAbs_VERTEX)) + return; + } + } + + myEditCurrentArgument->setText(aName); myOkBase = true; - if (!myOkPath) - GroupPoints->PushButton2->click(); - else if (!myOkVec) - GroupPoints->PushButton3->click(); - } - else if (myEditCurrentArgument == GroupPoints->LineEdit2 || - myEditCurrentArgument == GroupPoints->LineEdit3) { + } else if (myEditCurrentArgument == GroupPoints->LineEdit2 || + myEditCurrentArgument == GroupPoints->LineEdit3) { myEditCurrentArgument == GroupPoints->LineEdit2 ? myOkPath = false : myOkVec = false; bool myOk = false; - QString aName = GEOMBase::GetName(aSelectedObject); if (myEditCurrentArgument == GroupPoints->LineEdit2 && !GroupPoints->CheckButton1->isChecked() ){ myPath = aSelectedObject; myOkPath = true; myEditCurrentArgument->setText(aName); - } - else - { - if (aSelectedObject != myBase) { - TColStd_IndexedMapOfInteger aMap; - aSelMgr->GetIndexes(aSelList.First(), aMap); - if (aMap.Extent() == 1) { - int anIndex = aMap(1); - aName.append(":edge_" + QString::number(anIndex)); - - //Find SubShape Object in Father - GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName); - - if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study - GEOM::GEOM_IShapesOperations_var aShapesOp = - getGeomEngine()->GetIShapesOperations(getStudyId()); - aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex); - myOk = true; - } - else { // get Object from study - aSelectedObject = aFindedObject; - myOk = true; - } - } - else { - myOk = true; - if (S.ShapeType() != TopAbs_EDGE) { - aSelectedObject = GEOM::GEOM_Object::_nil(); - aName = ""; - myOk = false; - } - } - if (myEditCurrentArgument == GroupPoints->LineEdit2) { - myPath = aSelectedObject; - myOkPath = myOk; - } - else if (myEditCurrentArgument == GroupPoints->LineEdit3) { - myVec = aSelectedObject; - myOkVec = myOk; - } - } - myEditCurrentArgument->setText(aName); - - if (myOkPath) { - if (!myOkBase) - GroupPoints->PushButton1->click(); - else if (!myOkVec) - GroupPoints->PushButton3->click(); - } - else if (myOkVec) { - if (!myOkBase) - GroupPoints->PushButton1->click(); - else if (!myOkPath) - GroupPoints->PushButton2->click(); - } + } else { + TColStd_IndexedMapOfInteger aMap; + aSelMgr->GetIndexes(aSelList.First(), aMap); + if (aMap.Extent() == 1) { + int anIndex = aMap(1); + aName.append(":edge_" + QString::number(anIndex)); + + //Find SubShape Object in Father + GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName); + + if (aFindedObject->_is_nil()) { // Object not found in study + GEOM::GEOM_IShapesOperations_var aShapesOp = + getGeomEngine()->GetIShapesOperations(getStudyId()); + aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex); + myOk = true; + } else { // get Object from study + aSelectedObject = aFindedObject; + myOk = true; + } + } else { + myOk = true; + if (S.ShapeType() != TopAbs_EDGE) { + aSelectedObject = GEOM::GEOM_Object::_nil(); + aName = ""; + myOk = false; + } } + if (myEditCurrentArgument == GroupPoints->LineEdit2) { + myPath = aSelectedObject; + myOkPath = myOk; + } else if (myEditCurrentArgument == GroupPoints->LineEdit3) { + myVec = aSelectedObject; + myOkVec = myOk; + } + myEditCurrentArgument->setText(aName); + + if (myOkPath) { + if (!myOkBase) + GroupPoints->PushButton1->click(); + else if (!myOkVec) + GroupPoints->PushButton3->click(); + } else if (myOkVec) { + if (!myOkBase) + GroupPoints->PushButton1->click(); + else if (!myOkPath) + GroupPoints->PushButton2->click(); + } + } } - - // clear selection - disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); - myGeomGUI->getApp()->selectionMgr()->clearSelected(); - connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), - this, SLOT(SelectionIntoArgument())); - displayPreview(); } @@ -376,6 +371,7 @@ void GenerationGUI_PipeDlg::SetEditCurrentArgument() localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } else { TColStd_MapOfInteger aMap; + aMap.Add(GEOM_COMPOUND); aMap.Add(GEOM_WIRE); aMap.Add(GEOM_LINE); globalSelection(aMap); @@ -428,7 +424,7 @@ void GenerationGUI_PipeDlg::ActivateThisDialog() { GEOMBase_Skeleton::ActivateThisDialog(); connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), - this, SLOT( SelectionIntoArgument() ) ); + this, SLOT( SelectionIntoArgument() ) ); ConstructorsClicked(getConstructorId()); } @@ -472,21 +468,24 @@ bool GenerationGUI_PipeDlg::isValid (QString&) //================================================================================= bool GenerationGUI_PipeDlg::execute (ObjectList& objects) { - GEOM::GEOM_Object_var anObj; + GEOM::GEOM_Object_var anObj, aBase; - switch ( getConstructorId() ) { - case 0 : - anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->MakePipe(myBase, myPath); - break; - case 1 : - anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())-> - MakePipeBiNormalAlongVector(myBase, myPath, myVec); - break; - } - - if (!anObj->_is_nil()) - objects.push_back(anObj._retn()); + GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); + for (int i=0; i < myBaseObjects.length(); i++) { + aBase = myBaseObjects[i]; + switch ( getConstructorId() ) { + case 0 : + anObj = anOper->MakePipe(aBase, myPath); + break; + case 1 : + anObj = anOper->MakePipeBiNormalAlongVector(aBase, myPath, myVec); + break; + } + + if (!anObj->_is_nil()) + objects.push_back(anObj._retn()); + } return true; } @@ -502,3 +501,12 @@ void GenerationGUI_PipeDlg::addSubshapesToStudy() addSubshapesToFather(objMap); } + +//================================================================================= +// function : extractPrefix +// purpose : redefined from GEOMBase_Helper class +//================================================================================= +bool GenerationGUI_PipeDlg::extractPrefix() const +{ + return myBaseObjects.length() > 1; +}