2004-01-07 20:46:21 +05:00
|
|
|
// GEOM GEOMGUI : GUI for Geometry 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
|
|
|
|
//
|
2006-06-01 17:32:40 +06:00
|
|
|
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
2004-01-07 20:46:21 +05:00
|
|
|
//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// File : EntityGUI_SubShapeDlg.cxx
|
|
|
|
// Author : Lucien PIGNOLONI
|
|
|
|
// Module : GEOM
|
|
|
|
// $Header$
|
|
|
|
|
|
|
|
#include "EntityGUI_SubShapeDlg.h"
|
2004-12-01 15:39:14 +05:00
|
|
|
#include "GEOM_Displayer.h"
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2005-06-02 13:17:09 +06:00
|
|
|
#include "SUIT_Desktop.h"
|
|
|
|
#include "SUIT_Session.h"
|
|
|
|
#include "OCCViewer_ViewModel.h"
|
|
|
|
#include "SalomeApp_Application.h"
|
2005-11-03 13:30:14 +05:00
|
|
|
#include "LightApp_SelectionMgr.h"
|
2004-12-01 15:39:14 +05:00
|
|
|
#include "SALOME_ListIteratorOfListIO.hxx"
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
#include <TColStd_IndexedMapOfInteger.hxx>
|
|
|
|
#include <TopoDS_Iterator.hxx>
|
2004-01-07 20:46:21 +05:00
|
|
|
#include <TopExp_Explorer.hxx>
|
|
|
|
#include <TopTools_MapOfShape.hxx>
|
|
|
|
|
|
|
|
#include <qmessagebox.h>
|
2005-06-02 13:17:09 +06:00
|
|
|
#include <qlabel.h>
|
|
|
|
#include <qcombobox.h>
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
// class : EntityGUI_SubShapeDlg
|
2004-01-07 20:46:21 +05:00
|
|
|
// purpose : Constructs a EntityGUI_SubShapeDlg which is a child of 'parent', with the
|
|
|
|
// name 'name' and widget flags set to 'f'.
|
|
|
|
// The dialog will by default be modeless, unless you set 'modal' to
|
|
|
|
// TRUE to construct a modal dialog.
|
|
|
|
//=================================================================================
|
2006-05-06 14:44:32 +06:00
|
|
|
EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
|
|
|
|
const char* name, bool modal, WFlags fl)
|
|
|
|
:GEOMBase_Skeleton(theGeometryGUI, parent, name, modal, fl)
|
2004-01-07 20:46:21 +05:00
|
|
|
{
|
2005-06-02 13:17:09 +06:00
|
|
|
QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_SUBSHAPE")));
|
|
|
|
QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT")));
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
setCaption(tr("GEOM_SUBSHAPE_TITLE"));
|
|
|
|
|
|
|
|
/***************************************************************/
|
|
|
|
GroupConstructors->setTitle(tr("GEOM_SUB_SHAPE"));
|
|
|
|
RadioButton1->setPixmap(image0);
|
|
|
|
RadioButton2->close(TRUE);
|
|
|
|
RadioButton3->close(TRUE);
|
|
|
|
|
|
|
|
GroupPoints = new DlgRef_1Sel1Check1List_QTD(this, "GroupPoints");
|
|
|
|
GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
|
|
|
|
GroupPoints->TextLabel1->setText(tr("GEOM_MAIN_OBJECT"));
|
|
|
|
GroupPoints->TextLabel2->setText(tr("GEOM_SUBSHAPE_TYPE"));
|
|
|
|
GroupPoints->CheckButton1->setText(tr("GEOM_SUBSHAPE_SELECT"));
|
|
|
|
GroupPoints->PushButton1->setPixmap(image1);
|
2004-12-01 15:39:14 +05:00
|
|
|
GroupPoints->LineEdit1->setReadOnly( true );
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
Layout1->addWidget(GroupPoints, 1, 0);
|
|
|
|
/***************************************************************/
|
|
|
|
|
2006-05-06 14:44:32 +06:00
|
|
|
setHelpFileName("explode.htm");
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
Init();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : ~EntityGUI_SubShapeDlg()
|
|
|
|
// purpose : Destroys the object and frees any allocated resources
|
|
|
|
//=================================================================================
|
|
|
|
EntityGUI_SubShapeDlg::~EntityGUI_SubShapeDlg()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : Init()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
void EntityGUI_SubShapeDlg::Init()
|
2004-01-07 20:46:21 +05:00
|
|
|
{
|
|
|
|
/* init variables */
|
|
|
|
myEditCurrentArgument = GroupPoints->LineEdit1;
|
2004-12-01 15:39:14 +05:00
|
|
|
myObject = GEOM::GEOM_Object::_nil();
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
myWithShape = true;
|
|
|
|
|
|
|
|
/* type for sub shape selection */
|
|
|
|
GroupPoints->ComboBox1->insertItem("Compound");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Compsolid");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Solid");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Shell");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Face");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Wire");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Edge");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Vertex");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Shape");
|
|
|
|
|
2005-06-02 13:17:09 +06:00
|
|
|
if (SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType()
|
|
|
|
!= OCCViewer_Viewer::Type())
|
2004-01-07 20:46:21 +05:00
|
|
|
GroupPoints->CheckButton1->setEnabled(false);
|
|
|
|
|
|
|
|
/* signals and slots connections */
|
|
|
|
connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
|
|
|
|
|
|
|
|
connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
|
|
|
connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
|
|
|
|
|
|
|
connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
|
|
|
connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
|
|
|
|
|
|
|
|
connect(GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
|
2004-12-01 15:39:14 +05:00
|
|
|
connect(GroupPoints->CheckButton1, SIGNAL(stateChanged(int)), this, SLOT(SubShapeToggled()));
|
2006-05-06 14:44:32 +06:00
|
|
|
|
2005-06-02 13:17:09 +06:00
|
|
|
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
|
|
|
|
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ;
|
2006-05-06 14:44:32 +06:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
updateButtonState();
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
SelectionIntoArgument();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : ClickOnOk()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::ClickOnOk()
|
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
if ( ClickOnApply() )
|
|
|
|
ClickOnCancel();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : ClickOnApply()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
bool EntityGUI_SubShapeDlg::ClickOnApply()
|
2004-01-07 20:46:21 +05:00
|
|
|
{
|
2005-06-02 13:17:09 +06:00
|
|
|
SUIT_Session::session()->activeApplication()->putInfo(tr(""));
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
/* Explode all sub shapes */
|
2004-12-01 15:39:14 +05:00
|
|
|
if( isAllSubShapes() ) {
|
2004-01-07 20:46:21 +05:00
|
|
|
/* More than 30 subshapes : ask confirmation */
|
2004-12-01 15:39:14 +05:00
|
|
|
unsigned int nb = NumberOfSubShapes(myShape, shapeType());
|
2004-01-07 20:46:21 +05:00
|
|
|
if(nb > 30) {
|
|
|
|
const QString caption = tr("GEOM_CONFIRM");
|
|
|
|
const QString text = tr("GEOM_CONFIRM_INFO").arg(nb);
|
|
|
|
const QString button0 = tr("GEOM_BUT_EXPLODE");
|
|
|
|
const QString button1 = tr("GEOM_BUT_CANCEL");
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
if(QMessageBox::warning(this, caption, text, button0, button1) != 0)
|
|
|
|
return false; /* aborted */
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
return onAccept();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : SelectionIntoArgument()
|
|
|
|
// purpose : Called when selection as changed or other case
|
|
|
|
// : used only by SelectButtonC1A1 (LineEditC1A1)
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::SelectionIntoArgument()
|
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
if ( !isAllSubShapes() )
|
|
|
|
return;
|
|
|
|
|
|
|
|
ResetStateOfDialog();
|
|
|
|
|
2004-01-07 20:46:21 +05:00
|
|
|
QString aString = ""; /* name of selection */
|
|
|
|
|
2005-06-02 13:17:09 +06:00
|
|
|
int nbSel = GEOMBase::GetNameOfSelectedIObjects( selectedIO(), aString, true );
|
2004-12-01 15:39:14 +05:00
|
|
|
if( nbSel != 1 )
|
2004-01-07 20:46:21 +05:00
|
|
|
return;
|
2004-12-01 15:39:14 +05:00
|
|
|
|
2004-01-07 20:46:21 +05:00
|
|
|
TopoDS_Shape S;
|
2005-06-02 13:17:09 +06:00
|
|
|
Handle(SALOME_InteractiveObject) IO = firstIObject();
|
2004-12-01 15:39:14 +05:00
|
|
|
if ( !IO->hasEntry() )
|
|
|
|
{
|
2005-06-02 13:17:09 +06:00
|
|
|
SUIT_Session::session()->activeApplication()->putInfo( tr( "GEOM_PRP_SHAPE_IN_STUDY" ) );
|
2004-12-01 15:39:14 +05:00
|
|
|
updateButtonState();
|
2004-01-07 20:46:21 +05:00
|
|
|
return;
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
|
|
|
|
2006-05-06 14:44:32 +06:00
|
|
|
if ( !GEOMBase::GetTopoFromSelection( selectedIO(), S ) ||
|
2004-12-01 15:39:14 +05:00
|
|
|
S.IsNull() ||
|
|
|
|
S.ShapeType() == TopAbs_VERTEX )
|
|
|
|
{
|
|
|
|
updateButtonState();
|
2004-01-07 20:46:21 +05:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
Standard_Boolean testResult;
|
|
|
|
myObject = GEOMBase::ConvertIOinGEOMObject( IO, testResult );
|
|
|
|
if ( !testResult || myObject->_is_nil() )
|
|
|
|
{
|
|
|
|
updateButtonState();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
myShape = S;
|
|
|
|
GroupPoints->LineEdit1->setText( aString );
|
|
|
|
|
|
|
|
|
|
|
|
int SelectedShapeType = GroupPoints->ComboBox1->currentItem();
|
|
|
|
int count = GroupPoints->ComboBox1->count();
|
|
|
|
|
|
|
|
if ( myWithShape )
|
|
|
|
count = count - 1;
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
int i = 0;
|
|
|
|
// Solving PAL5590
|
|
|
|
if ( myShape.ShapeType() == TopAbs_COMPOUND ) {
|
|
|
|
unsigned int nb = NumberOfSubShapes(myShape, TopAbs_COMPOUND);
|
|
|
|
if (nb > 0)
|
2004-01-07 20:46:21 +05:00
|
|
|
i++;
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
|
|
|
while ( i <= myShape.ShapeType())
|
|
|
|
{
|
|
|
|
GroupPoints->ComboBox1->removeItem( 0 );
|
|
|
|
i++;
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
if ( myShape.ShapeType() == TopAbs_COMPOUND )
|
|
|
|
{
|
|
|
|
if ( myWithShape == false )
|
|
|
|
{
|
|
|
|
GroupPoints->ComboBox1->insertItem( "Shape" );
|
|
|
|
myWithShape = true;
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if ( myWithShape == true )
|
|
|
|
{
|
|
|
|
GroupPoints->ComboBox1->removeItem( GroupPoints->ComboBox1->count() - 1 );
|
|
|
|
myWithShape = false;
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
int count1 = GroupPoints->ComboBox1->count();
|
|
|
|
if ( myWithShape )
|
|
|
|
count1 = count1 - 1;
|
|
|
|
|
|
|
|
if ( SelectedShapeType > myShape.ShapeType() )
|
|
|
|
{
|
|
|
|
if ( SelectedShapeType == 8 )
|
|
|
|
{
|
|
|
|
if ( myShape.ShapeType() != TopAbs_COMPOUND )
|
|
|
|
{
|
|
|
|
GroupPoints->ComboBox1->setCurrentItem( 0 );
|
|
|
|
ComboTextChanged();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
GroupPoints->ComboBox1->setCurrentItem(count1 - count + SelectedShapeType);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
GroupPoints->ComboBox1->setCurrentItem( 0 );
|
|
|
|
ComboTextChanged();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
updateButtonState();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : SetEditCurrentArgument()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::SetEditCurrentArgument()
|
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
GroupPoints->LineEdit1->setFocus();
|
|
|
|
myEditCurrentArgument = GroupPoints->LineEdit1;
|
|
|
|
|
|
|
|
GroupPoints->CheckButton1->setChecked( FALSE );
|
|
|
|
SubShapeToggled();
|
|
|
|
SelectionIntoArgument();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : LineEditReturnPressed()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::LineEditReturnPressed()
|
|
|
|
{
|
|
|
|
QLineEdit* send = (QLineEdit*)sender();
|
|
|
|
if(send == GroupPoints->LineEdit1)
|
2004-12-01 15:39:14 +05:00
|
|
|
SetEditCurrentArgument();
|
2004-01-07 20:46:21 +05:00
|
|
|
else
|
|
|
|
return;
|
|
|
|
|
|
|
|
GEOMBase_Skeleton::LineEditReturnPressed();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : DeactivateActiveDialog()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::DeactivateActiveDialog()
|
|
|
|
{
|
2006-05-06 14:44:32 +06:00
|
|
|
if (GroupConstructors->isEnabled()) {
|
2004-01-07 20:46:21 +05:00
|
|
|
GEOMBase_Skeleton::DeactivateActiveDialog();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : ActivateThisDialog()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::ActivateThisDialog()
|
|
|
|
{
|
|
|
|
GEOMBase_Skeleton::ActivateThisDialog();
|
2005-06-02 13:17:09 +06:00
|
|
|
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
|
|
|
|
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument())) ;
|
2004-12-01 15:39:14 +05:00
|
|
|
SubShapeToggled();
|
|
|
|
updateButtonState();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : enterEvent()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::enterEvent(QEvent* e)
|
|
|
|
{
|
2006-05-06 14:44:32 +06:00
|
|
|
if (!GroupConstructors->isEnabled())
|
|
|
|
ActivateThisDialog();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : ResetStateOfDialog()
|
|
|
|
// purpose : Completely reset the state of method including local context
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::ResetStateOfDialog()
|
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
myObject = GEOM::GEOM_Object::_nil();
|
|
|
|
myShape.Nullify();
|
|
|
|
myEditCurrentArgument->setText("");
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
int SelectedShapeType = GroupPoints->ComboBox1->currentItem();
|
|
|
|
int count = GroupPoints->ComboBox1->count();
|
2004-12-01 15:39:14 +05:00
|
|
|
if ( myWithShape )
|
2004-01-07 20:46:21 +05:00
|
|
|
count = count - 1;
|
|
|
|
|
|
|
|
/* type for sub shape selection */
|
|
|
|
GroupPoints->ComboBox1->clear();
|
|
|
|
GroupPoints->ComboBox1->insertItem("Compound");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Compsolid");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Solid");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Shell");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Face");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Wire");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Edge");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Vertex");
|
|
|
|
GroupPoints->ComboBox1->insertItem("Shape");
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
myWithShape = true;
|
|
|
|
|
|
|
|
GroupPoints->ComboBox1->setCurrentItem( 8 - count + SelectedShapeType );
|
|
|
|
ComboTextChanged();
|
|
|
|
|
|
|
|
updateButtonState();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
// function : SubShapeToggled()
|
2004-01-07 20:46:21 +05:00
|
|
|
// purpose : Allow user selection of all or only selected sub shapes
|
|
|
|
// : Called when 'CheckButton1' state change
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
void EntityGUI_SubShapeDlg::SubShapeToggled()
|
2004-01-07 20:46:21 +05:00
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
if ( isAllSubShapes() )
|
|
|
|
globalSelection( GEOM_ALLSHAPES );
|
|
|
|
else
|
|
|
|
localSelection( myObject, shapeType() );
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=================================================================================
|
|
|
|
// function : ComboTextChanged()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::ComboTextChanged()
|
|
|
|
{
|
|
|
|
/* Select sub shapes mode not checked */
|
|
|
|
updateButtonState();
|
|
|
|
SubShapeToggled();
|
|
|
|
}
|
|
|
|
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=================================================================================
|
|
|
|
// function : NumberOfSubShapes()
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
unsigned int EntityGUI_SubShapeDlg::NumberOfSubShapes (const TopoDS_Shape& S,
|
|
|
|
const int shapeType) const
|
|
|
|
{
|
|
|
|
if (S.IsNull())
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
unsigned int index = 0;
|
|
|
|
TopTools_MapOfShape M;
|
|
|
|
|
|
|
|
if (S.ShapeType() == TopAbs_COMPOUND &&
|
|
|
|
(TopAbs_ShapeEnum(shapeType) == TopAbs_SHAPE ||
|
|
|
|
TopAbs_ShapeEnum(shapeType) == TopAbs_COMPSOLID ||
|
|
|
|
TopAbs_ShapeEnum(shapeType) == TopAbs_COMPOUND)) {
|
|
|
|
TopoDS_Iterator It (S, Standard_True, Standard_True);
|
|
|
|
for (; It.More(); It.Next()) {
|
|
|
|
if (M.Add(It.Value())) {
|
|
|
|
if (TopAbs_ShapeEnum(shapeType) == TopAbs_SHAPE ||
|
|
|
|
TopAbs_ShapeEnum(shapeType) == It.Value().ShapeType()) {
|
|
|
|
index++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
TopExp_Explorer Exp (S, TopAbs_ShapeEnum(shapeType));
|
|
|
|
for (; Exp.More(); Exp.Next()) {
|
|
|
|
if (M.Add(Exp.Current())) {
|
|
|
|
index++;
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
M.Clear();
|
|
|
|
return index;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : updateButtonState
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
void EntityGUI_SubShapeDlg::updateButtonState()
|
|
|
|
{
|
2005-06-02 13:17:09 +06:00
|
|
|
if ( SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType() != OCCViewer_Viewer::Type() ||
|
2004-12-01 15:39:14 +05:00
|
|
|
myObject->_is_nil() || shapeType() == TopAbs_SHAPE || shapeType() == TopAbs_COMPOUND ) {
|
|
|
|
GroupPoints->CheckButton1->setChecked( FALSE );
|
|
|
|
GroupPoints->CheckButton1->setEnabled( FALSE );
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
else
|
|
|
|
GroupPoints->CheckButton1->setEnabled( TRUE );
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=================================================================================
|
|
|
|
// function : isAllSubShapes
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
bool EntityGUI_SubShapeDlg::isAllSubShapes() const
|
|
|
|
{
|
|
|
|
return !GroupPoints->CheckButton1->isChecked() || !GroupPoints->CheckButton1->isEnabled();
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
// function : shapeType
|
|
|
|
// purpose :
|
2004-01-07 20:46:21 +05:00
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
int EntityGUI_SubShapeDlg::shapeType() const
|
2004-01-07 20:46:21 +05:00
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
int type = GroupPoints->ComboBox1->currentItem();
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
if (myObject->_is_nil())
|
|
|
|
return type;
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
// Solving PAL5590
|
|
|
|
type += myShape.ShapeType() + 1;
|
|
|
|
if (myShape.ShapeType() == TopAbs_COMPOUND &&
|
|
|
|
NumberOfSubShapes(myShape, TopAbs_COMPOUND) > 0) {
|
|
|
|
type--;
|
|
|
|
}
|
|
|
|
|
|
|
|
return type;
|
|
|
|
}
|
|
|
|
|
|
|
|
//=================================================================================
|
|
|
|
// function : createOperation
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
GEOM::GEOM_IOperations_ptr EntityGUI_SubShapeDlg::createOperation()
|
|
|
|
{
|
|
|
|
return getGeomEngine()->GetIShapesOperations( getStudyId() );
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
//=================================================================================
|
|
|
|
// function : isValid
|
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
|
|
|
bool EntityGUI_SubShapeDlg::isValid( QString& msg )
|
|
|
|
{
|
|
|
|
bool isOk = false;
|
|
|
|
if ( !myObject->_is_nil() ) {
|
|
|
|
if ( isAllSubShapes() )
|
|
|
|
isOk = true;
|
2005-06-02 13:17:09 +06:00
|
|
|
else if ( IObjectCount() == 1 ) {
|
2004-12-01 15:39:14 +05:00
|
|
|
Standard_Boolean aResult = Standard_False;
|
|
|
|
GEOM::GEOM_Object_var anObj =
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
if ( aResult && !anObj->_is_nil() ) {
|
|
|
|
TColStd_IndexedMapOfInteger aMapIndex;
|
2005-06-02 13:17:09 +06:00
|
|
|
((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
|
2004-12-01 15:39:14 +05:00
|
|
|
isOk = aMapIndex.Extent() > 0;
|
|
|
|
if ( !isOk )
|
|
|
|
msg += tr( "NO_SUBSHAPES_SELECTED" );
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
return isOk;
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
|
|
|
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
// function : execute
|
2004-01-07 20:46:21 +05:00
|
|
|
// purpose :
|
|
|
|
//=================================================================================
|
2004-12-01 15:39:14 +05:00
|
|
|
bool EntityGUI_SubShapeDlg::execute( ObjectList& objects )
|
2004-01-07 20:46:21 +05:00
|
|
|
{
|
2004-12-01 15:39:14 +05:00
|
|
|
GEOM::ListOfGO_var aList = GEOM::GEOM_IShapesOperations::_narrow(
|
|
|
|
getOperation() )->MakeExplode( myObject, shapeType(), false );
|
|
|
|
|
|
|
|
if ( !aList->length() )
|
|
|
|
return false;
|
2004-01-07 20:46:21 +05:00
|
|
|
|
2004-12-01 15:39:14 +05:00
|
|
|
// Throw away sub-shapes not selected by user if not in preview mode
|
|
|
|
// and manual selection is active
|
|
|
|
if ( !isAllSubShapes() )
|
|
|
|
{
|
2005-06-02 13:17:09 +06:00
|
|
|
if ( IObjectCount() == 1 ) {
|
2004-12-01 15:39:14 +05:00
|
|
|
Standard_Boolean aResult = Standard_False;
|
|
|
|
GEOM::GEOM_Object_var anObj =
|
2005-06-02 13:17:09 +06:00
|
|
|
GEOMBase::ConvertIOinGEOMObject( firstIObject(), aResult );
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
if ( aResult && !anObj->_is_nil() ) {
|
|
|
|
TColStd_IndexedMapOfInteger aMapIndex;
|
2005-06-02 13:17:09 +06:00
|
|
|
((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr()->GetIndexes( firstIObject(), aMapIndex );
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
GEOM::GEOM_ILocalOperations_var aLocOp =
|
|
|
|
getGeomEngine()->GetILocalOperations( getStudyId() );
|
|
|
|
|
|
|
|
for ( int i = 0, n = aList->length(); i < n; i++ )
|
|
|
|
if ( aMapIndex.Contains( aLocOp->GetSubShapeIndex( myObject, aList[i] ) ) )
|
|
|
|
objects.push_back( GEOM::GEOM_Object::_duplicate( aList[i] ) );
|
|
|
|
}
|
|
|
|
}
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
else
|
|
|
|
for ( int i = 0, n = aList->length(); i < n; i++ )
|
|
|
|
objects.push_back( GEOM::GEOM_Object::_duplicate( aList[i] ) );
|
|
|
|
|
|
|
|
return objects.size();
|
2004-01-07 20:46:21 +05:00
|
|
|
}
|
2004-12-01 15:39:14 +05:00
|
|
|
|
|
|
|
//================================================================
|
|
|
|
// Function : getFather
|
|
|
|
// Purpose : Get father object for object to be added in study
|
|
|
|
// ( called with addInStudy method )
|
|
|
|
//================================================================
|
|
|
|
GEOM::GEOM_Object_ptr EntityGUI_SubShapeDlg::getFather( GEOM::GEOM_Object_ptr )
|
|
|
|
{
|
|
|
|
return myObject;
|
|
|
|
}
|
|
|
|
|
2005-06-03 16:39:50 +06:00
|
|
|
const char* EntityGUI_SubShapeDlg::getNewObjectName() const
|
|
|
|
{
|
|
|
|
return "";
|
|
|
|
}
|