Back to index

salome-geom  6.5.0
OperationGUI_PartitionDlg.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 // GEOM GEOMGUI : GUI for Geometry component
00024 // File   : OperationGUI_PartitionDlg.cxx
00025 // Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
00026 
00027 #include "OperationGUI_PartitionDlg.h"
00028 
00029 #include <DlgRef.h>
00030 #include <GeometryGUI.h>
00031 #include <GEOMBase.h>
00032 
00033 #include <GEOMImpl_Types.hxx>
00034 
00035 #include <SUIT_Desktop.h>
00036 #include <SUIT_Session.h>
00037 #include <SUIT_ResourceMgr.h>
00038 #include <SUIT_MessageBox.h>
00039 #include <SalomeApp_Application.h>
00040 #include <LightApp_SelectionMgr.h>
00041 
00042 #include <TopoDS_Iterator.hxx>
00043 #include <TopoDS_Shape.hxx>
00044 
00045 //=================================================================================
00046 // class    : OperationGUI_PartitionDlg()
00047 // purpose  : Constructs a OperationGUI_PartitionDlg which is a child of 'parent', with the
00048 //            name 'name' and widget flags set to 'f'.
00049 //            The dialog will by default be modeless, unless you set 'modal' to
00050 //            TRUE to construct a modal dialog.
00051 //=================================================================================
00052 OperationGUI_PartitionDlg::OperationGUI_PartitionDlg( GeometryGUI* theGeometryGUI, QWidget* parent )
00053   : GEOMBase_Skeleton( theGeometryGUI, parent, false )
00054 {
00055   SUIT_ResourceMgr* aResMgr = myGeomGUI->getApp()->resourceMgr();
00056   QPixmap image0( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_PARTITION" ) ) );
00057   QPixmap image1( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_PARTITION_PLANE" ) ) );
00058   QPixmap image2( aResMgr->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
00059 
00060   setWindowTitle( tr( "GEOM_PARTITION_TITLE" ) );
00061 
00062   /***************************************************************/
00063   mainFrame()->GroupConstructors->setTitle( tr( "GEOM_PARTITION" ) );
00064   mainFrame()->RadioButton1->setIcon( image0 );
00065   mainFrame()->RadioButton2->setIcon( image1 );
00066   mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
00067   mainFrame()->RadioButton3->close();
00068 
00069   // Full partition (contains half-space partition)
00070   GroupPoints = new DlgRef_2Sel1List2Check( centralWidget() );
00071   GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION" ) );
00072   GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
00073   GroupPoints->TextLabel2->setText( tr( "GEOM_TOOL_OBJECTS" ) );
00074   GroupPoints->TextLabel3->setText( tr( "GEOM_RECONSTRUCTION_LIMIT" ) );
00075   GroupPoints->PushButton1->setIcon( image2 );
00076   GroupPoints->PushButton2->setIcon( image2 );
00077   GroupPoints->LineEdit1->setReadOnly( true );
00078   GroupPoints->LineEdit2->setReadOnly( true );
00079   GroupPoints->LineEdit1->setEnabled( true );
00080   GroupPoints->LineEdit2->setEnabled( false );
00081   GroupPoints->CheckButton1->setText( tr( "GEOM_KEEP_NONLIMIT_SHAPES" ) );
00082   GroupPoints->CheckButton2->setText( tr( "GEOM_NO_SELF_INTERSECTION" ) );
00083 
00084   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
00085   layout->setMargin( 0 ); layout->setSpacing( 6 );
00086   layout->addWidget( GroupPoints );
00087 
00088   /***************************************************************/
00089 
00090   setHelpFileName( "partition_page.html" );
00091 
00092   Init();
00093 }
00094 
00095 
00096 //=================================================================================
00097 // function : ~OperationGUI_PartitionDlg()
00098 // purpose  : Destroys the object and frees any allocated resources
00099 //=================================================================================
00100 OperationGUI_PartitionDlg::~OperationGUI_PartitionDlg()
00101 {
00102   // no need to delete child widgets, Qt does it all for us
00103 }
00104 
00105 void OperationGUI_PartitionDlg::SetListMaterials( GEOM::ListOfLong ListMaterials )
00106 {
00107   myListMaterials = ListMaterials;
00108 }
00109 
00110 GEOM::ListOfLong OperationGUI_PartitionDlg::GetListMaterials()
00111 {
00112   return myListMaterials;
00113 }
00114 
00115 //=================================================================================
00116 // function : Init()
00117 // purpose  :
00118 //=================================================================================
00119 void OperationGUI_PartitionDlg::Init()
00120 {
00121   /* type for sub-shape selection */
00122   GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SOLID" ) );
00123   GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SOLID);
00124   GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SHELL" ) );
00125   GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SHELL);
00126   GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_FACE" ) );
00127   GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::FACE);
00128   GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_WIRE" ) );
00129   GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::WIRE);
00130   GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_EDGE" ) );
00131   GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::EDGE);
00132   GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_VERTEX" ) );
00133   GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::VERTEX);
00134   GroupPoints->CheckButton1->setChecked( false );
00135 
00136   mainFrame()->GroupBoxPublish->show();
00137 
00138   /* signals and slots connections */
00139   connect( buttonOk(),    SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
00140   connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
00141 
00142   connect( this, SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) );
00143 
00144   connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
00145   connect( GroupPoints->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
00146 
00147   connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
00148   connect( GroupPoints->LineEdit2, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
00149 
00150   connect( GroupPoints->ComboBox1, SIGNAL( activated( int ) ), this, SLOT( ComboTextChanged() ) );
00151 
00152   connect( myGeomGUI->getApp()->selectionMgr(),
00153            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
00154 
00155   connect( GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(processPreview()) );
00156   connect( GroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(processPreview()) );
00157 
00158   initName( tr( "GEOM_PARTITION" ) );
00159 
00160   ConstructorsClicked( 0 );
00161   GroupPoints->PushButton1->click();
00162 }
00163 
00164 
00165 //=================================================================================
00166 // function : ConstructorsClicked()
00167 // purpose  : Radio button management
00168 //=================================================================================
00169 void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId )
00170 {
00171   disconnect( myGeomGUI->getApp()->selectionMgr(), 0, this, 0 );
00172   globalSelection();
00173 
00174   //myListShapes.length( 0 );
00175   //myListTools.length( 0 );
00176   //myListKeepInside.length( 0 );   // obsolete
00177   //myListRemoveInside.length( 0 ); // obsolete
00178   //myListMaterials.length( 0 );    // obsolete
00179 
00180   switch ( constructorId ) {
00181   case 0: /*Full partition */
00182     GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION" ) );
00183     GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
00184     GroupPoints->TextLabel2->setText( tr( "GEOM_TOOL_OBJECTS" ) );
00185     GroupPoints->TextLabel3->show();
00186     GroupPoints->ComboBox1->show();
00187     GroupPoints->ComboBox1->setCurrentIndex( 0 );
00188     GroupPoints->CheckButton1->show();
00189     GroupPoints->CheckButton2->show();
00190     GroupPoints->PushButton1->setDown( true );
00191     GroupPoints->PushButton2->setDown( false );
00192     GroupPoints->LineEdit1->setEnabled(true);
00193     GroupPoints->LineEdit2->setEnabled(false);
00194     break;
00195   case 1: /*Half-space partition */
00196     GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION_HALFSPACE" ) );
00197     GroupPoints->TextLabel3->hide();
00198     GroupPoints->ComboBox1->hide();
00199     GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECT" ) );
00200     GroupPoints->TextLabel2->setText( tr( "GEOM_PLANE" ) );
00201     GroupPoints->CheckButton1->hide();
00202     GroupPoints->CheckButton2->hide();
00203     GroupPoints->PushButton1->setDown( true );
00204     GroupPoints->LineEdit1->setEnabled(true);
00205     break;
00206   }
00207 
00208   myEditCurrentArgument = GroupPoints->LineEdit1;
00209   GroupPoints->LineEdit1->clear();
00210   GroupPoints->LineEdit2->clear();
00211 
00212   qApp->processEvents();
00213   updateGeometry();
00214   resize( minimumSizeHint() );
00215 
00216   myEditCurrentArgument->setFocus();
00217   connect( myGeomGUI->getApp()->selectionMgr(),
00218            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
00219   SelectionIntoArgument();
00220 }
00221 
00222 
00223 //=================================================================================
00224 // function : ClickOnOk()
00225 // purpose  :
00226 //=================================================================================
00227 void OperationGUI_PartitionDlg::ClickOnOk()
00228 {
00229   setIsApplyAndClose( true );
00230   if ( ClickOnApply() )
00231     ClickOnCancel();
00232 }
00233 
00234 
00235 //=================================================================================
00236 // function : ClickOnApply()
00237 // purpose  :
00238 //=================================================================================
00239 bool OperationGUI_PartitionDlg::ClickOnApply()
00240 {
00241   if ( !onAccept() )
00242     return false;
00243 
00244   initName();
00245   //  0020854: EDF 1398 GEOM: Ergonomy of Partition GUI window
00246   //  ConstructorsClicked( getConstructorId() );
00247   return true;
00248 }
00249 
00250 
00251 //=================================================================================
00252 // function : SelectionIntoArgument()
00253 // purpose  : Called when selection as changed or other case
00254 //=================================================================================
00255 void OperationGUI_PartitionDlg::SelectionIntoArgument()
00256 {
00257   myEditCurrentArgument->setText( "" );
00258   QString aString = "";
00259 
00260   LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
00261   SALOME_ListIO aSelList;
00262   aSelMgr->selectedObjects(aSelList);
00263 
00264   int nbSel = GEOMBase::GetNameOfSelectedIObjects(aSelList, aString, true);
00265 
00266   if ( getConstructorId() == 1 ) {
00267     // for half-selection, only one shape can be selected as an object
00268     // and only one plane as a tool
00269     if ( nbSel != 1 ) {
00270       if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
00271         myListShapes.length( 0 );
00272         // myListMaterials.length( 0 ); // obsolete
00273         return;
00274       }
00275       else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
00276         myListTools.length( 0 );
00277         return;
00278       }
00279     }
00280   }
00281   else {
00282     if ( nbSel < 1 ) {
00283       if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
00284         myListShapes.length( 0 );
00285         //myListMaterials.length( 0 ); // obsolete
00286         return;
00287       }
00288       else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
00289         myListTools.length( 0 );
00290         return;
00291       }
00292     }
00293   }
00294 
00295   if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
00296     GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListShapes, true);
00297     //myListMaterials.length( 0 ); // obsolete
00298 
00299     GEOM::shape_type type = GEOM::SHAPE;
00300     for (int i = 0; i < myListShapes.length(); i++)
00301       type = qMin( type, myListShapes[i]->GetMaxShapeType() );
00302     int idx = qMax( 0, GroupPoints->ComboBox1->findData( type ) );
00303     GroupPoints->ComboBox1->setCurrentIndex( idx );
00304 
00305     if ( !myListShapes.length() )
00306       return;
00307   }
00308   else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
00309     GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListTools, true);
00310     if ( !myListTools.length() )
00311       return;
00312     else if ( myListTools.length() == 1 && getConstructorId() == 1 ) {
00313       GEOM::GEOM_IMeasureOperations_var mOp = getGeomEngine()->GetIMeasureOperations( getStudyId() );
00314       GEOM::ListOfLong_var   intList;
00315       GEOM::ListOfDouble_var dblList;
00316       GEOM::GEOM_IKindOfShape::shape_kind kind = mOp->KindOfShape( myListTools[0].in(), intList.out(), dblList.out() );
00317       mOp->UnRegister();
00318       if ( kind < GEOM::GEOM_IKindOfShape::DISK_CIRCLE || kind > GEOM::GEOM_IKindOfShape::PLANAR ) {
00319         myListTools.length( 0 );
00320         return;
00321       }
00322     }
00323   }
00324 
00325   myEditCurrentArgument->setText( aString );
00326   processPreview();
00327 }
00328 
00329 
00330 //=================================================================================
00331 // function : SetEditCurrentArgument()
00332 // purpose  :
00333 //=================================================================================
00334 void OperationGUI_PartitionDlg::SetEditCurrentArgument()
00335 {
00336   QPushButton* send = (QPushButton*)sender();
00337 
00338   if ( send == GroupPoints->PushButton1 ) {
00339     myEditCurrentArgument = GroupPoints->LineEdit1;
00340     GroupPoints->PushButton2->setDown(false);
00341     GroupPoints->LineEdit1->setEnabled(true);
00342     GroupPoints->LineEdit2->setEnabled(false);
00343   }
00344   else if ( send == GroupPoints->PushButton2 ) {
00345     myGeomGUI->getApp()->selectionMgr()->clearSelected(); //clear prewious selection
00346     myEditCurrentArgument = GroupPoints->LineEdit2;
00347     GroupPoints->PushButton1->setDown(false);
00348     GroupPoints->LineEdit1->setEnabled(false);
00349     GroupPoints->LineEdit2->setEnabled(true);
00350     if ( getConstructorId() == 1 )
00351       globalSelection( GEOM_PLANE  );
00352   }
00353 
00354   globalSelection( GEOM_ALLSHAPES );
00355 
00356   myEditCurrentArgument->setFocus();
00357   SelectionIntoArgument();
00358   send->setDown(true);
00359   processPreview();
00360 }
00361 
00362 
00363 //=================================================================================
00364 // function : LineEditReturnPressed()
00365 // purpose  :
00366 //=================================================================================
00367 void OperationGUI_PartitionDlg::LineEditReturnPressed()
00368 {
00369   QLineEdit* send = (QLineEdit*)sender();
00370 
00371   if ( send == GroupPoints->LineEdit1 ||
00372        send == GroupPoints->LineEdit2 ) {
00373       myEditCurrentArgument = send;
00374       GEOMBase_Skeleton::LineEditReturnPressed();
00375   }
00376 }
00377 
00378 
00379 //=================================================================================
00380 // function : ActivateThisDialog()
00381 // purpose  :
00382 //=================================================================================
00383 void OperationGUI_PartitionDlg::ActivateThisDialog()
00384 {
00385   GEOMBase_Skeleton::ActivateThisDialog();
00386   connect( myGeomGUI->getApp()->selectionMgr(),
00387            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
00388 
00389   ConstructorsClicked( getConstructorId() );
00390   processPreview();
00391 }
00392 
00393 
00394 //=================================================================================
00395 // function : enterEvent()
00396 // purpose  :
00397 //=================================================================================
00398 void OperationGUI_PartitionDlg::enterEvent( QEvent* )
00399 {
00400   if ( !mainFrame()->GroupConstructors->isEnabled() )
00401     this->ActivateThisDialog();
00402 }
00403 
00404 
00405 //=================================================================================
00406 // function : createOperation
00407 // purpose  :
00408 //=================================================================================
00409 GEOM::GEOM_IOperations_ptr OperationGUI_PartitionDlg::createOperation()
00410 {
00411   return getGeomEngine()->GetIBooleanOperations( getStudyId() );
00412 }
00413 
00414 
00415 //=================================================================================
00416 // function : isValid
00417 // purpose  :
00418 //=================================================================================
00419 bool OperationGUI_PartitionDlg::isValid (QString& )
00420 {
00421   return (getConstructorId() == 0 ?
00422           myListShapes.length() :
00423           myListShapes.length() && myListTools.length());
00424 }
00425 
00426 
00427 //=================================================================================
00428 // function : execute
00429 // purpose  :
00430 //=================================================================================
00431 bool OperationGUI_PartitionDlg::execute (ObjectList& objects)
00432 {
00433   bool res = false;
00434   GEOM::GEOM_Object_var anObj;
00435 
00436   GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow(getOperation());
00437 
00438   switch ( getConstructorId() ) {
00439   case 0:
00440     {
00441       int aLimit               = GetLimit();
00442       int aKeepNonlimitShapes  = GroupPoints->CheckButton1->isChecked();
00443       bool aNoSelfIntersection = GroupPoints->CheckButton2->isChecked();
00444 
00445       anObj = aNoSelfIntersection ?
00446         anOper->MakePartitionNonSelfIntersectedShape(myListShapes, myListTools,
00447                                                      myListKeepInside, myListRemoveInside,
00448                                                      aLimit, false, myListMaterials, aKeepNonlimitShapes) :
00449         anOper->MakePartition(myListShapes, myListTools,
00450                               myListKeepInside, myListRemoveInside,
00451                               aLimit, false, myListMaterials, aKeepNonlimitShapes);
00452       res = true;
00453     }
00454     break;
00455   case 1:
00456     {
00457       anObj = anOper->MakeHalfPartition( myListShapes[0].in(), myListTools[0].in() );
00458       res = true;
00459     }
00460     break;
00461   }
00462 
00463   if ( !anObj->_is_nil() ) {
00464     TopoDS_Shape aShape;
00465     GEOMBase::GetShape( anObj, aShape, TopAbs_SHAPE );
00466     TopoDS_Iterator It( aShape, Standard_True, Standard_True );
00467     int nbSubshapes = 0;
00468     for (; It.More(); It.Next())
00469       nbSubshapes++;
00470 
00471     if ( nbSubshapes )
00472       objects.push_back( anObj._retn() );
00473     else
00474       SUIT_MessageBox::warning( this,
00475                                 QObject::tr( "GEOM_ERROR" ),
00476                                 QObject::tr( "GEOM_WRN_PARTITION_RESULT_EMPTY" ) );
00477   }
00478 
00479   return res;
00480 }
00481 
00482 //=================================================================================
00483 // function : restoreSubShapes
00484 // purpose  :
00485 //=================================================================================
00486 void OperationGUI_PartitionDlg::restoreSubShapes( SALOMEDS::Study_ptr   theStudy,
00487                                                   SALOMEDS::SObject_ptr theSObject )
00488 {
00489   if ( mainFrame()->CheckBoxRestoreSS->isChecked() ) {
00490     // empty list of arguments means that all arguments should be restored
00491     getGeomEngine()->RestoreSubShapesSO( theStudy, theSObject, GEOM::ListOfGO(),
00492                                          /*theFindMethod=*/GEOM::FSM_GetInPlaceByHistory,
00493                                          /*theInheritFirstArg=*/myListShapes.length() == 1,
00494                                          mainFrame()->CheckBoxAddPrefix->isChecked() ); // ? false
00495   }
00496 }
00497 
00498 //=======================================================================
00499 //function : ComboTextChanged
00500 //purpose  :
00501 //=======================================================================
00502 void OperationGUI_PartitionDlg::ComboTextChanged()
00503 {
00504   //bool IsEnabled = GroupPoints->ComboBox1->currentItem() < 3;
00505   //GroupPoints->LineEdit3->setEnabled(IsEnabled);
00506   //GroupPoints->LineEdit4->setEnabled(IsEnabled);
00507   //GroupPoints->TextLabel4->setEnabled(IsEnabled);
00508   //GroupPoints->TextLabel5->setEnabled(IsEnabled);
00509   //GroupPoints->PushButton3->setEnabled(IsEnabled);
00510   //GroupPoints->PushButton4->setEnabled(IsEnabled);
00511   processPreview();
00512 }
00513 
00514 //=================================================================================
00515 // function : GetLimit()
00516 // purpose  :
00517 //=================================================================================
00518 int OperationGUI_PartitionDlg::GetLimit() const
00519 {
00520   int aLimit = GroupPoints->ComboBox1->currentIndex();
00521 
00522   switch ( aLimit ) {
00523   case 0:  aLimit = GEOM::SOLID ; break;
00524   case 1:  aLimit = GEOM::SHELL ; break;
00525   case 2:  aLimit = GEOM::FACE  ; break;
00526   case 3:  aLimit = GEOM::WIRE  ; break;
00527   case 4:  aLimit = GEOM::EDGE  ; break;
00528   case 5:  aLimit = GEOM::VERTEX; break;
00529   default: aLimit = GEOM::SHAPE ;
00530   }
00531 
00532   return aLimit;
00533 }